summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Deutschmann <whissi@gentoo.org>2020-09-10 18:10:49 +0200
committerThomas Deutschmann <whissi@gentoo.org>2020-09-11 20:06:36 +0200
commitacfc02c1747065fe450c7cfeb6f1844b62335f08 (patch)
tree5887806a2e6b99bbb0255e013a9028810e230a7f
parentImport Ghostscript 9.52 (diff)
downloadghostscript-gpl-patches-acfc02c1747065fe450c7cfeb6f1844b62335f08.tar.gz
ghostscript-gpl-patches-acfc02c1747065fe450c7cfeb6f1844b62335f08.tar.bz2
ghostscript-gpl-patches-acfc02c1747065fe450c7cfeb6f1844b62335f08.zip
Import Ghostscript 9.53ghostscript-9.53
Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
-rw-r--r--.lgtm.yml33
-rw-r--r--Makefile.in23
-rw-r--r--Resource/CIDFont/ArtifexBulletbin2659 -> 2659 bytes
-rw-r--r--Resource/ColorSpace/DefaultCMYK2
-rw-r--r--Resource/ColorSpace/DefaultGray2
-rw-r--r--Resource/ColorSpace/DefaultRGB2
-rw-r--r--Resource/ColorSpace/TrivialCMYK2
-rw-r--r--Resource/ColorSpace/sGray2
-rw-r--r--Resource/ColorSpace/sRGB2
-rw-r--r--Resource/Decoding/FCO_Dingbats2
-rw-r--r--Resource/Decoding/FCO_Symbol2
-rw-r--r--Resource/Decoding/FCO_Unicode2
-rw-r--r--Resource/Decoding/FCO_Wingdings2
-rw-r--r--Resource/Decoding/Latin12
-rw-r--r--Resource/Decoding/StandardEncoding2
-rw-r--r--Resource/Decoding/Unicode2
-rw-r--r--Resource/Encoding/CEEncoding2
-rw-r--r--Resource/Encoding/ExpertEncoding2
-rw-r--r--Resource/Encoding/ExpertSubsetEncoding2
-rw-r--r--Resource/Encoding/NotDefEncoding2
-rw-r--r--Resource/Encoding/Wingdings2
-rw-r--r--Resource/Font/NimbusSans-BoldItalicbin112011 -> 123308 bytes
-rw-r--r--Resource/Font/NimbusSans-Italicbin109766 -> 120927 bytes
-rw-r--r--Resource/Init/FCOfontmap-PCLPS22
-rw-r--r--Resource/Init/Fontmap.GS2
-rw-r--r--Resource/Init/gs_agl.ps2
-rw-r--r--Resource/Init/gs_btokn.ps159
-rw-r--r--Resource/Init/gs_cff.ps2
-rw-r--r--Resource/Init/gs_cidcm.ps2
-rw-r--r--Resource/Init/gs_ciddc.ps2
-rw-r--r--Resource/Init/gs_cidfm.ps2
-rw-r--r--Resource/Init/gs_cidfn.ps2
-rw-r--r--Resource/Init/gs_cidtt.ps2
-rw-r--r--Resource/Init/gs_cmap.ps2
-rw-r--r--Resource/Init/gs_cspace.ps2
-rw-r--r--Resource/Init/gs_dbt_e.ps2
-rw-r--r--Resource/Init/gs_diskn.ps2
-rw-r--r--Resource/Init/gs_dps1.ps2
-rw-r--r--Resource/Init/gs_dps2.ps2
-rw-r--r--Resource/Init/gs_dscp.ps2
-rw-r--r--Resource/Init/gs_epsf.ps67
-rw-r--r--Resource/Init/gs_fapi.ps2
-rw-r--r--Resource/Init/gs_fntem.ps2
-rw-r--r--Resource/Init/gs_fonts.ps2
-rw-r--r--Resource/Init/gs_frsd.ps2
-rw-r--r--Resource/Init/gs_icc.ps2
-rw-r--r--Resource/Init/gs_il1_e.ps2
-rw-r--r--Resource/Init/gs_init.ps10
-rw-r--r--Resource/Init/gs_lev2.ps2
-rw-r--r--Resource/Init/gs_ll3.ps2
-rw-r--r--Resource/Init/gs_mex_e.ps2
-rw-r--r--Resource/Init/gs_mgl_e.ps2
-rw-r--r--Resource/Init/gs_mro_e.ps2
-rw-r--r--Resource/Init/gs_pdf_e.ps2
-rw-r--r--Resource/Init/gs_pdfwr.ps2
-rw-r--r--Resource/Init/gs_res.ps2
-rw-r--r--Resource/Init/gs_resmp.ps2
-rw-r--r--Resource/Init/gs_setpd.ps2
-rw-r--r--Resource/Init/gs_statd.ps2
-rw-r--r--Resource/Init/gs_std_e.ps2
-rw-r--r--Resource/Init/gs_sym_e.ps2
-rw-r--r--Resource/Init/gs_trap.ps2
-rw-r--r--Resource/Init/gs_ttf.ps13
-rw-r--r--Resource/Init/gs_typ32.ps2
-rw-r--r--Resource/Init/gs_typ42.ps2
-rw-r--r--Resource/Init/gs_type1.ps2
-rw-r--r--Resource/Init/gs_wan_e.ps2
-rw-r--r--Resource/Init/pdf_base.ps17
-rw-r--r--Resource/Init/pdf_draw.ps132
-rw-r--r--Resource/Init/pdf_font.ps24
-rw-r--r--Resource/Init/pdf_main.ps236
-rw-r--r--Resource/Init/pdf_ops.ps153
-rw-r--r--Resource/Init/pdf_rbld.ps4
-rw-r--r--Resource/Init/pdf_sec.ps73
-rw-r--r--Resource/SubstCID/CNS1-WMode2
-rw-r--r--Resource/SubstCID/GB1-WMode2
-rw-r--r--Resource/SubstCID/Japan1-WMode2
-rw-r--r--Resource/SubstCID/Korea1-WMode2
-rw-r--r--arch/arch_autoconf.h.in2
-rw-r--r--arch/windows-arm-msvc.h2
-rw-r--r--arch/windows-x64-msvc.h2
-rw-r--r--arch/windows-x86-msvc.h2
-rw-r--r--base/all-arch.mak2
-rw-r--r--base/assert_.h2
-rw-r--r--base/bench.c2
-rw-r--r--base/bobbin.c2
-rw-r--r--base/bobbin.h2
-rw-r--r--base/cal.mak8
-rw-r--r--base/claptrap-impl.h2
-rw-r--r--base/claptrap-init.c4
-rw-r--r--base/claptrap-planar.c4
-rw-r--r--base/claptrap.c2
-rw-r--r--base/claptrap.h2
-rw-r--r--base/ctype_.h2
-rw-r--r--base/dirent_.h2
-rw-r--r--base/dos_.h2
-rw-r--r--base/echogs.c2
-rw-r--r--base/endianness.h17
-rw-r--r--base/errno_.h2
-rw-r--r--base/ets.c19
-rw-r--r--base/ets.h37
-rw-r--r--base/ets_tm.h37
-rw-r--r--base/expat.mak2
-rw-r--r--base/fapi_bs.mak2
-rw-r--r--base/fapi_ft.c42
-rw-r--r--base/fapibstm.c7
-rw-r--r--base/fapiufst.c253
-rw-r--r--base/fcntl_.h2
-rw-r--r--base/freetype.mak2
-rw-r--r--base/gconf.c2
-rw-r--r--base/gconf.h2
-rw-r--r--base/gdbflags.h2
-rw-r--r--base/gdebug.h2
-rw-r--r--base/gdevabuf.c63
-rw-r--r--base/gdevbbox.c2
-rw-r--r--base/gdevbbox.h2
-rw-r--r--base/gdevdbit.c2
-rw-r--r--base/gdevdcrd.c2
-rw-r--r--base/gdevdcrd.h2
-rw-r--r--base/gdevddrw.c2
-rw-r--r--base/gdevddrw.h2
-rw-r--r--base/gdevdevn.c2
-rw-r--r--base/gdevdevn.h2
-rw-r--r--base/gdevdevnprn.h2
-rw-r--r--base/gdevdflt.c9
-rw-r--r--base/gdevdgbr.c8
-rw-r--r--base/gdevdrop.c16
-rw-r--r--base/gdevdsha.c2
-rw-r--r--base/gdevemap.c2
-rw-r--r--base/gdevepo.c2
-rw-r--r--base/gdevepo.h2
-rw-r--r--base/gdevflp.c103
-rw-r--r--base/gdevflp.h2
-rw-r--r--base/gdevhit.c2
-rw-r--r--base/gdevkrnlsclass.c2
-rw-r--r--base/gdevkrnlsclass.h2
-rw-r--r--base/gdevm1.c2
-rw-r--r--base/gdevm16.c2
-rw-r--r--base/gdevm2.c2
-rw-r--r--base/gdevm24.c2
-rw-r--r--base/gdevm32.c2
-rw-r--r--base/gdevm4.c2
-rw-r--r--base/gdevm40.c2
-rw-r--r--base/gdevm48.c2
-rw-r--r--base/gdevm56.c2
-rw-r--r--base/gdevm64.c2
-rw-r--r--base/gdevm8.c2
-rw-r--r--base/gdevmem.c65
-rw-r--r--base/gdevmem.h2
-rw-r--r--base/gdevmpla.c82
-rw-r--r--base/gdevmpla.h7
-rw-r--r--base/gdevmplt.c2
-rw-r--r--base/gdevmplt.h2
-rw-r--r--base/gdevmr1.c2
-rw-r--r--base/gdevmr2n.c2
-rw-r--r--base/gdevmr8n.c2
-rw-r--r--base/gdevmrop.h2
-rw-r--r--base/gdevmrun.c2
-rw-r--r--base/gdevmrun.h2
-rw-r--r--base/gdevmx.c2
-rw-r--r--base/gdevnfwd.c29
-rw-r--r--base/gdevoflt.c2
-rw-r--r--base/gdevoflt.h2
-rw-r--r--base/gdevp14.c2921
-rw-r--r--base/gdevp14.h42
-rw-r--r--base/gdevpccm.c2
-rw-r--r--base/gdevpccm.h2
-rw-r--r--base/gdevpipe.c19
-rw-r--r--base/gdevplnx.c10
-rw-r--r--base/gdevplnx.h2
-rw-r--r--base/gdevppla.c2
-rw-r--r--base/gdevppla.h2
-rw-r--r--base/gdevprn.c87
-rw-r--r--base/gdevprn.h32
-rw-r--r--base/gdevpxat.h2
-rw-r--r--base/gdevpxen.h2
-rw-r--r--base/gdevpxop.h2
-rw-r--r--base/gdevrops.c2
-rw-r--r--base/gdevsclass.c2
-rw-r--r--base/gdevsclass.h2
-rw-r--r--base/gdevvec.c2
-rw-r--r--base/gdevvec.h2
-rw-r--r--base/gen_ordered.c31
-rw-r--r--base/gen_ordered.h2
-rw-r--r--base/genarch.c2
-rw-r--r--base/genconf.c2
-rw-r--r--base/gendev.c2
-rw-r--r--base/genht.c2
-rw-r--r--base/gp.h21
-rw-r--r--base/gp_dosfe.c2
-rw-r--r--base/gp_dosfs.c2
-rw-r--r--base/gp_dvx.c2
-rw-r--r--base/gp_getnv.c2
-rw-r--r--base/gp_mktmp.c2
-rw-r--r--base/gp_msdll.c2
-rw-r--r--base/gp_msdos.c2
-rw-r--r--base/gp_mshdl.c2
-rw-r--r--base/gp_mslib.c2
-rw-r--r--base/gp_mspol.c4
-rw-r--r--base/gp_msprn.c16
-rw-r--r--base/gp_mswin.c8
-rw-r--r--base/gp_mswin.h2
-rw-r--r--base/gp_nsync.c2
-rw-r--r--base/gp_ntfs.c2
-rw-r--r--base/gp_nxpsprn.c2
-rw-r--r--base/gp_os2.c8
-rw-r--r--base/gp_os2.h2
-rw-r--r--base/gp_os2fs.c14
-rw-r--r--base/gp_os2pr.c4
-rw-r--r--base/gp_os9.c2
-rw-r--r--base/gp_paper.c2
-rw-r--r--base/gp_psync.c2
-rw-r--r--base/gp_stdia.c2
-rw-r--r--base/gp_stdin.c2
-rw-r--r--base/gp_strdl.c2
-rw-r--r--base/gp_unifn.c2
-rw-r--r--base/gp_unifs.c16
-rw-r--r--base/gp_unix.c76
-rw-r--r--base/gp_upapr.c2
-rw-r--r--base/gp_vms.c18
-rw-r--r--base/gp_wgetv.c8
-rw-r--r--base/gp_win32.c2
-rw-r--r--base/gp_winfs.c58
-rw-r--r--base/gp_winfs2.c2
-rw-r--r--base/gp_wpapr.c2
-rw-r--r--base/gp_wsync.c2
-rw-r--r--base/gp_wutf8.c2
-rw-r--r--base/gp_wxpsprn.cpp2
-rw-r--r--base/gpcheck.h2
-rw-r--r--base/gpgetenv.h2
-rw-r--r--base/gpmisc.c159
-rw-r--r--base/gpmisc.h2
-rw-r--r--base/gpsync.h2
-rw-r--r--base/gs.mak2
-rw-r--r--base/gs_dll_call.h2
-rw-r--r--base/gs_mgl_e.h2
-rw-r--r--base/gs_mro_e.h2
-rw-r--r--base/gsalloc.c165
-rw-r--r--base/gsalloc.h19
-rw-r--r--base/gsalpha.c39
-rw-r--r--base/gsalphac.c842
-rw-r--r--base/gsalphac.h63
-rw-r--r--base/gsargs.c2
-rw-r--r--base/gsargs.h2
-rw-r--r--base/gsbitcom.c2
-rw-r--r--base/gsbitmap.h2
-rw-r--r--base/gsbitops.c2
-rw-r--r--base/gsbitops.h2
-rw-r--r--base/gsbittab.c2
-rw-r--r--base/gsbittab.h2
-rw-r--r--base/gsccode.h13
-rw-r--r--base/gsccolor.h2
-rw-r--r--base/gscdef.c2
-rw-r--r--base/gscdefs.h2
-rw-r--r--base/gscdevn.c4
-rw-r--r--base/gscdevn.h2
-rw-r--r--base/gscedata.c2
-rw-r--r--base/gscedata.h2
-rw-r--r--base/gscencs.c2
-rw-r--r--base/gscencs.h2
-rw-r--r--base/gschar.c2
-rw-r--r--base/gschar.h2
-rw-r--r--base/gschar0.c30
-rw-r--r--base/gscicach.c2
-rw-r--r--base/gscicach.h2
-rw-r--r--base/gscie.c16
-rw-r--r--base/gscie.h2
-rw-r--r--base/gsciemap.c6
-rw-r--r--base/gscindex.h2
-rw-r--r--base/gsclipsr.c2
-rw-r--r--base/gsclipsr.h2
-rw-r--r--base/gscms.h6
-rw-r--r--base/gscolor.c2
-rw-r--r--base/gscolor.h2
-rw-r--r--base/gscolor1.c2
-rw-r--r--base/gscolor1.h2
-rw-r--r--base/gscolor2.c2
-rw-r--r--base/gscolor2.h2
-rw-r--r--base/gscolor3.c2
-rw-r--r--base/gscolor3.h2
-rw-r--r--base/gscompt.h2
-rw-r--r--base/gscoord.c2
-rw-r--r--base/gscoord.h2
-rw-r--r--base/gscparam.c3
-rw-r--r--base/gscpixel.c2
-rw-r--r--base/gscpixel.h2
-rw-r--r--base/gscpm.h2
-rw-r--r--base/gscrd.c2
-rw-r--r--base/gscrd.h2
-rw-r--r--base/gscrdp.c2
-rw-r--r--base/gscrdp.h2
-rw-r--r--base/gscrypt1.c2
-rw-r--r--base/gscrypt1.h2
-rw-r--r--base/gscscie.c2
-rw-r--r--base/gscsel.h2
-rw-r--r--base/gscsepr.c10
-rw-r--r--base/gscsepr.h2
-rw-r--r--base/gscspace.c57
-rw-r--r--base/gscspace.h13
-rw-r--r--base/gscssub.c2
-rw-r--r--base/gscssub.h2
-rw-r--r--base/gsdcolor.h2
-rw-r--r--base/gsdevice.c39
-rw-r--r--base/gsdevice.h2
-rw-r--r--base/gsdevmem.c2
-rw-r--r--base/gsdll.h2
-rw-r--r--base/gsdllwin.h2
-rw-r--r--base/gsdparam.c41
-rw-r--r--base/gsdps1.c2
-rw-r--r--base/gsdsrc.c2
-rw-r--r--base/gsdsrc.h2
-rw-r--r--base/gsequivc.c10
-rw-r--r--base/gsequivc.h2
-rw-r--r--base/gserrors.h8
-rw-r--r--base/gsexit.h2
-rw-r--r--base/gsfcid.c2
-rw-r--r--base/gsfcid2.c2
-rw-r--r--base/gsfcmap.c15
-rw-r--r--base/gsfcmap.h2
-rw-r--r--base/gsfcmap1.c13
-rw-r--r--base/gsflip.c2
-rw-r--r--base/gsflip.h2
-rw-r--r--base/gsfname.c5
-rw-r--r--base/gsfname.h2
-rw-r--r--base/gsfont.c26
-rw-r--r--base/gsfont.h2
-rw-r--r--base/gsfont0.c2
-rw-r--r--base/gsfont0c.c2
-rw-r--r--base/gsform1.h2
-rw-r--r--base/gsftopts.h2
-rw-r--r--base/gsfunc.c4
-rw-r--r--base/gsfunc.h2
-rw-r--r--base/gsfunc0.c10
-rw-r--r--base/gsfunc0.h2
-rw-r--r--base/gsfunc3.c2
-rw-r--r--base/gsfunc3.h2
-rw-r--r--base/gsfunc4.c2
-rw-r--r--base/gsfunc4.h2
-rw-r--r--base/gsgc.h2
-rw-r--r--base/gsgcache.c2
-rw-r--r--base/gsgcache.h2
-rw-r--r--base/gsgdata.c2
-rw-r--r--base/gsgdata.h2
-rw-r--r--base/gsgstate.c20
-rw-r--r--base/gsgstate.h2
-rw-r--r--base/gshsb.c2
-rw-r--r--base/gshsb.h2
-rw-r--r--base/gsht.c8
-rw-r--r--base/gsht.h2
-rw-r--r--base/gsht1.c2
-rw-r--r--base/gsht1.h2
-rw-r--r--base/gshtscr.c12
-rw-r--r--base/gshtx.c2
-rw-r--r--base/gshtx.h2
-rw-r--r--base/gsicc.c18
-rw-r--r--base/gsicc.h2
-rw-r--r--base/gsicc_cache.c81
-rw-r--r--base/gsicc_cache.h2
-rw-r--r--base/gsicc_cms.h2
-rw-r--r--base/gsicc_create.c14
-rw-r--r--base/gsicc_create.h2
-rw-r--r--base/gsicc_lcms2.c2
-rw-r--r--base/gsicc_lcms2mt.c2
-rw-r--r--base/gsicc_manage.c80
-rw-r--r--base/gsicc_manage.h2
-rw-r--r--base/gsicc_monitorcm.c4
-rw-r--r--base/gsicc_nocm.c2
-rw-r--r--base/gsicc_profilecache.c14
-rw-r--r--base/gsicc_profilecache.h2
-rw-r--r--base/gsicc_replacecm.c2
-rw-r--r--base/gsimage.c18
-rw-r--r--base/gsimage.h2
-rw-r--r--base/gsimpath.c2
-rw-r--r--base/gsinit.c2
-rw-r--r--base/gsio.h2
-rw-r--r--base/gsiodev.c6
-rw-r--r--base/gsiodevs.c2
-rw-r--r--base/gsiodisk.c2
-rw-r--r--base/gsioram.c2
-rw-r--r--base/gsiorom.c39
-rw-r--r--base/gsiorom.h2
-rw-r--r--base/gsipar3x.h2
-rw-r--r--base/gsiparam.h2
-rw-r--r--base/gsiparm3.h2
-rw-r--r--base/gsiparm4.h2
-rw-r--r--base/gsjconf.h2
-rw-r--r--base/gsjmorec.h2
-rw-r--r--base/gslib.c14
-rw-r--r--base/gslib.h2
-rw-r--r--base/gslibctx.c238
-rw-r--r--base/gslibctx.h66
-rw-r--r--base/gsline.c2
-rw-r--r--base/gsline.h2
-rw-r--r--base/gslparam.h2
-rw-r--r--base/gsmalloc.c41
-rw-r--r--base/gsmalloc.h2
-rw-r--r--base/gsmatrix.c2
-rw-r--r--base/gsmatrix.h2
-rw-r--r--base/gsmchunk.c38
-rw-r--r--base/gsmchunk.h2
-rw-r--r--base/gsmd5.c2
-rw-r--r--base/gsmd5.h2
-rw-r--r--base/gsmdebug.h2
-rw-r--r--base/gsmemory.c33
-rw-r--r--base/gsmemory.h2
-rw-r--r--base/gsmemraw.h2
-rw-r--r--base/gsmemret.c2
-rw-r--r--base/gsmemret.h2
-rw-r--r--base/gsmisc.c31
-rw-r--r--base/gsnamecl.c2
-rw-r--r--base/gsnamecl.h2
-rw-r--r--base/gsncdummy.c6
-rw-r--r--base/gsncdummy.h2
-rw-r--r--base/gsnogc.c2
-rw-r--r--base/gsnogc.h2
-rw-r--r--base/gsnotify.c2
-rw-r--r--base/gsnotify.h2
-rw-r--r--base/gsovrc.c2
-rw-r--r--base/gsovrc.h2
-rw-r--r--base/gspaint.c64
-rw-r--r--base/gspaint.h2
-rw-r--r--base/gsparam.c148
-rw-r--r--base/gsparam.h41
-rw-r--r--base/gsparam2.c10
-rw-r--r--base/gsparaml.c1048
-rw-r--r--base/gsparams.c6
-rw-r--r--base/gsparams.h2
-rw-r--r--base/gsparamx.c2
-rw-r--r--base/gsparamx.h2
-rw-r--r--base/gspath.c2
-rw-r--r--base/gspath.h2
-rw-r--r--base/gspath1.c2
-rw-r--r--base/gspath2.h2
-rw-r--r--base/gspcolor.c8
-rw-r--r--base/gspcolor.h17
-rw-r--r--base/gspenum.h2
-rw-r--r--base/gspmdrv.c2
-rw-r--r--base/gspmdrv.h2
-rw-r--r--base/gspmdrv.rc4
-rw-r--r--base/gsptype1.c78
-rw-r--r--base/gsptype1.h3
-rw-r--r--base/gsptype2.c2
-rw-r--r--base/gsptype2.h2
-rw-r--r--base/gsrect.h2
-rw-r--r--base/gsrefct.h4
-rw-r--r--base/gsromfs0.c2
-rw-r--r--base/gsrop.c2
-rw-r--r--base/gsrop.h2
-rw-r--r--base/gsroprun.c6
-rw-r--r--base/gsroprun1.h2
-rw-r--r--base/gsroprun24.h2
-rw-r--r--base/gsroprun8.h2
-rw-r--r--base/gsropt.h2
-rw-r--r--base/gsroptab.c2
-rw-r--r--base/gsserial.c2
-rw-r--r--base/gsserial.h2
-rw-r--r--base/gsshade.c2
-rw-r--r--base/gsshade.h2
-rw-r--r--base/gssprintf.h2
-rw-r--r--base/gsstate.c100
-rw-r--r--base/gsstate.h2
-rw-r--r--base/gsstrl.h2
-rw-r--r--base/gsstrtok.h2
-rw-r--r--base/gsstruct.h6
-rw-r--r--base/gsstype.h2
-rw-r--r--base/gstext.c6
-rw-r--r--base/gstext.h2
-rw-r--r--base/gstiffio.c48
-rw-r--r--base/gstiffio.h2
-rw-r--r--base/gstparam.h10
-rw-r--r--base/gstrans.c117
-rw-r--r--base/gstrans.h24
-rw-r--r--base/gstrap.c2
-rw-r--r--base/gstrap.h2
-rw-r--r--base/gstype1.c14
-rw-r--r--base/gstype1.h2
-rw-r--r--base/gstype2.c18
-rw-r--r--base/gstype42.c34
-rw-r--r--base/gstypes.h2
-rw-r--r--base/gsuid.h2
-rw-r--r--base/gsutil.c2
-rw-r--r--base/gsutil.h2
-rw-r--r--base/gswin.rc2
-rw-r--r--base/gsxfont.h2
-rw-r--r--base/gx.h2
-rw-r--r--base/gxacpath.c30
-rw-r--r--base/gxalloc.h16
-rw-r--r--base/gxalpha.h2
-rw-r--r--base/gxarith.h2
-rw-r--r--base/gxband.h2
-rw-r--r--base/gxbcache.c11
-rw-r--r--base/gxbcache.h2
-rw-r--r--base/gxbitfmt.h2
-rw-r--r--base/gxbitmap.h2
-rw-r--r--base/gxbitops.h2
-rw-r--r--base/gxblend.c262
-rw-r--r--base/gxblend.h6
-rw-r--r--base/gxblend1.c271
-rw-r--r--base/gxccache.c27
-rw-r--r--base/gxccman.c38
-rw-r--r--base/gxcdevn.h2
-rw-r--r--base/gxchar.c2
-rw-r--r--base/gxchar.h2
-rw-r--r--base/gxchrout.c2
-rw-r--r--base/gxchrout.h2
-rw-r--r--base/gxcht.c2
-rw-r--r--base/gxcid.h2
-rw-r--r--base/gxcie.h2
-rw-r--r--base/gxcindex.h2
-rw-r--r--base/gxclbits.c5
-rw-r--r--base/gxcldev.h2
-rw-r--r--base/gxclfile.c2
-rw-r--r--base/gxclimag.c54
-rw-r--r--base/gxclio.h2
-rw-r--r--base/gxclip.c2
-rw-r--r--base/gxclip.h2
-rw-r--r--base/gxclip2.c4
-rw-r--r--base/gxclip2.h2
-rw-r--r--base/gxclipm.c4
-rw-r--r--base/gxclipm.h2
-rw-r--r--base/gxclipsr.h2
-rw-r--r--base/gxclist.c64
-rw-r--r--base/gxclist.h58
-rw-r--r--base/gxcllzw.c2
-rw-r--r--base/gxclmem.c10
-rw-r--r--base/gxclmem.h2
-rw-r--r--base/gxclpage.c2
-rw-r--r--base/gxclpage.h2
-rw-r--r--base/gxclpath.c52
-rw-r--r--base/gxclpath.h8
-rw-r--r--base/gxclrast.c96
-rw-r--r--base/gxclread.c8
-rw-r--r--base/gxclrect.c11
-rw-r--r--base/gxclthrd.c30
-rw-r--r--base/gxclthrd.h2
-rw-r--r--base/gxclutil.c28
-rw-r--r--base/gxclzlib.c2
-rw-r--r--base/gxcmap.c52
-rw-r--r--base/gxcmap.h2
-rw-r--r--base/gxcolor2.h2
-rw-r--r--base/gxcomp.h2
-rw-r--r--base/gxcoord.h2
-rw-r--r--base/gxcpath.c20
-rw-r--r--base/gxcpath.h4
-rw-r--r--base/gxcspace.h2
-rw-r--r--base/gxctable.c2
-rw-r--r--base/gxctable.h2
-rw-r--r--base/gxcvalue.h2
-rw-r--r--base/gxdcconv.c2
-rw-r--r--base/gxdcconv.h2
-rw-r--r--base/gxdcolor.c2
-rw-r--r--base/gxdcolor.h2
-rw-r--r--base/gxdda.h2
-rw-r--r--base/gxdevbuf.h2
-rw-r--r--base/gxdevcli.h26
-rw-r--r--base/gxdevice.h2
-rw-r--r--base/gxdevmem.h10
-rw-r--r--base/gxdevndi.c2
-rw-r--r--base/gxdevrop.h2
-rw-r--r--base/gxdevsop.h25
-rw-r--r--base/gxdht.h2
-rw-r--r--base/gxdhtres.h2
-rw-r--r--base/gxdhtserial.c2
-rw-r--r--base/gxdhtserial.h2
-rw-r--r--base/gxdither.h2
-rw-r--r--base/gxdownscale.c937
-rw-r--r--base/gxdownscale.h245
-rw-r--r--base/gxdtfill.h2
-rw-r--r--base/gxfapi.c8
-rw-r--r--base/gxfapi.h64
-rw-r--r--base/gxfapiu.c2
-rw-r--r--base/gxfapiu.h2
-rw-r--r--base/gxfarith.h2
-rw-r--r--base/gxfcache.h2
-rw-r--r--base/gxfcid.h2
-rw-r--r--base/gxfcmap.h2
-rw-r--r--base/gxfcmap1.h2
-rw-r--r--base/gxfill.c38
-rw-r--r--base/gxfill.h2
-rw-r--r--base/gxfillsl.h6
-rw-r--r--base/gxfilltr.h2
-rw-r--r--base/gxfillts.h2
-rw-r--r--base/gxfixed.h2
-rw-r--r--base/gxfmap.h2
-rw-r--r--base/gxfont.h2
-rw-r--r--base/gxfont0.h2
-rw-r--r--base/gxfont0c.h2
-rw-r--r--base/gxfont1.h2
-rw-r--r--base/gxfont42.h4
-rw-r--r--base/gxfrac.h2
-rw-r--r--base/gxftype.h2
-rw-r--r--base/gxfunc.h2
-rw-r--r--base/gxgetbit.h2
-rw-r--r--base/gxgstate.h25
-rw-r--r--base/gxhintn.c6
-rw-r--r--base/gxhintn.h2
-rw-r--r--base/gxhintn1.c2
-rw-r--r--base/gxhldevc.c2
-rw-r--r--base/gxhldevc.h2
-rw-r--r--base/gxht.c6
-rw-r--r--base/gxht.h4
-rw-r--r--base/gxht_thresh.c6
-rw-r--r--base/gxht_thresh.h2
-rw-r--r--base/gxhtbit.c4
-rw-r--r--base/gxhttile.h2
-rw-r--r--base/gxhttype.h2
-rw-r--r--base/gxi12bit.c10
-rw-r--r--base/gxi16bit.c2
-rw-r--r--base/gxiclass.h2
-rw-r--r--base/gxicolor.c14
-rw-r--r--base/gxidata.c4
-rw-r--r--base/gxifast.c2
-rw-r--r--base/gximag3x.c2
-rw-r--r--base/gximag3x.h2
-rw-r--r--base/gximage.c2
-rw-r--r--base/gximage.h2
-rw-r--r--base/gximage1.c2
-rw-r--r--base/gximage3.c2
-rw-r--r--base/gximage3.h2
-rw-r--r--base/gximage4.c2
-rw-r--r--base/gximask.c2
-rw-r--r--base/gximask.h2
-rw-r--r--base/gximdecode.c2
-rw-r--r--base/gximdecode.h5
-rw-r--r--base/gximono.c8
-rw-r--r--base/gxiodev.h9
-rw-r--r--base/gxiparam.h2
-rw-r--r--base/gxipixel.c4
-rw-r--r--base/gxiscale.c18
-rw-r--r--base/gxline.h2
-rw-r--r--base/gxlum.h2
-rw-r--r--base/gxmatrix.h2
-rw-r--r--base/gxmclip.c2
-rw-r--r--base/gxmclip.h2
-rw-r--r--base/gxobj.h2
-rw-r--r--base/gxoprect.c2
-rw-r--r--base/gxoprect.h2
-rw-r--r--base/gxp1fill.c2
-rw-r--r--base/gxp1impl.h2
-rw-r--r--base/gxpaint.c2
-rw-r--r--base/gxpaint.h2
-rw-r--r--base/gxpath.c52
-rw-r--r--base/gxpath.h2
-rw-r--r--base/gxpath2.c2
-rw-r--r--base/gxpcache.h6
-rw-r--r--base/gxpcmap.c48
-rw-r--r--base/gxpcolor.h8
-rw-r--r--base/gxpcopy.c2
-rw-r--r--base/gxpdash.c2
-rw-r--r--base/gxpflat.c2
-rw-r--r--base/gxrplane.h2
-rw-r--r--base/gxsample.c2
-rw-r--r--base/gxsample.h2
-rw-r--r--base/gxsamplp.h2
-rw-r--r--base/gxscanc.c2
-rw-r--r--base/gxscanc.h2
-rw-r--r--base/gxshade.c34
-rw-r--r--base/gxshade.h2
-rw-r--r--base/gxshade1.c2
-rw-r--r--base/gxshade4.c6
-rw-r--r--base/gxshade4.h2
-rw-r--r--base/gxshade6.c4
-rw-r--r--base/gxstate.h4
-rw-r--r--base/gxstdio.h2
-rw-r--r--base/gxstroke.c582
-rw-r--r--base/gxsync.c2
-rw-r--r--base/gxsync.h2
-rw-r--r--base/gxtext.h2
-rw-r--r--base/gxtmap.h2
-rw-r--r--base/gxttf.h2
-rw-r--r--base/gxttfb.c2
-rw-r--r--base/gxttfb.h2
-rw-r--r--base/gxtype1.c2
-rw-r--r--base/gxtype1.h2
-rw-r--r--base/gxxfont.h2
-rw-r--r--base/gzacpath.h2
-rw-r--r--base/gzcpath.h2
-rw-r--r--base/gzht.h2
-rw-r--r--base/gzline.h2
-rw-r--r--base/gzpath.h2
-rw-r--r--base/gzspotan.c2
-rw-r--r--base/gzspotan.h2
-rw-r--r--base/gzstate.h2
-rw-r--r--base/ijs.mak2
-rwxr-xr-xbase/instcopy2
-rw-r--r--base/jbig2.mak2
-rw-r--r--base/jerror_.h2
-rw-r--r--base/jmemcust.c2
-rw-r--r--base/jmemcust.h2
-rw-r--r--base/jpeg.mak70
-rw-r--r--base/jpegxr.mak2
-rw-r--r--base/lcms2.mak2
-rw-r--r--base/lcms2mt.mak4
-rw-r--r--base/lcups.mak2
-rw-r--r--base/lcupsi.mak2
-rw-r--r--base/ldf_jb2.mak2
-rw-r--r--base/leptonica.mak644
-rw-r--r--base/lib.mak7347
-rw-r--r--base/locale_.h2
-rw-r--r--base/lwf_jp2.mak2
-rw-r--r--base/malloc_.h28
-rw-r--r--base/math_.h2
-rw-r--r--base/memento.c2
-rw-r--r--base/memento.h2
-rw-r--r--base/memory_.h81
-rw-r--r--base/mkromfs.c28
-rw-r--r--base/msvccmd.mak3
-rw-r--r--base/msvclib.mak31
-rw-r--r--base/msvctail.mak2
-rw-r--r--base/ocr.mak46
-rw-r--r--base/openjpeg.mak2
-rw-r--r--base/openvms.mak2
-rw-r--r--base/openvms.mmk2
-rw-r--r--base/pack_ps.c2
-rw-r--r--base/pcwin.mak2
-rw-r--r--base/pipe_.h2
-rw-r--r--base/png.mak2
-rw-r--r--base/png_.h2
-rw-r--r--base/ramfs.c2
-rw-r--r--base/ramfs.h2
-rw-r--r--base/sa85d.c2
-rw-r--r--base/sa85d.h11
-rw-r--r--base/sa85x.h2
-rw-r--r--base/saes.c2
-rw-r--r--base/saes.h2
-rw-r--r--base/sarc4.c2
-rw-r--r--base/sarc4.h2
-rw-r--r--base/sbcp.c2
-rw-r--r--base/sbcp.h2
-rw-r--r--base/sbtx.h2
-rw-r--r--base/scanchar.h2
-rw-r--r--base/scantab.c2
-rw-r--r--base/scf.h2
-rw-r--r--base/scfd.c6
-rw-r--r--base/scfdgen.c2
-rw-r--r--base/scfdtab.c2
-rw-r--r--base/scfe.c15
-rw-r--r--base/scfetab.c2
-rw-r--r--base/scfparam.c2
-rw-r--r--base/scfx.h2
-rw-r--r--base/scommon.h2
-rw-r--r--base/sdcparam.c2
-rw-r--r--base/sdcparam.h2
-rw-r--r--base/sdct.h2
-rw-r--r--base/sdctc.c2
-rw-r--r--base/sdctd.c2
-rw-r--r--base/sdcte.c2
-rw-r--r--base/sddparam.c2
-rw-r--r--base/sdeparam.c2
-rw-r--r--base/seexec.c4
-rw-r--r--base/setjmp_.h2
-rw-r--r--base/sfilter.h2
-rw-r--r--base/sfilter1.c2
-rw-r--r--base/sfilter2.c2
-rw-r--r--base/sfxboth.c2
-rw-r--r--base/sfxcommon.c2
-rw-r--r--base/sfxfd.c18
-rw-r--r--base/sfxstdio.c6
-rw-r--r--base/shc.c2
-rw-r--r--base/shc.h2
-rw-r--r--base/sidscale.c8
-rw-r--r--base/sidscale.h2
-rw-r--r--base/siinterp.c2
-rw-r--r--base/siinterp.h2
-rw-r--r--base/simscale.c8402
-rw-r--r--base/simscale.h8
-rw-r--r--base/simscale_foo.c2507
-rw-r--r--base/simscale_foo.h (renamed from base/gsalpha.h)22
-rw-r--r--base/siscale.c6
-rw-r--r--base/siscale.h2
-rw-r--r--base/siscale_cal.c2
-rw-r--r--base/sisparam.h2
-rw-r--r--base/sjbig2.c18
-rw-r--r--base/sjbig2.h4
-rw-r--r--base/sjbig2_luratech.c2
-rw-r--r--base/sjbig2_luratech.h2
-rw-r--r--base/sjpeg.h2
-rw-r--r--base/sjpegc.c2
-rw-r--r--base/sjpegd.c2
-rw-r--r--base/sjpege.c2
-rw-r--r--base/sjpx_luratech.c2
-rw-r--r--base/sjpx_luratech.h2
-rw-r--r--base/sjpx_none.c2
-rw-r--r--base/sjpx_openjpeg.c17
-rw-r--r--base/sjpx_openjpeg.h2
-rw-r--r--base/slzwc.c2
-rw-r--r--base/slzwd.c2
-rw-r--r--base/slzwe.c2
-rw-r--r--base/slzwx.h2
-rw-r--r--base/smd5.c2
-rw-r--r--base/smd5.h2
-rw-r--r--base/smtf.h2
-rw-r--r--base/spdiff.c2
-rw-r--r--base/spdiffx.h2
-rw-r--r--base/spngp.c2
-rw-r--r--base/spngpx.h2
-rw-r--r--base/spprint.c72
-rw-r--r--base/spprint.h14
-rw-r--r--base/spsdf.c10
-rw-r--r--base/spsdf.h2
-rw-r--r--base/srdline.h2
-rw-r--r--base/srld.c2
-rw-r--r--base/srle.c2
-rw-r--r--base/srlx.h2
-rw-r--r--base/ssha2.c2
-rw-r--r--base/ssha2.h2
-rw-r--r--base/sstring.c2
-rw-r--r--base/sstring.h2
-rw-r--r--base/stat_.h2
-rw-r--r--base/std.h3
-rw-r--r--base/stdint_.h18
-rw-r--r--base/stdio_.h2
-rw-r--r--base/stdpre.h22
-rw-r--r--base/stream.c36
-rw-r--r--base/stream.h4
-rw-r--r--base/strimpl.h2
-rw-r--r--base/string_.h2
-rw-r--r--base/strmio.c4
-rw-r--r--base/strmio.h2
-rw-r--r--base/stub.mak2
-rw-r--r--base/szlibc.c4
-rw-r--r--base/szlibd.c2
-rw-r--r--base/szlibe.c2
-rw-r--r--base/szlibx.h2
-rw-r--r--base/szlibxx.h2
-rw-r--r--base/tess_version.h30
-rw-r--r--base/tesseract.mak1173
-rw-r--r--base/tessocr.cpp443
-rw-r--r--base/tessocr.h45
-rw-r--r--base/tiff.mak116
-rw-r--r--base/time_.h2
-rw-r--r--base/ttcalc.c2
-rw-r--r--base/ttcalc.h2
-rw-r--r--base/ttcommon.h2
-rw-r--r--base/ttconf.h2
-rw-r--r--base/ttconfig.h2
-rw-r--r--base/ttfinp.c2
-rw-r--r--base/ttfinp.h2
-rw-r--r--base/ttfmain.c11
-rw-r--r--base/ttfmemd.c2
-rw-r--r--base/ttfmemd.h2
-rw-r--r--base/ttfoutl.h2
-rw-r--r--base/ttfsfnt.h2
-rw-r--r--base/ttinterp.c2
-rw-r--r--base/ttinterp.h2
-rw-r--r--base/ttload.c2
-rw-r--r--base/ttload.h2
-rw-r--r--base/ttmisc.h2
-rw-r--r--base/ttobjs.c2
-rw-r--r--base/ttobjs.h2
-rw-r--r--base/tttables.h2
-rw-r--r--base/tttype.h2
-rw-r--r--base/tttypes.h2
-rw-r--r--base/ugcclib.mak2
-rw-r--r--base/unistd_.h2
-rw-r--r--base/unix-aux.mak2
-rw-r--r--base/unix-dll.mak2
-rw-r--r--base/unix-end.mak2
-rw-r--r--base/unix-gcc.mak7
-rw-r--r--base/unixansi.mak2
-rw-r--r--base/unixhead.mak2
-rw-r--r--base/unixinst.mak2
-rw-r--r--base/unixlink.mak2
-rw-r--r--base/valgrind.h2
-rw-r--r--base/version.mak15
-rw-r--r--base/vms_x_fix.h2
-rw-r--r--base/vmsmath.h2
-rw-r--r--base/windows_.h2
-rw-r--r--base/winlib.mak13
-rw-r--r--base/winplat.mak2
-rw-r--r--base/winrtsup.cpp2
-rw-r--r--base/winrtsup.h2
-rw-r--r--base/wrfont.c2
-rw-r--r--base/wrfont.h2
-rw-r--r--base/write_t1.c662
-rw-r--r--base/write_t1.h2
-rw-r--r--base/write_t2.c209
-rw-r--r--base/write_t2.h2
-rw-r--r--base/x_.h2
-rw-r--r--base/zlib.mak2
-rwxr-xr-xconfigure829
-rw-r--r--configure.ac334
-rw-r--r--contrib/contrib.mak314
-rw-r--r--contrib/gdevadmp.c2
-rw-r--r--contrib/gdevbjc_.h6
-rw-r--r--contrib/japanese/dmp_init.ps206
-rw-r--r--contrib/japanese/dmp_site.ps14
-rw-r--r--contrib/japanese/doc/gdevdmpr.txt545
-rw-r--r--contrib/japanese/dviprlib.c2823
-rw-r--r--contrib/japanese/escp_24.src12
-rw-r--r--contrib/japanese/gdevdmpr.c888
-rw-r--r--contrib/lips4/gdevlips.h5
-rw-r--r--contrib/lips4/gdevlprn.h5
-rw-r--r--cups/gdevcups.c24
-rw-r--r--cups/libs/cups/globals.c8
-rw-r--r--demos/c/ReadMe.txt31
-rw-r--r--demos/c/api_test.c1157
-rw-r--r--demos/c/api_test.vcxproj239
-rw-r--r--demos/c/api_test.vcxproj.filters14
-rw-r--r--demos/csharp/README.txt32
-rw-r--r--demos/csharp/api/ghostapi.cs199
-rw-r--r--demos/csharp/api/ghostmono.cs1088
-rw-r--r--demos/csharp/api/ghostnet.cs1198
-rw-r--r--demos/csharp/linux/gs_mono.sln17
-rw-r--r--demos/csharp/linux/gtk_viewer/Properties/AssemblyInfo.cs26
-rw-r--r--demos/csharp/linux/gtk_viewer/gtk-gui/generated.cs30
-rw-r--r--demos/csharp/linux/gtk_viewer/gtk-gui/gtk_viewer.src.gsOutput.cs10
-rw-r--r--demos/csharp/linux/gtk_viewer/gtk-gui/gui.stetic18
-rw-r--r--demos/csharp/linux/gtk_viewer/gtk_viewer.csproj73
-rw-r--r--demos/csharp/linux/gtk_viewer/gtk_viewer.sln17
-rw-r--r--demos/csharp/linux/gtk_viewer/src/DocPage.cs108
-rw-r--r--demos/csharp/linux/gtk_viewer/src/MainRender.cs136
-rw-r--r--demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs91
-rw-r--r--demos/csharp/linux/gtk_viewer/src/MainWindow.cs713
-rw-r--r--demos/csharp/linux/gtk_viewer/src/MainZoom.cs203
-rw-r--r--demos/csharp/linux/gtk_viewer/src/Program.cs25
-rw-r--r--demos/csharp/linux/gtk_viewer/src/TempFile.cs34
-rw-r--r--demos/csharp/linux/gtk_viewer/src/gsOutput.cs41
-rw-r--r--demos/csharp/windows/ghostnet.sln37
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/About.xaml94
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/About.xaml.cs254
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/App.config6
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/App.xaml9
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/App.xaml.cs17
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/DocPage.cs109
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/MainPrint.cs187
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/MainRender.cs135
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/MainThumbRendering.cs116
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml214
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml.cs739
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/MainZoom.cs168
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/PrintControl.xaml148
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/PrintControl.xaml.cs517
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/Properties/AssemblyInfo.cs55
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/Properties/Resources.Designer.cs71
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/Properties/Resources.resx117
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/Properties/Settings.Designer.cs30
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/Properties/Settings.settings7
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/TempFile.cs34
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/XPSprint.cs587
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/ghostnet_simple_viewer.csproj194
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/gsIO.cs29
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/gsOutput.xaml28
-rw-r--r--demos/csharp/windows/ghostnet_wpf_example/gsOutput.xaml.cs49
-rw-r--r--demos/python/README.txt17
-rwxr-xr-xdemos/python/examples.py171
-rwxr-xr-xdemos/python/gsapi.py1049
-rwxr-xr-xdemos/python/gsapiwrap.py699
-rw-r--r--demos/python/jlib.py1355
-rw-r--r--devices/dcontrib.mak (renamed from devices/contrib.mak)312
-rw-r--r--devices/devs.mak2611
-rw-r--r--devices/gdev3852.c2
-rw-r--r--devices/gdev4081.c2
-rw-r--r--devices/gdev8510.c2
-rw-r--r--devices/gdev8bcm.c2
-rw-r--r--devices/gdev8bcm.h2
-rw-r--r--devices/gdevatx.c2
-rw-r--r--devices/gdevbit.c12
-rw-r--r--devices/gdevbj10.c2
-rw-r--r--devices/gdevbjc.h2
-rw-r--r--devices/gdevbjcl.c2
-rw-r--r--devices/gdevbjcl.h2
-rw-r--r--devices/gdevbmp.c2
-rw-r--r--devices/gdevbmp.h2
-rw-r--r--devices/gdevbmpc.c2
-rw-r--r--devices/gdevccr.c2
-rw-r--r--devices/gdevcdj.c8
-rw-r--r--devices/gdevcfax.c2
-rw-r--r--devices/gdevchameleon.c25
-rw-r--r--devices/gdevcif.c2
-rw-r--r--devices/gdevclj.c2
-rw-r--r--devices/gdevcljc.c2
-rw-r--r--devices/gdevcmykog.c4
-rw-r--r--devices/gdevcslw.c2
-rw-r--r--devices/gdevdfax.c2
-rw-r--r--devices/gdevdjet.c2
-rw-r--r--devices/gdevdjtc.c2
-rw-r--r--devices/gdevdljm.c2
-rw-r--r--devices/gdevdljm.h2
-rw-r--r--devices/gdevdm24.c6
-rw-r--r--devices/gdevdsp.c854
-rw-r--r--devices/gdevdsp.h182
-rw-r--r--devices/gdevdsp2.h11
-rw-r--r--devices/gdevepsc.c2
-rw-r--r--devices/gdevepsn.c2
-rw-r--r--devices/gdevescp.c2
-rw-r--r--devices/gdevfax.c14
-rw-r--r--devices/gdevfax.h2
-rw-r--r--devices/gdevfpng.c2
-rw-r--r--devices/gdevhl7x.c2
-rw-r--r--devices/gdevicov.c2
-rw-r--r--devices/gdevijs.c4
-rw-r--r--devices/gdevimgn.c2
-rw-r--r--devices/gdevjbig2.c2
-rw-r--r--devices/gdevjpeg.c10
-rw-r--r--devices/gdevjpx.c2
-rw-r--r--devices/gdevl31s.c2
-rw-r--r--devices/gdevlbp8.c2
-rw-r--r--devices/gdevlj56.c2
-rw-r--r--devices/gdevlp8k.c2
-rw-r--r--devices/gdevlxm.c2
-rw-r--r--devices/gdevmeds.c2
-rw-r--r--devices/gdevmeds.h2
-rw-r--r--devices/gdevmgr.c9
-rw-r--r--devices/gdevmgr.h2
-rw-r--r--devices/gdevmiff.c2
-rw-r--r--devices/gdevn533.c2
-rw-r--r--devices/gdevo182.c2
-rw-r--r--devices/gdevocr.c265
-rw-r--r--devices/gdevokii.c2
-rw-r--r--devices/gdevpbm.c2
-rw-r--r--devices/gdevpcl.c2
-rw-r--r--devices/gdevpcl.h2
-rw-r--r--devices/gdevpcx.c2
-rw-r--r--devices/gdevpdfimg.c241
-rw-r--r--devices/gdevpdfimg.h105
-rw-r--r--devices/gdevpdfocr.c727
-rw-r--r--devices/gdevpe.c2
-rw-r--r--devices/gdevperm.c2
-rw-r--r--devices/gdevphex.c2
-rw-r--r--devices/gdevpjet.c2
-rw-r--r--devices/gdevplan.c2
-rw-r--r--devices/gdevplib.c2
-rw-r--r--devices/gdevplib.h2
-rw-r--r--devices/gdevpm.h2
-rw-r--r--devices/gdevpng.c65
-rw-r--r--devices/gdevpsd.c13
-rw-r--r--devices/gdevpsd.h2
-rw-r--r--devices/gdevpsim.c2
-rw-r--r--devices/gdevpxut.c2
-rw-r--r--devices/gdevpxut.h2
-rw-r--r--devices/gdevrinkj.c2
-rw-r--r--devices/gdevsj48.c2
-rw-r--r--devices/gdevsnfb.c2
-rw-r--r--devices/gdevsppr.c2
-rw-r--r--devices/gdevstc.c2
-rw-r--r--devices/gdevstc.h2
-rw-r--r--devices/gdevstc1.c2
-rw-r--r--devices/gdevstc2.c2
-rw-r--r--devices/gdevstc3.c2
-rw-r--r--devices/gdevstc4.c2
-rw-r--r--devices/gdevtfax.c2
-rw-r--r--devices/gdevtfax.h2
-rw-r--r--devices/gdevtfnx.c4
-rw-r--r--devices/gdevtifs.c56
-rw-r--r--devices/gdevtifs.h8
-rw-r--r--devices/gdevtknk.c2
-rw-r--r--devices/gdevtrac.c2
-rw-r--r--devices/gdevtsep.c71
-rw-r--r--devices/gdevupd.c6
-rw-r--r--devices/gdevwpr2.c2
-rw-r--r--devices/gdevx.c6
-rw-r--r--devices/gdevx.h2
-rw-r--r--devices/gdevxalt.c2
-rw-r--r--devices/gdevxcf.c2
-rw-r--r--devices/gdevxcmp.c2
-rw-r--r--devices/gdevxcmp.h2
-rw-r--r--devices/gdevxini.c2
-rw-r--r--devices/gdevxres.c2
-rw-r--r--devices/gxfcopy.c39
-rw-r--r--devices/gxfcopy.h2
-rw-r--r--devices/minftrsz.c2
-rw-r--r--devices/minftrsz.h2
-rw-r--r--devices/rinkj/evenbetter-rll.c2
-rw-r--r--devices/rinkj/evenbetter-rll.h7
-rw-r--r--devices/rinkj/rinkj-byte-stream.c2
-rw-r--r--devices/rinkj/rinkj-byte-stream.h7
-rw-r--r--devices/rinkj/rinkj-config.c2
-rw-r--r--devices/rinkj/rinkj-config.h7
-rw-r--r--devices/rinkj/rinkj-device.c2
-rw-r--r--devices/rinkj/rinkj-device.h6
-rw-r--r--devices/rinkj/rinkj-dither.c2
-rw-r--r--devices/rinkj/rinkj-dither.h6
-rw-r--r--devices/rinkj/rinkj-epson870.c2
-rw-r--r--devices/rinkj/rinkj-epson870.h6
-rw-r--r--devices/rinkj/rinkj-screen-eb.c2
-rw-r--r--devices/rinkj/rinkj-screen-eb.h7
-rw-r--r--devices/vector/gdevagl.c2
-rw-r--r--devices/vector/gdevagl.h7
-rw-r--r--devices/vector/gdevpdf.c56
-rw-r--r--devices/vector/gdevpdfb.c2
-rw-r--r--devices/vector/gdevpdfb.h2
-rw-r--r--devices/vector/gdevpdfc.c11
-rw-r--r--devices/vector/gdevpdfc.h2
-rw-r--r--devices/vector/gdevpdfd.c146
-rw-r--r--devices/vector/gdevpdfe.c2
-rw-r--r--devices/vector/gdevpdfg.c13
-rw-r--r--devices/vector/gdevpdfg.h6
-rw-r--r--devices/vector/gdevpdfi.c20
-rw-r--r--devices/vector/gdevpdfj.c2
-rw-r--r--devices/vector/gdevpdfk.c24
-rw-r--r--devices/vector/gdevpdfm.c2
-rw-r--r--devices/vector/gdevpdfo.c6
-rw-r--r--devices/vector/gdevpdfo.h2
-rw-r--r--devices/vector/gdevpdfp.c2
-rw-r--r--devices/vector/gdevpdfr.c2
-rw-r--r--devices/vector/gdevpdft.c13
-rw-r--r--devices/vector/gdevpdfu.c67
-rw-r--r--devices/vector/gdevpdfv.c2
-rw-r--r--devices/vector/gdevpdfx.h15
-rw-r--r--devices/vector/gdevpdt.c2
-rw-r--r--devices/vector/gdevpdt.h2
-rw-r--r--devices/vector/gdevpdtb.c4
-rw-r--r--devices/vector/gdevpdtb.h2
-rw-r--r--devices/vector/gdevpdtc.c2
-rw-r--r--devices/vector/gdevpdtd.c2
-rw-r--r--devices/vector/gdevpdtd.h2
-rw-r--r--devices/vector/gdevpdte.c4
-rw-r--r--devices/vector/gdevpdtf.c3
-rw-r--r--devices/vector/gdevpdtf.h12
-rw-r--r--devices/vector/gdevpdti.c6
-rw-r--r--devices/vector/gdevpdti.h2
-rw-r--r--devices/vector/gdevpdts.c47
-rw-r--r--devices/vector/gdevpdts.h2
-rw-r--r--devices/vector/gdevpdtt.c2
-rw-r--r--devices/vector/gdevpdtt.h2
-rw-r--r--devices/vector/gdevpdtv.c2
-rw-r--r--devices/vector/gdevpdtv.h2
-rw-r--r--devices/vector/gdevpdtw.c6
-rw-r--r--devices/vector/gdevpdtw.h2
-rw-r--r--devices/vector/gdevpdtx.h2
-rw-r--r--devices/vector/gdevpsdf.h7
-rw-r--r--devices/vector/gdevpsdi.c8
-rw-r--r--devices/vector/gdevpsdp.c93
-rw-r--r--devices/vector/gdevpsds.c8
-rw-r--r--devices/vector/gdevpsds.h2
-rw-r--r--devices/vector/gdevpsdu.c2
-rw-r--r--devices/vector/gdevpsf.h2
-rw-r--r--devices/vector/gdevpsf1.c2
-rw-r--r--devices/vector/gdevpsf2.c4
-rw-r--r--devices/vector/gdevpsfm.c2
-rw-r--r--devices/vector/gdevpsft.c2
-rw-r--r--devices/vector/gdevpsfu.c2
-rw-r--r--devices/vector/gdevpsfx.c2
-rw-r--r--devices/vector/gdevpsu.c2
-rw-r--r--devices/vector/gdevpsu.h2
-rw-r--r--devices/vector/gdevpx.c2
-rw-r--r--devices/vector/gdevtxtw.c199
-rw-r--r--devices/vector/gdevxps.c4
-rw-r--r--devices/vector/opdfread.ps202
-rw-r--r--devices/vector/whitelst.c2
-rw-r--r--devices/vector/whitelst.h2
-rw-r--r--doc/API.htm733
-rw-r--r--doc/C-style.htm11
-rw-r--r--doc/Commprod.htm11
-rw-r--r--doc/DLL.htm13
-rw-r--r--doc/Deprecated.htm13
-rw-r--r--doc/Develop.htm13
-rw-r--r--doc/Devices.htm103
-rw-r--r--doc/Drivers.htm13
-rw-r--r--doc/Fonts.htm13
-rw-r--r--doc/GPDL.htm618
-rw-r--r--doc/History9.htm13453
-rw-r--r--doc/Install.htm13
-rw-r--r--doc/Internal.htm13
-rw-r--r--doc/Language.htm104
-rw-r--r--doc/Lib.htm13
-rw-r--r--doc/Make.htm13
-rw-r--r--doc/News.htm83
-rw-r--r--doc/Ps-style.htm13
-rw-r--r--doc/Ps2epsi.htm13
-rw-r--r--doc/Psfiles.htm13
-rw-r--r--doc/Readme.htm13
-rw-r--r--doc/Release.htm13
-rw-r--r--doc/SavedPages.htm11
-rw-r--r--doc/Source.htm13
-rw-r--r--doc/Unix-lpr.htm13
-rw-r--r--doc/Use.htm62
-rw-r--r--doc/VectorDevices.htm15
-rw-r--r--doc/WhatIsGS.htm13
-rw-r--r--doc/gdevds32.c21
-rw-r--r--doc/gs-vms.hlp2
-rw-r--r--doc/sample_downscale_device.htm11
-rw-r--r--doc/subclass.htm11
-rw-r--r--doc/thirdparty.htm11
-rw-r--r--examples/spots.ps79
-rw-r--r--examples/transparency_example.ps8
-rw-r--r--ijs/Makefile.am2
-rw-r--r--ijs/configure.ac2
-rw-r--r--ijs/ijs.c2
-rw-r--r--ijs/ijs.h7
-rw-r--r--ijs/ijs_client.c2
-rw-r--r--ijs/ijs_client.h7
-rw-r--r--ijs/ijs_client_example.c2
-rw-r--r--ijs/ijs_exec_unix.c2
-rw-r--r--ijs/ijs_exec_win.c6
-rw-r--r--ijs/ijs_server.c2
-rw-r--r--ijs/ijs_server_example.c2
-rw-r--r--ijs/unistd_.h2
-rwxr-xr-xinstall-sh36
-rw-r--r--ios/ios_arch-arm.h2
-rw-r--r--ios/ios_arch-x86.h2
-rw-r--r--jbig2dec/CHANGES23
-rwxr-xr-xjbig2dec/autogen.sh2
-rw-r--r--jbig2dec/config_win32.h2
-rw-r--r--jbig2dec/configure.ac.in13
-rw-r--r--jbig2dec/jbig2.c116
-rw-r--r--jbig2dec/jbig2.h17
-rw-r--r--jbig2dec/jbig2_arith.c152
-rw-r--r--jbig2dec/jbig2_arith.h4
-rw-r--r--jbig2dec/jbig2_arith_iaid.c30
-rw-r--r--jbig2dec/jbig2_arith_iaid.h4
-rw-r--r--jbig2dec/jbig2_arith_int.c46
-rw-r--r--jbig2dec/jbig2_arith_int.h2
-rw-r--r--jbig2dec/jbig2_generic.c83
-rw-r--r--jbig2dec/jbig2_generic.h2
-rw-r--r--jbig2dec/jbig2_halftone.c28
-rw-r--r--jbig2dec/jbig2_halftone.h4
-rw-r--r--jbig2dec/jbig2_huffman.c48
-rw-r--r--jbig2dec/jbig2_huffman.h2
-rw-r--r--jbig2dec/jbig2_hufftab.c2
-rw-r--r--jbig2dec/jbig2_hufftab.h2
-rw-r--r--jbig2dec/jbig2_image.c31
-rw-r--r--jbig2dec/jbig2_image.h2
-rw-r--r--jbig2dec/jbig2_image_pbm.c2
-rw-r--r--jbig2dec/jbig2_image_png.c2
-rw-r--r--jbig2dec/jbig2_image_rw.h2
-rw-r--r--jbig2dec/jbig2_mmr.c69
-rw-r--r--jbig2dec/jbig2_mmr.h2
-rw-r--r--jbig2dec/jbig2_page.c45
-rw-r--r--jbig2dec/jbig2_page.h2
-rw-r--r--jbig2dec/jbig2_priv.h30
-rw-r--r--jbig2dec/jbig2_refinement.c28
-rw-r--r--jbig2dec/jbig2_refinement.h2
-rw-r--r--jbig2dec/jbig2_segment.c16
-rw-r--r--jbig2dec/jbig2_segment.h2
-rw-r--r--jbig2dec/jbig2_symbol_dict.c35
-rw-r--r--jbig2dec/jbig2_symbol_dict.h2
-rw-r--r--jbig2dec/jbig2_text.c68
-rw-r--r--jbig2dec/jbig2_text.h2
-rw-r--r--jbig2dec/jbig2dec.121
-rw-r--r--jbig2dec/jbig2dec.c348
-rw-r--r--jbig2dec/memcmp.c2
-rw-r--r--jbig2dec/msvc.mak4
-rw-r--r--jbig2dec/os_types.h2
-rw-r--r--jbig2dec/pbm2png.c2
-rw-r--r--jbig2dec/snprintf.c163
-rw-r--r--lcms2mt/AUTHORS1
-rw-r--r--lcms2mt/COPYING2
-rw-r--r--lcms2mt/ChangeLog30
-rw-r--r--lcms2mt/Makefile.am13
-rw-r--r--lcms2mt/Makefile.in37
-rw-r--r--lcms2mt/Projects/BorlandC_5.5/lcms2mt.rc30
-rw-r--r--lcms2mt/Projects/BorlandC_5.5/lcmsdll.lk4
-rw-r--r--lcms2mt/Projects/VC2013/lcms2mt.rc12
-rw-r--r--lcms2mt/Projects/VC2013/lcms2mt.slnbin15008 -> 15220 bytes
-rw-r--r--lcms2mt/Projects/VC2013/lcms2mt_DLL/lcms2mt_DLL.vcxproj22
-rw-r--r--lcms2mt/Projects/VC2015/lcms2mt.rc12
-rw-r--r--lcms2mt/Projects/VC2015/lcms2mt.slnbin15004 -> 15216 bytes
-rw-r--r--lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj2
-rw-r--r--lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters2
-rw-r--r--lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj2
-rw-r--r--lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj.filters2
-rw-r--r--lcms2mt/Projects/VC2017/lcms2mt.rc12
-rw-r--r--lcms2mt/Projects/VC2017/lcms2mt.slnbin15004 -> 15216 bytes
-rw-r--r--lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj2
-rw-r--r--lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters2
-rw-r--r--lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj2
-rw-r--r--lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj.filters2
-rw-r--r--lcms2mt/Projects/VC2019/jpegicc/jpegicc.vcxproj215
-rw-r--r--lcms2mt/Projects/VC2019/jpegicc/jpegicc.vcxproj.filters31
-rw-r--r--lcms2mt/Projects/VC2019/lcms2mt.rc104
-rw-r--r--lcms2mt/Projects/VC2019/lcms2mt.slnbin0 -> 20088 bytes
-rw-r--r--lcms2mt/Projects/VC2019/lcms2mt_DLL/lcms2mt_DLL.vcxproj252
-rw-r--r--lcms2mt/Projects/VC2019/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters121
-rw-r--r--lcms2mt/Projects/VC2019/lcms2mt_static/lcms2mt_static.vcxproj208
-rw-r--r--lcms2mt/Projects/VC2019/lcms2mt_static/lcms2mt_static.vcxproj.filters108
-rw-r--r--lcms2mt/Projects/VC2019/linkicc/linkicc.vcxproj192
-rw-r--r--lcms2mt/Projects/VC2019/linkicc/linkicc.vcxproj.filters28
-rw-r--r--lcms2mt/Projects/VC2019/psicc/psicc.vcxproj192
-rw-r--r--lcms2mt/Projects/VC2019/psicc/psicc.vcxproj.filters28
-rw-r--r--lcms2mt/Projects/VC2019/resource.h16
-rw-r--r--lcms2mt/Projects/VC2019/testbed/testbed.vcxproj208
-rw-r--r--lcms2mt/Projects/VC2019/testbed/testbed.vcxproj.filters28
-rw-r--r--lcms2mt/Projects/VC2019/tiffdiff/tiffdiff.vcxproj210
-rw-r--r--lcms2mt/Projects/VC2019/tiffdiff/tiffdiff.vcxproj.filters28
-rw-r--r--lcms2mt/Projects/VC2019/tifficc/tifficc.vcxproj211
-rw-r--r--lcms2mt/Projects/VC2019/tifficc/tifficc.vcxproj.filters33
-rw-r--r--lcms2mt/Projects/VC2019/transicc/transicc.vcxproj197
-rw-r--r--lcms2mt/Projects/VC2019/transicc/transicc.vcxproj.filters33
-rw-r--r--lcms2mt/Projects/cppcheck/lcms2mt.cppcheck9
-rwxr-xr-xlcms2mt/Projects/mac/LittleCMS/LittleCMS.xcodeproj/project.pbxproj16
-rw-r--r--lcms2mt/README.1ST18
-rw-r--r--lcms2mt/aclocal.m4191
-rwxr-xr-xlcms2mt/config.guess1
-rw-r--r--lcms2mt/configure232
-rw-r--r--lcms2mt/configure.ac16
-rw-r--r--lcms2mt/doc/LittleCMS2.10 API.pdfbin0 -> 3043432 bytes
-rw-r--r--lcms2mt/doc/LittleCMS2.10 Plugin API.pdfbin0 -> 1984290 bytes
-rw-r--r--lcms2mt/doc/LittleCMS2.10 tutorial.pdfbin0 -> 2201264 bytes
-rw-r--r--lcms2mt/doc/LittleCMS2.9 API.pdfbin4049350 -> 0 bytes
-rw-r--r--lcms2mt/doc/LittleCMS2.9 Plugin API.pdfbin1899759 -> 0 bytes
-rw-r--r--lcms2mt/doc/LittleCMS2.9 tutorial.pdfbin2125096 -> 0 bytes
-rw-r--r--lcms2mt/doc/WhyThisFork.txt4
-rw-r--r--lcms2mt/include/Makefile.in13
-rw-r--r--lcms2mt/include/lcms2mt.h46
-rw-r--r--lcms2mt/include/lcms2mt_plugin.h31
-rw-r--r--lcms2mt/plugins/README.1ST6
-rw-r--r--lcms2mt/plugins/fast_float/COPYING.GPL3674
-rw-r--r--lcms2mt/plugins/fast_float/Makefile12
-rw-r--r--lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj201
-rw-r--r--lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj.filters69
-rw-r--r--lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj.user4
-rw-r--r--lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj170
-rw-r--r--lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj.filters22
-rw-r--r--lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj.user4
-rw-r--r--lcms2mt/plugins/fast_float/doc/LittleCMS fast float extensions 1.0.pdfbin0 -> 1345153 bytes
-rw-r--r--lcms2mt/plugins/fast_float/include/Makefile.am6
-rw-r--r--lcms2mt/plugins/fast_float/include/lcms2mt_fast_float.h139
-rw-r--r--lcms2mt/plugins/fast_float/src/Makefile.am27
-rw-r--r--lcms2mt/plugins/fast_float/src/fast_16_tethra.c370
-rw-r--r--lcms2mt/plugins/fast_float/src/fast_8_curves.c409
-rw-r--r--lcms2mt/plugins/fast_float/src/fast_8_matsh.c399
-rw-r--r--lcms2mt/plugins/fast_float/src/fast_8_tethra.c501
-rw-r--r--lcms2mt/plugins/fast_float/src/fast_float_15bits.c603
-rw-r--r--lcms2mt/plugins/fast_float/src/fast_float_15mats.c347
-rw-r--r--lcms2mt/plugins/fast_float/src/fast_float_cmyk.c379
-rw-r--r--lcms2mt/plugins/fast_float/src/fast_float_curves.c384
-rw-r--r--lcms2mt/plugins/fast_float/src/fast_float_internal.h249
-rw-r--r--lcms2mt/plugins/fast_float/src/fast_float_matsh.c323
-rw-r--r--lcms2mt/plugins/fast_float/src/fast_float_separate.c199
-rw-r--r--lcms2mt/plugins/fast_float/src/fast_float_sup.c90
-rw-r--r--lcms2mt/plugins/fast_float/src/fast_float_tethra.c292
-rw-r--r--lcms2mt/plugins/fast_float/testbed/Makefile.am22
-rw-r--r--lcms2mt/plugins/fast_float/testbed/fast_float_testbed.c1782
-rw-r--r--lcms2mt/plugins/fast_float/testbed/test0.iccbin0 -> 560 bytes
-rw-r--r--lcms2mt/plugins/fast_float/testbed/test1.iccbin0 -> 557536 bytes
-rw-r--r--lcms2mt/plugins/fast_float/testbed/test2.iccbin0 -> 654496 bytes
-rw-r--r--lcms2mt/plugins/fast_float/testbed/test3.iccbin0 -> 28484 bytes
-rw-r--r--lcms2mt/plugins/fast_float/testbed/test5.iccbin0 -> 3240 bytes
-rw-r--r--lcms2mt/src/Makefile.am8
-rw-r--r--lcms2mt/src/Makefile.in173
-rw-r--r--lcms2mt/src/cmsalpha.c14
-rw-r--r--lcms2mt/src/cmscam02.c2
-rw-r--r--lcms2mt/src/cmscgats.c68
-rw-r--r--lcms2mt/src/cmscnvrt.c31
-rw-r--r--lcms2mt/src/cmserr.c4
-rw-r--r--lcms2mt/src/cmsgamma.c4
-rw-r--r--lcms2mt/src/cmsgmt.c6
-rw-r--r--lcms2mt/src/cmshalf.c10
-rw-r--r--lcms2mt/src/cmsintrp.c1076
-rw-r--r--lcms2mt/src/cmsio0.c2
-rw-r--r--lcms2mt/src/cmsio1.c15
-rw-r--r--lcms2mt/src/cmslut.c10
-rw-r--r--lcms2mt/src/cmsmd5.c33
-rw-r--r--lcms2mt/src/cmsmtrx.c2
-rw-r--r--lcms2mt/src/cmsnamed.c10
-rw-r--r--lcms2mt/src/cmsopt.c60
-rw-r--r--lcms2mt/src/cmspack.c884
-rw-r--r--lcms2mt/src/cmspcs.c2
-rw-r--r--lcms2mt/src/cmsplugin.c4
-rw-r--r--lcms2mt/src/cmsps2.c202
-rw-r--r--lcms2mt/src/cmssamp.c2
-rw-r--r--lcms2mt/src/cmssm.c2
-rw-r--r--lcms2mt/src/cmstypes.c86
-rw-r--r--lcms2mt/src/cmsvirt.c9
-rw-r--r--lcms2mt/src/cmswtpnt.c2
-rw-r--r--lcms2mt/src/cmsxform.c54
-rw-r--r--lcms2mt/src/lcms2_internal.h13
-rw-r--r--lcms2mt/src/lcms2mt.def30
-rw-r--r--lcms2mt/testbed/Makefile.am2
-rw-r--r--lcms2mt/testbed/Makefile.in43
-rw-r--r--lcms2mt/testbed/new.iccbin25244 -> 25244 bytes
-rw-r--r--lcms2mt/testbed/testcms2.c3981
-rwxr-xr-xlcms2mt/testbed/testcms2.h44
-rwxr-xr-xlcms2mt/testbed/testplugin.c209
-rwxr-xr-xlcms2mt/testbed/zoo_icc.c2
-rw-r--r--lcms2mt/utils/common/utils.h2
-rw-r--r--lcms2mt/utils/common/vprf.c2
-rw-r--r--lcms2mt/utils/jpgicc/Makefile.am2
-rw-r--r--lcms2mt/utils/jpgicc/Makefile.in19
-rw-r--r--lcms2mt/utils/jpgicc/jpgicc.c54
-rw-r--r--lcms2mt/utils/linkicc/Makefile.am4
-rw-r--r--lcms2mt/utils/linkicc/Makefile.in121
-rw-r--r--lcms2mt/utils/linkicc/linkicc.c2
-rw-r--r--lcms2mt/utils/psicc/Makefile.am4
-rw-r--r--lcms2mt/utils/psicc/Makefile.in121
-rw-r--r--lcms2mt/utils/psicc/psicc.c2
-rw-r--r--lcms2mt/utils/samples/Makefile.am4
-rw-r--r--lcms2mt/utils/tificc/Makefile.am2
-rw-r--r--lcms2mt/utils/tificc/Makefile.in19
-rw-r--r--lcms2mt/utils/tificc/tifdiff.c2
-rw-r--r--lcms2mt/utils/tificc/tificc.c100
-rw-r--r--lcms2mt/utils/transicc/Makefile.am4
-rw-r--r--lcms2mt/utils/transicc/Makefile.in121
-rw-r--r--lcms2mt/utils/transicc/transicc.c2
-rw-r--r--lib/FCOfontmap-PCLPS32
-rw-r--r--lib/FCOfontmap-PS32
-rw-r--r--lib/Fontmap.ATB2
-rw-r--r--lib/Fontmap.ATM2
-rw-r--r--lib/Fontmap.OS22
-rw-r--r--lib/Fontmap.SGI2
-rw-r--r--lib/Fontmap.Sol2
-rw-r--r--lib/Fontmap.Ult2
-rw-r--r--lib/Fontmap.VMS2
-rw-r--r--lib/align.ps2
-rw-r--r--lib/caption.ps2
-rw-r--r--lib/cat.ps2
-rw-r--r--lib/cid2code.ps2
-rw-r--r--lib/docie.ps2
-rw-r--r--lib/font2pcl.ps2
-rw-r--r--lib/gs_ce_e.ps2
-rw-r--r--lib/gs_il2_e.ps2
-rw-r--r--lib/gs_kanji.ps2
-rw-r--r--lib/gs_ksb_e.ps2
-rw-r--r--lib/gs_lgo_e.ps2
-rw-r--r--lib/gs_lgx_e.ps2
-rw-r--r--lib/gs_wl1_e.ps2
-rw-r--r--lib/gs_wl2_e.ps2
-rw-r--r--lib/gs_wl5_e.ps2
-rw-r--r--lib/gslp.ps2
-rw-r--r--lib/gsnup.ps2
-rw-r--r--lib/gssetgs.bat3
-rw-r--r--lib/image-qa.ps2
-rw-r--r--lib/jispaper.ps2
-rw-r--r--lib/lines.ps2
-rw-r--r--lib/mkcidfm.ps2
-rw-r--r--lib/pdf2dsc.ps2
-rw-r--r--lib/pdf_info.ps2
-rw-r--r--lib/pfbtopfa.ps2
-rw-r--r--lib/ppath.ps2
-rw-r--r--lib/pphs.ps2
-rw-r--r--lib/prfont.ps2
-rw-r--r--lib/ps2ai.ps2
-rwxr-xr-xlib/ps2epsi103
-rwxr-xr-xlib/ps2epsi.bat26
-rwxr-xr-xlib/ps2epsi.cmd26
-rw-r--r--lib/ps2epsi.ps385
-rw-r--r--lib/rollconv.ps2
-rw-r--r--lib/stcinfo.ps2
-rw-r--r--lib/stcolor.ps2
-rw-r--r--lib/stocht.ps2
-rw-r--r--lib/traceimg.ps2
-rw-r--r--lib/traceop.ps2
-rw-r--r--lib/uninfo.ps2
-rw-r--r--lib/viewcmyk.ps2
-rw-r--r--lib/viewgif.ps2
-rw-r--r--lib/viewmiff.ps2
-rw-r--r--lib/viewpbm.ps2
-rw-r--r--lib/viewpcx.ps2
-rw-r--r--lib/viewps2a.ps2
-rw-r--r--lib/viewraw.ps2
-rw-r--r--lib/viewrgb.ps2
-rw-r--r--lib/winmaps.ps2
-rw-r--r--lib/zeroline.ps2
-rw-r--r--man/dvipdf.14
-rw-r--r--man/gs.14
-rw-r--r--man/gslp.14
-rw-r--r--man/gsnd.14
-rw-r--r--man/pdf2dsc.14
-rw-r--r--man/pdf2ps.14
-rw-r--r--man/pf2afm.14
-rw-r--r--man/pfbtopfa.14
-rw-r--r--man/printafm.14
-rw-r--r--man/ps2ascii.14
-rw-r--r--man/ps2epsi.14
-rw-r--r--man/ps2pdf.16
-rw-r--r--man/ps2pdfwr.14
-rw-r--r--man/ps2ps.14
-rw-r--r--psi/bfont.h2
-rw-r--r--psi/btoken.h2
-rw-r--r--psi/dmmain.c2
-rw-r--r--psi/dmmain.r2
-rw-r--r--psi/dpmain.c2
-rw-r--r--psi/dscparse.c2
-rw-r--r--psi/dscparse.h2
-rw-r--r--psi/dstack.h2
-rw-r--r--psi/dw32c.def2
-rw-r--r--psi/dw64c.def2
-rw-r--r--psi/dwdll.c2
-rw-r--r--psi/dwdll.h2
-rw-r--r--psi/dwimg.c2
-rw-r--r--psi/dwimg.h2
-rw-r--r--psi/dwmain.c2
-rw-r--r--psi/dwmain.rc2
-rw-r--r--psi/dwmain32.def2
-rw-r--r--psi/dwmain64.def2
-rw-r--r--psi/dwmainc.c4
-rw-r--r--psi/dwnodll.c2
-rw-r--r--psi/dwreg.c2
-rw-r--r--psi/dwreg.h2
-rw-r--r--psi/dwres.h2
-rw-r--r--psi/dwsetup.def2
-rw-r--r--psi/dwtext.c2
-rw-r--r--psi/dwtext.h2
-rw-r--r--psi/dwtrace.c2
-rw-r--r--psi/dwtrace.h2
-rw-r--r--psi/dwuninst.def2
-rw-r--r--psi/dxmain.c2
-rw-r--r--psi/dxmainc.c2
-rw-r--r--psi/estack.h2
-rw-r--r--psi/files.h2
-rw-r--r--psi/ghost.h2
-rw-r--r--psi/gs.c2
-rw-r--r--psi/gsdll.c2
-rw-r--r--psi/gsdll2.def14
-rw-r--r--psi/gsdll2.rc2
-rw-r--r--psi/gsdll32.def66
-rw-r--r--psi/gsdll32.rc2
-rw-r--r--psi/gsdll32metro.def67
-rw-r--r--psi/gsdll64.def66
-rw-r--r--psi/gsdll64metro.def66
-rw-r--r--psi/gsdllARM32metro.def65
-rw-r--r--psi/gserver.c2
-rw-r--r--psi/gsos2.def2
-rw-r--r--psi/gsos2.rc2
-rw-r--r--psi/ialloc.c30
-rw-r--r--psi/ialloc.h2
-rw-r--r--psi/iapi.c465
-rw-r--r--psi/iapi.h109
-rw-r--r--psi/iastate.h2
-rw-r--r--psi/iastruct.h2
-rw-r--r--psi/ibnum.c2
-rw-r--r--psi/ibnum.h2
-rw-r--r--psi/ichar.h2
-rw-r--r--psi/ichar1.h2
-rw-r--r--psi/icharout.h2
-rw-r--r--psi/icid.h2
-rw-r--r--psi/icie.h2
-rw-r--r--psi/icolor.h2
-rw-r--r--psi/iconf.c2
-rw-r--r--psi/iconf.h2
-rw-r--r--psi/icontext.c2
-rw-r--r--psi/icontext.h2
-rw-r--r--psi/icremap.h2
-rw-r--r--psi/icsmap.h2
-rw-r--r--psi/icstate.h2
-rw-r--r--psi/iddict.h2
-rw-r--r--psi/iddstack.h2
-rw-r--r--psi/idebug.c50
-rw-r--r--psi/idebug.h2
-rw-r--r--psi/idict.c26
-rw-r--r--psi/idict.h2
-rw-r--r--psi/idictdef.h2
-rw-r--r--psi/idicttpl.h4
-rw-r--r--psi/idisp.c72
-rw-r--r--psi/idisp.h7
-rw-r--r--psi/idosave.h2
-rw-r--r--psi/idparam.c2
-rw-r--r--psi/idparam.h2
-rw-r--r--psi/idsdata.h2
-rw-r--r--psi/idstack.c10
-rw-r--r--psi/idstack.h2
-rw-r--r--psi/ierrors.h2
-rw-r--r--psi/iesdata.h2
-rw-r--r--psi/iestack.h2
-rw-r--r--psi/ifapi.h2
-rw-r--r--psi/ifcid.h2
-rw-r--r--psi/ifilter.h2
-rw-r--r--psi/ifilter2.h2
-rw-r--r--psi/ifont.h2
-rw-r--r--psi/ifont1.h2
-rw-r--r--psi/ifont2.h2
-rw-r--r--psi/ifont42.h2
-rw-r--r--psi/ifrpred.h2
-rw-r--r--psi/ifunc.h2
-rw-r--r--psi/ifwpred.h2
-rw-r--r--psi/igc.c76
-rw-r--r--psi/igc.h2
-rw-r--r--psi/igcref.c68
-rw-r--r--psi/igcstr.c32
-rw-r--r--psi/igcstr.h2
-rw-r--r--psi/igstate.h2
-rw-r--r--psi/iht.h2
-rw-r--r--psi/iimage.h2
-rw-r--r--psi/iinit.c6
-rw-r--r--psi/iinit.h2
-rw-r--r--psi/ilevel.h2
-rw-r--r--psi/ilocate.c94
-rw-r--r--psi/imain.c172
-rw-r--r--psi/imain.h6
-rw-r--r--psi/imainarg.c59
-rw-r--r--psi/imainarg.h2
-rw-r--r--psi/imemory.h2
-rw-r--r--psi/iminst.h13
-rw-r--r--psi/iname.c6
-rw-r--r--psi/iname.h2
-rw-r--r--psi/inamedef.h4
-rw-r--r--psi/inameidx.h2
-rw-r--r--psi/inames.h2
-rw-r--r--psi/inamestr.h2
-rw-r--r--psi/inobtokn.c2
-rw-r--r--psi/inouparm.c2
-rw-r--r--psi/int.mak2997
-rw-r--r--psi/interp.c6
-rw-r--r--psi/interp.h2
-rw-r--r--psi/iosdata.h2
-rw-r--r--psi/iostack.h2
-rw-r--r--psi/ipacked.h2
-rw-r--r--psi/iparam.c15
-rw-r--r--psi/iparam.h2
-rw-r--r--psi/iparray.h2
-rw-r--r--psi/ipcolor.h2
-rw-r--r--psi/iplugin.c2
-rw-r--r--psi/iplugin.h2
-rw-r--r--psi/ireclaim.c8
-rw-r--r--psi/iref.h2
-rw-r--r--psi/isave.c60
-rw-r--r--psi/isave.h2
-rw-r--r--psi/iscan.c16
-rw-r--r--psi/iscan.h2
-rw-r--r--psi/iscanbin.c2
-rw-r--r--psi/iscanbin.h2
-rw-r--r--psi/iscannum.c8
-rw-r--r--psi/iscannum.h2
-rw-r--r--psi/isdata.h2
-rw-r--r--psi/isstate.h2
-rw-r--r--psi/istack.c2
-rw-r--r--psi/istack.h2
-rw-r--r--psi/istkparm.h2
-rw-r--r--psi/istream.h2
-rw-r--r--psi/istruct.h2
-rw-r--r--psi/itoken.h2
-rw-r--r--psi/iutil.c4
-rw-r--r--psi/iutil.h2
-rw-r--r--psi/iutil2.c2
-rw-r--r--psi/iutil2.h2
-rw-r--r--psi/ivmem2.h4
-rw-r--r--psi/ivmspace.h2
-rw-r--r--psi/main.h2
-rw-r--r--psi/mkfilelt.cpp2
-rw-r--r--psi/msvc.mak51
-rw-r--r--psi/msvc32.mak2
-rw-r--r--psi/msvc64.mak2
-rw-r--r--psi/nsisinst.nsi2
-rw-r--r--psi/oparc.h2
-rw-r--r--psi/opcheck.h2
-rw-r--r--psi/opdef.h2
-rw-r--r--psi/oper.h2
-rw-r--r--psi/opextern.h2
-rw-r--r--psi/os2.mak2
-rw-r--r--psi/ostack.h2
-rw-r--r--psi/psapi.c144
-rw-r--r--psi/psapi.h23
-rw-r--r--psi/psromfs.mak2
-rw-r--r--psi/store.h25
-rw-r--r--psi/zalg.c2
-rw-r--r--psi/zarith.c10
-rw-r--r--psi/zarray.c2
-rw-r--r--psi/zbfont.c2
-rw-r--r--psi/zbseq.c2
-rw-r--r--psi/zcfont.c2
-rw-r--r--psi/zchar.c3
-rw-r--r--psi/zchar1.c2
-rw-r--r--psi/zchar2.c2
-rw-r--r--psi/zchar32.c2
-rw-r--r--psi/zchar42.c2
-rw-r--r--psi/zchar42.h2
-rw-r--r--psi/zcharout.c2
-rw-r--r--psi/zcharx.c2
-rw-r--r--psi/zcid.c2
-rw-r--r--psi/zcie.c10
-rw-r--r--psi/zcie.h2
-rw-r--r--psi/zcolor.c22
-rw-r--r--psi/zcolor.h2
-rw-r--r--psi/zcolor1.c2
-rw-r--r--psi/zcolor2.c2
-rw-r--r--psi/zcolor3.c2
-rw-r--r--psi/zcontrol.c12
-rw-r--r--psi/zcrd.c2
-rw-r--r--psi/zcsindex.c2
-rw-r--r--psi/zcspixel.c2
-rw-r--r--psi/zcssepr.c2
-rw-r--r--psi/zdevcal.c2
-rw-r--r--psi/zdevice.c2
-rw-r--r--psi/zdevice2.c2
-rw-r--r--psi/zdfilter.c2
-rw-r--r--psi/zdict.c2
-rw-r--r--psi/zdouble.c2
-rw-r--r--psi/zdps1.c2
-rw-r--r--psi/zdscpars.c2
-rw-r--r--psi/zfaes.c2
-rw-r--r--psi/zfapi.c1466
-rw-r--r--psi/zfarc4.c2
-rw-r--r--psi/zfbcp.c2
-rw-r--r--psi/zfcid.c2
-rw-r--r--psi/zfcid0.c2
-rw-r--r--psi/zfcid1.c2
-rw-r--r--psi/zfcmap.c2
-rw-r--r--psi/zfdctd.c2
-rw-r--r--psi/zfdcte.c2
-rw-r--r--psi/zfdecode.c2
-rw-r--r--psi/zfile.c3
-rw-r--r--psi/zfile.h2
-rw-r--r--psi/zfile1.c2
-rw-r--r--psi/zfileio.c2
-rw-r--r--psi/zfilter.c2
-rw-r--r--psi/zfilter2.c2
-rw-r--r--psi/zfimscale.c2
-rw-r--r--psi/zfjbig2.c2
-rw-r--r--psi/zfjpx.c2
-rw-r--r--psi/zfmd5.c2
-rw-r--r--psi/zfont.c9
-rw-r--r--psi/zfont0.c2
-rw-r--r--psi/zfont1.c2
-rw-r--r--psi/zfont2.c2
-rw-r--r--psi/zfont32.c2
-rw-r--r--psi/zfont42.c2
-rw-r--r--psi/zfontenum.c2
-rw-r--r--psi/zform.c2
-rw-r--r--psi/zfproc.c2
-rw-r--r--psi/zfrsd.c2
-rw-r--r--psi/zfrsd.h2
-rw-r--r--psi/zfsample.c4
-rw-r--r--psi/zfsha2.c2
-rw-r--r--psi/zfunc.c2
-rw-r--r--psi/zfunc.h2
-rw-r--r--psi/zfunc0.c2
-rw-r--r--psi/zfunc3.c2
-rw-r--r--psi/zfunc4.c4
-rw-r--r--psi/zfzlib.c2
-rw-r--r--psi/zgeneric.c2
-rw-r--r--psi/zgstate.c9
-rw-r--r--psi/zht.c2
-rw-r--r--psi/zht1.c2
-rw-r--r--psi/zht2.c16
-rw-r--r--psi/zht2.h4
-rw-r--r--psi/zicc.c8
-rw-r--r--psi/zicc.h2
-rw-r--r--psi/zimage.c2
-rw-r--r--psi/zimage3.c2
-rw-r--r--psi/ziodev.c9
-rw-r--r--psi/ziodev2.c2
-rw-r--r--psi/ziodevsc.c6
-rw-r--r--psi/zmath.c4
-rw-r--r--psi/zmatrix.c2
-rw-r--r--psi/zmedia2.c2
-rw-r--r--psi/zmisc.c2
-rw-r--r--psi/zmisc1.c2
-rw-r--r--psi/zmisc2.c2
-rw-r--r--psi/zmisc3.c2
-rw-r--r--psi/zncdummy.c2
-rw-r--r--psi/zpacked.c2
-rw-r--r--psi/zpaint.c2
-rw-r--r--psi/zpath.c2
-rw-r--r--psi/zpath1.c2
-rw-r--r--psi/zpcolor.c6
-rw-r--r--psi/zpdf_r6.c10
-rw-r--r--psi/zpdfops.c2
-rw-r--r--psi/zrelbit.c2
-rw-r--r--psi/zshade.c4
-rw-r--r--psi/zstack.c2
-rw-r--r--psi/zstring.c19
-rw-r--r--psi/zsysvm.c2
-rw-r--r--psi/ztoken.c2
-rw-r--r--psi/ztrans.c64
-rw-r--r--psi/ztrap.c2
-rw-r--r--psi/ztype.c23
-rw-r--r--psi/zupath.c2
-rw-r--r--psi/zusparam.c155
-rw-r--r--psi/zutf8.c2
-rw-r--r--psi/zvmem.c10
-rw-r--r--psi/zvmem2.c14
-rw-r--r--psi/zwinutf8.c2
-rw-r--r--toolbin/Acrobat2Tiff/Acrobat2Tiff.sln9
-rw-r--r--toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vb43
-rw-r--r--toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vbproj15
-rw-r--r--toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Application.Designer.vb2
-rw-r--r--toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Resources.Designer.vb27
-rw-r--r--toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Settings.Designer.vb55
-rw-r--r--toolbin/GenSubstCID.psbin5702 -> 5702 bytes
-rwxr-xr-xtoolbin/afmutil.py2
-rw-r--r--toolbin/bmpcmp.c456
-rw-r--r--toolbin/bmpcmp.sln15
-rw-r--r--toolbin/bmpcmp.vcproj454
-rw-r--r--toolbin/bmpcmp.vcxproj267
-rw-r--r--toolbin/build_bmpcmp.sh116
-rw-r--r--toolbin/color/icc_creator/ICC_Creator/CIELAB.h2
-rw-r--r--toolbin/color/icc_creator/ICC_Creator/ICC_Creator.cpp2
-rw-r--r--toolbin/color/icc_creator/ICC_Creator/ICC_Creator.h2
-rw-r--r--toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.cpp2
-rw-r--r--toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.h2
-rw-r--r--toolbin/color/icc_creator/ICC_Creator/icc_create.cpp2
-rw-r--r--toolbin/color/icc_creator/ICC_Creator/icc_create.h2
-rw-r--r--toolbin/color/icc_creator/README.txt2
-rw-r--r--toolbin/encs2c.ps4
-rwxr-xr-xtoolbin/errlist.tcl2
-rw-r--r--toolbin/extractFonts.ps2
-rw-r--r--toolbin/extractICCprofiles.ps2
-rw-r--r--toolbin/gen_ldf_jb2.py2
-rw-r--r--toolbin/genfontmap.ps2
-rwxr-xr-xtoolbin/gitlog2changelog.py6
-rwxr-xr-xtoolbin/gsmake.tcl2
-rw-r--r--toolbin/halftone/ETS/ipview.html8
-rw-r--r--toolbin/halftone/gen_ordered/gen_ordered_main.c2
-rw-r--r--toolbin/halftone/gen_stochastic/gen_stochastic.c2
-rwxr-xr-xtoolbin/headercompile.pl2
-rwxr-xr-xtoolbin/headers.tcl2
-rw-r--r--toolbin/jpxtopdf.c2
-rwxr-xr-xtoolbin/leaks.tcl2
-rwxr-xr-xtoolbin/localcluster/clusterpush.pl21
-rwxr-xr-xtoolbin/makehist.tcl2
-rwxr-xr-xtoolbin/memory.py2
-rwxr-xr-xtoolbin/ocheck.py13
-rwxr-xr-xtoolbin/pre.tcl2
-rwxr-xr-xtoolbin/precheck.tcl2
-rwxr-xr-xtoolbin/split_changelog.py2
-rwxr-xr-xtoolbin/squeeze2text.py1
-rwxr-xr-xtoolbin/suite.tcl2
-rwxr-xr-xtoolbin/tests/build_revision.py2
-rwxr-xr-xtoolbin/tests/check_all.py2
-rwxr-xr-xtoolbin/tests/check_comments.py2
-rwxr-xr-xtoolbin/tests/check_dirs.py2
-rwxr-xr-xtoolbin/tests/check_docrefs.py2
-rw-r--r--toolbin/tests/cmpi.py2
-rwxr-xr-xtoolbin/tests/compare_checksumdb.py2
-rwxr-xr-xtoolbin/tests/compare_checksums.py2
-rwxr-xr-xtoolbin/tests/dump_checksum.py2
-rwxr-xr-xtoolbin/tests/dump_checksum_plus.py2
-rwxr-xr-xtoolbin/tests/dump_checksum_raw.py2
-rw-r--r--toolbin/tests/fuzzy.c17
-rwxr-xr-xtoolbin/tests/get_baseline_log.py2
-rwxr-xr-xtoolbin/tests/get_baselines.py2
-rwxr-xr-xtoolbin/tests/gscheck_all.py2
-rwxr-xr-xtoolbin/tests/gscheck_fuzzypdf.py2
-rwxr-xr-xtoolbin/tests/gscheck_pdfwrite.py2
-rwxr-xr-xtoolbin/tests/gscheck_raster.py2
-rwxr-xr-xtoolbin/tests/gscheck_testfiles.py2
-rw-r--r--toolbin/tests/gsconf.py2
-rw-r--r--toolbin/tests/gsparamsets.py2
-rw-r--r--toolbin/tests/gssum.py2
-rw-r--r--toolbin/tests/gstestgs.py2
-rw-r--r--toolbin/tests/gstestutils.py2
-rw-r--r--toolbin/tests/gsutil.py2
-rwxr-xr-xtoolbin/tests/make_baselinedb.py2
-rwxr-xr-xtoolbin/tests/make_testdb.py2
-rwxr-xr-xtoolbin/tests/make_two_pdfversions2
-rwxr-xr-xtoolbin/tests/make_two_versions2
-rwxr-xr-xtoolbin/tests/myoptparse.py2
-rw-r--r--toolbin/tests/rasterdb.py2
-rwxr-xr-xtoolbin/tests/revert_baseline2
-rwxr-xr-xtoolbin/tests/revert_pdfbaseline2
-rwxr-xr-xtoolbin/tests/run_nightly.py2
-rwxr-xr-xtoolbin/tests/run_parallel2
-rwxr-xr-xtoolbin/tests/run_regression.py2
-rwxr-xr-xtoolbin/tests/testdiff.py2
-rwxr-xr-xtoolbin/tests/update_baseline.py2
-rwxr-xr-xtoolbin/tests/update_specific2
-rwxr-xr-xtoolbin/tmake.tcl2
-rw-r--r--windows/GhostPDL.sln1
-rw-r--r--windows/ghostscript.vcproj8
-rw-r--r--windows/ghostscript.vcxproj666
-rw-r--r--windows/ghostscript.vcxproj.filters2037
-rw-r--r--windows/ghostscript_rt.vcxproj2
1844 files changed, 75557 insertions, 34633 deletions
diff --git a/.lgtm.yml b/.lgtm.yml
new file mode 100644
index 00000000..97d679ef
--- /dev/null
+++ b/.lgtm.yml
@@ -0,0 +1,33 @@
+path_classifiers:
+ docs:
+ - docs
+ - examples
+
+ # Libraries that we maintain are explicitly given their own groups
+ # They will be checked, and will contribute to our error/warning counts,
+ # but we can easily enable/disable them in the web frontend.
+ openjpeg:
+ - openjpeg
+ lcms2mt:
+ - lcms2mt
+ jbig2dec:
+ - jbig2dec
+
+ # Other libraries that we take unchanged are listed here. These will
+ # be scanned, but won't contribute to our counts.
+ library:
+ - expat
+ - freetype
+ - jpeg
+ - jpegxr
+ - libpng
+ - tiff
+ - zlib
+
+ devices:
+ - devices
+ contrib:
+ - contrib
+ tools:
+ - toolbin
+ - pcl/tools
diff --git a/Makefile.in b/Makefile.in
index 0e5bd094..8fc446d6 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -418,7 +418,7 @@ CCAUXLD=$(CCAUX)
# Define the default gcc flags.
GCFLAGS=@CPPFLAGS@ @GCFLAGS@ @CFLAGS@ @HAVE_POPEN_PROTO@
-GCFLAGSAUX=@GCFLAGSAUX@ @HAVE_POPEN_PROTO@
+GCFLAGSAUX=@GCFLAGSAUX@ @CFLAGSAUX@ @HAVE_POPEN_PROTO@
# Define the added flags for standard, debugging, profiling
# and shared object builds.
@@ -462,6 +462,8 @@ DBUS_LIBS=@DBUS_LIBS@
# defines from autoconf; note that we don't use all of these at present.
ACDEFS=@DEFS@
+CFLAGS_VISIBILITY=@CFLAGS_VISIBILITY@
+
CFLAGS=$(CFLAGS_STANDARD) $(GCFLAGS) $(AC_CFLAGS) $(XCFLAGS) @CLUSTER_CFLAGS@
CFLAGSAUX=$(CFLAGSAUX_STANDARD) $(GCFLAGSAUX) $(XCFLAGSAUX)
@@ -506,7 +508,7 @@ AUXEXTRALIBS=@AUXEXTRALIBS@ @AUX_SHARED_ZLIB@
# All reasonable platforms require -lm, but Rhapsody and perhaps one or
# two others fold libm into libc and don't require any additional library.
-STDLIBS=@PTHREAD_LIBS@ -lm
+STDLIBS=@PTHREAD_LIBS@ -lm @TESSERACT_LIBS@
# Define the include switch(es) for the X11 header files.
# This can be null if handled in some other way (e.g., the files are
@@ -665,7 +667,7 @@ DEVICE_DEVS12=
DEVICE_DEVS13=
DEVICE_DEVS14=
DEVICE_DEVS15=
-DEVICE_DEVS16=
+DEVICE_DEVS16=@OCR_DEVS@
DEVICE_DEVS17=
DEVICE_DEVS18=
DEVICE_DEVS19=
@@ -718,6 +720,16 @@ LD_SET_DT_SONAME=@SET_DT_SONAME@
MAKEDIRS=@ORDER_ONLY@ directories
MAKEDIRSTOP=
+OCR_VERSION=@OCR_VERSION@
+LEPTONICADIR=@LEPTONICADIR@
+TESSAVX=@TESS_AVX@
+TESSAVX2=@TESS_AVX2@
+TESSFMA=@TESS_FMA@
+TESSSSE41=@TESS_SSE4_1@
+TESSNEON=@TESS_NEON@
+TESSCXXFLAGS=@TESS_CXXFLAGS@
+TESSERACTDIR=@TESSERACTDIR@
+
# ---------------- End of platform-specific section ---------------- #
INSTALL_CONTRIB=@INSTALL_CONTRIB@
@@ -752,6 +764,9 @@ include $(GLSRCDIR)/ldf_jb2.mak
include $(GLSRCDIR)/lwf_jp2.mak
include $(GLSRCDIR)/openjpeg.mak
include $(GLSRCDIR)/cal.mak
+@LEPTONICAINCLUDE@
+@TESSERACTINCLUDE@
+include $(GLSRCDIR)/ocr.mak
include $(GLSRCDIR)/jpegxr.mak
include $(GLSRCDIR)/expat.mak
@@ -761,7 +776,7 @@ include $(GLSRCDIR)/ijs.mak
@LCUPSINCLUDE@
@LCUPSIINCLUDE@
include $(DEVSRCDIR)/devs.mak
-include $(DEVSRCDIR)/contrib.mak
+include $(DEVSRCDIR)/dcontrib.mak
include $(GLSRCDIR)/unix-aux.mak
include $(GLSRCDIR)/unixlink.mak
include $(GLSRCDIR)/unix-dll.mak
diff --git a/Resource/CIDFont/ArtifexBullet b/Resource/CIDFont/ArtifexBullet
index ce579f06..18c98f16 100644
--- a/Resource/CIDFont/ArtifexBullet
+++ b/Resource/CIDFont/ArtifexBullet
Binary files differ
diff --git a/Resource/ColorSpace/DefaultCMYK b/Resource/ColorSpace/DefaultCMYK
index 44d6daba..cba9326c 100644
--- a/Resource/ColorSpace/DefaultCMYK
+++ b/Resource/ColorSpace/DefaultCMYK
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/ColorSpace/DefaultGray b/Resource/ColorSpace/DefaultGray
index d7b74f84..95c9ef41 100644
--- a/Resource/ColorSpace/DefaultGray
+++ b/Resource/ColorSpace/DefaultGray
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/ColorSpace/DefaultRGB b/Resource/ColorSpace/DefaultRGB
index 6e8808f8..53ddf3ea 100644
--- a/Resource/ColorSpace/DefaultRGB
+++ b/Resource/ColorSpace/DefaultRGB
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/ColorSpace/TrivialCMYK b/Resource/ColorSpace/TrivialCMYK
index 16794983..b3dec8b8 100644
--- a/Resource/ColorSpace/TrivialCMYK
+++ b/Resource/ColorSpace/TrivialCMYK
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/ColorSpace/sGray b/Resource/ColorSpace/sGray
index b8217357..a0997d0b 100644
--- a/Resource/ColorSpace/sGray
+++ b/Resource/ColorSpace/sGray
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/ColorSpace/sRGB b/Resource/ColorSpace/sRGB
index 95c6be73..16f3ecfa 100644
--- a/Resource/ColorSpace/sRGB
+++ b/Resource/ColorSpace/sRGB
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Decoding/FCO_Dingbats b/Resource/Decoding/FCO_Dingbats
index 412b6bc0..8da04509 100644
--- a/Resource/Decoding/FCO_Dingbats
+++ b/Resource/Decoding/FCO_Dingbats
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Decoding/FCO_Symbol b/Resource/Decoding/FCO_Symbol
index d12c81ed..c9411a03 100644
--- a/Resource/Decoding/FCO_Symbol
+++ b/Resource/Decoding/FCO_Symbol
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Decoding/FCO_Unicode b/Resource/Decoding/FCO_Unicode
index 5dd38cc2..4cdf58a5 100644
--- a/Resource/Decoding/FCO_Unicode
+++ b/Resource/Decoding/FCO_Unicode
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Decoding/FCO_Wingdings b/Resource/Decoding/FCO_Wingdings
index e3b7acb4..a31cefd8 100644
--- a/Resource/Decoding/FCO_Wingdings
+++ b/Resource/Decoding/FCO_Wingdings
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Decoding/Latin1 b/Resource/Decoding/Latin1
index eec0fbfd..8960ab4f 100644
--- a/Resource/Decoding/Latin1
+++ b/Resource/Decoding/Latin1
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Decoding/StandardEncoding b/Resource/Decoding/StandardEncoding
index c7775a25..f2b27a56 100644
--- a/Resource/Decoding/StandardEncoding
+++ b/Resource/Decoding/StandardEncoding
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Decoding/Unicode b/Resource/Decoding/Unicode
index 0e2e185f..7ecd3069 100644
--- a/Resource/Decoding/Unicode
+++ b/Resource/Decoding/Unicode
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Encoding/CEEncoding b/Resource/Encoding/CEEncoding
index b5d2cb8b..bd3f8abb 100644
--- a/Resource/Encoding/CEEncoding
+++ b/Resource/Encoding/CEEncoding
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Encoding/ExpertEncoding b/Resource/Encoding/ExpertEncoding
index ed6484db..fe879bda 100644
--- a/Resource/Encoding/ExpertEncoding
+++ b/Resource/Encoding/ExpertEncoding
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Encoding/ExpertSubsetEncoding b/Resource/Encoding/ExpertSubsetEncoding
index 836f79e1..6f789bc5 100644
--- a/Resource/Encoding/ExpertSubsetEncoding
+++ b/Resource/Encoding/ExpertSubsetEncoding
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Encoding/NotDefEncoding b/Resource/Encoding/NotDefEncoding
index aeb0de47..a5e0b8d3 100644
--- a/Resource/Encoding/NotDefEncoding
+++ b/Resource/Encoding/NotDefEncoding
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Encoding/Wingdings b/Resource/Encoding/Wingdings
index accbb48e..4a245571 100644
--- a/Resource/Encoding/Wingdings
+++ b/Resource/Encoding/Wingdings
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Font/NimbusSans-BoldItalic b/Resource/Font/NimbusSans-BoldItalic
index a031ac9c..dc1dad0a 100644
--- a/Resource/Font/NimbusSans-BoldItalic
+++ b/Resource/Font/NimbusSans-BoldItalic
Binary files differ
diff --git a/Resource/Font/NimbusSans-Italic b/Resource/Font/NimbusSans-Italic
index 989210f6..2fcec067 100644
--- a/Resource/Font/NimbusSans-Italic
+++ b/Resource/Font/NimbusSans-Italic
Binary files differ
diff --git a/Resource/Init/FCOfontmap-PCLPS2 b/Resource/Init/FCOfontmap-PCLPS2
index c54e61d1..91bd8f7f 100644
--- a/Resource/Init/FCOfontmap-PCLPS2
+++ b/Resource/Init/FCOfontmap-PCLPS2
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/Fontmap.GS b/Resource/Init/Fontmap.GS
index 9f6b6297..5f47b6b4 100644
--- a/Resource/Init/Fontmap.GS
+++ b/Resource/Init/Fontmap.GS
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_agl.ps b/Resource/Init/gs_agl.ps
index c30b631f..9c1c52d2 100644
--- a/Resource/Init/gs_agl.ps
+++ b/Resource/Init/gs_agl.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_btokn.ps b/Resource/Init/gs_btokn.ps
index b9add383..410b8419 100644
--- a/Resource/Init/gs_btokn.ps
+++ b/Resource/Init/gs_btokn.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -148,46 +148,36 @@ mark
% 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. The procedures for composite objects (arrays
-% and dictionaries) leave different results on the stack:
-% <#refs> <#chars> <simple_obj> -proc- <#refs> <#chars>
-% <#refs> <#chars> <array|dict> -proc- <array|dict> <#refs> <#chars>
-% This is required so that .writeobjects can also accumulate the actual
-% list of composite objects to write in the binary object sequence.
+% an object in binary form.
+% <#refs> <#chars> <obj> -proc- <#refs'> <#chars'>
/cntdict mark
/integertype /pop load
/realtype 1 index
/marktype 1 index
/nulltype 1 index
/booleantype 1 index
- /nametype { length add } bind
+ /nametype { length add } .bind
/stringtype 1 index
- /arraytype //null
- /dicttype //null
+ /arraytype 0 % replaced below
+ /dicttype 0 % replaced below
.dicttomark def
-/.cntobj { % <<arguments and results as for procedures in cntdict>>
+/.cntobj {
dup type //cntdict exch get exec
} .bind def
cntdict /arraytype {
- dup dup length 5 -1 roll add 4 2 roll { //.cntobj exec } forall
-} bind put
+ dup length % #refs #chars array len
+ 4 -1 roll add % #chars array #refs+len
+ dup 65536 gt {
+ /writeobject .systemvar /limitcheck signalerror
+ } if
+ 3 1 roll % #refs+len #chars array
+ //.cntobj forall
+} .bind put % replace arraytype in cntdict
+
cntdict /dicttype {
- WRITEDICTS {
- dup dup length 2 mul 5 -1 roll add 4 2 roll {
- % We have to use .execn here, rather than simply rolling the
- % value under the top elements, because key might involve arrays
- % or dictionaries.
- cvlit {//.cntobj exec} exch 2 .execn //.cntobj exec
- } forall
- } {
- /writeobject .systemvar /typecheck signalerror
- } ifelse
+ /writeobject .systemvar /typecheck signalerror
} bind put
-/w2dict mark
- /nametype { 2 copy .writecvs pop } bind
- /stringtype 1 index
-.dicttomark def
/.bosheader { % <top_length> <total_length> <string8> .bosheader
% <string4|8>
@@ -211,70 +201,74 @@ cntdict /dicttype {
} .bind def
/.writeobjects { % <file> <tag> <array> .writeobjects -
- mark exch
-
- % Count the space required for refs and strings.
+ % Apply the tag early and forget about it.
+ (12345678) dup 1 5 -1 roll % file array (...) (...) 1 tag
+ put exch % file (.t.) array
- dup length 0 3 -1 roll
- % Stack: file tag -mark- #refs #chars array
- dup 4 1 roll { //.cntobj exec } forall
+ % Calculate the space required for refs and strings.
+ % Reject excessively large graphs or graphs with loops.
+ 0 0 % file (.t.) array #refs #chars
+ 2 index //.cntobj exec % file (.t.) array #refs #chars
- % Write the header.
+ % Write the header.
+ 1 index 8 mul add % file (.t.) array #refs #refs*8+#chars
+ 2 index length exch (12345678) % file (.t.) array #refs len(array) #refs*8+#chars (...)
+ //.bosheader exec % file (.t.) array #refs (...)
+ 4 index exch writestring % file (.t.) array #refs
- % Stack: file tag -mark- array1 ... (array|dict)N #refs #chars
- counttomark 3 add -2 roll 4 1 roll
- % Stack: -mark- array1 ... (array|dict)N tag #refs #chars file
- dup counttomark 1 sub index length
- 4 index 3 bitshift 4 index add
- (xxxxxxxx) //.bosheader exec writestring
-
- % Write the objects per se.
-
- 3 1 roll pop
- counttomark 1 sub index length 3 bitshift exch
- 3 bitshift
- % Stack: -mark- array1 ... (array|dict)N tag file ref# char#
- counttomark 4 sub {
- counttomark -1 roll dup 6 1 roll
- % Stack: ... objN tag file ref# char# objN
- dup type /dicttype eq { % can't be first object
- { 5 1 roll (x\000xxxxxx) .bosobject
- 3 index exch writestring
- 4 -1 roll (x\000xxxxxx) .bosobject
- 3 index exch writestring
+ % Traverse an array tree in width-first order and place all the
+ % arrays that are found on the operand stack. Acyclic graphs are
+ % expanded to trees. The top parameter K indicates the number
+ % of arrays on a given depth level. At the root level, K is equal to 1.
+ mark 2 index 1 % file (.t.) array #refs -mark- array K
+ { dup 0 le { pop exit } if
+ dup {
+ dup index {
+ dup type /arraytype eq {
+ exch 1 add
+ } {
+ pop
+ } ifelse
} forall
- } {
- { (x\000xxxxxx) .bosobject
- dup 1 6 index put
- 3 index exch writestring
- 4 -1 roll pop 0 4 1 roll % clear tag
- } forall
- } ifelse
- } repeat
+ 1 sub
+ } repeat
+ } loop % file (.t.) array #refs -mark- array1 ... arrayN
+ counttomark 5 add -4 roll % -mark- array1 ... arrayN file (.t.) array #refs
- % Write the strings and names.
+ % Write the content of the root array
+ 8 mul % -mark- array1 ... arrayN file (.t.) array #refs*8
+ exch dup length 8 mul % -mark- array1 ... arrayN file (.t.) #refs*8 array len(array)*8
+ 3 1 roll % -mark- array1 ... arrayN file (.t.) len(array)*8 #refs*8 array
+ { 3 index % -mark- array1 ... arrayN file (.t.) len(array)*8 #refs*8 obj (.t.)
+ .bosobject % -mark- array1 ... arrayN file (.t.) len(array)*8 #refs*8 (.t.)
+ 4 index exch writestring % -mark- array1 ... arrayN file (.t.) len(array)*8 #refs*8
+ } forall
+ 3 -1 roll pop % -mark- array1 ... arrayN file len(array)*8 #refs*8
- 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
+ % Write the remaining arrays
+ counttomark 2 sub -1 3 {
+ index { % ... file #refs #str obj
+ (1\000345678) .bosobject % ... file #refs #str (...)
+ 3 index exch writestring % ... file #refs #str
} forall
- } repeat
+ } for
+ pop pop % -mark- array1 ... arrayN file
- % Clean up.
-
- % Stack: -mark- file
- pop pop
+ % Write strings and names.
+ counttomark 1 sub -1 1 {
+ index {
+ dup type /nametype eq {
+ .namestring
+ } if
+ dup type /stringtype eq {
+ 1 index exch writestring
+ } {
+ pop
+ } ifelse
+ } forall
+ } for
+ cleartomark % Clean up
} .bind def
/.writeobject {
@@ -324,7 +318,6 @@ cntdict /dicttype {
} bind def
currentdict /cntdict .undef
-currentdict /w2dict .undef
% End of level2dict
diff --git a/Resource/Init/gs_cff.ps b/Resource/Init/gs_cff.ps
index 99d214a6..6cfa1ec1 100644
--- a/Resource/Init/gs_cff.ps
+++ b/Resource/Init/gs_cff.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_cidcm.ps b/Resource/Init/gs_cidcm.ps
index 5ec2fa34..503ec867 100644
--- a/Resource/Init/gs_cidcm.ps
+++ b/Resource/Init/gs_cidcm.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_ciddc.ps b/Resource/Init/gs_ciddc.ps
index f0fb5d81..6cdba039 100644
--- a/Resource/Init/gs_ciddc.ps
+++ b/Resource/Init/gs_ciddc.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_cidfm.ps b/Resource/Init/gs_cidfm.ps
index e123bfc1..f22e45d6 100644
--- a/Resource/Init/gs_cidfm.ps
+++ b/Resource/Init/gs_cidfm.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_cidfn.ps b/Resource/Init/gs_cidfn.ps
index ca2a5a7c..20af1c87 100644
--- a/Resource/Init/gs_cidfn.ps
+++ b/Resource/Init/gs_cidfn.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_cidtt.ps b/Resource/Init/gs_cidtt.ps
index 12ade5e5..e045cfdd 100644
--- a/Resource/Init/gs_cidtt.ps
+++ b/Resource/Init/gs_cidtt.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_cmap.ps b/Resource/Init/gs_cmap.ps
index 2733ea3b..3252089a 100644
--- a/Resource/Init/gs_cmap.ps
+++ b/Resource/Init/gs_cmap.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_cspace.ps b/Resource/Init/gs_cspace.ps
index ff5955a9..8aaf6b74 100644
--- a/Resource/Init/gs_cspace.ps
+++ b/Resource/Init/gs_cspace.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_dbt_e.ps b/Resource/Init/gs_dbt_e.ps
index 01e3c824..2aca0c68 100644
--- a/Resource/Init/gs_dbt_e.ps
+++ b/Resource/Init/gs_dbt_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_diskn.ps b/Resource/Init/gs_diskn.ps
index d3402782..85ff07e3 100644
--- a/Resource/Init/gs_diskn.ps
+++ b/Resource/Init/gs_diskn.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_dps1.ps b/Resource/Init/gs_dps1.ps
index 7cf29b46..14cc5d6d 100644
--- a/Resource/Init/gs_dps1.ps
+++ b/Resource/Init/gs_dps1.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_dps2.ps b/Resource/Init/gs_dps2.ps
index 619984f2..2dfaaa49 100644
--- a/Resource/Init/gs_dps2.ps
+++ b/Resource/Init/gs_dps2.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_dscp.ps b/Resource/Init/gs_dscp.ps
index dad0ec30..15764b17 100644
--- a/Resource/Init/gs_dscp.ps
+++ b/Resource/Init/gs_dscp.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_epsf.ps b/Resource/Init/gs_epsf.ps
index b28f742e..cf020751 100644
--- a/Resource/Init/gs_epsf.ps
+++ b/Resource/Init/gs_epsf.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -59,41 +59,44 @@
% Rescale, translate and rotate to fit the BoundingBox on the page
/EPSBoundingBoxFitPage { % llx lly urx ury --
EPSDEBUG { (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
- % Figure out if rotate is needed.
+ clippath pathbbox newpath % ellx elly eurx eury pllx plly purx pury
- 1 index 4 index sub 1 index 4 index sub eq not {
- 1 index 4 index sub 1 index 4 index sub gt % bbox page-clipbox page-is-landscape
- 6 index 10 index sub 6 index 10 index sub gt % bbox page-clipbox page-is-landscape bbox-is-landscape
- xor
- }{
- //false
- }ifelse
- dup 10 1 roll % need-rotate compute need-rotate.
-
- % if we are rotating the contents, we need to also rotate the
- % bounding box of the content!
- {
- 8 -4 roll
- exch 4 -2 roll exch 4 2 roll
+ % Convert box corners to coordinates of the center and box sizes
+ 2 { % loop doing the page coordinates, the the EPS bbox coordinates
+ 3 -1 roll exch % ... llx urx lly ury
+ 2 { % loop doing Y then X coordnates
+ 2 copy exch sub % ... llx urx lly ury ury-lly
+ 3 1 roll % ... llx urx ury-lly lly ury
+ add 2 div % ... llx urx ury-lly (lly+ury)/2
+ 4 2 roll % ... ury-lly (lly+ury)/2 llx urx
+ } repeat
8 4 roll
+ } repeat
+ % edx, edy = EPS dimension X and Y, ecx, ecy = EPS Center X and Y.
+ % pdx and pcx, etc, are for the Page values.
+ % edx ecx edy ecy pdx pcx pdy pcy
+
+ % Move the origin to the center of the printable area.
+ 3 -1 roll exch % edx ecx edy ecy pdx pdy pcx pcy
+ translate % edx ecx edy ecy pdx pdy
+
+ % Find orientation of the best fit. Square pages or files don't rotate.
+ 2 copy sub % edx ecx edy ecy pdx pdy pdx-pdy
+ 6 index 5 index sub mul % edx ecx edy ecy pdx pdy (pdx-pdy)*(edx-edy)
+ 0 lt {
+ 90 rotate
+ exch
} if
- % stack: rotate-needed bbox page-clipbox
- % 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
- % Finally perform the rotate if needed.
- { clippath pathbbox pop 0 translate 90 rotate pop pop } if
+ % Scale to fit in the most restricting direction.
+ 4 -1 roll div % edx ecx ecy pdx pdy/edy
+ exch 5 -1 roll div % ecx ecy pdy/edy pdx/edx
+ //.min exec
+ dup scale % ecx ecy
+
+ % Center the document
+ neg exch neg exch translate
+
} bind executeonly odef
/EPSBoundingBoxProcess { % (llx lly urx ury) state --
diff --git a/Resource/Init/gs_fapi.ps b/Resource/Init/gs_fapi.ps
index 1ca3dff7..0b493c6a 100644
--- a/Resource/Init/gs_fapi.ps
+++ b/Resource/Init/gs_fapi.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_fntem.ps b/Resource/Init/gs_fntem.ps
index 66432e11..d5ac0bfa 100644
--- a/Resource/Init/gs_fntem.ps
+++ b/Resource/Init/gs_fntem.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_fonts.ps b/Resource/Init/gs_fonts.ps
index 204e2832..3f4f4af8 100644
--- a/Resource/Init/gs_fonts.ps
+++ b/Resource/Init/gs_fonts.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_frsd.ps b/Resource/Init/gs_frsd.ps
index c4ed1cb0..74c1dd27 100644
--- a/Resource/Init/gs_frsd.ps
+++ b/Resource/Init/gs_frsd.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_icc.ps b/Resource/Init/gs_icc.ps
index 6a4e88a0..fac0cb25 100644
--- a/Resource/Init/gs_icc.ps
+++ b/Resource/Init/gs_icc.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_il1_e.ps b/Resource/Init/gs_il1_e.ps
index 3de6ab5c..f8cfff04 100644
--- a/Resource/Init/gs_il1_e.ps
+++ b/Resource/Init/gs_il1_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_init.ps b/Resource/Init/gs_init.ps
index 05d01c21..849e24ef 100644
--- a/Resource/Init/gs_init.ps
+++ b/Resource/Init/gs_init.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -34,7 +34,7 @@
% Interpreter library version number
% NOTE: the interpreter code requires that the first non-comment token
% in this file be an integer, and that it match the compiled-in version!
-952
+9530
% Check the interpreter revision.
dup revision ne
@@ -276,9 +276,9 @@ userdict /=string 256 string put
(\)\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 ( )
+ revision 10 mod (.)
+ revision 1000 mod 10 idiv (.)
+ revision 1000 idiv ( )
product
counttomark
{ (%stdout) (w) file exch 0 .writecvp
diff --git a/Resource/Init/gs_lev2.ps b/Resource/Init/gs_lev2.ps
index 8c41aba0..fefa732b 100644
--- a/Resource/Init/gs_lev2.ps
+++ b/Resource/Init/gs_lev2.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_ll3.ps b/Resource/Init/gs_ll3.ps
index 6caa93f8..f6d98482 100644
--- a/Resource/Init/gs_ll3.ps
+++ b/Resource/Init/gs_ll3.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_mex_e.ps b/Resource/Init/gs_mex_e.ps
index 7b28360f..dda0675c 100644
--- a/Resource/Init/gs_mex_e.ps
+++ b/Resource/Init/gs_mex_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_mgl_e.ps b/Resource/Init/gs_mgl_e.ps
index 7c97efb9..e02729b1 100644
--- a/Resource/Init/gs_mgl_e.ps
+++ b/Resource/Init/gs_mgl_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_mro_e.ps b/Resource/Init/gs_mro_e.ps
index f3f15430..7d0e3b7c 100644
--- a/Resource/Init/gs_mro_e.ps
+++ b/Resource/Init/gs_mro_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_pdf_e.ps b/Resource/Init/gs_pdf_e.ps
index 382542ad..172cd72c 100644
--- a/Resource/Init/gs_pdf_e.ps
+++ b/Resource/Init/gs_pdf_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_pdfwr.ps b/Resource/Init/gs_pdfwr.ps
index ed691b9d..a53b8c3f 100644
--- a/Resource/Init/gs_pdfwr.ps
+++ b/Resource/Init/gs_pdfwr.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_res.ps b/Resource/Init/gs_res.ps
index 5559e6a9..18f63a30 100644
--- a/Resource/Init/gs_res.ps
+++ b/Resource/Init/gs_res.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_resmp.ps b/Resource/Init/gs_resmp.ps
index ba17df60..5ba4f43e 100644
--- a/Resource/Init/gs_resmp.ps
+++ b/Resource/Init/gs_resmp.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_setpd.ps b/Resource/Init/gs_setpd.ps
index 0733af0f..51b26899 100644
--- a/Resource/Init/gs_setpd.ps
+++ b/Resource/Init/gs_setpd.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_statd.ps b/Resource/Init/gs_statd.ps
index 3ea50eee..7b85ef0f 100644
--- a/Resource/Init/gs_statd.ps
+++ b/Resource/Init/gs_statd.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_std_e.ps b/Resource/Init/gs_std_e.ps
index f4ea79e3..4bfa6c5b 100644
--- a/Resource/Init/gs_std_e.ps
+++ b/Resource/Init/gs_std_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_sym_e.ps b/Resource/Init/gs_sym_e.ps
index b9abc86f..fb92a299 100644
--- a/Resource/Init/gs_sym_e.ps
+++ b/Resource/Init/gs_sym_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_trap.ps b/Resource/Init/gs_trap.ps
index 58c5888a..e4d6cafe 100644
--- a/Resource/Init/gs_trap.ps
+++ b/Resource/Init/gs_trap.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_ttf.ps b/Resource/Init/gs_ttf.ps
index 6be8fe99..394cba28 100644
--- a/Resource/Init/gs_ttf.ps
+++ b/Resource/Init/gs_ttf.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -1657,7 +1657,13 @@ currentdict /.pickcmap_with_no_xlatmap .undef
/CharStrings currentdict end
} .bind def
-% - .pdfcharkeys /CharStrings <charstrings> /Encoding <encoding>
+% If we're using a 1,0 cmap table, we need to store the table for the heuristic
+% to know whether to image or elide GID 0. See zfapi.c ps_get_glyphname_or_cid().
+% For other cmap types, we don't. Since this just pushes key/value pairs onto the
+% stack for a later dicttomark op, it doesn't matter that different branches can push
+% different numbers of objects.
+%
+% - .pdfcharkeys [/TT_cmap cmapdict] /CharStrings <charstrings> /Encoding <encoding>
/.pdfcharkeys {
% The following algorithms are per the PDF 1.7 Reference.
TTFDEBUG { (.pdfcharkeys beg) = } if
@@ -1736,12 +1742,13 @@ currentdict /.pickcmap_with_no_xlatmap .undef
} ifelse
} {
<00010000> //.findcmap exec {
+ /TT_cmap 1 index cmapdict 3 -1 roll
TTFDEBUG { (Using cmap 1.0 for non-symbolic.) = } if
prebuilt_encoding //null ne {
prebuilt_encoding .invert_encoding exch .romanmacdict //.pdfmapchars exec
prebuilt_encoding
} {
- 0 dict exch
+ 0 dict exch .romanmacdict //.pdfmapchars exec
/MacRomanEncodingForTrueType .findencoding
} ifelse
/Encoding exch
diff --git a/Resource/Init/gs_typ32.ps b/Resource/Init/gs_typ32.ps
index 9799a0be..2d5fc814 100644
--- a/Resource/Init/gs_typ32.ps
+++ b/Resource/Init/gs_typ32.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_typ42.ps b/Resource/Init/gs_typ42.ps
index ba5074ce..654a268c 100644
--- a/Resource/Init/gs_typ42.ps
+++ b/Resource/Init/gs_typ42.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_type1.ps b/Resource/Init/gs_type1.ps
index a039ccee..18488ebe 100644
--- a/Resource/Init/gs_type1.ps
+++ b/Resource/Init/gs_type1.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/gs_wan_e.ps b/Resource/Init/gs_wan_e.ps
index 406c7fae..5d3673cc 100644
--- a/Resource/Init/gs_wan_e.ps
+++ b/Resource/Init/gs_wan_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/Init/pdf_base.ps b/Resource/Init/pdf_base.ps
index 618e5e51..2cc18270 100644
--- a/Resource/Init/pdf_base.ps
+++ b/Resource/Init/pdf_base.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -288,9 +288,11 @@ currentdict /num-chars-dict .undef
% Execute a file, like .pdfrun, for a marking context.
% This temporarily rebinds LocalResources and DefaultQstate.
/.pdfruncontext { % <resdict> <file> <opdict> .pdfruncontext -
- /.pdfrun load LocalResources DefaultQstate
- /LocalResources 7 -1 roll
- dup /ParentResources LocalResources put % save the parent LocalResources
+ /.pdfrun load LocalResources DefaultQstate % res file op .pdfrun Loc Qst
+ /LocalResources 7 -1 roll % file op .pdfrun Loc Qst /Loc res
+ dup 4 index ne { % Ensure Loc != res to avoid self-referencing /ParentResources
+ dup /ParentResources 5 index put % save the parent LocalResources
+ } if
store % store new LocalResources
/DefaultQstate qstate store
3 .execn
@@ -487,7 +489,12 @@ currentdict /token_nofail_dict .undef
} if
oforce % but dereference {1 0 R}
dup type dup /arraytype eq exch /packedarraytype eq or {
- [ exch 2 index <<>> copy exch { safe_recursive exch } forall pop]
+ [ exch {
+ counttomark 1 add index <<>> copy % create a copy for the recursion
+ exch safe_recursive exch
+ pop % pop the dictionary created for this level
+ } forall
+ ]
} {
dup type /dicttype eq {
<< exch 2 index <<>> copy exch { 3 -1 roll exch safe_recursive 3 -1 roll oforce 3 1 roll exch } forall pop>>
diff --git a/Resource/Init/pdf_draw.ps b/Resource/Init/pdf_draw.ps
index 1deb0526..a93a526c 100644
--- a/Resource/Init/pdf_draw.ps
+++ b/Resource/Init/pdf_draw.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -749,7 +749,6 @@ def
/GroupGState .knownget { setgstate } if
newpath //null SMask
- 1 .setopacityalpha 1 .setshapealpha
1 CA 1 ca
/Compatible .setblendmode
% Execute the body of the Form, similar to DoForm.
@@ -874,7 +873,15 @@ currentdict /csncompdict undef
dup dup 1 oget
mark exch { oforce } forall .dicttomark
dup dup //true resolvestream
- /ReusableStreamDecode filter /DataSource exch put
+ {
+ /ReusableStreamDecode filter
+ } stopped
+ {
+ pop null
+% ( **** Error: Failed to read ICC profile for an ICCBased colour space.\n) pdfformaterror
+% ( Falling back to a colour space determined by the /N value.\n) pdfformaterror
+ }if
+ /DataSource exch put
dup /.hash 0 put % placeholder for use by seticc icc_profile_cache key
% Check that the number of components (/N) defined in the ICCBased
% dictionry matches the actual profile. Bug #696120
@@ -1470,7 +1477,7 @@ drawopdict begin
/sh {
OFFlevels length 0 eq {
- setfillstate resolvesh
+ setsmaskstate resolvesh
//sh_save 0 save put
PDFusingtransparency {
gsave
@@ -2284,7 +2291,6 @@ currentdict /last-ditch-bpc-csp undef
PDFfile fileposition exch
gsave //nodict begin
//null .setSMask
- 1 .setopacityalpha 1 .setshapealpha
1 CA 1 ca
/Compatible .setblendmode
DoImage
@@ -2303,11 +2309,10 @@ currentdict /last-ditch-bpc-csp undef
currentdict /SMask get /Matte known {/CS currentdict /ColorSpace get dup pdfopdict /cs get exec } if
>> 0 0 1 1
.begintransparencygroup
- .currentstrokeconstantalpha .currentfillconstantalpha .currentshapealpha .currentopacityalpha 5 -1 roll
+ .currentstrokeconstantalpha .currentfillconstantalpha 3 -1 roll
1 .setfillconstantalpha 1 .setstrokeconstantalpha
- 1 .setopacityalpha 1 .setshapealpha
doimage
- .setopacityalpha .setshapealpha .setfillconstantalpha .setstrokeconstantalpha
+ .setfillconstantalpha .setstrokeconstantalpha
.endtransparencygroup
% tell the compositor we're done with the SMask.
% Note that any SMask in the ExtGState should be reapplied
@@ -2320,10 +2325,10 @@ currentdict /last-ditch-bpc-csp undef
% the image doesn't have an SMask, but the ExtGState does, force a group.
<< /Subtype /Group /Isolated //true >> 0 0 1 1
.begintransparencygroup
- .currentstrokeconstantalpha .currentfillconstantalpha .currentshapealpha .currentopacityalpha 5 -1 roll
- 1 .setopacityalpha 1 .setshapealpha
+ .currentstrokeconstantalpha .currentfillconstantalpha 3 -1 roll
+ 1 .setfillconstantalpha 1 .setstrokeconstantalpha
doimage
- .setopacityalpha .setshapealpha .setfillconstantalpha .setstrokeconstantalpha
+ .setfillconstantalpha .setstrokeconstantalpha
.endtransparencygroup
} {
doimage
@@ -2410,8 +2415,8 @@ currentdict /last-ditch-bpc-csp undef
4 array astore grestore
/image
setup_trans
- { currentdict end setfillstate //true ValidateDecode { imagemask } }
- { ColorSpace setgcolorspace currentdict end setfillblend //false ValidateDecode { image } }
+ { currentdict end setsmaskstate //true ValidateDecode { imagemask } }
+ { ColorSpace setgcolorspace currentdict end setsmaskstate //false ValidateDecode { image } }
ifelse
PDFSTOPONERROR { exec //false } { stopped } ifelse {
dup type /dicttype eq { pop } if % Sometimes image fails to restore the stack
@@ -2446,7 +2451,7 @@ currentdict /last-ditch-bpc-csp undef
/.paintform { % <formdict> <resdict> <stream> .paintform -
1 index /FormResDict gput % For broken forms that inherit resources from the context.
- 3 -1 roll dup /Group known PDFusingtransparency and {
+ 3 -1 roll dup /Group oknown PDFusingtransparency and {
.paintgroupform
} {
pop pdfopdict .pdfruncontext
@@ -2630,7 +2635,27 @@ pdfdict
} forall
} if
- 3 index //false /resolvestream cvx
+ 3 index
+ % /Contents for the stream is not per the spec, but Acrobat handles it
+ dup /Contents knownoget
+ {
+ % We want to make it's a dictionary, and represents a stream
+ dup type /dicttype eq
+ {
+ dup /FilePosition known
+ {
+ PDFSTOPONERROR { /DoForm cvx /undefinedresource signalerror } if
+ ( **** Error: Invalid Form definition. Output may be incorrect.\n) pdfformaterror
+ exch pop
+ }
+ {pop} ifelse
+ }
+ {
+ pop
+ }
+ ifelse
+ }if
+ //false /resolvestream cvx
/.paintform cvx
] cvx /PaintProc exch put
% Adjust pdfemptycount since we have an extra dictionary on the stack
@@ -2668,6 +2693,38 @@ pdfdict
pop
/pdfemptycount exch store
+ % We've now seen Form XObjects leaving junk on the stack, so we
+ % can't assume that when we finish the form the stack will be restored
+ % nor can we assume that the junk won't include a 'mark' so we an't
+ % simply do a cleartomark. Instead clear the stack until we get back
+ % to a dictionary which contains /saved_DG. We can still get errors;
+ % if the stream removes too many objects from the stack we will end
+ % up with a stackunderflow, but there's nothing we can do about that.
+ dup type /dicttype eq not {
+ //true
+ } {
+ dup /saved_DG known {
+ //false
+ } {
+ //true
+ } ifelse
+ } ifelse
+ {
+ ( **** Error: Form stream left garbage on the stack, attempting to recover.\n) pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ {
+ dup type /dicttype eq not {
+ pop
+ } {
+ dup /saved_DG known {
+ exit
+ } {
+ pop
+ } ifelse
+ } ifelse
+ } loop
+ } if
+
%% Put back pre-existing Default* ColorSpace definitions.
dup type /dicttype eq {
begin
@@ -2816,7 +2873,7 @@ drawopdict begin
( Output may be incorrect.\n) pdfformaterror
currentdict /qTextSaveMatrix get setmatrix
} if
- setfillblend
+ setsmaskstate
PDFfile fileposition exch % pos /Name
% Bug #698226, Acrobat signals an error for recursive XObjects in a PDF file
@@ -3234,7 +3291,7 @@ end
{} 2 index /S knownoget {
/D eq { 2 index /D knownoget not { {3} } if exch pop } if
} if
- 3 index /CA knownoget {.setopacityalpha} if
+ 3 index /CA knownoget {dup .setstrokeconstantalpha .setfillconstantalpha} if
3 -1 roll pop
% 2 index annotsetcolor {
0 setdash setlinewidth stroke
@@ -3244,7 +3301,7 @@ end
% If element 3 of the /Border array is 0, then don't draw the border
dup 0 ne {
exch dup length 3 gt { 3 get } { pop {} } ifelse
- 3 index /CA knownoget {.setopacityalpha} if
+ 3 index /CA knownoget {dup .setstrokeconstantalpha .setfillconstantalpha} if
% 2 index annotsetcolor {
0 setdash setlinewidth stroke
% } if
@@ -3253,7 +3310,7 @@ end
} ifelse
} ifelse
} {
- 3 index /CA knownoget {.setopacityalpha} if
+ dup /CA knownoget {dup .setstrokeconstantalpha .setfillconstantalpha} if
1 {}
% 2 index annotsetcolor {
0 setdash setlinewidth stroke
@@ -3265,7 +3322,7 @@ end
/fillborderpath { % <annot> fillborderpath -
gsave
- dup /ca knownoget {.setopacityalpha} if
+ dup /ca knownoget {dup .setstrokeconstantalpha .setfillconstantalpha} if
annotsetinteriorcolor
{fill} if
grestore
@@ -3742,14 +3799,14 @@ currentdict /set_bc_color undef
annotsetinteriorcolor
{
gsave
- dup /ca knownoget {.setopacityalpha} if
+ dup /ca knownoget {dup .setstrokeconstantalpha .setfillconstantalpha} if
dup annotrect
5 index /RD knownoget {
applyRD
} if
rectfill
grestore
- dup /CA knownoget {.setopacityalpha} if
+ dup /CA knownoget {dup .setstrokeconstantalpha .setfillconstantalpha} if
dup annotsetcolor {
drawborder
} if
@@ -3851,10 +3908,10 @@ currentdict /set_bc_color undef
{
gsave
- dup /ca knownoget {.setopacityalpha} if
+ dup /ca knownoget {dup .setstrokeconstantalpha .setfillconstantalpha} if
fill
grestore
- dup /CA knownoget {.setopacityalpha} if
+ dup /CA knownoget {dup .setstrokeconstantalpha .setfillconstantalpha} if
dup annotsetcolor {
strokeborderpath
} if
@@ -3890,7 +3947,7 @@ currentdict /set_bc_color undef
dup 1 index exch lineto
dup neg lineto
closepath
- 1 index /CA knownoget {.setopacityalpha} if
+ 1 index /CA knownoget {dup .setstrokeconstantalpha .setfillconstantalpha} if
1 index fillborderpath
grestore
3 mul
@@ -3916,7 +3973,7 @@ currentdict /set_bc_color undef
2.5 mul dup
0 moveto
0 0 3 -1 roll 0 360 arc
- 1 index /CA knownoget {.setopacityalpha} if
+ 1 index /CA knownoget {dup .setstrokeconstantalpha .setfillconstantalpha} if
1 index fillborderpath
grestore
3 mul dup
@@ -3941,7 +3998,7 @@ currentdict /set_bc_color undef
dup 0 exch lineto
0 lineto
closepath
- 1 index /CA knownoget {.setopacityalpha} if
+ 1 index /CA knownoget {dup .setstrokeconstantalpha .setfillconstantalpha} if
1 index fillborderpath
grestore
3 mul
@@ -3991,7 +4048,7 @@ currentdict /set_bc_color undef
dup 2 div sub
dup 8.4 mul neg 1 index 5.9 mul neg moveto dup 1.2 div neg 0 lineto
dup 8.4 mul neg exch 5.9 mul lineto closepath
- dup /CA knownoget {.setopacityalpha} if
+ dup /CA knownoget {dup .setstrokeconstantalpha .setfillconstantalpha} if
fillborderpath
grestore
} bind executeonly def
@@ -4050,7 +4107,7 @@ currentdict /set_bc_color undef
dup 2 div sub
dup 8.4 mul neg 1 index 5.9 mul neg moveto dup 1.2 div neg 0 lineto
dup 8.4 mul neg exch 5.9 mul lineto closepath
- dup /CA knownoget {.setopacityalpha} if
+ dup /CA knownoget {dup .setstrokeconstantalpha .setfillconstantalpha} if
fillborderpath
grestore
} bind executeonly def
@@ -4090,7 +4147,7 @@ currentdict /set_bc_color undef
3 index aload pop 4 2 roll pop pop
translate
0 0 moveto
- atan % <annot> [x1 y1 x2 y2] [LE1 LE2]
+ {atan} stopped {pop pop 0} if % <annot> [x1 y1 x2 y2] [LE1 LE2]
rotate
dup 1 get % <annot> [x1 y1 x2 y2] [LE1 LE2] LE1
dup //LineEnd_dict exch known not
@@ -4109,7 +4166,7 @@ currentdict /set_bc_color undef
3 index aload pop pop pop
translate
0 0 moveto
- atan 180 add
+ {atan} stopped {pop pop 0} if 180 add
rotate
0 get dup //LineEnd_dict exch known not {pop /None} if //LineEnd_dict exch get 3 index exch exec
grestore
@@ -4137,15 +4194,16 @@ currentdict /set_bc_color undef
} {
gsave
//startannottransparency exec
+ dup annotsetcolor pop
dup /Vertices knownoget {
1 index /LE knownoget {
gsave
1 index 0 4 getinterval aload pop
4 2 roll
2 copy translate 4 2 roll
- 3 -1 roll sub % x1 x2 dy
- 3 1 roll exch sub % dy dx
- atan
+ 3 -1 roll exch sub % x1 x2 dy
+ 3 1 roll sub % dy dx
+ {atan} stopped {pop pop 0} if
rotate
dup 0 get dup //LineEnd_dict exch known not {pop /None} if //LineEnd_dict exch get 3 index exch exec
grestore
@@ -4155,7 +4213,7 @@ currentdict /set_bc_color undef
2 copy translate
3 -1 roll sub % x1 x2 dy
3 1 roll exch sub % dy dx
- atan
+ {atan} stopped {pop pop 0} if
rotate
1 get dup //LineEnd_dict exch known not {pop /None} if //LineEnd_dict exch get 3 index exch exec
grestore
@@ -4514,11 +4572,11 @@ currentdict /set_bc_color undef
dup annotrect rectclip
dup /CA knownoget {
- .setopacityalpha
+ dup .setstrokeconstantalpha .setfillconstantalpha
} if
dup /ca knownoget {
- .setopacityalpha
+ dup .setstrokeconstantalpha .setfillconstantalpha
} if
dup /C knownoget {
diff --git a/Resource/Init/pdf_font.ps b/Resource/Init/pdf_font.ps
index 60deb64e..98a9e3d4 100644
--- a/Resource/Init/pdf_font.ps
+++ b/Resource/Init/pdf_font.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -2422,9 +2422,25 @@ currentdict /CMap_read_dict undef
} 2 bndef
<01000401> % Type 1C
- { exch pop
- 1 index /Subtype knownoget dup { pop /CIDFontType0 eq } if {
- readCIDFontType0C
+ {
+ exch pop
+
+ 1 index /Subtype knownoget {
+ dup /CIDFontType2 eq{
+ pop
+ ( **** Error: Subtype of a Type 1 CID font is not /CIDFontType0\n) pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ 1 index /Subtype /CIDFontType0 put
+ readCIDFontType0C
+ }
+ {
+ /CIDFontType0 eq {
+ readCIDFontType0C
+ }
+ {
+ readType1C
+ } ifelse
+ } ifelse
} {
readType1C
} ifelse
diff --git a/Resource/Init/pdf_main.ps b/Resource/Init/pdf_main.ps
index 5cd90556..d7933700 100644
--- a/Resource/Init/pdf_main.ps
+++ b/Resource/Init/pdf_main.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -278,6 +278,16 @@ systemdict begin
} bind odef
currentdict /runpdfstring .undef
+/DisablePageHandlerDevice
+{
+ systemdict /FirstPage known
+ systemdict /LastPage known or
+ systemdict /Pagelist known or
+ {
+ <</DisablePageHandler //true>> setpagedevice
+ } if
+} bind def
+
/runpdfbegin { % <file> runpdfbegin -
userdict begin
% It turns out that the PDF interpreter uses memory more
@@ -300,6 +310,8 @@ currentdict /runpdfstring .undef
%% resources and needs this definition in place.
<</MaxOpStack -1>> setuserparams
+ //DisablePageHandlerDevice exec
+
0 setobjectformat
/Page# //null def
/Page //null def
@@ -311,8 +323,9 @@ currentdict /runpdfstring .undef
/CumulativePageCount currentpagedevice /PageCount get def
} bind executeonly def
+currentdict /DisablePageHandlerDevice undef
+
/runpdfpagerange { % - runpdfpagerange <firstpage#> <lastpage#>
-<</DisablePageHandler //true>> setpagedevice
/PortfolioPage where {
pop
PortfolioPage cvi dup pdfpagecount add % a b+1
@@ -321,8 +334,8 @@ currentdict /runpdfstring .undef
dup 3 index exch cvs pop % a b+1 /P (b+1)
store
1 sub % a b
- /FirstPage where { pop FirstPage <</DisablePageHandler //true>> setpagedevice} { 1 } ifelse
- /LastPage where { pop LastPage <</DisablePageHandler //true>> setpagedevice} {2000000000} ifelse % a b fp lp
+ /FirstPage where { pop FirstPage} { 1 } ifelse
+ /LastPage where { pop LastPage} {2000000000} ifelse % a b fp lp
2 index 2 index lt { % b < fp
1e10
} {
@@ -395,7 +408,6 @@ currentdict /runpdfstring .undef
pop
}
forall
- <</DisablePageHandler //true>> setpagedevice
/PDFPageList pdfpagecount 1 add array def
{
(,) search {
@@ -477,7 +489,6 @@ currentdict /runpdfstring .undef
1 pdfpagecount
}{
/FirstPage where {
- <</DisablePageHandler //true>> setpagedevice
pop FirstPage dup pdfpagecount gt {
(\nRequested FirstPage is greater than the number of pages in the file: ) print
pdfpagecount = flush
@@ -485,7 +496,7 @@ currentdict /runpdfstring .undef
} {
1
} ifelse
- /LastPage where {<</DisablePageHandler //true>> setpagedevice pop LastPage pdfpagecount .min } { pdfpagecount } ifelse
+ /LastPage where {pop LastPage pdfpagecount .min } { pdfpagecount } ifelse
1 index 1 index gt {
( No pages will be processed \(FirstPage > LastPage\).) = flush
} {
@@ -513,7 +524,12 @@ currentdict /runpdfstring .undef
{
dup /Page# exch store
QUIET not { (Page ) print dup //== exec flush } if
- pdfgetpage pdfshowpage
+ pdfgetpage
+ dup //null ne { pdfshowpage } {
+ ( **** Error: Page #) pdfformaterror Page# 10 string cvs pdfformaterror
+ ( not found.\n) pdfformaterror
+ /dopdfpages cvx /syntaxerror signalerror
+ } ifelse
}{
pop
}ifelse
@@ -538,6 +554,7 @@ currentdict /runpdfstring .undef
PDFTopSave restore
end % userdict
2 vmreclaim % couldn't hurt
+ <</DisablePageHandler //false>> setpagedevice
} bind executeonly def
% Copy stream to an external temporary file and
@@ -1879,7 +1896,7 @@ currentdict /xref-char-dict undef
parent_obj_get % not found -- check it's parent.
} ifelse
} {
- pop pop pop 0
+ pop pop 0
} ifelse
} bind executeonly def
@@ -2076,14 +2093,19 @@ currentdict /xref-char-dict undef
/pdffindpageref { % <int> pdffindpage <objref>
dup pdffindpage?
% 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
+ dup //null ne {
+ 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 % return the //null
+ }
ifelse
- exch pop
+ exch pop % pop the page number, return the object or null
} bind executeonly def
/pdffindpage { % <int> pdffindpage <pagedict>
pdffindpageref oforce
@@ -2751,7 +2773,7 @@ currentdict /PDF2PS_matrix_key undef
dup /PDFusingtransparency exch def {
% If the current device isn't CMYK, or if it is a device that (currently) supports transparency
% we don't need the special handling of Overprint transparency, so disable the checking.
- currentpagedevice dup /Colors get 4 lt
+ currentpagedevice dup /Colors get 4 lt 1 index /SimulateOverprint get not or
exch /HaveTransparency .knownget not { //false } if or
% device needs special Oveprint handling
/setup_trans exch
@@ -2900,6 +2922,7 @@ currentdict /PDF2PS_matrix_key undef
% Draw the annotations
//systemdict /ShowAnnots .knownget not { //true } if {
/Annots knownoget {
+ dup type /arraytype eq {
{
/AnnotDrawCheck exch % marker to clean up stack on error
{oforce} stopped
@@ -2936,6 +2959,12 @@ currentdict /PDF2PS_matrix_key undef
} ifelse
} ifelse
} forall
+ }
+ {
+ ( **** Error: Annotation array is not an array, ignoring it.\n) pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ pop
+ } ifelse
} if
} if
//systemdict /ShowAcroForm .knownget { //true eq } { //false } ifelse {
@@ -3119,48 +3148,56 @@ currentdict /PDF2PS_matrix_key undef
/annotsusetransparency { % <page dict> annotsusetransparency <bool>
//false exch % Assume no transparency
/Annots knownoget { % Get Annots array
+ dup type /arraytype eq {
+ {
+ /AnnotTransparencyCheck exch % marker to clean up stack on error
+ {oforce} stopped
+ {
+ ( **** Error: Unable to check an annotation for use of transparency.\n) pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ count -1 0 { % make sure we don't go past the top of the stack
+ pop % remove the counter
+ /AnnotTransparencyCheck eq {exit} if % remove object and check if its the marker, exit if it is
+ } for
+ }
+ {
+ exch pop % remove the 'on error' marker
+ dup //null ne {
+ dup /Subtype knownoget {
+ /Highlight eq { % Highlight annotation is always implemented
+ pop pop //true exit % as transparency.
+ } if
+ } if
+ dup /AP knownoget { % Get appearance dict for the annoation
+ /N knownogetdict { % Get the /N (i.e. normal) appearance stream
+ 4 dict exch resourceusestransparency { pop pop //true exit } if
+ } if
+ } if % If AP dict known
+ dup /BM knownoget {
+ pop pop pop //true exit
+ } if
+ dup /CA knownoget {
+ 1 le {
+ pop pop //true exit
+ } if
+ } if
+ /ca knownoget {
+ 1 le {
+ pop //true exit
+ } if
+ } if
+ } {
+ pop
+ } ifelse
+ } ifelse
+ } forall % For all annots on the page
+ }
{
- /AnnotTransparencyCheck exch % marker to clean up stack on error
- {oforce} stopped
- {
- ( **** Error: Unable to check an annotation for use of transparency.\n) pdfformaterror
- ( Output may be incorrect.\n) pdfformaterror
- count -1 0 { % make sure we don't go past the top of the stack
- pop % remove the counter
- /AnnotTransparencyCheck eq {exit} if % remove object and check if its the marker, exit if it is
- } for
- }
- {
- exch pop % remove the 'on error' marker
- dup //null ne {
- dup /Subtype knownoget {
- /Highlight eq { % Highlight annotation is always implemented
- pop pop //true exit % as transparency.
- } if
- } if
- dup /AP knownoget { % Get appearance dict for the annoation
- /N knownogetdict { % Get the /N (i.e. normal) appearance stream
- 4 dict exch resourceusestransparency { pop pop //true exit } if
- } if
- } if % If AP dict known
- dup /BM knownoget {
- //true exit
- } if
- dup /CA knownoget {
- 1 le {
- pop pop //true exit
- } if
- } if
- /ca knownoget {
- 1 le {
- pop //true exit
- } if
- } if
- } {
- pop
- } ifelse
- } ifelse
- } forall % For all annots on the page
+ ( **** Error: Annotation array is not an array, ignoring it.\n) pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ pop
+ }
+ ifelse
} if
} bind executeonly def
@@ -3277,17 +3314,24 @@ currentdict /PDF2PS_matrix_key undef
% <spotcolordict> <loopdict> <annotsarray>
% annotsspotcolors <spotcolordict> <loopdict>
/annotsspotcolors {
- { oforce
- dup //null ne {
- /AP knownoget { % Get appearance dict for the annoation
- /N knownogetdict { % Get the /N (i.e. normal) appearance stream
- resourcespotcolors
- } if % If normal appearance streamknown
- } if % If AP dict known
- } {
- pop
- } ifelse
- } forall
+ dup type /arraytype eq {
+ { oforce
+ dup //null ne {
+ /AP knownoget { % Get appearance dict for the annoation
+ /N knownogetdict { % Get the /N (i.e. normal) appearance stream
+ resourcespotcolors
+ } if % If normal appearance streamknown
+ } if % If AP dict known
+ } {
+ pop
+ } ifelse
+ } forall
+ }
+ {
+ ( **** Error: Annotation array is not an array, ignoring it.\n) pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ pop
+ } ifelse
} bind executeonly def
% Determine spot colors are used within a page. We are creating a dict to
@@ -3311,6 +3355,7 @@ currentdict /PDF2PS_matrix_key undef
{
/Parent knownoget
{
+ dup /Pages known not { pop exit } if % not a valid Page Tree ancestor
dup 4 1 roll
resourcespotcolors
3 -1 roll
@@ -3603,6 +3648,43 @@ currentdict /PDF2PS_matrix_key undef
} bind executeonly def
end % pdfdict
+
+
+systemdict /ALLOWPSTRANSPARENCY get
+{
+ /.setopacityalpha
+ {
+ /.setfillconstantalpha where
+ {
+ pop
+ ( **** WARNING: .setopacityalpha is deprecated (as of 9.53.0) and will be removed in a future release\n) print
+ ( **** See .setfillconstantalpha/.setalphaisshape for the improved solution\n) print flush
+ false .setalphaisshape
+ dup .setfillconstantalpha
+ .setstrokeconstantalpha
+ }
+ {
+ /.setopacityalpha /undefined cvx signalerror
+ } ifelse
+ } bind def
+
+ /.setshapealpha
+ {
+ /.setfillconstantalpha where
+ {
+ pop
+ ( **** WARNING: .setshapealpha is deprecated (as of 9.53.0) and will be removed in a future release.\n) print
+ ( **** See .setfillconstantalpha/.setalphaisshape for the improved solution\n) print flush
+ true .setalphaisshape
+ dup .setfillconstantalpha
+ .setstrokeconstantalpha
+ }
+ {
+ /.setshapealpha /undefined cvx signalerror
+ } ifelse
+ } bind def
+} if
+
.setglobal
%% This list of operators are used internally by various parts of the Ghostscript PDF interpreter.
@@ -3626,21 +3708,15 @@ end % pdfdict
] systemdict .undefinternalnames
% The following are split out allowing control via ALLOWPSTRANSPARENCY command line param
+% The examples/transparency_example.ps uses some of these (on the first line).
[
- /.currentblendmode /.currentopacityalpha /.currentshapealpha /.currenttextknockout /.begintransparencytextgroup
+ /.pushpdf14devicefilter /.poppdf14devicefilter /.setstrokeconstantalpha /.setfillconstantalpha /.endtransparencygroup
+ /.currentblendmode /.currenttextknockout /.begintransparencytextgroup
/.endtransparencytextgroup /.begintransparencymaskgroup /.begintransparencymaskimage /.begintransparencypagegroup
- /.endtransparencymask /.image3x /.abortpdf14devicefilter /.setfillconstantalpha /.setalphaisshape /.currentalphaisshape
-
- % Used by our own test suite files
- %/.pushpdf14devicefilter % transparency-example.ps
- %/.poppdf14devicefilter % transparency-example.ps
- %/.setopacityalpha % transparency-example.ps
- %/.setshapealpha % transparency-example.ps
- %/.endtransparencygroup % transparency-example.ps
-
+ /.endtransparencymask /.image3x /.abortpdf14devicefilter /.setstrokeconstantalpha /.setfillconstantalpha /.setalphaisshape /.currentalphaisshape
% undefining these causes errors/incorrect output
%/.setblendmode /.begintransparencygroup /.settextknockout /.setstrokeoverprint /.setfilloverprint
%/.currentstrokeoverprint /.currentfilloverprint /.currentfillconstantalpha /.currentstrokeconstantalpha
- %/.setstrokeconstantalpha /.setfillconstantalpha /.setSMask /.currentSMask
+ %/.setSMask /.currentSMask
] systemdict dup /ALLOWPSTRANSPARENCY get {pop pop}{.undefinternalnames}ifelse
diff --git a/Resource/Init/pdf_ops.ps b/Resource/Init/pdf_ops.ps
index eb2168a5..47ff512d 100644
--- a/Resource/Init/pdf_ops.ps
+++ b/Resource/Init/pdf_ops.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -304,7 +304,6 @@ currentdict /gput_always_allow .undef
4 2 roll
//CSdict exch get exec exch .setfillcolorspace exec {.setfillcolor} stopped
{
- (error) == flush
cleartomark
[//null /DeviceGray //null /DeviceRGB /DeviceCMYK] exch
{get} stopped
@@ -483,19 +482,19 @@ currentdict /gput_always_allow .undef
% ---------------- Color installation ---------------- %
% Establish a given color (and color space) as current.
-/.settransparencyparams { % <alpha> <smask> .settransparencyparams -
+/.settransparencyparams { % <smask> .settransparencyparams -
PDFusingtransparency {
.currentalphaisshape
{
- 1 .setopacityalpha exch .setshapealpha 1
+ 1
} {
- 1 .setshapealpha exch .setopacityalpha 0
+ 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
+ pop
} ifelse
} bind executeonly def
/.settransparencymask { % <paramdict> <masknum> .settransparencymask -
@@ -517,16 +516,7 @@ currentdict /gput_always_allow .undef
} ifelse
} ifelse
} bind executeonly def
-% (Non-mask) images must execute setfillblend.
-/setfillblend {
- .currentfillconstantalpha
- .currentSMask .settransparencyparams
-} bind executeonly def
-/setfillstate {
- setfillblend
-} bind executeonly def
-/setstrokestate {
- .currentstrokeconstantalpha
+/setsmaskstate {
.currentSMask .settransparencyparams
} bind executeonly def
/Cdict 15 dict dup begin % <color...> <colorspace> -proc- -
@@ -673,12 +663,12 @@ end def
} ifelse
} bind executeonly def
-/OPsaveDstack 6 dict def % for GroupPushed, saveOP, saveSA, saveBM
+/OPsaveDstack 6 dict def % for GroupPushed, saveOP, saveFillAlpha, saveBM
//OPsaveDstack begin
/GroupPushed //false def
/ChangeBM //false def
- /saveOA 1 def
- /saveSA 1 def
+ /saveStrokeAlpha 1 def
+ /saveFillAlpha 1 def
/saveBM /Normal def
/previous 1 dict def % for nested setup_trans levels
end
@@ -694,7 +684,7 @@ end
/okOPcs mark /DeviceGray 0 /DeviceCMYK 1 /DeviceN 2 /Separation 3 .dicttomark def
% Take care of pushing a transparency group if we need it for SMask or for Overprint..
-% After pushing the group, we save the opacityalpha and shapealpha and change them
+% After pushing the group, we save the ca and CA and change them
% both to 1. For overprint if the colorspace is acceptable, also change to
% CompatibleOverprint if the device needs it.
@@ -721,10 +711,10 @@ end
mark /Subtype /Group /Isolated .currentSMask //null ne .dicttomark
2 index aload pop % pathbbox
.begintransparencygroup
- % After group pushed, set opacityalpha, shapealpha and blendmode
- /saveOA .currentopacityalpha def
- /saveSA .currentshapealpha def
- 1 .setopacityalpha 1 .setshapealpha
+ % After group pushed, set alphas and blendmode
+ /saveStrokeAlpha .currentstrokeconstantalpha def
+ /saveFillAlpha .currentfillconstantalpha def
+ 1 .setfillconstantalpha 1 .setstrokeconstantalpha
/GroupPushed //true def
} {
/GroupPushed //false def
@@ -748,10 +738,10 @@ end
mark /Subtype /Group /Isolated //true .dicttomark
2 index aload pop % pathbbox
.begintransparencygroup
- % After group pushed, set opacityalpha, shapealpha and blendmode
- /saveOA .currentopacityalpha def
- /saveSA .currentshapealpha def
- 1 .setopacityalpha 1 .setshapealpha
+ % After group pushed, set alphas and blendmode
+ /saveStrokeAlpha .currentstrokeconstantalpha def
+ /saveFillAlpha .currentfillconstantalpha def
+ 1 .setfillconstantalpha 1 .setstrokeconstantalpha
/GroupPushed //true def
} {
/GroupPushed //false def
@@ -766,9 +756,9 @@ end
/teardown_trans {
//OPsaveDstack begin
GroupPushed {
- % pop the group, then restore the opacityalpha and shapealpha
+ % pop the group, then restore the alphas
.endtransparencygroup % end the group
- saveOA .setopacityalpha saveSA .setshapealpha
+ saveStrokeAlpha .setstrokeconstantalpha saveFillAlpha .setfillconstantalpha
} if
% Also, if we changed the BM, restore it (AFTER the group was popped)
.currentblendmode /CompatibleOverprint eq {
@@ -904,7 +894,7 @@ currentdict dup /Dpush .undef /Dpop .undef
/S {
OFFlevels length 0 eq {
- setstrokestate .swapcolors /stroke fsexec .swapcolors
+ setsmaskstate .swapcolors /stroke fsexec .swapcolors
} {
newpath
} ifelse
@@ -912,7 +902,7 @@ currentdict dup /Dpush .undef /Dpop .undef
/f {
OFFlevels length 0 eq {
- setfillstate /fill fsexec
+ setsmaskstate /fill fsexec
} {
newpath
} ifelse
@@ -920,7 +910,7 @@ currentdict dup /Dpush .undef /Dpop .undef
/f* {
OFFlevels length 0 eq {
- setfillstate /eofill fsexec
+ setsmaskstate /eofill fsexec
} {
newpath
} ifelse
@@ -932,7 +922,7 @@ currentdict dup /Dpush .undef /Dpop .undef
/B {
OFFlevels length 0 eq {
- setstrokestate setfillstate /.fillstroke fsexec
+ setsmaskstate /.fillstroke fsexec
} {
newpath
} ifelse
@@ -942,7 +932,7 @@ currentdict dup /Dpush .undef /Dpop .undef
/B* {
OFFlevels length 0 eq {
- setstrokestate setfillstate /.eofillstroke fsexec
+ setsmaskstate /.eofillstroke fsexec
} {
newpath
} ifelse
@@ -953,9 +943,9 @@ currentdict dup /Dpush .undef /Dpop .undef
% Clipping:
/Wdict 8 dict dup begin
-/S { OFFlevels length 0 eq { gsave setstrokestate .swapcolors stroke .swapcolors grestore } if n } bind executeonly def
-/f { OFFlevels length 0 eq { gsave setfillstate fill grestore } if n } bind executeonly def
-/f* { OFFlevels length 0 eq { gsave setfillstate eofill grestore } if n } bind executeonly def
+/S { OFFlevels length 0 eq { gsave setsmaskstate .swapcolors stroke .swapcolors grestore } if n } bind executeonly def
+/f { OFFlevels length 0 eq { gsave setsmaskstate fill grestore } if n } bind executeonly def
+/f* { OFFlevels length 0 eq { gsave setsmaskstate eofill grestore } if n } bind executeonly def
/B {
OFFlevels length 0 eq {
.fillstroke
@@ -1154,7 +1144,7 @@ end readonly def
%% can come into pdf_text_begin with an opacity not equal to 1.
PDFusingtransparency .currenttextknockout and
currentdict /illegal_BT get not and
-{
+ {
.begintransparencytextgroup
} if
@@ -1205,7 +1195,17 @@ currentdict /clip_if_required .undef
} if
} bind executeonly def
-/Tc { .settextspacing { showfirst } /Show gput } bind executeonly def
+/Tc {
+ {.settextspacing} stopped
+ {
+ (\n **** Error: A ) pdfformaterror
+ $error /errorname get 256 string cvs pdfformaterror
+ ( error occured while setting the Text Character spacing to ) pdfformaterror
+ 256 string cvs pdfformaterror
+ (\n Output may be incorrect.\n) pdfformaterror
+ } if
+ { showfirst } /Show gput
+} bind executeonly def
/TL { .settextleading } bind executeonly def
/Tr { .settextrenderingmode { showfirst } /Show gput } bind executeonly def
/Ts { .settextrise settextstate } bind executeonly def
@@ -1328,10 +1328,10 @@ currentdict /clip_if_required .undef
{ % 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
- not { 3 copy put } if pop pop
- }
+ { % Stack: changed newfont key value
+ 1 index /FID eq
+ not { 3 copy put } if pop pop
+ }
forall exch
}
if pop
@@ -1471,9 +1471,9 @@ currentdict /clip_if_required .undef
/pdfwrite_textrenderingprocs [
% Tr 0 - Fill
- { setfillstate show } bind executeonly
+ { setsmaskstate show } bind executeonly
% Tr 1 - Stroke
- { currentlinewidth exch setstrokestate
+ { currentlinewidth exch setsmaskstate
% Need to set the stroke width to a value which gives the correct
% width under pdfwrite. Pdfwrite uses (in text mode) an identity
% CTM, so we need to calculate the stroke width which would result
@@ -1493,7 +1493,7 @@ currentdict /clip_if_required .undef
}ifelse setlinewidth
show setlinewidth} bind executeonly
% Tr 2 - Fill then Stroke
- { currentlinewidth exch setstrokestate
+ { currentlinewidth exch setsmaskstate
% Need to set the stroke width to a value which gives the correct
% width under pdfwrite. Pdfwrite uses (in text mode) an identity
% CTM, so we need to calculate the stroke width which would result
@@ -1511,9 +1511,9 @@ currentdict /clip_if_required .undef
% we can ignore it. (wrong answer, but consistent)
pop pop currentlinewidth
}ifelse setlinewidth
- setfillstate show setlinewidth} bind executeonly
+ setsmaskstate show setlinewidth} bind executeonly
% Tr 3 - Neither fill nor stroke
- { setfillstate show } bind executeonly
+ { setsmaskstate show } bind executeonly
%
% pdfwrite emits all text inside a gsave/grestore pair. As
% a result we can't preserve any of the 'clip' modes, as the
@@ -1522,7 +1522,7 @@ currentdict /clip_if_required .undef
%
% Tr 4 - Fill, add to clip
{ gsave 0 .settextrenderingmode
- setfillstate dup show grestore //true charpath } bind executeonly
+ setsmaskstate dup show grestore //true charpath } bind executeonly
% Tr 5 - Stroke, add to clip
{ gsave 1 .settextrenderingmode
currentlinewidth dup
@@ -1534,7 +1534,7 @@ currentdict /clip_if_required .undef
% we can ignore it. (wrong answer, but consistent)
pop pop currentlinewidth
}ifelse setlinewidth
- setstrokestate dup show grestore
+ setsmaskstate dup show grestore
//true charpath} bind executeonly
% Tr 6 - Fill, stroke, add to clip
{ gsave 2 .settextrenderingmode
@@ -1551,7 +1551,7 @@ currentdict /clip_if_required .undef
% we can ignore it. (wrong answer, but consistent)
pop pop currentlinewidth
}ifelse setlinewidth
- setstrokestate setfillstate dup show grestore
+ setsmaskstate dup show grestore
//true charpath} bind executeonly
% Tr 7 - Add to clip
{ //true charpath} bind executeonly
@@ -1567,7 +1567,7 @@ currentdict /clip_if_required .undef
{
.currenttextrenderingmode 1 eq .currenttextrenderingmode 2 eq or
.currenttextrenderingmode 5 eq .currenttextrenderingmode 6 eq or or {
- setstrokestate
+ setsmaskstate
% Need to set the stroke width to a value which gives the correct
% width under pdfwrite. Pdfwrite uses (in text mode) an identity
% CTM, so we need to calculate the stroke width which would result
@@ -1589,7 +1589,7 @@ currentdict /clip_if_required .undef
% conditionally set fillstate to avoid multiple operations during text operators
/settextfillstate {
- TextFillStateNeeded { setfillstate //false /TextFillStateNeeded gput } if
+ TextFillStateNeeded { setsmaskstate //false /TextFillStateNeeded gput } if
} bind executeonly def
% If current path is not known to be valid, use the clip path
@@ -1786,7 +1786,7 @@ currentdict /clip_if_required .undef
% correctly.
gsave .currenttextrenderingmode 4 sub .settextrenderingmode
setstrokeforTrpreservation
- setstrokestate settextfillstate //false TextTransSetup dup show grestore TextTransTeardown } if
+ setsmaskstate settextfillstate //false TextTransSetup dup show grestore TextTransTeardown } if
//false charpath
3 copy 32 eq { add } { exch pop } ifelse
% Stack: str wthis xorig yorig wword wchar ccode wextra
@@ -1873,7 +1873,7 @@ currentdict /clip_if_required .undef
}
{
.currentPDFfontsize 0 eq not {
- setstrokestate //true TextTransSetup
+ setsmaskstate //true TextTransSetup
currentpoint //Tmatrix currentmatrix TextSaveMatrix setmatrix
currentdict /qTextSaveMatrix known {qTextSaveMatrix setmatrix} if
.swapcolors stroke TextTransTeardown .swapcolors
@@ -1885,24 +1885,29 @@ currentdict /clip_if_required .undef
% Handle transparency the same as /B operator
/tB {
- PDFusingtransparency {
- % knockout trans group around the filled and stroked object
- mark
- /Isolated //true /Knockout //true
- .dicttomark
- 1 .setopacityalpha
- % While text will always have a currentpoint, strokepath seems to mess with it.
- % we get the currentpoint, then use moveto to restore it for pathbbox
- { gsave currentpoint strokepath moveto pathbbox } stopped grestore {
- /tB cvx /undefinedresult signalerror
- } if
- .begintransparencygroup
- gsave tf grestore tS
- .endtransparencygroup
- } {
- gsave tf grestore tS
- } ifelse
- //true /TextFillStateNeeded gput
+ % Type 3 fonts don't honour text rendering modes, see note on p401 of the 1.7 PDF Reference
+ currentfont /FontType get 3 eq
+ {
+ settextfillstate //true TextTransSetup currentpoint fill TextTransTeardown moveto
+ }
+ {
+ % Don't try to draw text when the point size is 0
+ .currentPDFfontsize 0 eq not {
+ setsmaskstate settextfillstate
+ % While text will always have a currentpoint, strokepath seems to mess with it.
+ % we get the currentpoint, then use moveto to restore it.
+ currentpoint
+
+ % For stroking characters, temporarily restore the graphics CTM so that
+ % the line width will be transformed properly.
+ //Tmatrix currentmatrix TextSaveMatrix setmatrix
+ currentdict /qTextSaveMatrix known {qTextSaveMatrix setmatrix} if
+ B
+ setmatrix
+ moveto
+ } if
+ } ifelse
+ //true /TextFillStateNeeded gput
} bind executeonly def
% This does the wrong thing if there have been multiple text operations
diff --git a/Resource/Init/pdf_rbld.ps b/Resource/Init/pdf_rbld.ps
index b018c5c7..037f10b7 100644
--- a/Resource/Init/pdf_rbld.ps
+++ b/Resource/Init/pdf_rbld.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -444,7 +444,7 @@
pdfformaterror
( **** The file has been damaged. This may have been caused\n)
pdfformaterror
- ( **** by a problem while converting or transfering the file.\n)
+ ( **** by a problem while converting or transferring the file.\n)
pdfformaterror
( **** Ghostscript will attempt to recover the data.\n)
pdfformaterror
diff --git a/Resource/Init/pdf_sec.ps b/Resource/Init/pdf_sec.ps
index 0f77e556..b6f2bfce 100644
--- a/Resource/Init/pdf_sec.ps
+++ b/Resource/Init/pdf_sec.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -454,6 +454,63 @@ systemdict /check_r6_password .forceundef
printProducer
/pdf_process_Encrypt cvx /undefined signalerror
} if
+
+ % Bug 702598: We can have a trailer dictionary with an /Encrypt entry, and if the
+ % Encrypt dictionary is V 4 or greater we can (should ?) have StrF and stmF entries.
+ %
+ % The code below checks for the existence of StmF and StrF entries. Its possible
+ % that both may be /Identity (which means no encryption) in which case we don't need to check
+ % the password, as we won't need to decrypt any streams or strings. Note that the dict may still
+ % have a non-Identity /EFF (embedded files) key, but Ghostscript doesn't process embedded
+ % files so we don't have to worry about that.
+ Trailer /Encrypt oget dup
+ /V get 4 ge {
+ % NB: Entries in the Encrypt dictionary cannot be indirect references
+ dup /StmF .knownget {
+ /Identity eq not
+ } {
+ false % default StmF is Identity
+ }ifelse
+ 1 index /StrF .knownget {
+ /Identity eq not
+ } {
+ false % default StrF is Identity
+ }ifelse
+ or
+ % ...still in the V4 or above checking...
+ % Even if StmF and StrF are Identity, if the StdCF is missing AuthEvent
+ % or it is DocOpen, we require the password. Check for that.
+ 1 index /CF .knownget {
+ /StdCF .knownget {
+ /AuthEvent .knownget {
+ /DocOpen eq
+ or
+ } {
+ pop true % no AuthEvent, default is DocOpen, require password
+ } ifelse
+ } {
+ pop true % no StdCF, require password
+ } ifelse
+ } {
+ pop true % no CF, require password
+ } ifelse
+ exch pop % discard Encrypt dict
+ }{
+ % Not V4 or later
+ pop true % discard Encrypt dict, require password
+ } ifelse
+ % If we were given a PDFPassword, check it anyway, even if the
+ % code above said we didn't need one. This will allow us to process
+ % PDF files with an initial CryptFilter which has StrF=StmF=Identity,
+ % but contains streams which themselves have non-Identity StmF or StrF.
+ /PDFPassword where {
+ pop true
+ }
+ {
+ false
+ } ifelse
+ or
+ {
() pdf_check_password
{
/FileKey exch def
@@ -504,13 +561,13 @@ systemdict /check_r6_password .forceundef
/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)
-% pdfformaterror printProducer
-% /pdf_process_Encrypt cvx /invalidfileaccess signalerror
-% }
-% if
+ }
+ {
+ ( **** This file has an Encryption dictionary, but both the StmF and StrF entries\n) pdfformatwarning
+ ( **** are /Identity, and AuthEvent allows the document to be opened. It is possible\n) pdfformatwarning
+ ( **** that embedded streams may still use encryption, if the file fails to process\n) pdfformatwarning
+ ( **** you may need to supply a User or Owner password by setting -sPDFPassword=\n) pdfformatwarning
+ } ifelse
} bind executeonly def
% Calculate the key used to decrypt an object (to pass to .decpdfrun or
diff --git a/Resource/SubstCID/CNS1-WMode b/Resource/SubstCID/CNS1-WMode
index 2ff67d52..cc0e9bbd 100644
--- a/Resource/SubstCID/CNS1-WMode
+++ b/Resource/SubstCID/CNS1-WMode
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/SubstCID/GB1-WMode b/Resource/SubstCID/GB1-WMode
index bc82cc99..22da0829 100644
--- a/Resource/SubstCID/GB1-WMode
+++ b/Resource/SubstCID/GB1-WMode
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/SubstCID/Japan1-WMode b/Resource/SubstCID/Japan1-WMode
index bfdbe321..9f85a86e 100644
--- a/Resource/SubstCID/Japan1-WMode
+++ b/Resource/SubstCID/Japan1-WMode
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/Resource/SubstCID/Korea1-WMode b/Resource/SubstCID/Korea1-WMode
index 472a5738..ff59b9dc 100644
--- a/Resource/SubstCID/Korea1-WMode
+++ b/Resource/SubstCID/Korea1-WMode
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/arch/arch_autoconf.h.in b/arch/arch_autoconf.h.in
index 34ec8678..87fa50b9 100644
--- a/arch/arch_autoconf.h.in
+++ b/arch/arch_autoconf.h.in
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/arch/windows-arm-msvc.h b/arch/windows-arm-msvc.h
index a814f753..b347381e 100644
--- a/arch/windows-arm-msvc.h
+++ b/arch/windows-arm-msvc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/arch/windows-x64-msvc.h b/arch/windows-x64-msvc.h
index 934d60cc..3be724f3 100644
--- a/arch/windows-x64-msvc.h
+++ b/arch/windows-x64-msvc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/arch/windows-x86-msvc.h b/arch/windows-x86-msvc.h
index 23b8d618..76b6e806 100644
--- a/arch/windows-x86-msvc.h
+++ b/arch/windows-x86-msvc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/all-arch.mak b/base/all-arch.mak
index 4263d01b..cb9b56b5 100644
--- a/base/all-arch.mak
+++ b/base/all-arch.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/assert_.h b/base/assert_.h
index a00007f9..6be404ed 100644
--- a/base/assert_.h
+++ b/base/assert_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/bench.c b/base/bench.c
index 170c8d9b..6ff8aca9 100644
--- a/base/bench.c
+++ b/base/bench.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/bobbin.c b/base/bobbin.c
index 2994bd46..63720f3e 100644
--- a/base/bobbin.c
+++ b/base/bobbin.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2016-2018 Artifex Software, Inc.
+/* Copyright (C) 2016-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/bobbin.h b/base/bobbin.h
index 01863c5a..04c6d9aa 100644
--- a/base/bobbin.h
+++ b/base/bobbin.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2016-2018 Artifex Software, Inc.
+/* Copyright (C) 2016-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/cal.mak b/base/cal.mak
index 2e18077b..8a718a29 100644
--- a/base/cal.mak
+++ b/base/cal.mak
@@ -56,6 +56,8 @@ cal_OBJS = \
$(CAL_OBJ)$(CAL_PREFIX)blendavx2.$(OBJ) \
$(CAL_OBJ)$(CAL_PREFIX)blendsse42.$(OBJ)\
$(CAL_OBJ)$(CAL_PREFIX)blend.$(OBJ) \
+ $(CAL_OBJ)$(CAL_PREFIX)skew.$(OBJ) \
+ $(CAL_OBJ)$(CAL_PREFIX)deskew.$(OBJ) \
$(CAL_OBJ)$(CAL_PREFIX)cmsavx2.$(OBJ) \
$(CAL_OBJ)$(CAL_PREFIX)cmssse42.$(OBJ) \
$(CAL_OBJ)$(CAL_PREFIX)cmsneon.$(OBJ) \
@@ -121,6 +123,12 @@ $(CAL_OBJ)$(CAL_PREFIX)blendsse42.$(OBJ) : $(CAL_SRC)blendsse42.c $(cal_HDRS) $(
$(CAL_OBJ)$(CAL_PREFIX)blend.$(OBJ) : $(CAL_SRC)blend.c $(cal_HDRS) $(CAL_DEP) $(gsmemory_h)
$(CAL_CC) $(I_)$(GLSRC) $(CAL_O)blend.$(OBJ) $(C_) $(CAL_SRC)blend.c
+$(CAL_OBJ)$(CAL_PREFIX)skew.$(OBJ) : $(CAL_SRC)skew.c $(cal_HDRS) $(CAL_DEP) $(gsmemory_h)
+ $(CAL_CC) $(CAL_SSE4_2_CFLAGS) $(I_)$(GLSRC) $(CAL_O)skew.$(OBJ) $(C_) $(CAL_SRC)skew.c
+
+$(CAL_OBJ)$(CAL_PREFIX)deskew.$(OBJ) : $(CAL_SRC)deskew.c $(cal_HDRS) $(CAL_DEP) $(gsmemory_h)
+ $(CAL_CC) $(CAL_SSE4_2_CFLAGS) $(CAL_NEON_CFLAGS) $(I_)$(GLSRC) $(CAL_O)deskew.$(OBJ) $(C_) $(CAL_SRC)deskew.c
+
cal_ets_h=$(CAL_SRC)cal_ets.h
ca_ets_tm_h=$(CAL_SRC)cal_ets_tm.h
$(GLOBJ)ets_1.$(OBJ) : $(CAL_SRC)cal_ets.c $(CAL_SRC)ets_template.c \
diff --git a/base/claptrap-impl.h b/base/claptrap-impl.h
index dc9cca30..f758d5e0 100644
--- a/base/claptrap-impl.h
+++ b/base/claptrap-impl.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/claptrap-init.c b/base/claptrap-init.c
index f32e2712..3e20d3ed 100644
--- a/base/claptrap-init.c
+++ b/base/claptrap-init.c
@@ -45,8 +45,8 @@ ClapTrap *ClapTrap_Init(gs_memory_t *mem,
ct->y = 0;
ct->span = width * num_comps;
- ct->linebuf = gs_alloc_bytes(mem, ct->span * ct->lines_in_buf, "ClapTrap linebuf");
- ct->process = gs_alloc_bytes(mem, ct->width * ct->lines_in_buf, "ClapTrap process");
+ ct->linebuf = gs_alloc_bytes(mem, (size_t)ct->span * ct->lines_in_buf, "ClapTrap linebuf");
+ ct->process = gs_alloc_bytes(mem, (size_t)ct->width * ct->lines_in_buf, "ClapTrap process");
if (ct->linebuf == NULL || ct->process == NULL)
{
gs_free_object(mem, ct->linebuf, "ClapTrap linebuf");
diff --git a/base/claptrap-planar.c b/base/claptrap-planar.c
index 9b06b184..e77233ae 100644
--- a/base/claptrap-planar.c
+++ b/base/claptrap-planar.c
@@ -44,7 +44,7 @@ inline static void process_at_pixel(ClapTrap * gs_restrict ct,
int width = ct->width;
int height = ct->height;
#ifndef NDEBUG
- int num_comp_lim = ct->num_comps;
+ int num_comp_lim = ct->num_comps-1;
#endif
int max_x_offset = ct->max_x_offset;
int max_y_offset = ct->max_y_offset;
@@ -152,7 +152,7 @@ int ClapTrap_GetLinePlanar(ClapTrap * gs_restrict ct,
int x;
int line_offset;
unsigned char *process;
- int num_comp_lim = ct->num_comps;
+ int num_comp_lim = ct->num_comps-1;
/* Read in as many lines as we need */
max_y = ct->y + ct->max_y_offset;
diff --git a/base/claptrap.c b/base/claptrap.c
index 1ca57370..5829f09e 100644
--- a/base/claptrap.c
+++ b/base/claptrap.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2015-2018 Artifex Software, Inc.
+/* Copyright (C) 2015-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/claptrap.h b/base/claptrap.h
index 64902fee..2b28c04f 100644
--- a/base/claptrap.h
+++ b/base/claptrap.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2015-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ctype_.h b/base/ctype_.h
index 0123c6b9..32e8f9a6 100644
--- a/base/ctype_.h
+++ b/base/ctype_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/dirent_.h b/base/dirent_.h
index dc1e8b40..6eae53d2 100644
--- a/base/dirent_.h
+++ b/base/dirent_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/dos_.h b/base/dos_.h
index ffc8b05e..29f92aa5 100644
--- a/base/dos_.h
+++ b/base/dos_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/echogs.c b/base/echogs.c
index ae68402c..b8e93d9f 100644
--- a/base/echogs.c
+++ b/base/echogs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/endianness.h b/base/endianness.h
new file mode 100644
index 00000000..a609e622
--- /dev/null
+++ b/base/endianness.h
@@ -0,0 +1,17 @@
+#ifndef LEPTONICA_ENDIANNESS_H
+#define LEPTONICA_ENDIANNESS_H
+
+#include "arch.h"
+
+#if ARCH_IS_BIG_ENDIAN
+#define L_BIG_ENDIAN
+#endif
+
+#ifdef L_BIG_ENDIAN
+#else
+# ifndef L_LITTLE_ENDIAN
+# define L_LITTLE_ENDIAN
+# endif
+#endif
+
+#endif
diff --git a/base/errno_.h b/base/errno_.h
index f7ed62dc..5f05c616 100644
--- a/base/errno_.h
+++ b/base/errno_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ets.c b/base/ets.c
index 598ebbda..2b6a073f 100644
--- a/base/ets.c
+++ b/base/ets.c
@@ -1,4 +1,4 @@
- /*
+/*
* Testbed implementation of Even Better Screening. Please see
* http://www.artofcode.com/eventone/ for more details.
*
@@ -9,7 +9,18 @@
* of ETS is for commercial licensees and is governed by the licensing
* agreement between artofcode LLC and the licensee. Please see
* http://www.artofcode.com/eventone/ for information on licensing.
-*/
+ *
+ * Subsequent Changes: Copyright (C) 2013-2020 Artifex Software, Inc.
+ *
+ * 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.
+ */
#include <stdlib.h>
#include <string.h>
@@ -101,7 +112,7 @@ typedef struct {
* on an input line. Called to generate optimised versions.
*/
static inline void
-ets_line_template(unsigned char * gs_restrict * gs_restrict dest, const ETS_SrcPixel * const gs_restrict * gs_restrict src, int n_planes, int levels, int aspect_x, int aspect_y, int elo, int ehi, int ets_bias, int r_style, int old_quant, int fancy_coupling, int * gs_restrict c_line,
+ets_line_template(unsigned char * gs_restrict * gs_restrict dest, const ETS_SrcPixel * const gs_restrict * gs_restrict src, int n_planes, int levels, int aspect_x, int aspect_y, int elo, int ehi, int ets_biasing_mode, int r_style, int old_quant, int fancy_coupling, int * gs_restrict c_line,
const signed char * gs_restrict tmmat, unsigned int tmwidth, unsigned int tmheight, unsigned int y, int xd, ETS_PlaneCtx * gs_restrict * gs_restrict planes, uint32 *seeds, int in_plane_step, int out_plane_step)
{
ETS_PixelInternals pi[M];
@@ -260,7 +271,7 @@ ets_line_template(unsigned char * gs_restrict * gs_restrict dest, const ETS_SrcP
* 3 like 1, but same shift either side of 0.
* 4+ scale the modulation down.
*/
- switch (ets_bias)
+ switch (ets_biasing_mode)
{
case ETS_BIAS_ZERO:
ets_bias = 0;
diff --git a/base/ets.h b/base/ets.h
index 4b009b8a..a57bef52 100644
--- a/base/ets.h
+++ b/base/ets.h
@@ -1,17 +1,26 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
- 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.
-
- Refer to licensing information at http://www.artifex.com or contact
- Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
- CA 94945, U.S.A., +1(415)492-9861, for further information.
-*/
+/*
+ * Testbed implementation of Even Better Screening. Please see
+ * http://www.artofcode.com/eventone/ for more details.
+ *
+ * Copyright 2001-2004 Raph Levien <raph@acm.org>
+ *
+ * Code in this module is covered by US Patents 5,055,942 and
+ * 5,917,614, and corresponding international patents. This version
+ * of ETS is for commercial licensees and is governed by the licensing
+ * agreement between artofcode LLC and the licensee. Please see
+ * http://www.artofcode.com/eventone/ for information on licensing.
+ *
+ * Subsequent Changes: Copyright (C) 2013-2020 Artifex Software, Inc.
+ *
+ * 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.
+ */
#ifndef ets_h_INCLUDED
# define ets_h_INCLUDED
diff --git a/base/ets_tm.h b/base/ets_tm.h
index 62e13e95..5decb9c3 100644
--- a/base/ets_tm.h
+++ b/base/ets_tm.h
@@ -1,17 +1,26 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
- 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.
-
- Refer to licensing information at http://www.artifex.com or contact
- Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
- CA 94945, U.S.A., +1(415)492-9861, for further information.
-*/
+/*
+ * Testbed implementation of Even Better Screening. Please see
+ * http://www.artofcode.com/eventone/ for more details.
+ *
+ * Copyright 2001-2004 Raph Levien <raph@acm.org>
+ *
+ * Code in this module is covered by US Patents 5,055,942 and
+ * 5,917,614, and corresponding international patents. This version
+ * of ETS is for commercial licensees and is governed by the licensing
+ * agreement between artofcode LLC and the licensee. Please see
+ * http://www.artofcode.com/eventone/ for information on licensing.
+ *
+ * Subsequent Changes: Copyright (C) 2013-2020 Artifex Software, Inc.
+ *
+ * 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.
+ */
#ifndef ets_tm_h_INCLUDED
diff --git a/base/expat.mak b/base/expat.mak
index 3cb3c3c8..08db2a1d 100644
--- a/base/expat.mak
+++ b/base/expat.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/fapi_bs.mak b/base/fapi_bs.mak
index afc0fa2f..894bcb82 100644
--- a/base/fapi_bs.mak
+++ b/base/fapi_bs.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/fapi_ft.c b/base/fapi_ft.c
index 60f69f64..46f865ef 100644
--- a/base/fapi_ft.c
+++ b/base/fapi_ft.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -1114,7 +1114,7 @@ gs_fapi_ft_get_scaled_font(gs_fapi_server * a_server, gs_fapi_font * a_font,
ff_server *s = (ff_server *) a_server;
ff_face *face = (ff_face *) a_font->server_font_data;
FT_Error ft_error = 0;
- int i, j;
+ int i, j, code;
FT_CharMap cmap = NULL;
bool data_owned = true;
@@ -1183,7 +1183,6 @@ gs_fapi_ft_get_scaled_font(gs_fapi_server * a_server, gs_fapi_font * a_font,
/* Load a typeface from a file. */
else if (a_font->font_file_path) {
FT_Open_Args args;
- int code;
memset(&args, 0x00, sizeof(args));
@@ -1215,9 +1214,12 @@ gs_fapi_ft_get_scaled_font(gs_fapi_server * a_server, gs_fapi_font * a_font,
if (a_font->is_type1) {
long length;
- int type =
- a_font->get_word(a_font, gs_fapi_font_feature_FontType,
- 0);
+ unsigned short type = 0;
+
+ code = a_font->get_word(a_font, gs_fapi_font_feature_FontType, 0, &type);
+ if (code < 0) {
+ return code;
+ }
/* Tell the FAPI interface that we need to decrypt the /Subrs data. */
a_font->need_decrypt = true;
@@ -1230,6 +1232,7 @@ gs_fapi_ft_get_scaled_font(gs_fapi_server * a_server, gs_fapi_font * a_font,
length = gs_fapi_serialize_type1_font(a_font, NULL, 0);
else
length = gs_fapi_serialize_type2_font(a_font, NULL, 0);
+
open_args.memory_base = own_font_data =
FF_alloc(s->ftmemory, length);
if (!open_args.memory_base)
@@ -1237,14 +1240,14 @@ gs_fapi_ft_get_scaled_font(gs_fapi_server * a_server, gs_fapi_font * a_font,
own_font_data_len = length;
if (type == 1)
open_args.memory_size =
- gs_fapi_serialize_type1_font(a_font, own_font_data,
- length);
+ gs_fapi_serialize_type1_font(a_font, own_font_data, length);
else
open_args.memory_size =
- gs_fapi_serialize_type2_font(a_font, own_font_data,
- length);
+ gs_fapi_serialize_type2_font(a_font, own_font_data, length);
+
if (open_args.memory_size != length)
return_error(gs_error_unregistered); /* Must not happen. */
+
ft_inc_int = new_inc_int(a_server, a_font);
if (!ft_inc_int) {
FF_free(s->ftmemory, own_font_data);
@@ -1255,11 +1258,16 @@ gs_fapi_ft_get_scaled_font(gs_fapi_server * a_server, gs_fapi_font * a_font,
/* It must be type 42 (see code in FAPI_FF_get_glyph in zfapi.c). */
else {
/* Get the length of the TrueType data. */
- open_args.memory_size =
- a_font->get_long(a_font, gs_fapi_font_feature_TT_size, 0);
- if (open_args.memory_size == 0)
+ unsigned long ms;
+
+ code = a_font->get_long(a_font, gs_fapi_font_feature_TT_size, 0, &ms);
+ if (code < 0)
+ return code;
+ if (ms == 0)
return_error(gs_error_invalidfont);
+ open_args.memory_size = (FT_Long)ms;
+
/* Load the TrueType data into a single buffer. */
open_args.memory_base = own_font_data =
FF_alloc(s->ftmemory, open_args.memory_size);
@@ -1268,10 +1276,10 @@ gs_fapi_ft_get_scaled_font(gs_fapi_server * a_server, gs_fapi_font * a_font,
own_font_data_len = open_args.memory_size;
- if (a_font->
- serialize_tt_font(a_font, own_font_data,
- open_args.memory_size))
- return_error(gs_error_invalidfont);
+ code = a_font->serialize_tt_font(a_font, own_font_data,
+ open_args.memory_size);
+ if (code < 0)
+ return code;
/* We always load incrementally. */
ft_inc_int = new_inc_int(a_server, a_font);
diff --git a/base/fapibstm.c b/base/fapibstm.c
index 73c1d08f..0eb120c2 100644
--- a/base/fapibstm.c
+++ b/base/fapibstm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -103,8 +103,9 @@ InitFont(Bitstream_server * server, FAPI_font * ff)
own_font_data = gs_malloc(mem, 1, length, "Type 42 fotn copy");
if (!own_font_data)
return_error(gs_error_VMerror);
- if (ff->serialize_tt_font(ff, own_font_data, length))
- return_error(gs_error_invalidfont);
+ error = ff->serialize_tt_font(ff, own_font_data, length);
+ if (error < 0)
+ return error;
}
}
face->font_data = own_font_data;
diff --git a/base/fapiufst.c b/base/fapiufst.c
index 59aeb134..4089e905 100644
--- a/base/fapiufst.c
+++ b/base/fapiufst.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -79,14 +79,14 @@
#include "gxfapiu.h"
-#if UFST_VERSION_MAJOR >= 6 && UFST_VERSION_MINOR >= 2
+#if (UFST_VERSION_MAJOR >= 6 && UFST_VERSION_MINOR >= 2) || UFST_VERSION_MAJOR >= 7
#include "t1itype1.h"
#endif
#define ufst_emprintf(m,s) { outflush(m); emprintf(m, s); outflush(m); }
#define ufst_emprintf1(m,s,d) { outflush(m); emprintf1(m, s, d); outflush(m); }
-#if UFST_VERSION_MAJOR >= 6 && UFST_VERSION_MINOR >= 2
+#if (UFST_VERSION_MAJOR >= 6 && UFST_VERSION_MINOR >= 2) || UFST_VERSION_MAJOR >= 7
#undef true
#undef false
@@ -720,74 +720,170 @@ pack_float(LPUB8 * p, float v)
#define PACK_ZERO(p) *(p++) = 0
#define PACK_BYTE(p, c) *(p++) = c
-#define PACK_WORD(p, i, var) pack_word(&p, ff->get_word(ff, var, i))
-#define PACK_LONG(p, i, var) pack_long(&p, ff->get_long(ff, var, i))
-static void
+static inline int
+pack_feature_word(gs_fapi_font * ff, LPUB8 * p, gs_fapi_font_feature var, int ind)
+{
+ UW16 val;
+ int code = ff->get_word(ff, var, ind, (unsigned short *)&val);
+ if (code < 0)
+ return code;
+ pack_word(p, val);
+
+ return code;
+}
+
+static inline int
+pack_feature_long(gs_fapi_font * ff, LPUB8 * p, gs_fapi_font_feature var, int ind)
+{
+ UL32 val;
+ unsigned long lv;
+ int code = ff->get_long(ff, var, ind, &lv);
+ if (code < 0)
+ return code;
+ val = (UL32)lv;
+ pack_word(p, val);
+
+ return code;
+}
+
+static int
pack_pseo_word_array(fapi_ufst_server * r, gs_fapi_font * ff, UB8 ** p,
UW16 max_count, gs_fapi_font_feature count_id,
gs_fapi_font_feature array_id)
{
- UW16 k = min(ff->get_word(ff, count_id, 0), max_count), j;
+ UW16 k, k2, j;
+ int code;
+
+ code = ff->get_word(ff, count_id, 0, (unsigned short *)&k2);
+ if (code < 0)
+ return code;
+ k = min(k2, max_count);
pack_word(p, k);
for (j = 0; j < k; j++)
- PACK_WORD(*p, j, array_id);
+ code = pack_feature_word(ff, p, j, array_id);
for (; j < max_count; j++)
pack_word(p, 0);
+
+ return code;
}
-static void
+static int
pack_pseo_fhdr(fapi_ufst_server * r, gs_fapi_font * ff, UB8 * p)
{
ushort j, n, skip = 0;
+ int code;
while (((uint64_t) p) & 0x03) /* align to QUADWORD */
PACK_ZERO(p);
pack_long(&p, 1); /* format = 1 */
- for (j = 0; j < 6; j++)
- pack_float(&p, ff->get_float(ff, gs_fapi_font_feature_FontMatrix, j));
+ for (j = 0; j < 6; j++) {
+ float f;
+ code = ff->get_float(ff, gs_fapi_font_feature_FontMatrix, j, &f);
+ if (code < 0)
+ return code;
+ pack_float(&p, f);
+ }
while (((uint64_t) p) & 0x03) /* align to QUADWORD */
PACK_ZERO(p);
/* UFST has no definition for PSEO structure, so implement serialization : */
- PACK_LONG(p, 0, gs_fapi_font_feature_UniqueID);
- PACK_LONG(p, 0, gs_fapi_font_feature_BlueScale);
- PACK_WORD(p, 0, gs_fapi_font_feature_Weight);
- PACK_WORD(p, 0, gs_fapi_font_feature_ItalicAngle);
- PACK_WORD(p, 0, gs_fapi_font_feature_IsFixedPitch);
- PACK_WORD(p, 0, gs_fapi_font_feature_UnderLinePosition);
- PACK_WORD(p, 0, gs_fapi_font_feature_UnderlineThickness);
- PACK_WORD(p, 0, gs_fapi_font_feature_FontType);
- PACK_WORD(p, 0, gs_fapi_font_feature_FontBBox);
- PACK_WORD(p, 1, gs_fapi_font_feature_FontBBox);
- PACK_WORD(p, 2, gs_fapi_font_feature_FontBBox);
- PACK_WORD(p, 3, gs_fapi_font_feature_FontBBox);
- pack_pseo_word_array(r, ff, &p, 14, gs_fapi_font_feature_BlueValues_count,
+ /* NOTE: PACK_LONG and PACK_WORD macros can do a return on error */
+ code = pack_feature_long(ff, &p, 0, gs_fapi_font_feature_UniqueID);
+ if (code < 0)
+ return code;
+ code = pack_feature_long(ff, &p, 0, gs_fapi_font_feature_BlueScale);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_Weight);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_ItalicAngle);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_IsFixedPitch);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_UnderLinePosition);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_UnderlineThickness);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_FontType);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_FontBBox);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 1, gs_fapi_font_feature_FontBBox);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 2, gs_fapi_font_feature_FontBBox);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 3, gs_fapi_font_feature_FontBBox);
+ if (code < 0)
+ return code;
+ code = pack_pseo_word_array(r, ff, &p, 14, gs_fapi_font_feature_BlueValues_count,
gs_fapi_font_feature_BlueValues);
- pack_pseo_word_array(r, ff, &p, 10, gs_fapi_font_feature_OtherBlues_count,
+ if (code < 0)
+ return code;
+ code = pack_pseo_word_array(r, ff, &p, 10, gs_fapi_font_feature_OtherBlues_count,
gs_fapi_font_feature_OtherBlues);
- pack_pseo_word_array(r, ff, &p, 14,
+ if (code < 0)
+ return code;
+
+ code = pack_pseo_word_array(r, ff, &p, 14,
gs_fapi_font_feature_FamilyBlues_count,
gs_fapi_font_feature_FamilyBlues);
- pack_pseo_word_array(r, ff, &p, 10,
+ if (code < 0)
+ return code;
+
+ code = pack_pseo_word_array(r, ff, &p, 10,
gs_fapi_font_feature_FamilyOtherBlues_count,
gs_fapi_font_feature_FamilyOtherBlues);
- PACK_WORD(p, 0, gs_fapi_font_feature_BlueShift);
- PACK_WORD(p, 0, gs_fapi_font_feature_BlueFuzz);
- PACK_WORD(p, 0, gs_fapi_font_feature_StdHW);
- PACK_WORD(p, 0, gs_fapi_font_feature_StdVW);
- pack_pseo_word_array(r, ff, &p, 12, gs_fapi_font_feature_StemSnapH_count,
+ if (code < 0)
+ return code;
+
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_BlueShift);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_BlueFuzz);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_StdHW);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_StdVW);
+ if (code < 0)
+ return code;
+ code = pack_pseo_word_array(r, ff, &p, 12, gs_fapi_font_feature_StemSnapH_count,
gs_fapi_font_feature_StemSnapH);
- pack_pseo_word_array(r, ff, &p, 12, gs_fapi_font_feature_StemSnapV_count,
+ if (code < 0)
+ return code;
+
+ code = pack_pseo_word_array(r, ff, &p, 12, gs_fapi_font_feature_StemSnapV_count,
gs_fapi_font_feature_StemSnapV);
- PACK_WORD(p, 0, gs_fapi_font_feature_ForceBold);
- PACK_WORD(p, 0, gs_fapi_font_feature_LanguageGroup);
- PACK_WORD(p, 0, gs_fapi_font_feature_lenIV);
+ if (code < 0)
+ return code;
+
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_ForceBold);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_LanguageGroup);
+ if (code < 0)
+ return code;
+ code = pack_feature_word(ff, &p, 0, gs_fapi_font_feature_lenIV);
+ if (code < 0)
+ return code;
for (j = 0; j < 12; j++)
PACK_ZERO(p), PACK_ZERO(p); /* Reserved2 */
/* max data size = 107 words + 6 floats in ASCII */
- n = ff->get_word(ff, gs_fapi_font_feature_Subrs_count, 0);
+ code = ff->get_word(ff, gs_fapi_font_feature_Subrs_count, 0, &n);
+ if (code < 0)
+ return code;
pack_word(&p, n);
for (j = 0; j < n; j++) {
ushort subr_len = ff->get_subr(ff, j, 0, 0);
@@ -802,23 +898,23 @@ pack_pseo_fhdr(fapi_ufst_server * r, gs_fapi_font * ff, UB8 * p)
else
skip = 1;
}
- n = ff->get_word(ff, gs_fapi_font_feature_GlobalSubrs_count, 0);
- /* get_word() doesn't have an error return value, so I've used an unlikely value */
- if (n != 65535) {
- pack_word(&p, n);
- for (j = 0; j < n; j++) {
- ushort subr_len = ff->get_gsubr(ff, j, 0, 0);
-
- if (subr_len != 0) {
- pack_word(&p, j);
- pack_word(&p, subr_len);
- PACK_BYTE(p, 1); /* is_decrypted */
- ff->get_gsubr(ff, j, p, subr_len);
- p += subr_len;
- }
- else
- skip = 1;
+ code = ff->get_word(ff, gs_fapi_font_feature_GlobalSubrs_count, 0, &n);
+ if (code < 0)
+ return code;
+
+ pack_word(&p, n);
+ for (j = 0; j < n; j++) {
+ ushort subr_len = ff->get_gsubr(ff, j, 0, 0);
+
+ if (subr_len != 0) {
+ pack_word(&p, j);
+ pack_word(&p, subr_len);
+ PACK_BYTE(p, 1); /* is_decrypted */
+ ff->get_gsubr(ff, j, p, subr_len);
+ p += subr_len;
}
+ else
+ skip = 1;
}
if (skip)
pack_word(&p, 0xFFFF);
@@ -905,20 +1001,37 @@ ufst_make_font_data(fapi_ufst_server * r, const char *font_file_path,
area_length += PCLETTOFONTHDRSIZE;
if (ff->is_type1) {
- int subrs_count = ff->get_word(ff, gs_fapi_font_feature_Subrs_count, 0);
- int subrs_length = ff->get_long(ff, gs_fapi_font_feature_Subrs_total_size, 0);
+ int subrs_count;
+ int subrs_length;
int subrs_area_size;
- int gsubrs_count = ff->get_word(ff, gs_fapi_font_feature_GlobalSubrs_count, 0);
-
- /* get_word() doesn't have an error return value, so I've used an unlikely value */
- if (gsubrs_count != 65535)
- subrs_count += gsubrs_count;
+ int gsubrs_count;
+ unsigned short usval;
+ unsigned long ulval;
+
+ code = ff->get_word(ff, gs_fapi_font_feature_Subrs_count, 0, &usval);
+ if (code < 0)
+ return code;
+ subrs_count = usval;
+ code = ff->get_word(ff, gs_fapi_font_feature_GlobalSubrs_count, 0, &usval);
+ if (code < 0)
+ return code;
+ gsubrs_count = usval;
+
+ subrs_count += gsubrs_count;
+
+ code = ff->get_long(ff, gs_fapi_font_feature_Subrs_total_size, 0, &ulval);
+ if (code < 0)
+ return code;
+ subrs_length = (int)ulval;
subrs_area_size = subrs_count * 5 + subrs_length + 2;
area_length += 360 + subrs_area_size; /* some inprecise - see pack_pseo_fhdr */
}
else {
- tt_size = ff->get_long(ff, gs_fapi_font_feature_TT_size, 0);
+ code = ff->get_long(ff, gs_fapi_font_feature_TT_size, 0, &tt_size);
+ if (code < 0)
+ return code;
+
if (tt_size == 0)
return_error(gs_error_invalidfont);
/* area_length += tt_size + (use_XL_format ? 6 : 4) + 4 + 2;*/
@@ -979,8 +1092,13 @@ ufst_make_font_data(fapi_ufst_server * r, const char *font_file_path,
}
}
else {
+ unsigned long ulval;
+
d->font_type = (ff->is_type1 ? FC_PST1_TYPE : FC_TT_TYPE);
- d->font_id = ff->get_long(ff, gs_fapi_font_feature_UniqueID, 0);
+ code = ff->get_long(ff, gs_fapi_font_feature_UniqueID, 0, &ulval);
+ if (code < 0)
+ return code;
+ d->font_id = ulval;
if (d->font_id < 0) {
d->font_id = assign_font_id();
}
@@ -1047,7 +1165,9 @@ ufst_make_font_data(fapi_ufst_server * r, const char *font_file_path,
if (ff->is_type1) {
LPUB8 fontdata = (LPUB8) h + PCLETTOFONTHDRSIZE;
- pack_pseo_fhdr(r, ff, fontdata);
+ code = pack_pseo_fhdr(r, ff, fontdata);
+ if (code < 0)
+ return code;
}
else {
LPUB8 pseg = (LPUB8) h + PCLETTOFONTHDRSIZE;
@@ -1060,8 +1180,11 @@ ufst_make_font_data(fapi_ufst_server * r, const char *font_file_path,
*((ulong *) (&(pseg[2]))) = SWAPL(tt_size);
d->tt_font_body_offset = (LPUB8) fontdata - (LPUB8) d;
- if (ff->serialize_tt_font(ff, fontdata, tt_size))
- return_error(gs_error_invalidfont);
+
+ code = ff->serialize_tt_font(ff, fontdata, tt_size);
+ if (code < 0)
+ return code;
+
*(fontdata + tt_size) = 255;
*(fontdata + tt_size + 1) = 255;
*(fontdata + tt_size + 2) = 0;
diff --git a/base/fcntl_.h b/base/fcntl_.h
index 46d08135..fc2cdb46 100644
--- a/base/fcntl_.h
+++ b/base/fcntl_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/freetype.mak b/base/freetype.mak
index eea93a7f..ec85b5ce 100644
--- a/base/freetype.mak
+++ b/base/freetype.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/gconf.c b/base/gconf.c
index 8d00af2d..68aecb75 100644
--- a/base/gconf.c
+++ b/base/gconf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gconf.h b/base/gconf.h
index 3779d4c9..1dcfa6c2 100644
--- a/base/gconf.h
+++ b/base/gconf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdbflags.h b/base/gdbflags.h
index 1ac6c586..c7d3fe91 100644
--- a/base/gdbflags.h
+++ b/base/gdbflags.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdebug.h b/base/gdebug.h
index 28795661..8fa4cca0 100644
--- a/base/gdebug.h
+++ b/base/gdebug.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevabuf.c b/base/gdevabuf.c
index d9c45a28..e937299d 100644
--- a/base/gdevabuf.c
+++ b/base/gdevabuf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -191,7 +191,7 @@ gs_make_mem_abuf_device(gx_device_memory * adev, gs_memory_t * mem,
adev->mapped_x = mapped_x;
set_dev_proc(adev, close_device, mem_abuf_close);
set_dev_proc(adev, get_clipping_box, mem_abuf_get_clipping_box);
- if (!devn)
+ if (!devn)
adev->save_hl_color = NULL; /* This is the test for when we flush the
the buffer as to what copy_alpha type
use */
@@ -235,7 +235,7 @@ abuf_flush_block(gx_device_memory * adev, int y)
* (see gsbitops.c), we can't expand the box only to pixel
* boundaries:
int alpha_mask = -1 << adev->log2_alpha_bits;
- * Instead, we must expand it to byte boundaries,
+ * Instead, we must expand it to byte boundaries,
*/
int alpha_mask = ~7;
gs_int_rect bbox;
@@ -249,7 +249,7 @@ abuf_flush_block(gx_device_memory * adev, int y)
adev->raster, bits, draster, &adev->log2_scale,
adev->log2_alpha_bits);
/* Set up with NULL when adev initialized */
- if (adev->save_hl_color == NULL) {
+ if (adev->save_hl_color == NULL) {
return (*dev_proc(target, copy_alpha)) (target,
bits, 0, draster, gx_no_bitmap_id,
(adev->mapped_x + bbox.p.x) >>
@@ -304,21 +304,25 @@ typedef struct y_transfer_s {
int transfer_y;
int transfer_height;
} y_transfer;
-static void
+static int
y_transfer_init(y_transfer * pyt, gx_device * dev, int ty, int th)
{
gx_device_memory * const mdev = (gx_device_memory *)dev;
int bh = 1 << mdev->log2_scale.y;
if (ty < mdev->mapped_y || ty > mdev->mapped_y + mdev->mapped_height) {
- abuf_flush(mdev);
+ int code = abuf_flush(mdev);
+ if (code < 0)
+ return code;
mdev->mapped_y = ty & -bh;
mdev->mapped_height = bh;
- memset(scan_line_base(mdev, 0), 0, bh * mdev->raster);
+ memset(scan_line_base(mdev, 0), 0, (size_t)bh * mdev->raster);
}
pyt->y_next = ty;
pyt->height_left = th;
pyt->transfer_height = 0;
+
+ return 0;
}
/* while ( yt.height_left > 0 ) { y_transfer_next(&yt, mdev); ... } */
static int
@@ -348,7 +352,7 @@ y_transfer_next(y_transfer * pyt, gx_device * dev)
mdev->mapped_height = mh += bh;
}
memset(scan_line_base(mdev, (ms == 0 ? mh : ms) - bh),
- 0, bh * mdev->raster);
+ 0, (size_t)bh * mdev->raster);
}
/* Now we know that my <= ty < my + mh. */
tby = ty - my + ms;
@@ -380,6 +384,7 @@ mem_abuf_copy_mono(gx_device * dev,
{
gx_device_memory * const mdev = (gx_device_memory *)dev;
y_transfer yt;
+ int code;
if (zero != gx_no_color_index || one == gx_no_color_index)
return_error(gs_error_undefinedresult);
@@ -387,11 +392,18 @@ mem_abuf_copy_mono(gx_device * dev,
fit_copy_xyw(dev, base, sourcex, sraster, id, x, y, w, h); /* don't limit h */
if (w <= 0 || h <= 0)
return 0;
+ if (mdev->mapped_height != 0 && mdev->save_color != one) {
+ /* Color has changed. Better flush. */
+ int code = abuf_flush(mdev);
+ if (code < 0)
+ return code;
+ }
mdev->save_color = one;
- y_transfer_init(&yt, dev, y, h);
+ code = y_transfer_init(&yt, dev, y, h);
+ if (code < 0)
+ return code;
while (yt.height_left > 0) {
- int code = y_transfer_next(&yt, dev);
-
+ code = y_transfer_next(&yt, dev);
if (code < 0)
return code;
(*dev_proc(&mem_mono_device, copy_mono)) (dev,
@@ -410,16 +422,24 @@ mem_abuf_fill_rectangle(gx_device * dev, int x, int y, int w, int h,
{
gx_device_memory * const mdev = (gx_device_memory *)dev;
y_transfer yt;
+ int code;
x -= mdev->mapped_x;
fit_fill_xy(dev, x, y, w, h);
fit_fill_w(dev, x, w); /* don't limit h */
/* or check w <= 0, h <= 0 */
+ if (mdev->mapped_height != 0 && mdev->save_color != color) {
+ /* Color has changed. Better flush. */
+ int code = abuf_flush(mdev);
+ if (code < 0)
+ return code;
+ }
mdev->save_color = color;
- y_transfer_init(&yt, dev, y, h);
+ code = y_transfer_init(&yt, dev, y, h);
+ if (code < 0)
+ return code;
while (yt.height_left > 0) {
- int code = y_transfer_next(&yt, dev);
-
+ code = y_transfer_next(&yt, dev);
if (code < 0)
return code;
(*dev_proc(&mem_mono_device, fill_rectangle)) (dev,
@@ -442,17 +462,26 @@ mem_abuf_fill_rectangle_hl_color(gx_device * dev, const gs_fixed_rect *rect,
int y = fixed2int(rect->p.y);
int w = fixed2int(rect->q.x) - x;
int h = fixed2int(rect->q.y) - y;
+ int code;
(void)pgs;
x -= mdev->mapped_x;
fit_fill_xy(dev, x, y, w, h);
fit_fill_w(dev, x, w); /* don't limit h */
/* or check w <= 0, h <= 0 */
+ if (mdev->mapped_height != 0 &&
+ memcmp(mdev->save_hl_color, pdcolor, sizeof(*pdcolor)) != 0) {
+ /* Color has changed. Better flush. */
+ int code = abuf_flush(mdev);
+ if (code < 0)
+ return code;
+ }
mdev->save_hl_color = pdcolor;
- y_transfer_init(&yt, dev, y, h);
+ code = y_transfer_init(&yt, dev, y, h);
+ if (code < 0)
+ return code;
while (yt.height_left > 0) {
- int code = y_transfer_next(&yt, dev);
-
+ code = y_transfer_next(&yt, dev);
if (code < 0)
return code;
(*dev_proc(&mem_mono_device, fill_rectangle)) (dev,
diff --git a/base/gdevbbox.c b/base/gdevbbox.c
index 8b4e6313..20f80d3a 100644
--- a/base/gdevbbox.c
+++ b/base/gdevbbox.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevbbox.h b/base/gdevbbox.h
index ae993a5b..1abf2cf4 100644
--- a/base/gdevbbox.h
+++ b/base/gdevbbox.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevdbit.c b/base/gdevdbit.c
index faeac5f6..fb9ff800 100644
--- a/base/gdevdbit.c
+++ b/base/gdevdbit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevdcrd.c b/base/gdevdcrd.c
index a5c2b792..299afc52 100644
--- a/base/gdevdcrd.c
+++ b/base/gdevdcrd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevdcrd.h b/base/gdevdcrd.h
index b0063c36..7ef729a2 100644
--- a/base/gdevdcrd.h
+++ b/base/gdevdcrd.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevddrw.c b/base/gdevddrw.c
index 0adda189..19089b88 100644
--- a/base/gdevddrw.c
+++ b/base/gdevddrw.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevddrw.h b/base/gdevddrw.h
index 007a0317..dcf4468a 100644
--- a/base/gdevddrw.h
+++ b/base/gdevddrw.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevdevn.c b/base/gdevdevn.c
index 3b019d6f..4cbf11b5 100644
--- a/base/gdevdevn.c
+++ b/base/gdevdevn.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevdevn.h b/base/gdevdevn.h
index 3f50c996..fea7c3d7 100644
--- a/base/gdevdevn.h
+++ b/base/gdevdevn.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevdevnprn.h b/base/gdevdevnprn.h
index fa08cd7d..6c3020e6 100644
--- a/base/gdevdevnprn.h
+++ b/base/gdevdevnprn.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevdflt.c b/base/gdevdflt.c
index 8d342995..1d949080 100644
--- a/base/gdevdflt.c
+++ b/base/gdevdflt.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -1026,6 +1026,8 @@ gx_default_dev_spec_op(gx_device *pdev, int dev_spec_op, void *data, int size)
case gxdso_supports_saved_pages:
case gxdso_needs_invariant_palette:
case gxdso_supports_iccpostrender:
+ case gxdso_supports_alpha:
+ case gxdso_pdf14_sep_device:
return 0;
case gxdso_pattern_shfill_doesnt_need_path:
return (dev_proc(pdev, fill_path) == gx_default_fill_path);
@@ -1873,7 +1875,8 @@ transform_pixel_region_render_portrait(gx_device *dev, gx_default_transform_pixe
byte *out;
int depth = spp;
if (state->line == NULL) {
- state->line = gs_alloc_bytes(state->mem, dev->width * depth,
+ state->line = gs_alloc_bytes(state->mem,
+ (size_t)dev->width * depth,
"image line");
if (state->line == NULL)
return gs_error_VMerror;
@@ -1969,7 +1972,7 @@ transform_pixel_region_render_portrait(gx_device *dev, gx_default_transform_pixe
goto err;
}
}
- return (code < 0 ? code : 1);
+ return 1;
/* Save position if error, in case we resume. */
err:
buffer[0] = run;
diff --git a/base/gdevdgbr.c b/base/gdevdgbr.c
index 456f9101..164124d7 100644
--- a/base/gdevdgbr.c
+++ b/base/gdevdgbr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -423,6 +423,9 @@ gx_get_bits_std_to_native(gx_device * dev, int x, int w, int h,
gx_color_value src_max = (1 << src_depth) - 1;
#define v2cv(value) ((ulong)(value) * gx_max_color_value / src_max)
gx_color_value alpha_default = src_max;
+ subclass_color_mappings scm;
+
+ scm = get_color_mapping_procs_subclass(dev);
params->options &= ~GB_COLORS_ALL | GB_COLORS_NATIVE;
for (; h > 0; dest_line += raster, src_line += dev_raster, --h) {
@@ -443,9 +446,6 @@ gx_get_bits_std_to_native(gx_device * dev, int x, int w, int h,
gx_color_value va = alpha_default;
gx_color_index pixel;
bool do_alpha = false;
- subclass_color_mappings scm;
-
- scm = get_color_mapping_procs_subclass(dev);
/* Fetch the source data. */
if (stored->options & GB_ALPHA_FIRST) {
diff --git a/base/gdevdrop.c b/base/gdevdrop.c
index dcd3f659..b22823a9 100644
--- a/base/gdevdrop.c
+++ b/base/gdevdrop.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -54,17 +54,17 @@ trace_copy_rop(const char *cname, gx_device * dev,
int x, int y, int width, int height,
int phase_x, int phase_y, gs_logical_operation_t lop)
{
- dmlprintf4(dev->memory, "%s: dev=0x%lx(%s) depth=%d\n",
- cname, (ulong) dev, dev->dname, dev->color_info.depth);
- dmlprintf4(dev->memory, " source data=0x%lx x=%d raster=%u id=%lu colors=",
- (ulong) sdata, sourcex, sraster, (ulong) id);
+ dmlprintf4(dev->memory, "%s: dev="PRI_INTPTR"(%s) depth=%d\n",
+ cname, (intptr_t)dev, dev->dname, dev->color_info.depth);
+ dmlprintf4(dev->memory, " source data="PRI_INTPTR" x=%d raster=%u id=%lu colors=",
+ (intptr_t)sdata, sourcex, sraster, (ulong) id);
if (scolors)
dmprintf2(dev->memory, "(%"PRIx64",%"PRIx64");\n", (uint64_t)scolors[0], (uint64_t)scolors[1]);
else
dmputs(dev->memory, "none;\n");
if (textures)
- dmlprintf8(dev->memory, " textures=0x%lx size=%dx%d(%dx%d) raster=%u shift=%d(%d)",
- (ulong) textures, textures->size.x, textures->size.y,
+ dmlprintf8(dev->memory, " textures="PRI_INTPTR" size=%dx%d(%dx%d) raster=%u shift=%d(%d)",
+ (intptr_t)textures, textures->size.x, textures->size.y,
textures->rep_width, textures->rep_height,
textures->raster, textures->shift, textures->rep_shift);
else
@@ -189,7 +189,7 @@ gx_default_strip_copy_rop2(gx_device * dev,
return code;
lop = lop_sanitize(lop);
if (rop3_uses_D(lop)) {
- row = gs_alloc_bytes(mem, draster * block_height, "copy_rop row");
+ row = gs_alloc_bytes(mem, (size_t)draster * block_height, "copy_rop row");
if (row == 0) {
code = gs_note_error(gs_error_VMerror);
goto out;
diff --git a/base/gdevdsha.c b/base/gdevdsha.c
index 2553a795..2111974d 100644
--- a/base/gdevdsha.c
+++ b/base/gdevdsha.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevemap.c b/base/gdevemap.c
index f174d01f..b307fb78 100644
--- a/base/gdevemap.c
+++ b/base/gdevemap.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevepo.c b/base/gdevepo.c
index 45363781..e3454273 100644
--- a/base/gdevepo.c
+++ b/base/gdevepo.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevepo.h b/base/gdevepo.h
index 45add78e..68f47686 100644
--- a/base/gdevepo.h
+++ b/base/gdevepo.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevflp.c b/base/gdevflp.c
index 0ad19656..7b02bc35 100644
--- a/base/gdevflp.c
+++ b/base/gdevflp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -419,7 +419,7 @@ int flp_close_device(gx_device *dev)
if (psubclass_data->PageArraySize)
{
- gs_free(dev->memory->non_gc_memory, psubclass_data->PageArray, 1, , "array of pages selected");
+ gs_free(dev->memory->non_gc_memory, psubclass_data->PageArray, 1, psubclass_data->PageArraySize, "array of pages selected");
psubclass_data->PageArray = 0;
psubclass_data->PageArraySize = 0;
}
@@ -504,23 +504,116 @@ int flp_get_bits(gx_device *dev, int y, byte *data, byte **actual_data)
return gx_default_get_bits(dev, y, data, actual_data);
}
+static void
+flp_rc_free_pages_list(gs_memory_t * mem, void *ptr_in, client_name_t cname)
+{
+ gdev_pagelist *PageList = (gdev_pagelist *)ptr_in;
+
+ if (PageList->rc.ref_count <= 1) {
+ gs_free(mem->non_gc_memory, PageList->Pages, 1, PagesSize, "free page list");
+ gs_free(mem->non_gc_memory, PageList, 1, sizeof(gdev_pagelist), "free structure to hold page list");
+ }
+}
+
int
flp_put_params(gx_device * dev, gs_param_list * plist)
{
bool temp_bool = false;
- int code;
+ int code, ecode;
+ gs_param_string pagelist;
+
+ code = param_read_int(plist, "FirstPage", &dev->FirstPage);
+ if (code < 0)
+ ecode = code;
+ if (code == 0) {
+ first_last_subclass_data *psubclass_data = dev->subclass_data;
+
+ dev->DisablePageHandler = false;
+ psubclass_data->PageCount = 0;
+ if (dev->PageList) {
+ rc_decrement(dev->PageList, "flp_put_params");
+ dev->PageList = NULL;
+ }
+ if (psubclass_data->PageArray != NULL) {
+ gs_free(dev->memory->non_gc_memory, psubclass_data->PageArray, 1, psubclass_data->PageArraySize, "array of pages selected");
+ psubclass_data->PageArray = NULL;
+ psubclass_data->PageArraySize = 0;
+ }
+ }
+
+ code = param_read_int(plist, "LastPage", &dev->LastPage);
+ if (code < 0)
+ ecode = code;
+ if (code == 0) {
+ first_last_subclass_data *psubclass_data = dev->subclass_data;
+
+ dev->DisablePageHandler = false;
+ psubclass_data->PageCount = 0;
+ if (dev->PageList) {
+ rc_decrement(dev->PageList, "flp_put_params");
+ dev->PageList = NULL;
+ }
+ if (psubclass_data->PageArray != NULL) {
+ gs_free(dev->memory->non_gc_memory, psubclass_data->PageArray, 1, psubclass_data->PageArraySize, "array of pages selected");
+ psubclass_data->PageArray = NULL;
+ psubclass_data->PageArraySize = 0;
+ }
+ }
code = param_read_bool(plist, "DisablePageHandler", &temp_bool);
if (code < 0)
- return code;
- if (code == 0)
+ ecode = code;
+ if (code == 0) {
dev->DisablePageHandler = temp_bool;
+ if (dev->DisablePageHandler == false) {
+ first_last_subclass_data *psubclass_data = dev->subclass_data;
+
+ psubclass_data->PageCount = 0;
+ }
+ }
+
+ code = param_read_string(plist, "PageList", &pagelist);
+ if (code < 0)
+ ecode = code;
+
+ if (code == 0 && pagelist.size > 0) {
+ first_last_subclass_data *psubclass_data = dev->subclass_data;
+
+ if (dev->PageList)
+ rc_decrement(dev->PageList, "flp_put_params");
+
+ if (psubclass_data->PageArray != NULL) {
+ gs_free(dev->memory->non_gc_memory, psubclass_data->PageArray, 1, psubclass_data->PageArraySize, "array of pages selected");
+ psubclass_data->PageArray = NULL;
+ psubclass_data->PageArraySize = 0;
+ }
+
+ dev->PageList = (gdev_pagelist *)gs_alloc_bytes(dev->memory->non_gc_memory, sizeof(gdev_pagelist), "structure to hold page list");
+ if (!dev->PageList)
+ return gs_note_error(gs_error_VMerror);
+ dev->PageList->Pages = (void *)gs_alloc_bytes(dev->memory->non_gc_memory, pagelist.size + 1, "String to hold page list");
+ if (!dev->PageList->Pages){
+ gs_free(dev->memory->non_gc_memory, dev->PageList, 1, sizeof(gdev_pagelist), "free structure to hold page list");
+ dev->PageList = 0;
+ return gs_note_error(gs_error_VMerror);
+ }
+ memset(dev->PageList->Pages, 0x00, pagelist.size + 1);
+ memcpy(dev->PageList->Pages, pagelist.data, pagelist.size);
+ dev->PageList->PagesSize = pagelist.size + 1;
+ rc_init_free(dev->PageList, dev->memory->non_gc_memory, 1, flp_rc_free_pages_list);
+ psubclass_data->ProcessedPageList = false;
+ dev->DisablePageHandler = false;
+ psubclass_data->PageCount = 0;
+ }
code = default_subclass_put_params(dev, plist);
if (code < 0)
return code;
+ if (ecode < 0)
+ code = ecode;
+
return code;
}
diff --git a/base/gdevflp.h b/base/gdevflp.h
index 04257877..ba38f1c1 100644
--- a/base/gdevflp.h
+++ b/base/gdevflp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevhit.c b/base/gdevhit.c
index 09f4b02b..769e8d3a 100644
--- a/base/gdevhit.c
+++ b/base/gdevhit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevkrnlsclass.c b/base/gdevkrnlsclass.c
index 6f910b12..8625df4c 100644
--- a/base/gdevkrnlsclass.c
+++ b/base/gdevkrnlsclass.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevkrnlsclass.h b/base/gdevkrnlsclass.h
index 5f586f29..b73ce3c2 100644
--- a/base/gdevkrnlsclass.h
+++ b/base/gdevkrnlsclass.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevm1.c b/base/gdevm1.c
index 5a573a65..299cf65d 100644
--- a/base/gdevm1.c
+++ b/base/gdevm1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevm16.c b/base/gdevm16.c
index 607e1d5d..f20b4461 100644
--- a/base/gdevm16.c
+++ b/base/gdevm16.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevm2.c b/base/gdevm2.c
index 04a0e60d..3443ac2a 100644
--- a/base/gdevm2.c
+++ b/base/gdevm2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevm24.c b/base/gdevm24.c
index 7ee93591..5cea72f8 100644
--- a/base/gdevm24.c
+++ b/base/gdevm24.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevm32.c b/base/gdevm32.c
index 6cd9aa22..0e5e7f15 100644
--- a/base/gdevm32.c
+++ b/base/gdevm32.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevm4.c b/base/gdevm4.c
index 646f352f..dadb4755 100644
--- a/base/gdevm4.c
+++ b/base/gdevm4.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevm40.c b/base/gdevm40.c
index 39ffa06e..e2e9ef7d 100644
--- a/base/gdevm40.c
+++ b/base/gdevm40.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevm48.c b/base/gdevm48.c
index b19cba08..987a6390 100644
--- a/base/gdevm48.c
+++ b/base/gdevm48.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevm56.c b/base/gdevm56.c
index 9af7677d..2efbaf9b 100644
--- a/base/gdevm56.c
+++ b/base/gdevm56.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevm64.c b/base/gdevm64.c
index 11678f75..8c3be0d1 100644
--- a/base/gdevm64.c
+++ b/base/gdevm64.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevm8.c b/base/gdevm8.c
index fffef9f6..55f956b3 100644
--- a/base/gdevm8.c
+++ b/base/gdevm8.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevmem.c b/base/gdevmem.c
index 7b158a0e..95da5d6c 100644
--- a/base/gdevmem.c
+++ b/base/gdevmem.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -83,8 +83,8 @@ const gs_const_string mem_mono_w_b_palette = {
/* ------ Generic code ------ */
/* Return the appropriate memory device for a given */
-/* number of bits per pixel (0 if none suitable).
- Greater than 64 occurs for the planar case
+/* number of bits per pixel (0 if none suitable).
+ Greater than 64 occurs for the planar case
which we will then return a mem_x_device */
static const gx_device_memory *const mem_devices[65] = {
0, &mem_mono_device, &mem_mapped2_device, 0, &mem_mapped4_device,
@@ -161,7 +161,7 @@ gs_make_mem_device(gx_device_memory * dev, const gx_device_memory * mdproto,
break;
}
/* Preload the black and white cache. */
- if (target == 0) {
+ if (target == NULL) {
if (dev->color_info.depth == 1) {
/* The default for black-and-white devices is inverted. */
dev->cached_colors.black = 1;
@@ -192,7 +192,7 @@ gs_make_mem_device(gx_device_memory * dev, const gx_device_memory * mdproto,
cv[k] = 0;
}
}
- gdev_mem_mono_set_inverted(dev, (target == 0 ||
+ gdev_mem_mono_set_inverted(dev, (target == NULL ||
(*dev_proc(dev, encode_color))((gx_device *)dev, cv) != 0));
}
check_device_separable((gx_device *)dev);
@@ -212,7 +212,7 @@ gs_make_mem_device_with_copydevice(gx_device_memory ** ppdev,
int code;
gx_device_memory *pdev;
- if (mem == 0)
+ if (mem == NULL)
return -1;
code = gs_copydevice((gx_device **)&pdev,
@@ -230,7 +230,7 @@ gs_make_mem_device_with_copydevice(gx_device_memory ** ppdev,
break;
}
/* Preload the black and white cache. */
- if (target == 0) {
+ if (target == NULL) {
if (pdev->color_info.depth == 1) {
/* The default for black-and-white devices is inverted. */
pdev->cached_colors.black = 1;
@@ -252,7 +252,7 @@ gs_make_mem_device_with_copydevice(gx_device_memory ** ppdev,
gx_color_value cv[3];
cv[0] = cv[1] = cv[2] = 0;
- gdev_mem_mono_set_inverted(pdev, (target == 0 ||
+ gdev_mem_mono_set_inverted(pdev, (target == NULL ||
(*dev_proc(pdev, encode_color))((gx_device *)pdev, cv) != 0));
}
check_device_separable((gx_device *)pdev);
@@ -270,7 +270,7 @@ gs_make_mem_mono_device_with_copydevice(gx_device_memory ** ppdev, gs_memory_t *
int code;
gx_device_memory *pdev;
- if (mem == 0)
+ if (mem == NULL)
return -1;
code = gs_copydevice((gx_device **)&pdev,
@@ -436,12 +436,19 @@ mem_open(gx_device * dev)
int
gdev_mem_open_scan_lines(gx_device_memory *mdev, int setup_height)
{
+ return gdev_mem_open_scan_lines_interleaved(mdev, setup_height, 0);
+}
+int
+gdev_mem_open_scan_lines_interleaved(gx_device_memory *mdev,
+ int setup_height,
+ int interleaved)
+{
bool line_pointers_adjacent = true;
ulong size;
if (setup_height < 0 || setup_height > mdev->height)
return_error(gs_error_rangecheck);
- if (mdev->bitmap_memory != 0) {
+ if (mdev->bitmap_memory != NULL) {
int align;
/* Allocate the data now. */
if (gdev_mem_bitmap_size(mdev, &size) < 0)
@@ -451,7 +458,7 @@ gdev_mem_open_scan_lines(gx_device_memory *mdev, int setup_height)
return_error(gs_error_limitcheck);
mdev->base = gs_alloc_bytes(mdev->bitmap_memory, (uint)size,
"mem_open");
- if (mdev->base == 0)
+ if (mdev->base == NULL)
return_error(gs_error_VMerror);
#ifdef PACIFY_VALGRIND
/* If we end up writing the bitmap to the clist, we can get valgrind errors
@@ -463,14 +470,14 @@ gdev_mem_open_scan_lines(gx_device_memory *mdev, int setup_height)
align = 1<<mdev->log2_align_mod;
mdev->base += (-(int)(intptr_t)mdev->base) & (align-1);
mdev->foreign_bits = false;
- } else if (mdev->line_pointer_memory != 0) {
+ } else if (mdev->line_pointer_memory != NULL) {
/* Allocate the line pointers now. */
mdev->line_ptrs = (byte **)
gs_alloc_byte_array(mdev->line_pointer_memory, mdev->height,
sizeof(byte *) * (mdev->is_planar ? mdev->color_info.num_components : 1),
"gdev_mem_open_scan_lines");
- if (mdev->line_ptrs == 0)
+ if (mdev->line_ptrs == NULL)
return_error(gs_error_VMerror);
mdev->foreign_line_pointers = false;
line_pointers_adjacent = false;
@@ -478,7 +485,7 @@ gdev_mem_open_scan_lines(gx_device_memory *mdev, int setup_height)
if (line_pointers_adjacent) {
int code;
- if (mdev->base == 0)
+ if (mdev->base == NULL)
return_error(gs_error_rangecheck);
code = gdev_mem_bits_size(mdev, mdev->width, mdev->height, &size);
@@ -488,7 +495,9 @@ gdev_mem_open_scan_lines(gx_device_memory *mdev, int setup_height)
mdev->line_ptrs = (byte **)(mdev->base + size);
}
mdev->raster = gx_device_raster((gx_device *)mdev, 1);
- return gdev_mem_set_line_ptrs(mdev, NULL, 0, NULL, setup_height);
+ return gdev_mem_set_line_ptrs_interleaved(mdev, NULL, 0, NULL,
+ setup_height,
+ interleaved);
}
/*
* Set up the scan line pointers of a memory device.
@@ -497,13 +506,21 @@ gdev_mem_open_scan_lines(gx_device_memory *mdev, int setup_height)
* num_planes, plane_depths, plane_depth.
*/
int
-gdev_mem_set_line_ptrs(gx_device_memory * mdev, byte * base, int raster,
+gdev_mem_set_line_ptrs(gx_device_memory *mdev, byte *base, int raster,
byte **line_ptrs, int setup_height)
{
+ return gdev_mem_set_line_ptrs_interleaved(mdev, base, raster, line_ptrs, setup_height, 0);
+}
+int
+gdev_mem_set_line_ptrs_interleaved(gx_device_memory * mdev, byte * base,
+ int raster, byte **line_ptrs,
+ int setup_height, int interleaved)
+{
int num_planes = (mdev->is_planar ? mdev->color_info.num_components : 0);
byte **pline;
byte *data;
int pi;
+ int plane_raster;
/* If we are supplied with line_ptrs, then assume that we don't have
* any already, and take them on. */
@@ -539,6 +556,10 @@ gdev_mem_set_line_ptrs(gx_device_memory * mdev, byte * base, int raster,
num_planes = 1;
}
+ if (interleaved)
+ plane_raster = raster, raster *= num_planes;
+ else
+ plane_raster = raster * mdev->height;
for (pi = 0; pi < num_planes; ++pi) {
byte **pptr = pline;
byte **pend = pptr + setup_height;
@@ -548,7 +569,7 @@ gdev_mem_set_line_ptrs(gx_device_memory * mdev, byte * base, int raster,
*pptr++ = scan_line;
scan_line += raster;
}
- data += raster * mdev->height;
+ data += plane_raster;
pline += setup_height; /* not mdev->height, see gxdevmem.h */
}
@@ -610,7 +631,7 @@ mem_get_bits_rectangle(gx_device * dev, const gs_int_rect * prect,
GB_PACKING_CHUNKY | GB_COLORS_NATIVE | GB_ALPHA_NONE;
return_error(gs_error_rangecheck);
}
- if (mdev->line_ptrs == 0x00)
+ if (mdev->line_ptrs == NULL)
return_error(gs_error_rangecheck);
if ((w <= 0) | (h <= 0)) {
if ((w | h) < 0)
@@ -678,10 +699,10 @@ mem_swap_byte_rect(byte * base, uint raster, int x, int w, int h, bool store)
bits32 *pw = (bits32 *) row;
do {
- bits32 w = *pw;
+ bits32 v = *pw;
- *pw++ = (w >> 24) + ((w >> 8) & 0xff00) +
- ((w & 0xff00) << 8) + (w << 24);
+ *pw++ = (v >> 24) + ((v >> 8) & 0xff00) +
+ ((v & 0xff00) << 8) + (v << 24);
}
while (--nx);
}
@@ -715,7 +736,7 @@ mem_word_get_bits_rectangle(gx_device * dev, const gs_int_rect * prect,
bit_x = x * dev->color_info.depth;
bit_w = w * dev->color_info.depth;
- if(mdev->line_ptrs == 0x00)
+ if(mdev->line_ptrs == NULL)
return_error(gs_error_rangecheck);
src = scan_line_base(mdev, y);
diff --git a/base/gdevmem.h b/base/gdevmem.h
index 69cb6d0f..15759322 100644
--- a/base/gdevmem.h
+++ b/base/gdevmem.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevmpla.c b/base/gdevmpla.c
index ae805f4e..d889efcf 100644
--- a/base/gdevmpla.c
+++ b/base/gdevmpla.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -29,6 +29,7 @@
/* procedures */
static dev_proc_open_device(mem_planar_open);
+static dev_proc_open_device(mem_planar_open_interleaved);
declare_mem_procs(mem_planar_copy_mono, mem_planar_copy_color, mem_planar_fill_rectangle);
static dev_proc_copy_color(mem_planar_copy_color_24to8);
static dev_proc_copy_color(mem_planar_copy_color_4to1);
@@ -48,7 +49,8 @@ mem_planar_dev_spec_op(gx_device *pdev, int dev_spec_op,
{
cmm_dev_profile_t *dev_profile;
- if (dev_spec_op == gxdso_supports_devn) {
+ if (dev_spec_op == gxdso_supports_devn
+ || dev_spec_op == gxdso_skip_icc_component_validation) {
dev_proc(pdev, get_profile)(pdev, &dev_profile);
if (dev_profile != NULL && dev_profile->supports_devn &&
dev_proc(pdev, fill_rectangle_hl_color) == mem_planar_fill_rectangle_hl_color)
@@ -80,6 +82,14 @@ int
gdev_mem_set_planar(gx_device_memory * mdev, int num_planes,
const gx_render_plane_t *planes /*[num_planes]*/)
{
+ return gdev_mem_set_planar_interleaved(mdev, num_planes, planes, 0);
+}
+
+int
+gdev_mem_set_planar_interleaved(gx_device_memory * mdev, int num_planes,
+ const gx_render_plane_t *planes /*[num_planes]*/,
+ int interleaved)
+{
int total_depth;
int same_depth = planes[0].depth;
gx_color_index covered = 0;
@@ -114,7 +124,10 @@ gdev_mem_set_planar(gx_device_memory * mdev, int num_planes,
memcpy(mdev->planes, planes, num_planes * sizeof(planes[0]));
mdev->plane_depth = same_depth;
/* Change the drawing procedures. */
- set_dev_proc(mdev, open_device, mem_planar_open);
+ if (interleaved)
+ set_dev_proc(mdev, open_device, mem_planar_open_interleaved);
+ else
+ set_dev_proc(mdev, open_device, mem_planar_open);
/* Regardless of how many planes we are using, always let the
* device know how to handle hl_color. Even if we spot that we
* can get away with a normal device, our callers may want to
@@ -182,6 +195,17 @@ mem_planar_open(gx_device * dev)
return gdev_mem_open_scan_lines(mdev, dev->height);
}
+static int
+mem_planar_open_interleaved(gx_device * dev)
+{
+ gx_device_memory *const mdev = (gx_device_memory *)dev;
+
+ /* Check that we aren't trying to open a chunky device as planar. */
+ if (!dev->is_planar)
+ return_error(gs_error_rangecheck);
+ return gdev_mem_open_scan_lines_interleaved(mdev, dev->height, 1);
+}
+
/*
* We execute drawing operations by patching a few parameters in the
* device structure and then calling the procedure appropriate to the
@@ -2110,6 +2134,7 @@ mem_planar_get_bits_rectangle(gx_device * dev, const gs_int_rect * prect,
/* First off, see if we can satisfy get_bits_rectangle with just returning
* pointers to the existing data. */
+ if (params->options & GB_RETURN_POINTER)
{
gs_get_bits_params_t copy_params;
byte **base = &scan_line_base(mdev, y);
@@ -2165,6 +2190,57 @@ mem_planar_get_bits_rectangle(gx_device * dev, const gs_int_rect * prect,
}
}
}
+
+ if ((params->options & GB_RETURN_POINTER) == 0) {
+ /* Can we do the fetch using a faked GB_RETURN_POINTER request
+ * and then copy the data? */
+ gs_get_bits_params_t params2 = *params;
+ gs_get_bits_params_t copy_params;
+ byte **base = &scan_line_base(mdev, y);
+ int code;
+
+ params2.options &= ~GB_RETURN_COPY;
+ params2.options |= GB_RETURN_POINTER;
+
+ copy_params.options =
+ GB_COLORS_NATIVE | GB_PACKING_PLANAR | GB_ALPHA_NONE |
+ (mdev->raster ==
+ bitmap_raster(mdev->width * mdev->color_info.depth) ?
+ GB_RASTER_STANDARD : GB_RASTER_SPECIFIED);
+ params2.raster = mdev->raster;
+ copy_params.raster = mdev->raster;
+ code = gx_get_bits_return_pointer(dev, x, h, &params2,
+ &copy_params, base);
+ if (code >= 0) {
+ /* get_bits worked. Let's copy the data out. */
+ int bpc = mdev->color_info.depth / mdev->color_info.num_components;
+ int left = x;
+ int right = x+w;
+ int i, j;
+ switch (bpc) {
+ case 1: left >>= 3; right = (right+7)>>3; break;
+ case 2: left >>= 2; right = (right+3)>>2; break;
+ case 4: left >>= 1; right = (right+1)>>1; break;
+ case 8: break;
+ case 12: left = (left&~1); left += left>>1;
+ right = right+(right>>1)+(right&1); break;
+ case 16: left *= 2; right *= 2; break;
+ default: return_error(gs_error_rangecheck);
+ }
+ right -= left;
+ for (i = 0; i < mdev->color_info.num_components; i++) {
+ byte *d = params->data[i];
+ const byte *s = params2.data[i];
+ for (j = 0; j < h; j++) {
+ memcpy(d, s, right);
+ d += params->raster;
+ s += params2.raster;
+ }
+ }
+ return code;
+ }
+ }
+
/*
* We can't return the requested plane by itself. Fall back to
* chunky format. This is somewhat painful.
diff --git a/base/gdevmpla.h b/base/gdevmpla.h
index 06d83f56..1b424098 100644
--- a/base/gdevmpla.h
+++ b/base/gdevmpla.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -44,4 +44,9 @@
int gdev_mem_set_planar(gx_device_memory * mdev, int num_planes,
const gx_render_plane_t *planes /*[num_planes]*/);
+int gdev_mem_set_planar_interleaved(
+ gx_device_memory * mdev, int num_planes,
+ const gx_render_plane_t *planes /*[num_planes]*/,
+ int interleaved);
+
#endif /* gdevmpla_INCLUDED */
diff --git a/base/gdevmplt.c b/base/gdevmplt.c
index c102639f..520b22cf 100644
--- a/base/gdevmplt.c
+++ b/base/gdevmplt.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevmplt.h b/base/gdevmplt.h
index d314afc7..4b1b44cd 100644
--- a/base/gdevmplt.h
+++ b/base/gdevmplt.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevmr1.c b/base/gdevmr1.c
index ec21e1aa..2911f4f3 100644
--- a/base/gdevmr1.c
+++ b/base/gdevmr1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevmr2n.c b/base/gdevmr2n.c
index db802c7b..228f29dd 100644
--- a/base/gdevmr2n.c
+++ b/base/gdevmr2n.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevmr8n.c b/base/gdevmr8n.c
index 89bbb61f..055e79cc 100644
--- a/base/gdevmr8n.c
+++ b/base/gdevmr8n.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevmrop.h b/base/gdevmrop.h
index 2c7a382b..6caebdf6 100644
--- a/base/gdevmrop.h
+++ b/base/gdevmrop.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevmrun.c b/base/gdevmrun.c
index 40d61741..df1667e2 100644
--- a/base/gdevmrun.c
+++ b/base/gdevmrun.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevmrun.h b/base/gdevmrun.h
index c808258e..b9cf0e54 100644
--- a/base/gdevmrun.h
+++ b/base/gdevmrun.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevmx.c b/base/gdevmx.c
index 60a0f7c7..ee8c6396 100644
--- a/base/gdevmx.c
+++ b/base/gdevmx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevnfwd.c b/base/gdevnfwd.c
index 4174c957..b81ff0e1 100644
--- a/base/gdevnfwd.c
+++ b/base/gdevnfwd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -1084,6 +1084,7 @@ static dev_proc_strip_copy_rop(null_strip_copy_rop);
static dev_proc_strip_copy_rop2(null_strip_copy_rop2);
static dev_proc_strip_tile_rect_devn(null_strip_tile_rect_devn);
static dev_proc_fill_rectangle_hl_color(null_fill_rectangle_hl_color);
+static dev_proc_dev_spec_op(null_spec_op);
#define null_procs(get_initial_matrix, get_page_device) {\
gx_default_open_device,\
@@ -1151,7 +1152,7 @@ static dev_proc_fill_rectangle_hl_color(null_fill_rectangle_hl_color);
NULL, /* push_transparency_state */\
NULL, /* pop_transparency_state */\
NULL, /* put_image */\
- gx_default_dev_spec_op, /* dev_spec_op */\
+ null_spec_op, /* dev_spec_op */\
NULL, /* copy_planes */\
NULL, /* get_profile */\
NULL, /* set_graphics_type_tag */\
@@ -1222,11 +1223,19 @@ null_copy_color(gx_device * dev, const byte * data,
static int
null_put_params(gx_device * dev, gs_param_list * plist)
{
+ int code;
+ cmm_dev_profile_t *iccs = dev->icc_struct;
+
/*
* If this is not a page device, we must defeat attempts to reset
* the size; otherwise this is equivalent to gx_forward_put_params.
+ * Equally, we don't want it to unexpectectly error out on certain
+ * ICC parameters - so defeat those, too.
*/
- int code = gx_forward_put_params(dev, plist);
+ dev->icc_struct = NULL;
+ code = gx_forward_put_params(dev, plist);
+ rc_decrement(dev->icc_struct, "null_put_params");
+ dev->icc_struct = iccs;
if (code < 0 || dev_proc(dev, get_page_device)(dev) == dev)
return code;
@@ -1346,6 +1355,18 @@ static int null_fill_rectangle_hl_color(gx_device *pdev,
return 0;
}
+static int
+null_spec_op(gx_device *pdev, int dev_spec_op, void *data, int size)
+{
+ /* Defeat the ICC profile components check, which we want to do since
+ we also short-circuit ICC device parameters - see null_put_params.
+ */
+ if (dev_spec_op == gxdso_skip_icc_component_validation) {
+ return 1;
+ }
+ return gx_default_dev_spec_op(pdev, dev_spec_op, data, size);
+}
+
bool
fwd_uses_fwd_cmap_procs(gx_device * dev)
{
@@ -1385,7 +1406,7 @@ static void do_device_dump(gx_device *dev, int n)
dmlprintf(dev->memory, "NULL\n");
return;
}
- dmlprintf3(dev->memory, "%p(%ld) = '%s'\n", dev, dev->rc.ref_count, dev->dname);
+ dmlprintf3(dev->memory, PRI_INTPTR"(%ld) = '%s'\n", (intptr_t)dev, dev->rc.ref_count, dev->dname);
data.n = 0;
do {
diff --git a/base/gdevoflt.c b/base/gdevoflt.c
index a8962e7c..a481e0b6 100644
--- a/base/gdevoflt.c
+++ b/base/gdevoflt.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevoflt.h b/base/gdevoflt.h
index 6e26746f..d1a9581d 100644
--- a/base/gdevoflt.h
+++ b/base/gdevoflt.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevp14.c b/base/gdevp14.c
index 2d11caea..0ac027f2 100644
--- a/base/gdevp14.c
+++ b/base/gdevp14.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -135,13 +135,13 @@ static void pdf14_debug_mask_stack_state(pdf14_ctx *ctx);
gs_private_st_ptrs7(st_pdf14_buf, pdf14_buf, "pdf14_buf",
pdf14_buf_enum_ptrs, pdf14_buf_reloc_ptrs,
saved, data, backdrop, transfer_fn, mask_stack,
- matte, parent_color_info);
+ matte, group_color_info);
-gs_private_st_ptrs2(st_pdf14_ctx, pdf14_ctx, "pdf14_ctx",
+gs_private_st_ptrs3(st_pdf14_ctx, pdf14_ctx, "pdf14_ctx",
pdf14_ctx_enum_ptrs, pdf14_ctx_reloc_ptrs,
- stack, mask_stack);
+ stack, mask_stack, base_color);
-gs_private_st_ptrs1(st_pdf14_clr, pdf14_parent_color_t, "pdf14_clr",
+gs_private_st_ptrs1(st_pdf14_clr, pdf14_group_color_t, "pdf14_clr",
pdf14_clr_enum_ptrs, pdf14_clr_reloc_ptrs, previous);
gs_private_st_ptrs2(st_pdf14_mask, pdf14_mask_t, "pdf_mask",
@@ -341,23 +341,21 @@ static int pdf14_cmykspot_put_image(gx_device * dev, gs_gstate * pgs,
static int pdf14_custom_put_image(gx_device * dev, gs_gstate * pgs,
gx_device * target);
-/* Used to alter device color mapping procs based upon group or softmask color space */
-static int pdf14_update_device_color_procs(gx_device *dev,
+/* Alter pdf14 device color model based upon group or softmask. This occurs
+ post clist or in immediate rendering case. Data stored with buffer */
+static pdf14_group_color_t* pdf14_push_color_model(gx_device *dev,
gs_transparency_color_t group_color, int64_t icc_hashcode,
- gs_gstate *pgs, cmm_profile_t *iccprofile, bool is_mask);
+ cmm_profile_t *iccprofile, bool is_mask);
+static void pdf14_pop_color_model(gx_device* dev, pdf14_group_color_t* group_color);
-/* Used to alter device color mapping procs based upon group or softmask color space */
-/* Uses color procs stack so that it can be used with clist writer */
-static int
-pdf14_update_device_color_procs_push_c(gx_device *dev,
- gs_transparency_color_t group_color, int64_t icc_hashcode,
- gs_gstate *pgs, cmm_profile_t *iccprofile, bool is_mask);
-
-static int
-pdf14_update_device_color_procs_pop_c(gx_device *dev,gs_gstate *pgs);
+/* Alter clist writer device color model based upon group or softmask. Data
+ stored in the device color model stack */
+static int pdf14_clist_push_color_model(gx_device* dev, gx_device* cdev, gs_gstate* pgs,
+ const gs_pdf14trans_t* pdf14pct, gs_memory_t* mem, bool is_mask);
+static int pdf14_clist_pop_color_model(gx_device* dev, gs_gstate* pgs);
-static void pdf14_push_parent_color(gx_device *dev, const gs_gstate *pgs);
-static void pdf14_pop_parent_color(gx_device *dev, const gs_gstate *pgs);
+/* Used for cleaning up the stack if things go wrong */
+static void pdf14_pop_group_color(gx_device *dev, const gs_gstate *pgs);
static const pdf14_procs_t gray_pdf14_procs = {
pdf14_unpack_additive,
@@ -775,7 +773,7 @@ ENUM_PTRS_WITH(pdf14_device_enum_ptrs, pdf14_device *pdev)
return 0;
}
case 0: return ENUM_OBJ(pdev->ctx);
-case 1: return ENUM_OBJ(pdev->trans_group_parent_cmap_procs);
+case 1: return ENUM_OBJ(pdev->color_model_stack);
case 2: return ENUM_OBJ(pdev->smaskcolor);
case 3: ENUM_RETURN(gx_device_enum_ptr(pdev->target));
case 4: ENUM_RETURN(gx_device_enum_ptr(pdev->pclist_device));
@@ -792,7 +790,7 @@ static RELOC_PTRS_WITH(pdf14_device_reloc_ptrs, pdf14_device *pdev)
}
RELOC_VAR(pdev->ctx);
RELOC_VAR(pdev->smaskcolor);
- RELOC_VAR(pdev->trans_group_parent_cmap_procs);
+ RELOC_VAR(pdev->color_model_stack);
pdev->target = gx_device_reloc_ptr(pdev->target, gcst);
pdev->pclist_device = gx_device_reloc_ptr(pdev->pclist_device, gcst);
}
@@ -889,12 +887,13 @@ resolve_matte(pdf14_buf *maskbuf, byte *src_data, int src_planestride, int src_r
need to do the offset to our data in the buffer. Bug 700686: If we are in
a softmask that includes a matte entry, then we need to undo the matte
entry here at this time in the image's native color space not the parent
- color space. */
+ color space. The big_endian term here is only set to true if the data
+ has been baked as such during the put_image blending operation. */
static forceinline pdf14_buf*
template_transform_color_buffer(gs_gstate *pgs, pdf14_ctx *ctx, gx_device *dev,
pdf14_buf *src_buf, byte *src_data, cmm_profile_t *src_profile,
cmm_profile_t *des_profile, int x0, int y0, int width, int height, bool *did_alloc,
- bool has_matte, bool deep)
+ bool has_matte, bool deep, bool big_endian)
{
gsicc_rendering_param_t rendering_params;
gsicc_link_t *icc_link;
@@ -943,8 +942,9 @@ template_transform_color_buffer(gs_gstate *pgs, pdf14_ctx *ctx, gx_device *dev,
des_planestride = height * des_rowstride;
des_n_planes = src_n_planes + diff;
des_n_chan = src_n_chan + diff;
- des_data = gs_alloc_bytes(ctx->memory, des_planestride * des_n_planes,
- "pdf14_transform_color_buffer");
+ des_data = gs_alloc_bytes(ctx->memory,
+ (size_t)des_planestride * des_n_planes,
+ "pdf14_transform_color_buffer");
if (des_data == NULL)
return NULL;
@@ -970,6 +970,11 @@ template_transform_color_buffer(gs_gstate *pgs, pdf14_ctx *ctx, gx_device *dev,
gsicc_init_buffer(&des_buff_desc, des_profile->num_comps, 1<<deep, false,
false, true, des_planestride, des_rowstride, height, width);
+ if (big_endian) {
+ src_buff_desc.little_endian = false;
+ des_buff_desc.little_endian = false;
+ }
+
/* If we have a matte entry, undo the pre-blending now. Also set pdf14
context to ensure that this is not done again during the group
composition */
@@ -1040,28 +1045,28 @@ static pdf14_buf*
pdf14_transform_color_buffer_no_matte(gs_gstate *pgs, pdf14_ctx *ctx, gx_device *dev,
pdf14_buf *src_buf, byte *src_data, cmm_profile_t *src_profile,
cmm_profile_t *des_profile, int x0, int y0, int width, int height, bool *did_alloc,
- bool deep)
+ bool deep, bool big_endian)
{
if (deep)
return template_transform_color_buffer(pgs, ctx, dev, src_buf, src_data, src_profile,
- des_profile, x0, y0, width, height, did_alloc, false, true);
+ des_profile, x0, y0, width, height, did_alloc, false, true, big_endian);
else
return template_transform_color_buffer(pgs, ctx, dev, src_buf, src_data, src_profile,
- des_profile, x0, y0, width, height, did_alloc, false, false);
+ des_profile, x0, y0, width, height, did_alloc, false, false, big_endian);
}
static pdf14_buf*
pdf14_transform_color_buffer_with_matte(gs_gstate *pgs, pdf14_ctx *ctx, gx_device *dev,
pdf14_buf *src_buf, byte *src_data, cmm_profile_t *src_profile,
cmm_profile_t *des_profile, int x0, int y0, int width, int height, bool *did_alloc,
- bool deep)
+ bool deep, bool big_endian)
{
if (deep)
return template_transform_color_buffer(pgs, ctx, dev, src_buf, src_data, src_profile,
- des_profile, x0, y0, width, height, did_alloc, true, true);
+ des_profile, x0, y0, width, height, did_alloc, true, true, big_endian);
else
return template_transform_color_buffer(pgs, ctx, dev, src_buf, src_data, src_profile,
- des_profile, x0, y0, width, height, did_alloc, true, false);
+ des_profile, x0, y0, width, height, did_alloc, true, false, big_endian);
}
/**
@@ -1082,7 +1087,6 @@ pdf14_buf_new(gs_int_rect *rect, bool has_tags, bool has_alpha_g,
/* yet another plane */
pdf14_buf *result;
- pdf14_parent_color_t *new_parent_color;
int rowstride = ((rect->q.x - rect->p.x + 3) & -4)<<deep;
int height = (rect->q.y - rect->p.y);
int n_planes = n_chan + (has_shape ? 1 : 0) + (has_alpha_g ? 1 : 0) +
@@ -1120,21 +1124,9 @@ pdf14_buf_new(gs_int_rect *rect, bool has_tags, bool has_alpha_g,
result->num_spots = num_spots;
result->deep = deep;
result->page_group = false;
- new_parent_color = gs_alloc_struct(memory, pdf14_parent_color_t, &st_pdf14_clr,
- "pdf14_buf_new");
- if (new_parent_color == NULL) {
- gs_free_object(memory, result, "pdf14_buf_new");
- return NULL;
- }
+ result->group_color_info = NULL;
+ result->group_popped = false;
- result->parent_color_info = new_parent_color;
- result->parent_color_info->get_cmap_procs = NULL;
- result->parent_color_info->parent_color_mapping_procs = NULL;
- result->parent_color_info->parent_color_comp_index = NULL;
- result->parent_color_info->icc_profile = NULL;
- result->parent_color_info->previous = NULL;
- result->parent_color_info->encode = NULL;
- result->parent_color_info->decode = NULL;
if (idle || height <= 0) {
/* Empty clipping - will skip all drawings. */
result->planestride = 0;
@@ -1142,8 +1134,9 @@ pdf14_buf_new(gs_int_rect *rect, bool has_tags, bool has_alpha_g,
} else {
planestride = rowstride * height;
result->planestride = planestride;
- result->data = gs_alloc_bytes(memory, planestride * n_planes,
- "pdf14_buf_new");
+ result->data = gs_alloc_bytes(memory,
+ (size_t)planestride * n_planes,
+ "pdf14_buf_new");
if (result->data == NULL) {
gs_free_object(memory, result, "pdf14_buf_new");
return NULL;
@@ -1173,7 +1166,7 @@ pdf14_buf_new(gs_int_rect *rect, bool has_tags, bool has_alpha_g,
static void
pdf14_buf_free(pdf14_buf *buf)
{
- pdf14_parent_color_t *old_parent_color_info = buf->parent_color_info;
+ pdf14_group_color_t *group_color_info = buf->group_color_info;
gs_memory_t *memory = buf->memory;
if (buf->mask_stack && buf->mask_stack->rc_mask)
@@ -1184,13 +1177,13 @@ pdf14_buf_free(pdf14_buf *buf)
gs_free_object(memory, buf->matte, "pdf14_buf_free");
gs_free_object(memory, buf->data, "pdf14_buf_free");
- while (old_parent_color_info) {
- if (old_parent_color_info->icc_profile != NULL) {
- gsicc_adjust_profile_rc(old_parent_color_info->icc_profile, -1, "pdf14_buf_free");
+ while (group_color_info) {
+ if (group_color_info->icc_profile != NULL) {
+ gsicc_adjust_profile_rc(group_color_info->icc_profile, -1, "pdf14_buf_free");
}
- buf->parent_color_info = old_parent_color_info->previous;
- gs_free_object(memory, old_parent_color_info, "pdf14_buf_free");
- old_parent_color_info = buf->parent_color_info;
+ buf->group_color_info = group_color_info->previous;
+ gs_free_object(memory, group_color_info, "pdf14_buf_free");
+ group_color_info = buf->group_color_info;
}
gs_free_object(memory, buf->backdrop, "pdf14_buf_free");
@@ -1216,63 +1209,31 @@ pdf14_rcmask_new(gs_memory_t *memory)
result = gs_alloc_struct(memory, pdf14_rcmask_t, &st_pdf14_rcmask,
"pdf14_maskbuf_new");
- if ( result == NULL )
- return(NULL);
+ if (result == NULL)
+ return NULL;
rc_init_free(result, memory, 1, rc_pdf14_maskbuf_free);
result->mask_buf = NULL;
result->memory = memory;
- return(result);
+ return result;
}
static pdf14_ctx *
-pdf14_ctx_new(gs_int_rect *rect, int n_chan, bool additive, gx_device *dev, bool deep)
+pdf14_ctx_new(gx_device *dev, bool deep)
{
pdf14_ctx *result;
- pdf14_buf *buf;
gs_memory_t *memory = dev->memory->stable_memory;
- bool has_tags = device_encodes_tags(dev);
- pdf14_device *pdev = (pdf14_device *)dev;
- int num_spots;
-
+
result = gs_alloc_struct(memory, pdf14_ctx, &st_pdf14_ctx, "pdf14_ctx_new");
if (result == NULL)
return result;
- /* Note: buffer creation expects alpha to be in number of channels */
- /* Old code here used num_spots = pdev->devn_params.page_spot_colors,
- * but this fails for devices like psdcmykog, which does not expand
- * to take on new spot colors, over and above the 2 it has built in.
- * Accordingly, we calculate the number of spot colors to be the
- * number of channels we've been asked for, less the number of
- * 'standard' colorants. */
- num_spots = n_chan - pdev->num_std_colorants;
- buf = pdf14_buf_new(rect, has_tags, false, false, false, n_chan + 1,
- num_spots, memory, deep);
- if (buf == NULL) {
- gs_free_object(memory, result, "pdf14_ctx_new");
- return NULL;
- }
- if_debug5m('v', memory,
- "[v]base buf: %d x %d, %d color channels, %d planes, deep=%d\n",
- buf->rect.q.x, buf->rect.q.y, buf->n_chan, buf->n_planes, deep);
- if (buf->data != NULL) {
- /* Memsetting by 0, so this copes with the deep case too */
- if (buf->has_tags) {
- memset(buf->data, 0, buf->planestride * (buf->n_planes-1));
- } else {
- memset(buf->data, 0, buf->planestride * buf->n_planes);
- }
- }
- buf->saved = NULL;
- result->stack = buf;
+ result->stack = NULL;
result->mask_stack = pdf14_mask_element_new(memory);
result->mask_stack->rc_mask = pdf14_rcmask_new(memory);
- result->n_chan = n_chan;
result->memory = memory;
- result->rect = *rect;
- result->additive = additive;
result->smask_depth = 0;
result->smask_blend = false;
result->deep = deep;
+ result->base_color = NULL;
return result;
}
@@ -1281,10 +1242,14 @@ pdf14_ctx_free(pdf14_ctx *ctx)
{
pdf14_buf *buf, *next;
+ if (ctx->base_color) {
+ gsicc_adjust_profile_rc(ctx->base_color->icc_profile, -1, "pdf14_ctx_free");
+ gs_free_object(ctx->memory, ctx->base_color, "pdf14_ctx_free");
+ }
if (ctx->mask_stack) {
/* A mask was created but was not used in this band. */
rc_decrement(ctx->mask_stack->rc_mask, "pdf14_ctx_free");
- gs_free_object(ctx->memory,ctx->mask_stack,"pdf14_ctx_free");
+ gs_free_object(ctx->memory, ctx->mask_stack, "pdf14_ctx_free");
}
for (buf = ctx->stack; buf != NULL; buf = next) {
next = buf->saved;
@@ -1333,44 +1298,184 @@ pdf14_find_backdrop_buf(pdf14_ctx *ctx, bool *is_backdrop)
return NULL;
}
+static pdf14_group_color_t*
+pdf14_make_base_group_color(gx_device* dev)
+{
+ pdf14_device* pdev = (pdf14_device*)dev;
+ pdf14_group_color_t* group_color;
+ bool deep = pdev->ctx->deep;
+
+ if_debug0m('v', dev->memory, "[v]pdf14_make_base_group_color\n");
+
+ group_color = gs_alloc_struct(pdev->ctx->memory,
+ pdf14_group_color_t, &st_pdf14_clr,
+ "pdf14_make_base_group_color");
+
+ if (group_color == NULL)
+ return NULL;
+ memset(group_color, 0, sizeof(pdf14_group_color_t));
+
+ group_color->blend_procs = pdev->blend_procs;
+ group_color->polarity = pdev->color_info.polarity;
+ group_color->num_components = pdev->color_info.num_components;
+ group_color->isadditive = pdev->ctx->additive;
+ group_color->unpack_procs = pdev->pdf14_procs;
+ group_color->max_color = pdev->color_info.max_color = deep ? 65535 : 255;
+ group_color->max_gray = pdev->color_info.max_gray = deep ? 65535 : 255;
+ group_color->depth = pdev->color_info.depth;
+ group_color->decode = dev_proc(pdev, decode_color);
+ group_color->encode = dev_proc(pdev, encode_color);
+ group_color->group_color_mapping_procs = dev_proc(pdev, get_color_mapping_procs);
+ group_color->group_color_comp_index = dev_proc(pdev, get_color_comp_index);
+ memcpy(&(group_color->comp_bits), &(pdev->color_info.comp_bits),
+ GX_DEVICE_COLOR_MAX_COMPONENTS);
+ memcpy(&(group_color->comp_shift), &(pdev->color_info.comp_shift),
+ GX_DEVICE_COLOR_MAX_COMPONENTS);
+ group_color->get_cmap_procs = pdf14_get_cmap_procs;
+ group_color->icc_profile =
+ pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE];
+ gsicc_adjust_profile_rc(group_color->icc_profile, 1, "pdf14_make_base_group_color");
+
+ return group_color;
+}
+
+/* This wil create the first buffer when we have
+ either the first drawing operation or transparency
+ group push. At that time, the color space in which
+ we are going to be doing the alpha blend will be known. */
+static int
+pdf14_initialize_ctx(gx_device* dev, int n_chan, bool additive, const gs_gstate* pgs)
+{
+ pdf14_device* pdev = (pdf14_device*)dev;
+ bool has_tags = device_encodes_tags(dev);
+ int num_spots = pdev->ctx->num_spots;
+ pdf14_buf* buf;
+ gs_memory_t* memory = dev->memory->stable_memory;
+
+ /* Check for a blank idle group as a base group */
+ if (pdev->ctx->stack != NULL && pdev->ctx->stack->group_popped &&
+ pdev->ctx->stack->idle) {
+ pdf14_buf_free(pdev->ctx->stack);
+ pdev->ctx->stack = NULL;
+ }
+
+ if (pdev->ctx->stack != NULL)
+ return 0;
+
+ if_debug2m('v', dev->memory, "[v]pdf14_initialize_ctx: width = %d, height = %d\n",
+ dev->width, dev->height);
+
+ buf = pdf14_buf_new(&(pdev->ctx->rect), has_tags, false, false, false, n_chan + 1,
+ num_spots, memory, pdev->ctx->deep);
+ if (buf == NULL) {
+ return gs_error_VMerror;
+ }
+ if_debug5m('v', memory,
+ "[v]base buf: %d x %d, %d color channels, %d planes, deep=%d\n",
+ buf->rect.q.x, buf->rect.q.y, buf->n_chan, buf->n_planes, pdev->ctx->deep);
+
+ /* This check is not really needed */
+ if (buf->data != NULL) {
+ /* Memsetting by 0, so this copes with the deep case too */
+ if (buf->has_tags) {
+ memset(buf->data, 0, (size_t)buf->planestride * (buf->n_planes - 1));
+ }
+ else {
+ memset(buf->data, 0, (size_t)buf->planestride * buf->n_planes);
+ }
+ }
+ buf->saved = NULL;
+ pdev->ctx->stack = buf;
+ pdev->ctx->n_chan = n_chan;
+ pdev->ctx->additive = additive;
+
+ /* Every buffer needs group color information including the base
+ one that is created for when we have no group */
+ buf->group_color_info = gs_alloc_struct(pdev->memory->stable_memory,
+ pdf14_group_color_t, &st_pdf14_clr, "pdf14_initialize_ctx");
+ if (buf->group_color_info == NULL)
+ return gs_error_VMerror;
+
+ if (pgs != NULL)
+ buf->group_color_info->get_cmap_procs = pgs->get_cmap_procs;
+ else
+ buf->group_color_info->get_cmap_procs = pdf14_get_cmap_procs;
+
+ buf->group_color_info->group_color_mapping_procs =
+ dev_proc(pdev, get_color_mapping_procs);
+ buf->group_color_info->group_color_comp_index =
+ dev_proc(pdev, get_color_comp_index);
+ buf->group_color_info->blend_procs = pdev->blend_procs;
+ buf->group_color_info->polarity = pdev->color_info.polarity;
+ buf->group_color_info->num_components = pdev->color_info.num_components;
+ buf->group_color_info->isadditive = pdev->ctx->additive;
+ buf->group_color_info->unpack_procs = pdev->pdf14_procs;
+ buf->group_color_info->depth = pdev->color_info.depth;
+ buf->group_color_info->max_color = pdev->color_info.max_color;
+ buf->group_color_info->max_gray = pdev->color_info.max_gray;
+ buf->group_color_info->encode = dev_proc(pdev, encode_color);
+ buf->group_color_info->decode = dev_proc(pdev, decode_color);
+ memcpy(&(buf->group_color_info->comp_bits), &(pdev->color_info.comp_bits),
+ GX_DEVICE_COLOR_MAX_COMPONENTS);
+ memcpy(&(buf->group_color_info->comp_shift), &(pdev->color_info.comp_shift),
+ GX_DEVICE_COLOR_MAX_COMPONENTS);
+ buf->group_color_info->previous = NULL; /* used during clist writing */
+ buf->group_color_info->icc_profile =
+ pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE];
+ if (buf->group_color_info->icc_profile != NULL)
+ gsicc_adjust_profile_rc(buf->group_color_info->icc_profile, 1, "pdf14_initialize_ctx");
+
+ return 0;
+}
+
+static pdf14_group_color_t*
+pdf14_clone_group_color_info(gx_device* pdev, pdf14_group_color_t* src)
+{
+ pdf14_group_color_t* des = gs_alloc_struct(pdev->memory->stable_memory,
+ pdf14_group_color_t, &st_pdf14_clr, "pdf14_clone_group_color_info");
+ if (des == NULL)
+ return NULL;
+
+ memcpy(des, src, sizeof(pdf14_group_color_t));
+ if (des->icc_profile != NULL)
+ gsicc_adjust_profile_rc(des->icc_profile, 1, "pdf14_clone_group_color_info");
+ des->previous = NULL; /* used during clist writing for state stack */
+
+ return des;
+}
+
static int
pdf14_push_transparency_group(pdf14_ctx *ctx, gs_int_rect *rect, bool isolated,
- bool knockout, uint16_t alpha, uint16_t shape,
+ bool knockout, uint16_t alpha, uint16_t shape, uint16_t opacity,
gs_blend_mode_t blend_mode, bool idle, uint mask_id,
- int numcomps, bool cm_back_drop,
- cmm_profile_t *group_profile,
- cmm_profile_t *tos_profile, gs_gstate *pgs,
+ int numcomps, bool cm_back_drop, bool shade_group,
+ cmm_profile_t *group_profile, cmm_profile_t *tos_profile,
+ pdf14_group_color_t* group_color, gs_gstate *pgs,
gx_device *dev)
{
pdf14_buf *tos = ctx->stack;
pdf14_buf *buf, * pdf14_backdrop;
- bool has_shape, has_tags, is_backdrop;
+ bool has_shape = false;
+ bool is_backdrop;
+ int num_spots;
if_debug1m('v', ctx->memory,
"[v]pdf14_push_transparency_group, idle = %d\n", idle);
- /* We are going to use the shape in the knockout computation. If previous
- buffer has a shape or if this is a knockout then we will have a shape here */
- has_shape = tos->has_shape || tos->knockout;
- /* If previous buffer has tags, then add tags here */
- has_tags = tos->has_tags;
+ if (tos != NULL)
+ has_shape = tos->has_shape || tos->knockout;
- /* If the group is NOT isolated we add in the alpha_g plane. This enables
- recompositing to be performed ala art_pdf_recomposite_group_8 so that
- the backdrop is only included one time in the computation.
+ if (ctx->smask_depth > 0)
+ num_spots = 0;
+ else
+ num_spots = ctx->num_spots;
- For shape and alpha, backdrop removal is accomplished by maintaining
- two sets of variables to hold the accumulated values. The group shape
- and alpha, f_g and alpha_g, accumulate only the shape and alpha of the group
- elements, excluding the group backdrop.
- */
- /* Order of buffer data is color data, followed by alpha channel, followed by
- shape (if present), then alpha_g (if present), then tags (if present) */
- buf = pdf14_buf_new(rect, has_tags, !isolated, has_shape, idle, numcomps + 1,
- tos->num_spots, ctx->memory, ctx->deep);
+ buf = pdf14_buf_new(rect, ctx->has_tags, !isolated, has_shape, idle, numcomps + 1,
+ num_spots, ctx->memory, ctx->deep);
if (buf == NULL)
return_error(gs_error_VMerror);
+
if_debug4m('v', ctx->memory,
"[v]base buf: %d x %d, %d color channels, %d planes\n",
buf->rect.q.x, buf->rect.q.y, buf->n_chan, buf->n_planes);
@@ -1378,6 +1483,7 @@ pdf14_push_transparency_group(pdf14_ctx *ctx, gs_int_rect *rect, bool isolated,
buf->knockout = knockout;
buf->alpha = alpha;
buf->shape = shape;
+ buf->opacity = opacity;
buf->blend_mode = blend_mode;
buf->mask_id = mask_id;
buf->mask_stack = ctx->mask_stack; /* Save because the group rendering may
@@ -1385,8 +1491,9 @@ pdf14_push_transparency_group(pdf14_ctx *ctx, gs_int_rect *rect, bool isolated,
ctx->mask_stack = NULL; /* Clean the mask field for rendering this group.
See pdf14_pop_transparency_group how to handle it. */
buf->saved = tos;
+ buf->group_color_info = group_color;
- if (tos->saved == NULL)
+ if (tos == NULL)
buf->page_group = true;
ctx->stack = buf;
@@ -1400,9 +1507,10 @@ pdf14_push_transparency_group(pdf14_ctx *ctx, gs_int_rect *rect, bool isolated,
if (pdf14_backdrop == NULL || (is_backdrop && pdf14_backdrop->backdrop == NULL)) {
/* Note, don't clear out tags set by pdf14_buf_new == GS_UNKNOWN_TAG */
/* Memsetting by 0, so this copes with the deep case too */
- memset(buf->data, 0, buf->planestride * (buf->n_chan +
- (buf->has_shape ? 1 : 0) +
- (buf->has_alpha_g ? 1 : 0)));
+ memset(buf->data, 0, (size_t)buf->planestride *
+ (buf->n_chan +
+ (buf->has_shape ? 1 : 0) +
+ (buf->has_alpha_g ? 1 : 0)));
} else {
if (!cm_back_drop) {
pdf14_preserve_backdrop(buf, pdf14_backdrop, is_backdrop
@@ -1427,13 +1535,15 @@ pdf14_push_transparency_group(pdf14_ctx *ctx, gs_int_rect *rect, bool isolated,
need to blend with its backdrop. This could be NULL if the parent was
an isolated knockout group. */
if (buf->knockout && pdf14_backdrop != NULL) {
- buf->backdrop = gs_alloc_bytes(ctx->memory, buf->planestride * buf->n_planes,
- "pdf14_push_transparency_group");
+ buf->backdrop = gs_alloc_bytes(ctx->memory,
+ (size_t)buf->planestride * buf->n_planes,
+ "pdf14_push_transparency_group");
if (buf->backdrop == NULL) {
return gs_throw(gs_error_VMerror, "Knockout backdrop allocation failed");
}
- memcpy(buf->backdrop, buf->data, buf->planestride * buf->n_planes);
+ memcpy(buf->backdrop, buf->data,
+ (size_t)buf->planestride * buf->n_planes);
#if RAW_DUMP
/* Dump the current buffer to see what we have. */
@@ -1468,30 +1578,73 @@ pdf14_pop_transparency_group(gs_gstate *pgs, pdf14_ctx *ctx,
pdf14_buf *maskbuf;
int x0, x1, y0, y1;
int nos_num_color_comp;
- bool icc_match;
+ bool no_icc_match;
pdf14_device *pdev = (pdf14_device *)dev;
bool overprint = pdev->overprint;
gx_color_index drawn_comps = pdev->drawn_comps_stroke | pdev->drawn_comps_fill;
bool has_matte = false;
- if (nos == NULL)
- return_error(gs_error_unknownerror); /* Unmatched group pop */
-
- nos_num_color_comp = nos->parent_color_info->num_components - nos->num_spots;
- tos_num_color_comp = tos_num_color_comp - tos->num_spots;
-
#ifdef DEBUG
pdf14_debug_mask_stack_state(ctx);
#endif
if (mask_stack == NULL) {
maskbuf = NULL;
- } else {
+ }
+ else {
maskbuf = mask_stack->rc_mask->mask_buf;
}
if (maskbuf != NULL && maskbuf->matte != NULL)
has_matte = true;
+ /* Check if this is our last buffer, if yes, there is nothing to
+ compose to. Keep this buffer until we have the put image.
+ If we have another group push, this group must be destroyed.
+ This only occurs sometimes when at clist creation time
+ push_shfill_group occured and nothing was drawn in this group.
+ There is also the complication if we have a softmask. There
+ are two approaches to this problem. Apply the softmask during
+ the put image or handle it now. I choose the later as the
+ put_image code is already way to complicated. */
+ if (nos == NULL && maskbuf == NULL) {
+ tos->group_popped = true;
+ return 0;
+ }
+
+ /* Here is the case with the soft mask. Go ahead and create a new
+ target buffer (nos) with the same color information etc, but blank
+ and go ahead and do the blend with the softmask so that it gets applied. */
+ if (nos == NULL && maskbuf != NULL) {
+ nos = pdf14_buf_new(&(tos->rect), ctx->has_tags, !tos->isolated, tos->has_shape,
+ tos->idle, tos->n_chan, tos->num_spots, ctx->memory, ctx->deep);
+ if (nos == NULL)
+ return gs_error_VMerror;
+
+ if_debug4m('v', ctx->memory,
+ "[v] special buffer for softmask application: %d x %d, %d color channels, %d planes\n",
+ nos->rect.q.x, nos->rect.q.y, nos->n_chan, nos->n_planes);
+
+ nos->dirty = tos->dirty;
+ nos->isolated = tos->isolated;
+ nos->knockout = tos->knockout;
+ nos->alpha = 65535;
+ nos->shape = 65535;
+ nos->opacity = 65535;
+ nos->blend_mode = tos->blend_mode;
+ nos->mask_id = tos->mask_id;
+ nos->group_color_info = pdf14_clone_group_color_info(dev, tos->group_color_info);
+
+ if (nos->data != NULL)
+ memset(nos->data, 0,
+ (size_t)nos->planestride *
+ (nos->n_chan +
+ (nos->has_shape ? 1 : 0) +
+ (nos->has_alpha_g ? 1 : 0)));
+ }
+
+ nos_num_color_comp = nos->group_color_info->num_components - tos->num_spots;
+ tos_num_color_comp = tos_num_color_comp - tos->num_spots;
+
/* Sanitise the dirty rectangles, in case some of the drawing routines
* have made them overly large. */
rect_intersect(tos->dirty, tos->rect);
@@ -1539,32 +1692,32 @@ pdf14_pop_transparency_group(gs_gstate *pgs, pdf14_ctx *ctx,
operations called in the tile transparency code. Instead we may want to
look at pdf14_begin_transparency_group and pdf14_end_transparency group which
is where all the ICC information is handled. We will return to look at that later */
- if (nos->parent_color_info->icc_profile != NULL) {
- icc_match = (nos->parent_color_info->icc_profile->hashcode !=
+ if (nos->group_color_info->icc_profile != NULL) {
+ no_icc_match = (nos->group_color_info->icc_profile->hashcode !=
curr_icc_profile->hashcode);
} else {
/* Let the other tests make the decision if we need to transform */
- icc_match = false;
+ no_icc_match = false;
}
/* If the color spaces are different and we actually did do a swap of
the procs for color */
- if ((nos->parent_color_info->parent_color_mapping_procs != NULL &&
- nos_num_color_comp != tos_num_color_comp) || icc_match) {
+ if ((nos->group_color_info->group_color_mapping_procs != NULL &&
+ nos_num_color_comp != tos_num_color_comp) || no_icc_match) {
if (x0 < x1 && y0 < y1) {
pdf14_buf *result;
bool did_alloc; /* We don't care here */
if (has_matte) {
result = pdf14_transform_color_buffer_with_matte(pgs, ctx, dev,
- tos, tos->data, curr_icc_profile, nos->parent_color_info->icc_profile,
+ tos, tos->data, curr_icc_profile, nos->group_color_info->icc_profile,
tos->rect.p.x, tos->rect.p.y, tos->rect.q.x - tos->rect.p.x,
- tos->rect.q.y - tos->rect.p.y, &did_alloc, tos->deep);
+ tos->rect.q.y - tos->rect.p.y, &did_alloc, tos->deep, false);
has_matte = false;
} else {
result = pdf14_transform_color_buffer_no_matte(pgs, ctx, dev,
- tos, tos->data, curr_icc_profile, nos->parent_color_info->icc_profile,
+ tos, tos->data, curr_icc_profile, nos->group_color_info->icc_profile,
tos->rect.p.x, tos->rect.p.y, tos->rect.q.x - tos->rect.p.x,
- tos->rect.q.y - tos->rect.p.y, &did_alloc, tos->deep);
+ tos->rect.q.y - tos->rect.p.y, &did_alloc, tos->deep, false);
}
if (result == NULL)
return_error(gs_error_unknownerror); /* transform failed */
@@ -1580,8 +1733,8 @@ pdf14_pop_transparency_group(gs_gstate *pgs, pdf14_ctx *ctx,
#endif
/* compose. never do overprint in this case */
pdf14_compose_group(tos, nos, maskbuf, x0, x1, y0, y1, nos->n_chan,
- nos->parent_color_info->isadditive,
- nos->parent_color_info->parent_blending_procs,
+ nos->group_color_info->isadditive,
+ nos->group_color_info->blend_procs,
has_matte, false, drawn_comps, ctx->memory, dev);
}
} else {
@@ -1619,7 +1772,8 @@ pdf14_push_transparency_mask(pdf14_ctx *ctx, gs_int_rect *rect, uint16_t bg_alph
gs_transparency_mask_subtype_t subtype,
int numcomps, int Background_components,
const float Background[], int Matte_components,
- const float Matte[], const float GrayBackground)
+ const float Matte[], const float GrayBackground,
+ pdf14_group_color_t* group_color)
{
pdf14_buf *buf;
int i;
@@ -1629,13 +1783,17 @@ pdf14_push_transparency_mask(pdf14_ctx *ctx, gs_int_rect *rect, uint16_t bg_alph
idle, replacing);
ctx->smask_depth += 1;
+ if (ctx->stack == NULL) {
+ return_error(gs_error_VMerror);
+ }
+
/* An optimization to consider is that if the SubType is Alpha
then we really should only be allocating the alpha band and
only draw with that channel. Current architecture makes that
a bit tricky. We need to create this based upon the size of
the color space + an alpha channel. NOT the device size
or the previous ctx size */
- /* A mask doesnt worry about tags */
+ /* A mask doesn't worry about tags */
buf = pdf14_buf_new(rect, false, false, false, idle, numcomps + 1, 0,
ctx->memory, ctx->deep);
if (buf == NULL)
@@ -1649,6 +1807,8 @@ pdf14_push_transparency_mask(pdf14_ctx *ctx, gs_int_rect *rect, uint16_t bg_alph
buf->blend_mode = BLEND_MODE_Normal;
buf->transfer_fn = transfer_fn;
buf->matte_num_comps = Matte_components;
+ buf->group_color_info = group_color;
+
if (Matte_components) {
buf->matte = (uint16_t *)gs_alloc_bytes(ctx->memory, Matte_components * sizeof(uint16_t),
"pdf14_push_transparency_mask");
@@ -1683,7 +1843,7 @@ pdf14_push_transparency_mask(pdf14_ctx *ctx, gs_int_rect *rect, uint16_t bg_alph
/* Soft Mask related information so we know how to
compute luminosity when we pop the soft mask */
buf->SMask_SubType = subtype;
- if (buf->data != NULL){
+ if (buf->data != NULL) {
/* We need to initialize it to the BC if it existed */
/* According to the spec, the CS has to be the same */
/* If the back ground component is black, then don't bother
@@ -1706,11 +1866,11 @@ pdf14_push_transparency_mask(pdf14_ctx *ctx, gs_int_rect *rect, uint16_t bg_alph
need to set the alpha for this mask as if we had drawn in the
entire soft mask buffer */
memset(buf->data + buf->planestride, 255,
- buf->planestride *(buf->n_chan - 1));
+ (size_t)buf->planestride * (buf->n_chan - 1));
}
} else {
/* Compose mask with opaque background */
- memset(buf->data, 0, buf->planestride * buf->n_chan);
+ memset(buf->data, 0, (size_t)buf->planestride * buf->n_chan);
}
}
return 0;
@@ -1738,10 +1898,11 @@ static void pdf14_free_mask_stack(pdf14_ctx *ctx, gs_memory_t *memory)
static int
pdf14_pop_transparency_mask(pdf14_ctx *ctx, gs_gstate *pgs, gx_device *dev)
{
- pdf14_buf *tos = ctx->stack;
+ pdf14_buf* tos = ctx->stack;
+ pdf14_buf* nos = tos->saved;
byte *new_data_buf;
int icc_match;
- cmm_profile_t *des_profile = tos->parent_color_info->icc_profile; /* If set, this should be a gray profile */
+ cmm_profile_t *des_profile = nos->group_color_info->icc_profile; /* If set, this should be a gray profile */
cmm_profile_t *src_profile;
gsicc_rendering_param_t rendering_params;
gsicc_link_t *icc_link;
@@ -1755,7 +1916,7 @@ pdf14_pop_transparency_mask(pdf14_ctx *ctx, gs_gstate *pgs, gx_device *dev)
/* icc_match == -1 means old non-icc code.
icc_match == 0 means use icc code
icc_match == 1 mean no conversion needed */
- if ( des_profile != NULL && src_profile != NULL ) {
+ if (des_profile != NULL && src_profile != NULL ) {
icc_match = (des_profile->hashcode == src_profile->hashcode);
} else {
icc_match = -1;
@@ -1837,7 +1998,7 @@ pdf14_pop_transparency_mask(pdf14_ctx *ctx, gs_gstate *pgs, gx_device *dev)
global_index++;
#endif
} else {
- if ( icc_match == 1 || tos->n_chan == 2) {
+ if (icc_match == 1 || tos->n_chan == 2) {
#if RAW_DUMP
/* Dump the current buffer to see what we have. */
dump_raw_buffer(ctx->memory,
@@ -1938,11 +2099,13 @@ pdf14_mask_element_new(gs_memory_t *memory)
result = gs_alloc_struct(memory, pdf14_mask_t, &st_pdf14_mask,
"pdf14_mask_element_new");
+ if (result == NULL)
+ return NULL;
/* Get the reference counted mask */
result->rc_mask = NULL;
result->previous = NULL;
result->memory = memory;
- return(result);
+ return result;
}
static int
@@ -1960,7 +2123,7 @@ pdf14_push_transparency_state(gx_device *dev, gs_gstate *pgs)
/* We need to push the current mask buffer */
/* Allocate a new element for the stack.
Don't do anything if there is no mask present.*/
- if ( ctx->mask_stack != NULL ) {
+ if (ctx->mask_stack != NULL) {
new_mask = pdf14_mask_element_new(ctx->memory);
/* Duplicate and make the link */
new_mask->rc_mask = ctx->mask_stack->rc_mask;
@@ -1971,7 +2134,7 @@ pdf14_push_transparency_state(gx_device *dev, gs_gstate *pgs)
#ifdef DEBUG
pdf14_debug_mask_stack_state(pdev->ctx);
#endif
- return(0);
+ return 0;
}
static int
@@ -2013,25 +2176,25 @@ static int
pdf14_open(gx_device *dev)
{
pdf14_device *pdev = (pdf14_device *)dev;
- gs_int_rect rect;
- if_debug2m('v', dev->memory, "[v]pdf14_open: width = %d, height = %d\n",
- dev->width, dev->height);
- rect.p.x = 0;
- rect.p.y = 0;
- rect.q.x = dev->width;
- rect.q.y = dev->height;
/* If we are reenabling the device dont create a new ctx. Bug 697456 */
if (pdev->ctx == NULL) {
bool has_tags = device_encodes_tags(dev);
int bits_per_comp = ((dev->color_info.depth - has_tags*8) /
dev->color_info.num_components);
- pdev->ctx = pdf14_ctx_new(&rect, dev->color_info.num_components,
- pdev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE, dev,
- bits_per_comp > 8);
+ pdev->ctx = pdf14_ctx_new(dev, bits_per_comp > 8);
+ if (pdev->ctx == NULL)
+ return_error(gs_error_VMerror);
+
+ pdev->ctx->rect.p.x = 0;
+ pdev->ctx->rect.p.y = 0;
+ pdev->ctx->rect.q.x = dev->width;
+ pdev->ctx->rect.q.y = dev->height;
+ pdev->ctx->has_tags = has_tags;
+ pdev->ctx->num_spots = pdev->color_info.num_components - pdev->num_std_colorants;
+ pdev->ctx->additive = (pdev->color_info.polarity == GX_CINFO_POLARITY_ADDITIVE);
+ pdev->ctx->n_chan = pdev->color_info.num_components;
}
- if (pdev->ctx == NULL)
- return_error(gs_error_VMerror);
pdev->free_devicen = true;
pdev->text_group = PDF14_TEXTGROUP_NO_BT;
return 0;
@@ -2134,8 +2297,12 @@ pdf14_get_buffer_information(const gx_device * dev,
transbuff->planestride = planestride;
transbuff->rowstride = rowstride;
- transbuff->transbytes = gs_alloc_bytes(mem, planestride*(buf->n_chan + buf->has_tags ? 1 : 0),
- "pdf14_get_buffer_information");
+ transbuff->transbytes =
+ gs_alloc_bytes(mem,
+ (size_t)planestride *
+ (buf->n_chan +
+ buf->has_tags ? 1 : 0),
+ "pdf14_get_buffer_information");
if (transbuff->transbytes == NULL)
return gs_error_VMerror;
@@ -2224,12 +2391,65 @@ pdf14_get_buffer_information(const gx_device * dev,
global_index++;
#endif
}
- return(0);
+ return 0;
}
typedef void(*blend_image_row_proc_t) (const byte *gs_restrict buf_ptr,
int planestride, int width, int num_comp, uint16_t bg, byte *gs_restrict linebuf);
+
+static int
+pdf14_put_image_color_convert(const pdf14_device* dev, gs_gstate* pgs, cmm_profile_t* src_profile,
+ cmm_dev_profile_t* dev_target_profile, pdf14_buf** buf,
+ byte** buf_ptr, bool was_blended, int x, int y, int width, int height)
+{
+ pdf14_buf* cm_result = NULL;
+ cmm_profile_t* des_profile;
+ gsicc_rendering_param_t render_cond;
+ bool did_alloc;
+ bool big_endian;
+
+ gsicc_extract_profile(GS_UNKNOWN_TAG, dev_target_profile, &des_profile,
+ &render_cond);
+
+#if RAW_DUMP
+ dump_raw_buffer(dev->ctx->memory,
+ height, width, (*buf)->n_planes, (*buf)->planestride,
+ (*buf)->rowstride, "pdf14_put_image_color_convert_pre", *buf_ptr, (*buf)->deep);
+ global_index++;
+#endif
+
+ /* If we are doing a 16 bit buffer it will be big endian if we have already done the
+ blend, otherwise it will be native endian */
+ if (was_blended && (*buf)->deep) {
+ big_endian = true;
+ } else {
+ big_endian = false;
+ }
+
+ cm_result = pdf14_transform_color_buffer_no_matte(pgs, dev->ctx, (gx_device*) dev, *buf,
+ *buf_ptr, src_profile, des_profile, x, y, width,
+ height, &did_alloc, (*buf)->deep, big_endian);
+
+ if (cm_result == NULL)
+ return_error(gs_error_VMerror);
+
+ /* Update */
+ *buf = cm_result;
+
+ /* Make sure our buf_ptr is pointing to the proper location */
+ if (did_alloc)
+ *buf_ptr = cm_result->data; /* Note the lack of offset */
+
+#if RAW_DUMP
+ dump_raw_buffer(dev->ctx->memory,
+ height, width, (*buf)->n_planes, (*buf)->planestride,
+ (*buf)->rowstride, "pdf14_put_image_color_convert_post", *buf_ptr, (*buf)->deep);
+ global_index++;
+#endif
+ return 0;
+}
+
/**
* pdf14_put_image: Put rendered image to target device.
* @pdev: The PDF 1.4 rendering device.
@@ -2249,27 +2469,41 @@ pdf14_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
gs_image1_t image;
gx_image_enum_common_t *info;
pdf14_buf *buf = pdev->ctx->stack;
- gs_int_rect rect = buf->rect;
+ gs_int_rect rect;
int y;
- int num_comp = buf->n_chan - 1;
+ int num_comp;
byte *linebuf, *linebuf_unaligned;
gs_color_space *pcs;
int x1, y1, width, height;
- byte *buf_ptr, *buf16_ptr = NULL;
- bool data_blended = false;
+ byte *buf_ptr;
int num_rows_left;
- gsicc_rendering_param_t render_cond;
- cmm_dev_profile_t *dev_profile;
+ cmm_profile_t* src_profile = NULL;
+ cmm_profile_t* des_profile = NULL;
+ cmm_dev_profile_t *pdf14dev_profile;
cmm_dev_profile_t *dev_target_profile;
- uint16_t bg = pdev->ctx->additive ? 65535 : 0;
+ uint16_t bg;
bool has_tags = device_encodes_tags(dev);
- int bits_per_comp = ((dev->color_info.depth - has_tags*8) /
- dev->color_info.num_components);
bool deep = pdev->ctx->deep;
- bool expand = (!deep && bits_per_comp > 8);
- int planestride = buf->planestride;
- int rowstride = buf->rowstride;
+ int planestride;
+ int rowstride;
blend_image_row_proc_t blend_row;
+ bool color_mismatch = false;
+ bool supports_alpha = false;
+ int i;
+ int alpha_offset, tag_offset;
+ const byte* buf_ptrs[GS_CLIENT_COLOR_MAX_COMPONENTS];
+
+ /* Nothing was ever drawn. */
+ if (buf == NULL)
+ return 0;
+
+ bg = buf->group_color_info->isadditive ? 65535 : 0;
+ src_profile = buf->group_color_info->icc_profile;
+
+ num_comp = buf->n_chan - 1;
+ rect = buf->rect;
+ planestride = buf->planestride;
+ rowstride = buf->rowstride;
/* Make sure that this is the only item on the stack. Fuzzing revealed a
potential problem. Bug 694190 */
@@ -2287,7 +2521,7 @@ pdf14_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
#endif
if (width <= 0 || height <= 0 || buf->data == NULL)
return 0;
- buf_ptr = buf->data + rect.p.y * rowstride + (rect.p.x<<deep);
+ buf_ptr = buf->data + (rect.p.y - buf->rect.p.y) * buf->rowstride + ((rect.p.x - buf->rect.p.x) << deep);
/* Check that target is OK. From fuzzing results the target could have been
destroyed, for e.g if it were a pattern accumulator that was closed
@@ -2299,148 +2533,158 @@ pdf14_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
if (dev_target_profile == NULL)
return gs_throw_code(gs_error_Fatal);
- /* See if the target device can handle the image data directly. If it cannot, then we will need to
- use the begin_typed_image interface, which cannot pass along tag nor
- alpha data to the target device. */
- {
- pdf14_buf *cm_result = NULL;
- int alpha_offset, tag_offset;
- const byte *buf_ptrs[GS_CLIENT_COLOR_MAX_COMPONENTS];
- int i;
+ if (src_profile == NULL) {
+ code = dev_proc(dev, get_profile)(dev, &pdf14dev_profile);
+ if (code < 0) {
+ return code;
+ }
+ src_profile = pdf14dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE];
+ }
- /* If we are using a blending color space, take care of that first */
- if (pdev->using_blend_cs) {
- cmm_profile_t *src_profile;
- cmm_profile_t *des_profile;
- bool did_alloc;
+ /* Check if we have a color conversion issue */
+ if (!(src_profile->hash_is_valid)) {
+ gsicc_get_icc_buff_hash(src_profile->buffer,
+ &(src_profile->hashcode),
+ src_profile->buffer_size);
+ src_profile->hash_is_valid = true;
+ }
- code = dev_proc(dev, get_profile)(dev, &dev_profile);
- if (code < 0) {
- return code;
- }
- gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile, &src_profile,
- &render_cond);
- gsicc_extract_profile(GS_UNKNOWN_TAG, dev_target_profile, &des_profile,
- &render_cond);
+ des_profile = dev_target_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE];
+ if (!(des_profile->hash_is_valid)) {
+ gsicc_get_icc_buff_hash(des_profile->buffer,
+ &(des_profile->hashcode),
+ des_profile->buffer_size);
+ des_profile->hash_is_valid = true;
+ }
+
+ if (pdev->using_blend_cs ||
+ des_profile->hashcode != src_profile->hashcode)
+ color_mismatch = true;
+
+ /* Check if target supports alpha */
+ supports_alpha = dev_proc(target, dev_spec_op)(target, gxdso_supports_alpha, NULL, 0);
+ code = 0;
#if RAW_DUMP
- dump_raw_buffer(pdev->ctx->memory,
- height, width, buf->n_planes, planestride,
- rowstride, "pre_blend_cs", buf_ptr, deep);
- global_index++;
+ dump_raw_buffer(pdev->ctx->memory, height, width, buf->n_planes,
+ pdev->ctx->stack->planestride, pdev->ctx->stack->rowstride,
+ "pre_final_blend", buf_ptr, deep);
#endif
- cm_result = pdf14_transform_color_buffer_no_matte(pgs, pdev->ctx, dev, buf,
- buf_ptr, src_profile, des_profile, rect.p.x, rect.p.y, width,
- height, &did_alloc, buf->deep);
+ /* Note. The logic below will need a little rework if we ever
+ have a device that has tags and alpha support */
+ if (supports_alpha) {
+ if (!color_mismatch) {
+ alpha_offset = num_comp;
+ tag_offset = buf->has_tags ? buf->n_chan : 0;
- if (cm_result == NULL)
- return_error(gs_error_VMerror);
+ for (i = 0; i < buf->n_planes; i++)
+ buf_ptrs[i] = buf_ptr + i * planestride;
+ code = dev_proc(target, put_image) (target, target, buf_ptrs, num_comp,
+ rect.p.x, rect.p.y, width, height,
+ rowstride, alpha_offset,
+ tag_offset);
+ /* Right now code has number of rows written */
+ } else {
+ /* In this case, just color convert and maintain alpha. This is a case
+ where we either either blend in the right color space and have no
+ alpha for the output device or hand back the wrong color space with
+ alpha data. We choose the later. */
+ code = pdf14_put_image_color_convert(pdev, pgs, src_profile,
+ dev_target_profile, &buf, &buf_ptr, false, rect.p.x, rect.p.y,
+ width, height);
+ if (code < 0)
+ return code;
- /* Based upon our transform, do a bit of updating */
- buf = cm_result;
+ /* reset */
+ rowstride = buf->rowstride;
+ planestride = buf->planestride;
num_comp = buf->n_chan - 1;
+ alpha_offset = num_comp;
+ tag_offset = buf->has_tags ? buf->n_chan : 0;
- /* Make sure our buf_ptr is pointing to the proper location */
- if (did_alloc)
- buf_ptr = cm_result->data; /* Note the lack of offset */
+ /* And then out */
+ for (i = 0; i < buf->n_planes; i++)
+ buf_ptrs[i] = buf_ptr + i * planestride;
+ code = dev_proc(target, put_image) (target, target, buf_ptrs, num_comp,
+ rect.p.x, rect.p.y, width, height, rowstride, alpha_offset,
+ tag_offset);
+ /* Right now code has number of rows written */
+ }
+ } else if (has_tags) {
+ /* We are going out to a device that supports tags */
+ if (deep) {
+ gx_blend_image_buffer16(buf_ptr, width, height, rowstride,
+ buf->planestride, num_comp, bg);
+ } else {
+ gx_blend_image_buffer(buf_ptr, width, height, rowstride,
+ buf->planestride, num_comp, bg >> 8);
+ }
+
+#if RAW_DUMP
+ dump_raw_buffer(pdev->ctx->memory, height, width, buf->n_planes,
+ pdev->ctx->stack->planestride, pdev->ctx->stack->rowstride,
+ "post_final_blend", buf_ptr, deep);
+#endif
+
+ /* Take care of color issues */
+ if (color_mismatch) {
+ /* In this case, just color convert and maintain alpha. This is a case
+ where we either either blend in the right color space and have no
+ alpha for the output device or hand back the wrong color space with
+ alpha data. We choose the later. */
+ code = pdf14_put_image_color_convert(pdev, pgs, src_profile, dev_target_profile,
+ &buf, &buf_ptr, true, rect.p.x, rect.p.y, width, height);
+ if (code < 0)
+ return code;
#if RAW_DUMP
- dump_raw_buffer(pdev->ctx->memory,
- height, width, buf->n_planes, planestride,
- rowstride, "post_blend_cs", buf_ptr, deep);
+ dump_raw_buffer(pdev->ctx->memory, height, width, buf->n_planes,
+ pdev->ctx->stack->planestride, pdev->ctx->stack->rowstride,
+ "final_color_manage", buf_ptr, deep);
global_index++;
#endif
- /* May need to adjust background value due to color space change */
- if (des_profile->num_comps == 4)
- bg = 0;
- else
- bg = 65535;
}
- alpha_offset = num_comp;
+
+ /* reset */
+ rowstride = buf->rowstride;
+ planestride = buf->planestride;
+ num_comp = buf->n_chan - 1;
+ alpha_offset = 0; /* It is there but this indicates we have done the blend */
tag_offset = buf->has_tags ? buf->n_chan : 0;
- /* See if the target device can handle the data with alpha component */
+ /* And then out */
for (i = 0; i < buf->n_planes; i++)
buf_ptrs[i] = buf_ptr + i * planestride;
code = dev_proc(target, put_image) (target, target, buf_ptrs, num_comp,
- rect.p.x, rect.p.y, width, height,
- rowstride, alpha_offset,
- tag_offset);
- if (code == 0) {
- /* Device could not handle the alpha data. Go ahead and preblend
- now. Note that if we do this, and we end up in the default below,
- we only need to repack in chunky not blend */
-#if RAW_DUMP
- dump_raw_buffer(pdev->ctx->memory,
- height, width, buf->n_planes,
- pdev->ctx->stack->planestride, pdev->ctx->stack->rowstride,
- "pre_final_blend",buf_ptr,deep);
- global_index++;
-#endif
- if (expand) {
- buf16_ptr = gs_alloc_bytes(pdev->memory,
- planestride * num_comp * 2, "pdf14_put_image");
- gx_blend_image_buffer8to16(buf_ptr, (unsigned short*) buf16_ptr,
- width, height, rowstride, planestride, num_comp, bg>>8);
- planestride = planestride * 2;
- rowstride = rowstride * 2;
- for (i = 0; i < num_comp; i++)
- buf_ptrs[i] = buf16_ptr + i * planestride;
- } else {
- if (deep) {
- gx_blend_image_buffer16(buf_ptr, width, height, rowstride,
- buf->planestride, num_comp, bg);
- } else {
- gx_blend_image_buffer(buf_ptr, width, height, rowstride,
- buf->planestride, num_comp, bg>>8);
- }
-#if RAW_DUMP
- dump_raw_buffer_be(pdev->ctx->memory,
- height, width, buf->n_planes,
- pdev->ctx->stack->planestride, pdev->ctx->stack->rowstride,
- "post_final_blend", buf_ptr, deep);
- global_index++;
- clist_band_count++;
-#endif
- }
- data_blended = true;
+ rect.p.x, rect.p.y, width, height, rowstride, alpha_offset,
+ tag_offset);
+ /* Right now code has number of rows written */
+
+ }
- /* Try again now with just the tags */
- alpha_offset = 0;
+ /* If code > 0 then put image worked. Let it finish and then exit */
+ if (code > 0) {
+ /* We processed some or all of the rows. Continue until we are done */
+ num_rows_left = height - code;
+ while (num_rows_left > 0) {
code = dev_proc(target, put_image) (target, target, buf_ptrs, num_comp,
- rect.p.x, rect.p.y, width, height,
- rowstride, alpha_offset,
- tag_offset);
- }
- if (code > 0) {
- /* We processed some or all of the rows. Continue until we are done */
- num_rows_left = height - code;
- while (num_rows_left > 0) {
- code = dev_proc(target, put_image) (target, target, buf_ptrs, num_comp,
- rect.p.x, rect.p.y + code, width,
- num_rows_left, rowstride,
- alpha_offset, tag_offset);
- num_rows_left = num_rows_left - code;
- }
- if (buf16_ptr != NULL)
- gs_free_object(pdev->memory, buf16_ptr, "pdf14_put_image");
- return 0;
+ rect.p.x, rect.p.y + code, width,
+ num_rows_left, rowstride,
+ alpha_offset, tag_offset);
+ num_rows_left = num_rows_left - code;
}
+ return 0;
}
- /*
+ /* Target device did not support alpha or tags.
* Set color space in preparation for sending an image.
+ * color conversion will occur after blending with through
+ * the begin typed image work flow.
*/
- if (buf16_ptr != NULL) {
- /* If we ever hit this, then we've laboriously blended the
- * entire image for nothing. Check this doesn't happen in
- * normal use. */
- gs_free_object(pdev->memory, buf16_ptr, "pdf14_put_image");
- }
+
planestride = buf->planestride;
rowstride = buf->rowstride;
-
code = gs_cspace_build_ICC(&pcs, NULL, pgs->memory);
if (code < 0)
return code;
@@ -2451,13 +2695,8 @@ pdf14_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
for the pdf14 device to RGB and the target will be CIELAB. In addition,
the case when we have a blend color space that is different than the
target device color space */
- code = dev_proc(dev, get_profile)(dev, &dev_profile);
- if (code < 0) {
- rc_decrement_only_cs(pcs, "pdf14_put_image");
- return code;
- }
- gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile,
- &(pcs->cmm_icc_profile_data), &render_cond);
+ pcs->cmm_icc_profile_data = src_profile;
+
/* pcs takes a reference to the profile data it just retrieved. */
gsicc_adjust_profile_rc(pcs->cmm_icc_profile_data, 1, "pdf14_put_image");
gsicc_set_icc_range(&(pcs->cmm_icc_profile_data));
@@ -2467,6 +2706,7 @@ pdf14_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
image.Width = width;
image.Height = height;
image.BitsPerComponent = deep ? 16 : 8;
+ image.ColorSpace = pcs;
ctm_only_writable(pgs).xx = (float)width;
ctm_only_writable(pgs).xy = 0;
ctm_only_writable(pgs).yx = 0;
@@ -2495,9 +2735,7 @@ pdf14_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
pdev->ctx->stack->planestride, pdev->ctx->stack->rowstride,
"PDF14_PUTIMAGE_SMALL", buf_ptr, deep);
global_index++;
- if (!data_blended) {
- clist_band_count++;
- }
+ clist_band_count++;
#endif
/* Allocate on 32-byte border for AVX CMYK case. Four byte overflow for RGB case */
/* 28 byte overflow for AVX CMYK case. */
@@ -2519,28 +2757,9 @@ pdf14_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
bg >>= 8;
for (y = 0; y < height; y++) {
gx_image_plane_t planes;
- int rows_used,k,x;
-
- if (data_blended) {
- if (deep) {
- uint16_t *lb = (uint16_t *)(void *)linebuf;
- for (x = 0; x < width; x++) {
- for (k = 0; k < num_comp; k++) {
- *lb++ = *(uint16_t *)(void *)&buf_ptr[x + buf->planestride * k];
- }
- }
- } else {
- byte *lb = linebuf;
- for (x = 0; x < width; x++) {
- for (k = 0; k < num_comp; k++) {
- *lb++ = buf_ptr[x + buf->planestride * k];
- }
- }
- }
- } else {
- blend_row(buf_ptr, buf->planestride, width, num_comp, bg, linebuf);
- }
+ int rows_used;
+ blend_row(buf_ptr, buf->planestride, width, num_comp, bg, linebuf);
planes.data = linebuf;
planes.data_x = 0;
planes.raster = width * num_comp;
@@ -2555,6 +2774,451 @@ pdf14_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
return code;
}
+/* This is for the case where we have mixture of spots and additive color.
+ For example, RGB + spots or Gray + spots */
+static void
+gx_blend_image_mixed_buffer(byte* buf_ptr, int width, int height, int rowstride,
+ int planestride, int num_comp, int spot_start)
+{
+ int x, y;
+ int position;
+ byte comp, a;
+ int tmp, comp_num;
+
+ for (y = 0; y < height; y++) {
+ position = y * rowstride;
+ for (x = 0; x < width; x++) {
+ a = buf_ptr[position + planestride * num_comp];
+ if ((a + 1) & 0xfe) {
+ a ^= 0xff;
+ for (comp_num = 0; comp_num < spot_start; comp_num++) {
+ comp = buf_ptr[position + planestride * comp_num];
+ tmp = ((0xff - comp) * a) + 0x80;
+ comp += (tmp + (tmp >> 8)) >> 8;
+ buf_ptr[position + planestride * comp_num] = comp;
+ }
+ for (comp_num = spot_start; comp_num < num_comp; comp_num++) {
+ comp = buf_ptr[position + planestride * comp_num];
+ tmp = ((-comp) * a) + 0x80;
+ comp += (tmp + (tmp >> 8)) >> 8;
+ buf_ptr[position + planestride * comp_num] = comp;
+ }
+ } else if (a == 0) {
+ for (comp_num = 0; comp_num < spot_start; comp_num++) {
+ buf_ptr[position + planestride * comp_num] = 0xff;
+ }
+ for (comp_num = spot_start; comp_num < num_comp; comp_num++) {
+ buf_ptr[position + planestride * comp_num] = 0;
+ }
+ }
+ position += 1;
+ }
+ }
+}
+
+static void
+gx_blend_image_mixed_buffer16(byte* buf_ptr_, int width, int height, int rowstride,
+ int planestride, int num_comp, int spot_start)
+{
+ uint16_t* buf_ptr = (uint16_t*)(void*)buf_ptr_;
+ int x, y;
+ int position;
+ int comp, a;
+ int tmp, comp_num;
+
+ /* planestride and rowstride are in bytes, and we want them in shorts */
+ planestride >>= 1;
+ rowstride >>= 1;
+
+ /* Note that the input here is native endian, and the output must be in big endian! */
+ for (y = 0; y < height; y++) {
+ position = y * rowstride;
+ for (x = 0; x < width; x++) {
+ /* composite RGBA (or CMYKA, etc.) pixel with over solid background */
+ a = buf_ptr[position + planestride * num_comp];
+ if (a == 0) {
+ for (comp_num = 0; comp_num < spot_start; comp_num++) {
+ buf_ptr[position + planestride * comp_num] = 0xffff;
+ }
+ for (comp_num = spot_start; comp_num < num_comp; comp_num++) {
+ buf_ptr[position + planestride * comp_num] = 0;
+ }
+ } else if (a == 0xffff) {
+#if ARCH_IS_BIG_ENDIAN
+#else
+ /* Convert from native -> big endian */
+ for (comp_num = 0; comp_num < num_comp; comp_num++) {
+ comp = buf_ptr[position + planestride * comp_num];
+ ((byte*)&buf_ptr[position + planestride * comp_num])[0] = comp >> 8;
+ ((byte*)&buf_ptr[position + planestride * comp_num])[1] = comp;
+ }
+#endif
+ } else {
+ a ^= 0xffff;
+ a += a >> 15; /* a is now 0 to 0x10000 */
+ a >>= 1; /* We can only use 15 bits as bg-comp has a sign bit we can't lose */
+ for (comp_num = 0; comp_num < spot_start; comp_num++) {
+ comp = buf_ptr[position + planestride * comp_num];
+ tmp = ((0xffff - comp) * a) + 0x4000;
+ comp += (tmp >> 15); /* Errors in bit 16 upwards will be ignored */
+ /* Store as big endian */
+ ((byte*)&buf_ptr[position + planestride * comp_num])[0] = comp >> 8;
+ ((byte*)&buf_ptr[position + planestride * comp_num])[1] = comp;
+ }
+ for (comp_num = spot_start; comp_num < num_comp; comp_num++) {
+ comp = buf_ptr[position + planestride * comp_num];
+ tmp = ((0 - comp) * a) + 0x4000;
+ comp += (tmp >> 15); /* Errors in bit 16 upwards will be ignored */
+ /* Store as big endian */
+ ((byte*)&buf_ptr[position + planestride * comp_num])[0] = comp >> 8;
+ ((byte*)&buf_ptr[position + planestride * comp_num])[1] = comp;
+ }
+ }
+ position += 1;
+ }
+ }
+}
+
+static int
+pdf14_put_blended_image_cmykspot(gx_device* dev, gx_device* target,
+ gs_gstate* pgs, pdf14_buf* buf, int planestride_in,
+ int rowstride_in, int x0, int y0, int width, int height,
+ int num_comp, uint16_t bg, bool has_tags, gs_int_rect rect_in,
+ gs_separations* pseparations, bool deep)
+{
+ const pdf14_device* pdev = (pdf14_device*)dev;
+ int code = 0;
+ int x, y, tmp, comp_num, output_comp_num;
+ gx_color_index color;
+ gx_color_value cv[GX_DEVICE_COLOR_MAX_COMPONENTS];
+ gx_color_value comp;
+ int input_map[GX_DEVICE_COLOR_MAX_COMPONENTS];
+ int output_map[GX_DEVICE_COLOR_MAX_COMPONENTS];
+ int num_known_comp = 0;
+ int output_num_comp = target->color_info.num_components;
+ int num_sep = pseparations->num_separations++;
+ int num_rows_left;
+ int i;
+ gx_drawing_color pdcolor;
+ gs_int_rect rect = rect_in;
+ gs_fixed_rect rect_fixed;
+ int planestride = planestride_in;
+ int rowstride = rowstride_in;
+ byte* buf_ptr = NULL;
+ cmm_profile_t* src_profile = buf->group_color_info->icc_profile;
+ cmm_profile_t* des_profile = NULL;
+ cmm_dev_profile_t* dev_target_profile;
+ cmm_dev_profile_t* pdf14dev_profile;
+ bool color_mismatch = false;
+ bool supports_alpha = false;
+ const byte* buf_ptrs[GS_CLIENT_COLOR_MAX_COMPONENTS];
+ int alpha_offset = num_comp;
+ int tag_offset = has_tags ? num_comp + 1 : 0;
+
+ /*
+ * The process color model for the PDF 1.4 compositor device is CMYK plus
+ * spot colors. The target device may have only some of these colorants due
+ * to the SeparationOrder device parameter. Thus we need to determine the
+ * mapping between the PDF 1.4 compositor and the target device. Note:
+ * There should not be a spot colorant in the PDF 1.4 device that is not
+ * present in the target device.
+ */
+ /* Check if target processes CMYK colorants. */
+ for (comp_num = 0; comp_num < 4; comp_num++) {
+ const char* pcomp_name = (const char*)DeviceCMYKComponents[comp_num];
+
+ output_comp_num = dev_proc(target, get_color_comp_index)
+ (target, pcomp_name, strlen(pcomp_name), NO_COMP_NAME_TYPE);
+ if (output_comp_num >= 0 &&
+ output_comp_num < GX_DEVICE_COLOR_MAX_COMPONENTS) {
+ output_map[num_known_comp] = output_comp_num;
+ input_map[num_known_comp++] = comp_num;
+ }
+ }
+ /* Check if target processes our spot colorants. */
+ for (comp_num = 0; comp_num < num_sep; comp_num++) {
+ output_comp_num = dev_proc(target, get_color_comp_index)
+ (target, (const char*)(pseparations->names[comp_num].data),
+ pseparations->names[comp_num].size, NO_COMP_NAME_TYPE);
+ if (output_comp_num >= 0 &&
+ output_comp_num < GX_DEVICE_COLOR_MAX_COMPONENTS) {
+ output_map[num_known_comp] = output_comp_num;
+ input_map[num_known_comp++] = comp_num + 4;
+ }
+ }
+
+ /* Check if group color space is CMYK based */
+ code = dev_proc(target, get_profile)(target, &dev_target_profile);
+ if (code < 0)
+ return code;
+ if (dev_target_profile == NULL)
+ return gs_throw_code(gs_error_Fatal);
+
+ if (src_profile == NULL) {
+ code = dev_proc(dev, get_profile)(dev, &pdf14dev_profile);
+ if (code < 0) {
+ return code;
+ }
+ src_profile = pdf14dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE];
+ }
+
+ /* Check if we have a color conversion issue */
+ if (!(src_profile->hash_is_valid)) {
+ gsicc_get_icc_buff_hash(src_profile->buffer,
+ &(src_profile->hashcode),
+ src_profile->buffer_size);
+ src_profile->hash_is_valid = true;
+ }
+
+ des_profile = dev_target_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE];
+ if (!(des_profile->hash_is_valid)) {
+ gsicc_get_icc_buff_hash(des_profile->buffer,
+ &(des_profile->hashcode),
+ des_profile->buffer_size);
+ des_profile->hash_is_valid = true;
+ }
+
+ if (pdev->using_blend_cs ||
+ des_profile->hashcode != src_profile->hashcode)
+ color_mismatch = true;
+
+ /* Check if target supports alpha */
+ supports_alpha = dev_proc(target, dev_spec_op)(target, gxdso_supports_alpha, NULL, 0);
+ code = 0;
+
+ buf_ptr = buf->data + (rect.p.y - buf->rect.p.y) * buf->rowstride + ((rect.p.x - buf->rect.p.x) << deep);
+
+ /* Note. The logic below will need a little rework if we ever
+ have a device that has tags and alpha support */
+ if (supports_alpha) {
+ if (!color_mismatch) {
+ for (i = 0; i < buf->n_planes; i++)
+ buf_ptrs[i] = buf_ptr + i * planestride;
+ code = dev_proc(target, put_image) (target, target, buf_ptrs, num_comp,
+ rect.p.x, rect.p.y, width, height,
+ rowstride, alpha_offset, tag_offset);
+ /* Right now code has number of rows written */
+ } else {
+ /* In this case, just color convert and maintain alpha.
+ This is a case where we either either blend in the
+ right color space and have no alpha for the output
+ device or hand back the wrong color space with
+ alpha data. We choose the later. */
+ code = pdf14_put_image_color_convert(pdev, pgs, src_profile,
+ dev_target_profile, &buf, &buf_ptr, false, rect.p.x,
+ rect.p.y, width, height);
+ if (code < 0)
+ return code;
+
+ /* reset */
+ rowstride = buf->rowstride;
+ planestride = buf->planestride;
+ num_comp = buf->n_chan - 1;
+ alpha_offset = num_comp;
+ tag_offset = buf->has_tags ? buf->n_chan : 0;
+
+ /* And then out */
+ for (i = 0; i < buf->n_planes; i++)
+ buf_ptrs[i] = buf_ptr + i * planestride;
+ code = dev_proc(target, put_image) (target, target, buf_ptrs, num_comp,
+ rect.p.x, rect.p.y, width, height, rowstride, alpha_offset,
+ tag_offset);
+ /* Right now code has number of rows written */
+ }
+ } else {
+ /* Device could not handle the alpha data (we actually don't have
+ a device that does spot colorants and has an alpha channel so
+ the above code is untested. Go ahead and
+ preblend now and then color convert if needed */
+#if RAW_DUMP
+ /* Dump before and after the blend to make sure we are doing that ok */
+ dump_raw_buffer(target->memory, height, width, num_comp + 1, planestride, rowstride,
+ "pre_final_blend", buf_ptr, deep);
+ global_index++;
+#endif
+ if (color_mismatch && (src_profile->data_cs == gsRGB || src_profile->data_cs == gsGRAY)) {
+ if (deep) {
+ gx_blend_image_mixed_buffer16(buf_ptr, width, height, rowstride,
+ planestride, num_comp, src_profile->num_comps);
+ } else {
+ gx_blend_image_mixed_buffer(buf_ptr, width, height, rowstride,
+ planestride, num_comp, src_profile->num_comps);
+ }
+ } else {
+ if (deep) {
+ gx_blend_image_buffer16(buf_ptr, width, height, rowstride,
+ planestride, num_comp, bg);
+ } else {
+ gx_blend_image_buffer(buf_ptr, width, height, rowstride,
+ planestride, num_comp, bg >> 8);
+ }
+ }
+
+ if (color_mismatch) {
+ code = pdf14_put_image_color_convert(pdev, pgs, src_profile, dev_target_profile,
+ &buf, &buf_ptr, true, rect.p.x, rect.p.y, width, height);
+ if (code < 0)
+ return code;
+
+ /* reset */
+ rowstride = buf->rowstride;
+ planestride = buf->planestride;
+ num_comp = buf->n_chan - 1;
+ tag_offset = buf->has_tags ? buf->n_chan : 0;
+ }
+
+
+#if RAW_DUMP
+ /* Dump before and after the blend to make sure we are doing that ok */
+ dump_raw_buffer_be(target->memory, height, width, num_comp, planestride, rowstride,
+ "post_final_blend", buf_ptr, deep);
+ global_index++;
+ /* clist_band_count++; */
+#endif
+ /* Try put_image again now */
+ alpha_offset = 0;
+ for (i = 0; i < buf->n_planes; i++)
+ buf_ptrs[i] = buf_ptr + i * planestride;
+ code = dev_proc(target, put_image) (target, target, buf_ptrs, num_comp,
+ rect.p.x, rect.p.y, width, height,
+ rowstride, alpha_offset, tag_offset);
+ }
+ if (code > 0) {
+ /* We processed some or all of the rows. Continue until we are done */
+ num_rows_left = height - code;
+ while (num_rows_left > 0) {
+ code = dev_proc(target, put_image) (target, target, buf_ptrs, num_comp,
+ rect.p.x, rect.p.y + code, width,
+ num_rows_left, rowstride,
+ alpha_offset, tag_offset);
+ if (code < 0) {
+ return code;
+ }
+ num_rows_left = num_rows_left - code;
+ }
+ return 0;
+ }
+
+ /* No put_image working at all. Resort to fill_rect */
+
+ planestride = planestride_in;
+ rowstride = rowstride_in;
+
+ /* Clear all output colorants first */
+ for (comp_num = 0; comp_num < output_num_comp; comp_num++)
+ cv[comp_num] = 0;
+
+ /* Send pixel data to the target device. */
+ if (deep) {
+ /* NOTE: buf_ptr points to big endian data */
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+
+ /* composite CMYKA, etc. pixel with over solid background */
+#define GET16_BE2NATIVE(v) \
+((((byte *)&(v))[0]<<8) | (((byte *)&(v))[1]))
+ uint16_t a = GET16_BE2NATIVE(buf_ptr[x + planestride * num_comp]);
+
+ if (a == 0) {
+ for (comp_num = 0; comp_num < num_known_comp; comp_num++) {
+ cv[output_map[comp_num]] = bg;
+ }
+ } else if (a == 0xffff) {
+ for (comp_num = 0; comp_num < num_known_comp; comp_num++) {
+ comp = GET16_BE2NATIVE(buf_ptr[x + planestride * input_map[comp_num]]);
+ cv[output_map[comp_num]] = comp;
+ }
+ } else {
+ /* a ^= 0xff; */ /* No inversion here! Bug 689895 */
+ for (comp_num = 0; comp_num < num_known_comp; comp_num++) {
+ comp = GET16_BE2NATIVE(buf_ptr[x + planestride * input_map[comp_num]]);
+ tmp = ((comp - bg) * a) + 0x8000;
+ comp += (tmp + (tmp >> 16)) >> 16;
+ cv[output_map[comp_num]] = comp;
+ }
+ }
+
+ /* If we have spot colors we need to encode and fill as a high level
+ color if the device supports it which should always be the case
+ if we are in this procedure */
+ if (dev_proc(target, dev_spec_op)(target, gxdso_supports_devn, NULL, 0)) {
+ for (i = 0; i < output_num_comp; i++) {
+ pdcolor.colors.devn.values[i] = cv[i];
+ }
+ pdcolor.type = gx_dc_type_devn;
+ rect_fixed.p.x = int2fixed(x + x0);
+ rect_fixed.p.y = int2fixed(y + y0);
+ rect_fixed.q.x = int2fixed(x + x0 + 1);
+ rect_fixed.q.y = int2fixed(y + y0 + 1);
+ code = dev_proc(target, fill_rectangle_hl_color)(target, &rect_fixed,
+ NULL, &pdcolor, NULL);
+ } else {
+ /* encode as a color index */
+ color = dev_proc(target, encode_color)(target, cv);
+ code = dev_proc(target, fill_rectangle)(target, x + x0, y + y0, 1, 1, color);
+ }
+ if (code < 0)
+ return code;
+ }
+
+ buf_ptr += rowstride;
+ }
+ } else {
+ bg >>= 8;
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+
+ /* composite CMYKA, etc. pixel with over solid background */
+ byte a = buf_ptr[x + planestride * num_comp];
+
+ if ((a + 1) & 0xfe) {
+ /* a ^= 0xff; */ /* No inversion here! Bug 689895 */
+ for (comp_num = 0; comp_num < num_known_comp; comp_num++) {
+ comp = buf_ptr[x + planestride * input_map[comp_num]];
+ tmp = ((comp - bg) * a) + 0x80;
+ comp += tmp + (tmp >> 8);
+ cv[output_map[comp_num]] = comp;
+ }
+ } else if (a == 0) {
+ for (comp_num = 0; comp_num < num_known_comp; comp_num++) {
+ cv[output_map[comp_num]] = bg;
+ }
+ } else {
+ for (comp_num = 0; comp_num < num_known_comp; comp_num++) {
+ comp = buf_ptr[x + planestride * input_map[comp_num]];
+ cv[output_map[comp_num]] = (comp << 8) + comp;
+ }
+ }
+
+ /* If we have spot colors we need to encode and fill as a high level
+ color if the device supports it which should always be the case
+ if we are in this procedure */
+ if (dev_proc(target, dev_spec_op)(target, gxdso_supports_devn, NULL, 0)) {
+ for (i = 0; i < output_num_comp; i++) {
+ pdcolor.colors.devn.values[i] = cv[i];
+ }
+ pdcolor.type = gx_dc_type_devn;
+ rect_fixed.p.x = int2fixed(x + x0);
+ rect_fixed.p.y = int2fixed(y + y0);
+ rect_fixed.q.x = int2fixed(x + x0 + 1);
+ rect_fixed.q.y = int2fixed(y + y0 + 1);
+ code = dev_proc(target, fill_rectangle_hl_color)(target, &rect_fixed,
+ NULL, &pdcolor, NULL);
+ } else {
+ /* encode as a color index */
+ color = dev_proc(target, encode_color)(target, cv);
+ code = dev_proc(target, fill_rectangle)(target, x + x0, y + y0, 1, 1, color);
+ }
+ if (code < 0)
+ return code;
+ }
+
+ buf_ptr += rowstride;
+ }
+ }
+ return code;
+}
+
/**
* pdf14_cmykspot_put_image: Put rendered image to target device.
* @pdev: The PDF 1.4 rendering device.
@@ -2567,20 +3231,29 @@ pdf14_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
* Return code: negative on error.
**/
static int
-pdf14_cmykspot_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
+pdf14_cmykspot_put_image(gx_device *dev, gs_gstate *pgs, gx_device *target)
{
- pdf14_device * pdev = (pdf14_device *)dev;
+ pdf14_device *pdev = (pdf14_device *)dev;
pdf14_buf *buf = pdev->ctx->stack;
- gs_int_rect rect = buf->rect;
+ gs_int_rect rect;
int x1, y1, width, height;
- gs_devn_params * pdevn_params = &pdev->devn_params;
- gs_separations * pseparations = &pdevn_params->separations;
- int planestride = buf->planestride;
- int rowstride = buf->rowstride;
+ gs_devn_params *pdevn_params = &pdev->devn_params;
+ gs_separations *pseparations = &pdevn_params->separations;
+ int planestride;
+ int rowstride;
bool deep = pdev->ctx->deep;
- const uint16_t bg = pdev->ctx->additive ? 65535 : 0;
- int num_comp = buf->n_chan - 1;
- byte *buf_ptr;
+ uint16_t bg;
+ int num_comp;
+
+ /* Nothing was ever drawn. */
+ if (buf == NULL)
+ return 0;
+
+ bg = buf->group_color_info->isadditive ? 65535 : 0;
+ num_comp = buf->n_chan - 1;
+ rect = buf->rect;
+ planestride = buf->planestride;
+ rowstride = buf->rowstride;
/* Make sure that this is the only item on the stack. Fuzzing revealed a
potential problem. Bug 694190 */
@@ -2595,7 +3268,7 @@ pdf14_cmykspot_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
height = y1 - rect.p.y;
if (width <= 0 || height <= 0 || buf->data == NULL)
return 0;
- buf_ptr = buf->data + rect.p.y * buf->rowstride + (rect.p.x<<deep);
+
#if RAW_DUMP
/* Dump the current buffer to see what we have. */
dump_raw_buffer(pdev->ctx->memory,
@@ -2609,7 +3282,9 @@ pdf14_cmykspot_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
global_index++;
clist_band_count++;
#endif
- return gx_put_blended_image_cmykspot(target, buf_ptr, planestride, rowstride,
+
+ return pdf14_put_blended_image_cmykspot(dev, target, pgs,
+ buf, planestride, rowstride,
rect.p.x, rect.p.y, width, height, num_comp, bg,
buf->has_tags, rect, pseparations, deep);
}
@@ -2631,15 +3306,27 @@ pdf14_custom_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
pdf14_device * pdev = (pdf14_device *)dev;
pdf14_buf *buf = pdev->ctx->stack;
bool deep = pdev->ctx->deep;
- gs_int_rect rect = buf->rect;
- int x0 = rect.p.x, y0 = rect.p.y;
- int planestride = buf->planestride;
- int rowstride = buf->rowstride;
- int num_comp = buf->n_chan - 1;
- const uint16_t bg = pdev->ctx->additive ? 0xffff : 0;
+ gs_int_rect rect;
+ int x0, y0;
+ int planestride;
+ int rowstride;
+ int num_comp;
+ uint16_t bg;
int x1, y1, width, height;
byte *buf_ptr;
+ /* Nothing was ever drawn. */
+ if (buf == NULL)
+ return 0;
+
+ bg = pdev->ctx->additive ? 0xffff : 0;
+ num_comp = buf->n_chan - 1;
+ rect = buf->rect;
+ x0 = rect.p.x;
+ y0 = rect.p.y;
+ planestride = buf->planestride;
+ rowstride = buf->rowstride;
+
/* Make sure that this is the only item on the stack. Fuzzing revealed a
potential problem. Bug 694190 */
if (buf->saved != NULL) {
@@ -2653,7 +3340,7 @@ pdf14_custom_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
height = y1 - rect.p.y;
if (width <= 0 || height <= 0 || buf->data == NULL)
return 0;
- buf_ptr = buf->data + rect.p.y * buf->rowstride + (rect.p.x<<deep);
+ buf_ptr = buf->data + (rect.p.y - buf->rect.p.y) * buf->rowstride + ((rect.p.x - buf->rect.p.x)<<deep);
return gx_put_blended_image_custom(target, buf_ptr,
planestride, rowstride,
@@ -2664,16 +3351,16 @@ pdf14_custom_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
* of one or more groups, we have to cycle through any ICC profile changes since the push
* putting everything back how it was, and cleaning up the reference counts.
*/
-static void pdf14_cleanup_parent_color_profiles (pdf14_device *pdev)
+static void pdf14_cleanup_group_color_profiles (pdf14_device *pdev)
{
- if (pdev->ctx) {
+ if (pdev->ctx && pdev->ctx->stack) {
pdf14_buf *buf, *next;
- for (buf = pdev->ctx->stack; buf != NULL; buf = next) {
- pdf14_parent_color_t *old_parent_color_info = buf->parent_color_info;
+ for (buf = pdev->ctx->stack->saved; buf != NULL; buf = next) {
+ pdf14_group_color_t *group_color_info = buf->group_color_info;
next = buf->saved;
- while (old_parent_color_info) {
- if (old_parent_color_info->icc_profile != NULL) {
+ while (group_color_info) {
+ if (group_color_info->icc_profile != NULL) {
cmm_profile_t *group_profile;
gsicc_rendering_param_t render_cond;
cmm_dev_profile_t *dev_profile;
@@ -2683,13 +3370,15 @@ static void pdf14_cleanup_parent_color_profiles (pdf14_device *pdev)
gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile, &group_profile,
&render_cond);
- gsicc_adjust_profile_rc(pdev->icc_struct->device_profile[0], -1, "pdf14_end_transparency_group");
- pdev->icc_struct->device_profile[0] = old_parent_color_info->icc_profile;
- old_parent_color_info->icc_profile = NULL;
+ gsicc_adjust_profile_rc(pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ -1, "pdf14_end_transparency_group");
+ pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE] =
+ group_color_info->icc_profile;
+ group_color_info->icc_profile = NULL;
}
}
- old_parent_color_info = old_parent_color_info->previous;
+ group_color_info = group_color_info->previous;
}
}
}
@@ -2700,7 +3389,7 @@ pdf14_close(gx_device *dev)
{
pdf14_device *pdev = (pdf14_device *)dev;
- pdf14_cleanup_parent_color_profiles (pdev);
+ pdf14_cleanup_group_color_profiles(pdev);
if (pdev->ctx) {
pdf14_ctx_free(pdev->ctx);
@@ -2719,7 +3408,7 @@ pdf14_discard_trans_layer(gx_device *dev, gs_gstate * pgs)
/* The things that need to be cleaned up */
pdf14_ctx *ctx = pdev->ctx;
pdf14_smaskcolor_t *smaskcolor = pdev->smaskcolor;
- pdf14_parent_color_t *group_procs = pdev->trans_group_parent_cmap_procs;
+ pdf14_group_color_t *group_color = pdev->color_model_stack;
/* Free up the smask color */
if (smaskcolor != NULL) {
@@ -2729,17 +3418,17 @@ pdf14_discard_trans_layer(gx_device *dev, gs_gstate * pgs)
}
/* Free up the nested color procs and decrement the profiles */
- if (group_procs != NULL) {
- while (group_procs->previous != NULL)
- pdf14_pop_parent_color(dev, pgs);
- gs_free_object(dev->memory->stable_memory, group_procs, "pdf14_discard_trans_layer");
- pdev->trans_group_parent_cmap_procs = NULL;
+ if (group_color != NULL) {
+ while (group_color->previous != NULL)
+ pdf14_pop_group_color(dev, pgs);
+ gs_free_object(dev->memory->stable_memory, group_color, "pdf14_discard_trans_layer");
+ pdev->color_model_stack = NULL;
}
/* Start the context clean up */
if (ctx != NULL) {
pdf14_buf *buf, *next;
- pdf14_parent_color_t *procs, *prev_procs;
+ pdf14_group_color_t *procs, *prev_procs;
if (ctx->mask_stack != NULL) {
pdf14_free_mask_stack(ctx, ctx->memory);
@@ -2757,14 +3446,14 @@ pdf14_discard_trans_layer(gx_device *dev, gs_gstate * pgs)
the ctx to the tos mask_stack. We are done with this now so it is safe
to free this one object */
gs_free_object(ctx->memory, buf->mask_stack, "pdf14_discard_trans_layer");
- for (procs = buf->parent_color_info; procs != NULL; procs = prev_procs) {
+ for (procs = buf->group_color_info; procs != NULL; procs = prev_procs) {
prev_procs = procs->previous;
gs_free_object(ctx->memory, procs, "pdf14_discard_trans_layer");
}
gs_free_object(ctx->memory, buf, "pdf14_discard_trans_layer");
}
/* Finally the context itself */
- gs_free_object (ctx->memory, ctx, "pdf14_discard_trans_layer");
+ gs_free_object(ctx->memory, ctx, "pdf14_discard_trans_layer");
pdev->ctx = NULL;
}
return 0;
@@ -2840,12 +3529,14 @@ gs_pdf14_device_copy_params(gx_device *dev, const gx_device *target)
if (pdev->using_blend_cs) {
/* Swap the device profile and the blend profile. */
- gsicc_adjust_profile_rc(profile_targ->device_profile[0], 1, "gs_pdf14_device_copy_params");
+ gsicc_adjust_profile_rc(profile_targ->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ 1, "gs_pdf14_device_copy_params");
gsicc_adjust_profile_rc(profile_targ->blend_profile, 1, "gs_pdf14_device_copy_params");
- gsicc_adjust_profile_rc(profile_dev14->device_profile[0], -1, "gs_pdf14_device_copy_params");
+ gsicc_adjust_profile_rc(profile_dev14->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ -1, "gs_pdf14_device_copy_params");
gsicc_adjust_profile_rc(profile_dev14->blend_profile, -1, "gs_pdf14_device_copy_params");
- profile_dev14->blend_profile = profile_targ->device_profile[0];
- profile_dev14->device_profile[0] = profile_targ->blend_profile;
+ profile_dev14->blend_profile = profile_targ->device_profile[GS_DEFAULT_DEVICE_PROFILE];
+ profile_dev14->device_profile[GS_DEFAULT_DEVICE_PROFILE] = profile_targ->blend_profile;
}
profile_dev14->sim_overprint = profile_targ->sim_overprint;
}
@@ -2920,12 +3611,31 @@ pdf14_set_marking_params(gx_device *dev, const gs_gstate *pgs)
{
pdf14_device * pdev = (pdf14_device *)dev;
- pdev->opacity = pgs->opacity.alpha;
- pdev->shape = pgs->shape.alpha;
- pdev->alpha = pgs->opacity.alpha * pgs->shape.alpha;
+ if (pgs->alphaisshape) {
+ pdev->opacity = 1.0;
+ if (pgs->is_fill_color) {
+ pdev->shape = pgs->fillconstantalpha;
+ } else {
+ pdev->shape = pgs->strokeconstantalpha;
+ }
+ } else {
+ pdev->shape = 1.0;
+ if (pgs->is_fill_color) {
+ pdev->opacity = pgs->fillconstantalpha;
+ } else {
+ pdev->opacity = pgs->strokeconstantalpha;
+ }
+ }
+ pdev->alpha = pdev->opacity * pdev->shape;
pdev->blend_mode = pgs->blend_mode;
- pdev->overprint = pgs->overprint;
- pdev->stroke_overprint = pgs->stroke_overprint;
+ if (pdev->icc_struct->sim_overprint) {
+ pdev->overprint = pgs->overprint;
+ pdev->stroke_overprint = pgs->stroke_overprint;
+ } else {
+ pdev->overprint = false;
+ pdev->stroke_overprint = false;
+ }
+
pdev->fillconstantalpha = pgs->fillconstantalpha;
pdev->strokeconstantalpha = pgs->strokeconstantalpha;
@@ -2957,10 +3667,9 @@ update_lop_for_pdf14(gs_gstate *pgs, const gx_drawing_color *pdcolor)
}
}
/* The only idempotent blend modes are Normal, Darken and Lighten */
- if ((pgs->alpha != 0xFFFF) ||
- (pgs->blend_mode != BLEND_MODE_Normal && pgs->blend_mode != BLEND_MODE_Darken && pgs->blend_mode != BLEND_MODE_Lighten) ||
- (pgs->opacity.alpha != 1.0) ||
- (pgs->shape.alpha != 1.0) ||
+ if ((pgs->blend_mode != BLEND_MODE_Normal && pgs->blend_mode != BLEND_MODE_Darken && pgs->blend_mode != BLEND_MODE_Lighten) ||
+ (pgs->fillconstantalpha != 1.0) ||
+ (pgs->strokeconstantalpha != 1.0) ||
(hastrans))
{
/*
@@ -2981,6 +3690,8 @@ push_shfill_group(pdf14_clist_device *pdev,
gs_rect cb;
gs_gstate fudged_pgs = *pgs;
+ params.shade_group = true;
+
/* gs_begin_transparency_group takes a bbox that it then
* transforms by ctm. Our bbox has already been transformed,
* so clear out the ctm. */
@@ -2997,6 +3708,9 @@ push_shfill_group(pdf14_clist_device *pdev,
params.Isolated = false;
params.Knockout = true;
+ params.page_group = false;
+ params.group_opacity = fudged_pgs.fillconstantalpha;
+ params.group_shape = 1.0;
code = gs_begin_transparency_group(&fudged_pgs, &params, &cb, PDF14_BEGIN_TRANS_GROUP);
/* We have the group handle the blendmode and the opacity,
@@ -3007,7 +3721,8 @@ push_shfill_group(pdf14_clist_device *pdev,
* the fill operation as part of doing the stroking, we don't
* push another one. */
gs_setblendmode(pgs, BLEND_MODE_Normal);
- gs_setopacityalpha(pgs, 1.0);
+ gs_setfillconstantalpha(pgs, 1.0);
+ gs_setstrokeconstantalpha(pgs, 1.0);
if (pdev) {
code = pdf14_clist_update_params(pdev, pgs, false, NULL);
if (code < 0)
@@ -3034,6 +3749,11 @@ pdf14_fill_path(gx_device *dev, const gs_gstate *pgs,
gs_pattern2_instance_t *pinst = NULL;
int push_group = 0;
+ code = pdf14_initialize_ctx(dev, dev->color_info.num_components,
+ dev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE, pgs);
+ if (code < 0)
+ return code;
+
if (pdcolor == NULL)
return_error(gs_error_unknownerror); /* color must be defined */
if (gx_dc_is_pattern1_color(pdcolor)){
@@ -3094,7 +3814,7 @@ pdf14_fill_path(gx_device *dev, const gs_gstate *pgs,
/* Non-idempotent blends require a transparency
* group to be pushed because shadings might
* paint several pixels twice. */
- push_group = gs_currentopacityalpha(pgs) != 1.0 ||
+ push_group = pgs->fillconstantalpha != 1.0 ||
!blend_is_idempotent(gs_currentblendmode(pgs));
pinst =
(gs_pattern2_instance_t *)pdcolor->ccolor.pattern;
@@ -3122,6 +3842,7 @@ pdf14_fill_path(gx_device *dev, const gs_gstate *pgs,
if (box.q.y > path_box.q.y)
box.q.y = path_box.q.y;
}
+ /* Group alpha set from fill value. push_shfill_group does reset to 1.0 */
code = push_shfill_group(NULL, &new_pgs, &box);
} else
update_lop_for_pdf14(&new_pgs, pdcolor);
@@ -3160,11 +3881,17 @@ pdf14_stroke_path(gx_device *dev, const gs_gstate *pgs,
if (pdcolor == NULL)
return_error(gs_error_unknownerror); /* color must be defined */
+
+ code = pdf14_initialize_ctx(dev, dev->color_info.num_components,
+ dev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE, pgs);
+ if (code < 0)
+ return code;
+
if (gx_dc_is_pattern2_color(pdcolor)) {
/* Non-idempotent blends require a transparency
* group to be pushed because shadings might
* paint several pixels twice. */
- push_group = gs_currentopacityalpha(pgs) != 1.0 ||
+ push_group = pgs->strokeconstantalpha != 1.0 ||
!blend_is_idempotent(gs_currentblendmode(pgs));
}
if (push_group) {
@@ -3213,6 +3940,8 @@ pdf14_stroke_path(gx_device *dev, const gs_gstate *pgs,
if (box.q.y > path_box.q.y)
box.q.y = path_box.q.y;
}
+ /* Group alpha set from fill value. push_shfill_group does reset to 1.0 */
+ new_pgs.fillconstantalpha = new_pgs.strokeconstantalpha;
code = push_shfill_group(NULL, &new_pgs, &box);
} else
update_lop_for_pdf14(&new_pgs, pdcolor);
@@ -3243,12 +3972,13 @@ pdf14_fill_stroke_path(gx_device *dev, const gs_gstate *cpgs, gx_path *ppath,
gs_transparency_group_params_t params = { 0 };
gs_fixed_rect clip_bbox;
gs_rect bbox, group_stroke_box;
- float opacity;
- gs_blend_mode_t blend_mode;
gs_fixed_rect path_bbox;
int expansion_code;
gs_fixed_point expansion;
pdf14_device *p14dev = (pdf14_device *)dev;
+ float stroke_alpha = cpgs->strokeconstantalpha;
+ float fill_alpha = cpgs->fillconstantalpha;
+ gs_blend_mode_t blend_mode = cpgs->blend_mode;
/* Break const just once, neatly */
const_breaker.cpgs = cpgs;
@@ -3258,8 +3988,10 @@ pdf14_fill_stroke_path(gx_device *dev, const gs_gstate *cpgs, gx_path *ppath,
(pgs->ctm.xx == 0.0 && pgs->ctm.xy == 0.0 && pgs->ctm.yx == 0.0 && pgs->ctm.yy == 0.0))
return 0;
- opacity = pgs->opacity.alpha;
- blend_mode = pgs->blend_mode;
+ code = pdf14_initialize_ctx(dev, dev->color_info.num_components,
+ dev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE, cpgs);
+ if (code < 0)
+ return code;
code = gx_curr_fixed_bbox(pgs, &clip_bbox, NO_PATH);
if (code < 0 && code != gs_error_unknownerror)
@@ -3297,15 +4029,18 @@ pdf14_fill_stroke_path(gx_device *dev, const gs_gstate *cpgs, gx_path *ppath,
return code;
/* See if overprint is enabled for both stroke and fill AND if ca == CA */
- if (pgs->fillconstantalpha == pgs->strokeconstantalpha &&
+ if (fill_alpha == stroke_alpha &&
p14dev->overprint && p14dev->stroke_overprint &&
dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE) {
/* Push a non-isolated non-knockout group with alpha = 1.0 and
compatible overprint mode. Group will be composited with
original alpha and blend mode */
params.Isolated = false;
- params.group_color = UNKNOWN;
+ params.group_color_type = UNKNOWN;
params.Knockout = false;
+ params.page_group = false;
+ params.group_opacity = 1.0;
+ params.group_shape = fill_alpha;
/* non-isolated non-knockout group pushed with original alpha and blend mode */
code = pdf14_begin_transparency_group(dev, &params,
@@ -3313,64 +4048,61 @@ pdf14_fill_stroke_path(gx_device *dev, const gs_gstate *cpgs, gx_path *ppath,
if (code < 0)
return code;
- /* Change alpha to 1.0 and blend mode to compatible overprint for actual drawing */
- (void)gs_setopacityalpha(pgs, 1.0); /* Can never fail */
+ /* Change fill alpha to 1.0 and blend mode to compatible overprint for actual drawing */
+ (void)gs_setfillconstantalpha(pgs, 1.0);
(void)gs_setblendmode(pgs, BLEND_MODE_CompatibleOverprint); /* Can never fail */
- if (pgs->fillconstantalpha > 0) {
- p14dev->op_state = PDF14_OP_STATE_FILL;
- code = pdf14_fill_path(dev, pgs, ppath, fill_params, pdcolor_fill, pcpath);
- if (code < 0)
- goto cleanup;
- }
+ p14dev->op_state = PDF14_OP_STATE_FILL;
+ code = pdf14_fill_path(dev, pgs, ppath, fill_params, pdcolor_fill, pcpath);
+ if (code < 0)
+ goto cleanup;
- if (pgs->strokeconstantalpha > 0) {
- gs_swapcolors_quick(pgs); /* flips stroke_color_index (to stroke) */
- p14dev->op_state = PDF14_OP_STATE_STROKE;
- code = pdf14_stroke_path(dev, pgs, ppath, stroke_params, pdcolor_stroke, pcpath);
- gs_swapcolors_quick(pgs); /* this flips pgs->stroke_color_index back as well */
- if (code < 0)
- goto cleanup; /* bail out (with colors swapped back to fill) */
- }
+ (void)gs_setstrokeconstantalpha(pgs, 1.0);
+ gs_swapcolors_quick(pgs); /* flips stroke_color_index (to stroke) */
+ p14dev->op_state = PDF14_OP_STATE_STROKE;
+ code = pdf14_stroke_path(dev, pgs, ppath, stroke_params, pdcolor_stroke, pcpath);
+ gs_swapcolors_quick(pgs); /* this flips pgs->stroke_color_index back as well */
+ if (code < 0)
+ goto cleanup; /* bail out (with colors swapped back to fill) */
} else {
/* Push a non-isolated knockout group. Do not change the alpha or
blend modes. Note: we need to draw those that have alpha = 0 */
params.Isolated = false;
- params.group_color = UNKNOWN;
+ params.group_color_type = UNKNOWN;
params.Knockout = true;
+ params.page_group = false;
+ params.group_shape = 1.0;
+ params.group_opacity = 1.0;
/* non-isolated knockout group is pushed with alpha = 1.0 and Normal blend mode */
- (void)gs_setopacityalpha(pgs, 1.0); /* Can never fail */
(void)gs_setblendmode(pgs, BLEND_MODE_Normal); /* Can never fail */
+ code = pdf14_begin_transparency_group(dev, &params, &group_stroke_box,
+ pgs, dev->memory);
- code = pdf14_begin_transparency_group(dev, &params,
- &group_stroke_box, pgs, dev->memory);
/* restore blend mode for actual drawing in the group */
(void)gs_setblendmode(pgs, blend_mode); /* Can never fail */
- if (code < 0) {
- /* Make sure we put everything back even if we exit with an error. */
- (void)gs_setopacityalpha(pgs, opacity);
- return code;
- }
-
- (void)gs_setopacityalpha(pgs, pgs->fillconstantalpha); /* Can never fail */
p14dev->op_state = PDF14_OP_STATE_FILL;
/* If we are in an overprint situation, set the blend mode to compatible
overprint */
- if (pgs->overprint && dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
- gs_setblendmode(pgs, BLEND_MODE_CompatibleOverprint); /* Can never fail */
+ if (p14dev->icc_struct->sim_overprint && pgs->overprint &&
+ dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
+ (void)gs_setblendmode(pgs, BLEND_MODE_CompatibleOverprint); /* Can never fail */
code = pdf14_fill_path(dev, pgs, ppath, fill_params, pdcolor_fill, pcpath);
- if (pgs->overprint && dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
- gs_setblendmode(pgs, blend_mode); /* Can never fail */
+ if (p14dev->icc_struct->sim_overprint && pgs->overprint &&
+ dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
+ (void)gs_setblendmode(pgs, blend_mode); /* Can never fail */
if (code < 0)
goto cleanup;
- gs_setopacityalpha(pgs, pgs->strokeconstantalpha); /* Can never fail */
+ /* Note that the stroke can end up doing fill methods */
+ (void)gs_setfillconstantalpha(pgs, stroke_alpha);
+
gs_swapcolors_quick(pgs);
p14dev->op_state = PDF14_OP_STATE_STROKE;
- if (pgs->stroke_overprint && dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
+ if (p14dev->icc_struct->sim_overprint && pgs->stroke_overprint &&
+ dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
(void)gs_setblendmode(pgs, BLEND_MODE_CompatibleOverprint); /* Can never fail */
code = pdf14_stroke_path(dev, pgs, ppath, stroke_params, pdcolor_stroke, pcpath);
/* Don't need to restore blendmode here, as it will be restored below. */
@@ -3380,23 +4112,17 @@ pdf14_fill_stroke_path(gx_device *dev, const gs_gstate *cpgs, gx_path *ppath,
}
cleanup:
- /* Now during the pop do the compositing with alpha of 1.0 and normal blend */
- (void)gs_setopacityalpha(pgs, 1.0); /* Can never fail */
- (void)gs_setblendmode(pgs, BLEND_MODE_Normal); /* Can never fail */
+ /* Restore the state */
+ (void)gs_setblendmode(pgs, blend_mode); /* Can never fail */
+ (void)gs_setstrokeconstantalpha(pgs, stroke_alpha);
+ (void)gs_setfillconstantalpha(pgs, fill_alpha);
- /* Restore where we were. If an error occured while in the group push
- return that error code but try to do the cleanup */
code2 = pdf14_end_transparency_group(dev, pgs);
if (code2 < 0) {
/* At this point things have gone very wrong. We should just shut down */
code = gs_abort_pdf14trans_device(pgs);
return code2;
}
-
- /* Restore if there were any changes */
- (void)gs_setopacityalpha(pgs, opacity); /* Can never fail */
- (void)gs_setblendmode(pgs, blend_mode); /* Can never fail */
-
return code;
}
@@ -3805,6 +4531,12 @@ pdf14_copy_alpha_color(gx_device * dev, const byte * data, int data_x,
int depth, bool devn)
{
bool deep = device_is_deep(dev);
+ int code;
+
+ code = pdf14_initialize_ctx(dev, dev->color_info.num_components,
+ dev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE, NULL);
+ if (code < 0)
+ return code;
if (deep)
return do_pdf14_copy_alpha_color_16(dev, data, data_x, aa_raster,
@@ -3835,6 +4567,12 @@ pdf14_fill_mask(gx_device * orig_dev,
if (pdcolor == NULL)
return_error(gs_error_unknownerror); /* color must be defined */
+
+ code = pdf14_initialize_ctx(orig_dev, orig_dev->color_info.num_components,
+ orig_dev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE, NULL);
+ if (code < 0)
+ return code;
+
/* If we are doing a fill with a pattern that has a transparency then
go ahead and do a push and a pop of the transparency group */
if (gx_dc_is_pattern1_color(pdcolor)) {
@@ -3868,9 +4606,15 @@ pdf14_fill_mask(gx_device * orig_dev,
group_rect.q.x = x + w;
group_rect.q.y = y + h;
if (!(w <= 0 || h <= 0)) {
+
+ pdf14_group_color_t *group_color_info = pdf14_clone_group_color_info((gx_device *) p14dev, p14dev->ctx->stack->group_color_info);
+ if (group_color_info == NULL)
+ return gs_error_VMerror;
+
code = pdf14_push_transparency_group(p14dev->ctx, &group_rect,
- 1, 0, 65535, 65535, ptile->blending_mode, 0, 0,
- ptile->ttrans->n_chan-1, false, NULL, NULL, NULL, NULL);
+ 1, 0, 65535, 65535, 65535, ptile->blending_mode, 0, 0,
+ ptile->ttrans->n_chan-1, false, false, NULL, NULL,
+ group_color_info, NULL, NULL);
if (code < 0)
return code;
/* Set up the output buffer information now that we have
@@ -3906,7 +4650,7 @@ pdf14_fill_mask(gx_device * orig_dev,
code = pdf14_pop_transparency_group(NULL, p14dev->ctx,
p14dev->blend_procs,
p14dev->color_info.num_components,
- dev_profile->device_profile[0],
+ dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE],
orig_dev);
gs_free_object(p14dev->memory, ptile->ttrans->fill_trans_buffer,
"pdf14_fill_mask");
@@ -3915,6 +4659,8 @@ pdf14_fill_mask(gx_device * orig_dev,
return code;
}
+
+
/* Used for filling rects when we are doing a fill with a pattern that
has transparency */
static int
@@ -3938,6 +4684,7 @@ pdf14_tile_pattern_fill(gx_device * pdev, const gs_gstate * pgs,
gx_clip_path cpath_intersection;
gx_path path_ttrans;
gs_blend_mode_t blend_mode;
+ pdf14_group_color_t *group_color_info;
if (ppath == NULL)
return_error(gs_error_unknownerror); /* should not happen */
@@ -3996,7 +4743,7 @@ pdf14_tile_pattern_fill(gx_device * pdev, const gs_gstate * pgs,
}
/* Now let us push a transparency group into which we are
* going to tile the pattern. */
- if (ppath != NULL && code >= 0) {
+ if (ppath != NULL) {
pdf14_device save_pdf14_dev; /* save area for p14dev */
gx_cpath_outer_box(&cpath_intersection, &outer_box);
@@ -4020,11 +4767,15 @@ pdf14_tile_pattern_fill(gx_device * pdev, const gs_gstate * pgs,
}
blend_mode = ptile->blending_mode;
memcpy(&save_pdf14_dev, p14dev, sizeof(pdf14_device));
+
+ group_color_info = pdf14_clone_group_color_info(pdev, p14dev->ctx->stack->group_color_info);
+ if (group_color_info == NULL)
+ return gs_error_VMerror;
+
code = pdf14_push_transparency_group(p14dev->ctx, &rect, 1, 0, (uint16_t)floor(65535 * p14dev->alpha + 0.5),
- (uint16_t)floor(65535 * p14dev->shape + 0.5),
- blend_mode, 0, 0, n_chan_tile-1,
- false, NULL, NULL, pgs_noconst,
- pdev);
+ (uint16_t)floor(65535 * p14dev->shape + 0.5), (uint16_t)floor(65535 * p14dev->opacity + 0.5),
+ blend_mode, 0, 0, n_chan_tile - 1, false, false,
+ NULL, NULL, group_color_info, pgs_noconst, pdev);
if (code < 0)
return code;
@@ -4120,7 +4871,7 @@ pdf14_tile_pattern_fill(gx_device * pdev, const gs_gstate * pgs,
code = pdf14_pop_transparency_group(pgs_noconst, p14dev->ctx,
p14dev->blend_procs,
p14dev->color_info.num_components,
- p14dev->icc_struct->device_profile[0],
+ p14dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE],
pdev);
memcpy(p14dev, &save_pdf14_dev, sizeof(pdf14_device));
p14dev->pclist_device = NULL;
@@ -4181,7 +4932,8 @@ pdf14_pattern_trans_render(gx_image_enum * penum, const byte * buffer, int data_
"[v*] Popping trans group pattern fill, uid = %ld id = %ld \n",
ptile->uid.id, ptile->id);
code = pdf14_pop_transparency_group(NULL, p14dev->ctx, p14dev->blend_procs,
- p14dev->color_info.num_components, dev_profile->device_profile[0],
+ p14dev->color_info.num_components,
+ dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE],
(gx_device *) p14dev);
}
pdcolor->colors.pattern.p_tile->trans_group_popped = true;
@@ -4263,18 +5015,22 @@ pdf14_patt_trans_image_fill(gx_device * dev, const gs_gstate * pgs,
if_debug2m('v', p14dev->ctx->memory,
"[v*] Pushing trans group patt_trans_image_fill, uid = %ld id = %ld \n",
ptile->uid.id, ptile->id);
+
code = pdf14_push_transparency_group(p14dev->ctx, &group_rect, 1, 0, 65535, 65535,
- pgs->blend_mode, 0, 0,
- ptile->ttrans->n_chan-1, false, NULL,
- NULL, (gs_gstate *)pgs, dev);
+ 65535, pgs->blend_mode, 0, 0,
+ ptile->ttrans->n_chan-1, false, false,
+ NULL, NULL, NULL, (gs_gstate *)pgs, dev);
+
/* Set up the output buffer information now that we have
pushed the group */
fill_trans_buffer = new_pattern_trans_buff(pgs->memory);
pdf14_get_buffer_information(dev, fill_trans_buffer, NULL, false);
+
/* Store this in the appropriate place in pdcolor. This
is released later in pdf14_pattern_trans_render when
we are all done with the mask fill */
ptile->ttrans->fill_trans_buffer = fill_trans_buffer;
+
/* Change the renderer to handle this case so we can catch the
end. We will then pop the group and reset the pdcolor proc.
Keep the base renderer also. */
@@ -4297,6 +5053,11 @@ pdf14_begin_typed_image(gx_device * dev, const gs_gstate * pgs,
const gs_image_t *pim = (const gs_image_t *)pic;
int code;
+ code = pdf14_initialize_ctx(dev, dev->color_info.num_components,
+ dev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE, pgs);
+ if (code < 0)
+ return code;
+
/* If we are filling an image mask with a pattern that has a transparency
then we need to do some special handling */
if (pim->ImageMask) {
@@ -4335,10 +5096,8 @@ pdf14_set_params(gs_gstate * pgs,
pgs->blend_mode = pparams->blend_mode;
if (pparams->changed & PDF14_SET_TEXT_KNOCKOUT)
pgs->text_knockout = pparams->text_knockout;
- if (pparams->changed & PDF14_SET_SHAPE_ALPHA)
- pgs->shape.alpha = pparams->shape.alpha;
- if (pparams->changed & PDF14_SET_OPACITY_ALPHA)
- pgs->opacity.alpha = pparams->opacity.alpha;
+ if (pparams->changed & PDF14_SET_AIS)
+ pgs->alphaisshape = pparams->ais;
if (pparams->changed & PDF14_SET_OVERPRINT)
pgs->overprint = pparams->overprint;
if (pparams->changed & PDF14_SET_STROKEOVERPRINT)
@@ -4349,6 +5108,10 @@ pdf14_set_params(gs_gstate * pgs,
pgs->strokeconstantalpha = pparams->strokeconstantalpha;
if (pparams->changed & PDF_SET_FILLSTROKE_STATE) {
gs_swapcolors_quick(pgs);
+ if (pparams->op_fs_state == PDF14_OP_STATE_STROKE)
+ pgs->is_fill_color = false;
+ else
+ pgs->is_fill_color = true;
}
pdf14_set_marking_params(dev, pgs);
}
@@ -4675,7 +5438,7 @@ pdf14_ok_to_optimize(gx_device *dev)
if (dev->color_info.separable_and_linear != GX_CINFO_SEP_LIN_STANDARD)
return false;
- dev_icc_cs = dev_profile->device_profile[0]->data_cs;
+ dev_icc_cs = dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]->data_cs;
/* If the outputprofile is not "standard" then colors converted to device color */
/* during clist writing won't match the colors written for the pdf14 clist dev */
if (!(dev_icc_cs == gsGRAY || dev_icc_cs == gsRGB || dev_icc_cs == gsCMYK))
@@ -4883,7 +5646,7 @@ gx_update_pdf14_compositor(gx_device * pdev, gs_gstate * pgs,
* doing a page which uses PDF 1.4 transparency. This routine is only active
* when the PDF 1.4 compositor is 'disabled'. It checks for reenabling the
* PDF 1.4 compositor. Otherwise it simply passes create compositor requests
- * to the targer.
+ * to the target.
*/
static int
pdf14_forward_create_compositor(gx_device * dev, gx_device * * pcdev,
@@ -4969,32 +5732,41 @@ pdf14_create_compositor(gx_device * dev, gx_device * * pcdev,
static int
pdf14_push_text_group(gx_device *dev, gs_gstate *pgs,
gs_blend_mode_t blend_mode, float opacity,
- bool is_clist)
+ float shape, bool is_clist)
{
int code;
gs_transparency_group_params_t params = { 0 };
gs_rect bbox = { 0 }; /* Bounding box is set by parent */
pdf14_clist_device * pdev = (pdf14_clist_device *)dev;
+ float alpha = pgs->fillconstantalpha;
/* Push a non-isolated knock-out group making sure the opacity and blend
mode are correct */
params.Isolated = false;
params.Knockout = true;
+ params.page_group = false;
params.text_group = PDF14_TEXTGROUP_BT_PUSHED;
- gs_setopacityalpha(pgs, 1.0);
+ params.group_opacity = 1.0;
+ params.group_shape = 1.0;
+
+ gs_setfillconstantalpha(pgs, 1.0);
gs_setblendmode(pgs, BLEND_MODE_Normal);
+
if (is_clist) {
code = pdf14_clist_update_params(pdev, pgs, false, NULL);
if (code < 0)
return code;
}
+
code = gs_begin_transparency_group(pgs, &params, &bbox, PDF14_BEGIN_TRANS_GROUP);
+ gs_setfillconstantalpha(pgs, alpha);
+ gs_setblendmode(pgs, blend_mode);
if (code < 0)
return code;
- gs_setopacityalpha(pgs, opacity);
- gs_setblendmode(pgs, blend_mode);
- if (is_clist)
+
+ if (is_clist) {
code = pdf14_clist_update_params(pdev, pgs, false, NULL);
+ }
return code;
}
@@ -5008,10 +5780,19 @@ pdf14_text_begin(gx_device * dev, gs_gstate * pgs,
int code;
gs_text_enum_t *penum;
gs_blend_mode_t blend_mode = gs_currentblendmode(pgs);
- float opacity = gs_currentopacityalpha(pgs);
+ float opacity = pgs->fillconstantalpha;
+ float shape = 1.0;
bool blend_issue = !(blend_mode == BLEND_MODE_Normal || blend_mode == BLEND_MODE_Compatible || blend_mode == BLEND_MODE_CompatibleOverprint);
pdf14_device *pdev = (pdf14_device*)dev;
bool draw = !(text->operation & TEXT_DO_NONE);
+ uint text_mode = gs_currenttextrenderingmode(pgs);
+ bool text_stroke = (text_mode == 1 || text_mode == 2 || text_mode == 5 || text_mode == 6);
+ bool text_fill = (text_mode == 0 || text_mode == 2 || text_mode == 4 || text_mode == 6);
+
+ code = pdf14_initialize_ctx(dev, dev->color_info.num_components,
+ dev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE, (const gs_gstate*) pgs);
+ if (code < 0)
+ return code;
if_debug0m('v', memory, "[v]pdf14_text_begin\n");
pdf14_set_marking_params(dev, pgs);
@@ -5044,11 +5825,13 @@ pdf14_text_begin(gx_device * dev, gs_gstate * pgs,
pdev->text_group = PDF14_TEXTGROUP_BT_NOT_PUSHED;
}
- if (gs_currenttextknockout(pgs) && (blend_issue || opacity != 1.0) &&
- gs_currenttextrenderingmode(pgs) != 3 && /* don't bother with invisible text */
- pdev->text_group == PDF14_TEXTGROUP_BT_NOT_PUSHED)
+ if (gs_currenttextknockout(pgs) && (blend_issue ||
+ (pgs->fillconstantalpha != 1.0 && text_fill) ||
+ (pgs->strokeconstantalpha != 1.0 && text_stroke)) &&
+ text_mode != 3 && /* don't bother with invisible text */
+ pdev->text_group == PDF14_TEXTGROUP_BT_NOT_PUSHED)
if (draw) {
- code = pdf14_push_text_group(dev, pgs, blend_mode, opacity,
+ code = pdf14_push_text_group(dev, pgs, blend_mode, opacity, shape,
false);
}
*ppenum = (gs_text_enum_t *)penum;
@@ -5061,7 +5844,7 @@ pdf14_finish_copydevice(gx_device *new_dev, const gx_device *from_dev)
pdf14_device *pdev = (pdf14_device*)new_dev;
pdev->ctx = NULL;
- pdev->trans_group_parent_cmap_procs = NULL;
+ pdev->color_model_stack = NULL;
pdev->smaskcolor = NULL;
/* Only allow copying the prototype. */
@@ -5188,7 +5971,7 @@ pdf14_copy_planes(gx_device * dev, const byte * data, int data_x, int raster,
fake_tos.n_chan = dev->color_info.num_components;
fake_tos.n_planes = dev->color_info.num_components;
fake_tos.num_spots = 0;
- fake_tos.parent_color_info = NULL;
+ fake_tos.group_color_info = NULL;
fake_tos.planestride = raster * plane_height;
fake_tos.rect.p.x = x;
fake_tos.rect.p.y = y;
@@ -5210,11 +5993,18 @@ pdf14_fill_rectangle_hl_color(gx_device *dev, const gs_fixed_rect *rect,
const gx_clip_path *pcpath)
{
pdf14_device *pdev = (pdf14_device *)dev;
- pdf14_buf *buf = pdev->ctx->stack;
+ pdf14_buf* buf;
+ int code;
int x = fixed2int(rect->p.x);
int y = fixed2int(rect->p.y);
int w = fixed2int(rect->q.x) - x;
- int h = fixed2int(rect->q.y) -y;
+ int h = fixed2int(rect->q.y) - y;
+
+ code = pdf14_initialize_ctx(dev, dev->color_info.num_components,
+ dev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE, pgs);
+ if (code < 0)
+ return code;
+ buf = pdev->ctx->stack;
fit_fill_xywh(dev, x, y, w, h);
if (w <= 0 || h <= 0)
@@ -5231,7 +6021,15 @@ pdf14_fill_rectangle(gx_device * dev,
int x, int y, int w, int h, gx_color_index color)
{
pdf14_device *pdev = (pdf14_device *)dev;
- pdf14_buf *buf = pdev->ctx->stack;
+ pdf14_buf *buf;
+ int code;
+
+ code = pdf14_initialize_ctx(dev, dev->color_info.num_components,
+ dev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE, NULL);
+ if (code < 0)
+ return code;
+
+ buf = pdev->ctx->stack;
fit_fill_xywh(dev, x, y, w, h);
if (w <= 0 || h <= 0)
@@ -5278,59 +6076,64 @@ compute_group_device_int_rect(pdf14_device *pdev, gs_int_rect *rect,
}
static int
-pdf14_begin_transparency_group(gx_device *dev,
- const gs_transparency_group_params_t *ptgp,
- const gs_rect *pbbox,
- gs_gstate *pgs, gs_memory_t *mem)
+pdf14_begin_transparency_group(gx_device* dev,
+ const gs_transparency_group_params_t* ptgp,
+ const gs_rect* pbbox,
+ gs_gstate* pgs, gs_memory_t* mem)
{
- pdf14_device *pdev = (pdf14_device *)dev;
- double alpha = pgs->opacity.alpha * pgs->shape.alpha;
+ pdf14_device* pdev = (pdf14_device*)dev;
+ float alpha = ptgp->group_opacity * ptgp->group_shape;
gs_int_rect rect;
int code;
bool isolated = ptgp->Isolated;
- gs_transparency_color_t group_color;
- cmm_profile_t *group_profile;
- cmm_profile_t *tos_profile;
+ gs_transparency_color_t group_color_type;
+ cmm_profile_t* group_profile;
+ cmm_profile_t* tos_profile;
gsicc_rendering_param_t render_cond;
- cmm_dev_profile_t *dev_profile;
+ cmm_dev_profile_t* dev_profile;
bool cm_back_drop = false;
bool new_icc = false;
+ pdf14_group_color_t* group_color_info;
- code = dev_proc(dev, get_profile)(dev, &dev_profile);
+ code = dev_proc(dev, get_profile)(dev, &dev_profile);
if (code < 0)
return code;
gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile, &tos_profile, &render_cond);
if (ptgp->text_group == PDF14_TEXTGROUP_BT_PUSHED) {
- rect = pdev->ctx->rect; /* Use parent group for text_group. */
pdev->text_group = PDF14_TEXTGROUP_BT_PUSHED; /* For immediate mode and clist reading */
- } else
+ }
+
+ if (ptgp->text_group == PDF14_TEXTGROUP_BT_PUSHED)
+ rect = pdev->ctx->rect; /* Use parent group for text_group. */
+ else
code = compute_group_device_int_rect(pdev, &rect, pbbox, pgs);
if (code < 0)
return code;
- if_debug4m('v', pdev->memory,
- "[v]pdf14_begin_transparency_group, I = %d, K = %d, alpha = %g, bm = %d\n",
- ptgp->Isolated, ptgp->Knockout, alpha, pgs->blend_mode);
+ if_debug5m('v', pdev->memory,
+ "[v]pdf14_begin_transparency_group, I = %d, K = %d, alpha = %g, bm = %d page_group = %d\n",
+ ptgp->Isolated, ptgp->Knockout, (double)alpha, pgs->blend_mode, ptgp->page_group);
/* If the group color is unknown then use the current device profile. */
- if (ptgp->group_color == UNKNOWN){
- group_color = ICC;
+ if (ptgp->group_color_type == UNKNOWN) {
+ group_color_type = ICC;
group_profile = tos_profile;
- } else {
- group_color = ptgp->group_color;
+ }
+ else {
+ group_color_type = ptgp->group_color_type;
group_profile = ptgp->iccprofile;
}
/* We have to handle case where the profile is in the clist */
if (group_profile == NULL && pdev->pclist_device != NULL) {
/* Get the serialized data from the clist. */
- gx_device_clist_reader *pcrdev = (gx_device_clist_reader *)(pdev->pclist_device);
- group_profile = gsicc_read_serial_icc((gx_device *) pcrdev, ptgp->icc_hashcode);
+ gx_device_clist_reader* pcrdev = (gx_device_clist_reader*)(pdev->pclist_device);
+ group_profile = gsicc_read_serial_icc((gx_device*)pcrdev, ptgp->icc_hashcode);
if (group_profile == NULL)
return gs_throw(gs_error_unknownerror, "ICC data not found in clist");
/* Keep a pointer to the clist device */
- group_profile->dev = (gx_device *) pcrdev;
+ group_profile->dev = (gx_device*)pcrdev;
new_icc = true;
}
if (group_profile != NULL) {
@@ -5338,8 +6141,8 @@ pdf14_begin_transparency_group(gx_device *dev,
we will need to CM the backdrop. */
if (!(group_profile->hash_is_valid)) {
gsicc_get_icc_buff_hash(group_profile->buffer,
- &(group_profile->hashcode),
- group_profile->buffer_size);
+ &(group_profile->hashcode),
+ group_profile->buffer_size);
group_profile->hash_is_valid = true;
}
if (group_profile->hashcode != tos_profile->hashcode) {
@@ -5347,92 +6150,120 @@ pdf14_begin_transparency_group(gx_device *dev,
}
}
- code = pdf14_update_device_color_procs(dev, group_color, ptgp->icc_hashcode,
- pgs, group_profile, false);
+ /* Always create the base color group information as it is only through
+ groups that we can have a color space change. This will survive
+ the life of the context. */
+ if (pdev->ctx->base_color == NULL) {
+ pdev->ctx->base_color = pdf14_make_base_group_color(dev);
+ }
+
+ /* If this is not the page group and we don't yet have a group, we need
+ to create a buffer for the whole page so that we can handle stuff drawn
+ outside this current group (e.g. two non inclusive groups drawn independently) */
+ if (pdev->ctx->stack == NULL && !ptgp->page_group) {
+ code = pdf14_initialize_ctx(dev, dev->color_info.num_components,
+ dev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE, NULL);
+ if (code < 0)
+ return code;
+ pdev->ctx->stack->isolated = true;
+ }
+
+ group_color_info = pdf14_push_color_model(dev, group_color_type, ptgp->icc_hashcode,
+ group_profile, false);
+ if (group_color_info == NULL)
+ return gs_error_VMerror;
if_debug0m('v', dev->memory, "[v]Transparency group color space update\n");
- if (code < 0)
- return code;
+
code = pdf14_push_transparency_group(pdev->ctx, &rect, isolated, ptgp->Knockout,
- (uint16_t)floor (65535 * alpha + 0.5),
- (uint16_t)floor (65535 * pgs->shape.alpha + 0.5),
- pgs->blend_mode, ptgp->idle,
+ (uint16_t)floor (65535 * alpha + 0.5),
+ (uint16_t)floor(65535 * ptgp->group_shape + 0.5),
+ (uint16_t)floor(65535 * ptgp->group_opacity + 0.5),
+ pgs->blend_mode, ptgp->idle,
ptgp->mask_id, pdev->color_info.num_components,
- cm_back_drop, group_profile, tos_profile,
- pgs, dev);
+ cm_back_drop, ptgp->shade_group,
+ group_profile, tos_profile, group_color_info, pgs, dev);
if (new_icc)
gsicc_adjust_profile_rc(group_profile, -1, "pdf14_begin_transparency_group");
return code;
}
+static void
+pdf14_pop_color_model(gx_device* dev, pdf14_group_color_t* group_color)
+{
+ pdf14_device* pdev = (pdf14_device*)dev;
+
+ if (group_color != NULL &&
+ !(group_color->group_color_mapping_procs == NULL &&
+ group_color->group_color_comp_index == NULL)) {
+ set_dev_proc(pdev, get_color_mapping_procs, group_color->group_color_mapping_procs);
+ set_dev_proc(pdev, get_color_comp_index, group_color->group_color_comp_index);
+ pdev->color_info.polarity = group_color->polarity;
+ pdev->color_info.num_components = group_color->num_components;
+ pdev->blend_procs = group_color->blend_procs;
+ pdev->ctx->additive = group_color->isadditive;
+ pdev->pdf14_procs = group_color->unpack_procs;
+ pdev->color_info.depth = group_color->depth;
+ pdev->color_info.max_color = group_color->max_color;
+ pdev->color_info.max_gray = group_color->max_gray;
+ memcpy(&(pdev->color_info.comp_bits), &(group_color->comp_bits),
+ GX_DEVICE_COLOR_MAX_COMPONENTS);
+ memcpy(&(pdev->color_info.comp_shift), &(group_color->comp_shift),
+ GX_DEVICE_COLOR_MAX_COMPONENTS);
+ if (group_color->icc_profile != NULL) {
+ /* make sure to decrement the device profile. If it was allocated
+ with the push then it will be freed. */
+ gsicc_adjust_profile_rc(pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ -1, "pdf14_pop_color_model");
+ pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE] =
+ group_color->icc_profile;
+ }
+ }
+}
+
static int
-pdf14_end_transparency_group(gx_device *dev,
- gs_gstate *pgs)
+pdf14_end_transparency_group(gx_device* dev, gs_gstate* pgs)
{
- pdf14_device *pdev = (pdf14_device *)dev;
+ pdf14_device* pdev = (pdf14_device*)dev;
int code;
- pdf14_parent_color_t *parent_color;
- cmm_profile_t *group_profile;
+ cmm_profile_t* group_profile;
gsicc_rendering_param_t render_cond;
- cmm_dev_profile_t *dev_profile;
+ cmm_dev_profile_t* dev_profile;
- code = dev_proc(dev, get_profile)(dev, &dev_profile);
+ code = dev_proc(dev, get_profile)(dev, &dev_profile);
if (code < 0)
return code;
+
gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile, &group_profile,
- &render_cond);
+ &render_cond);
if_debug0m('v', dev->memory, "[v]pdf14_end_transparency_group\n");
+
code = pdf14_pop_transparency_group(pgs, pdev->ctx, pdev->blend_procs,
- pdev->color_info.num_components, group_profile,
- (gx_device *) pdev);
+ pdev->color_info.num_components, group_profile, (gx_device*)pdev);
#ifdef DEBUG
pdf14_debug_mask_stack_state(pdev->ctx);
#endif
- /* May need to reset some color stuff related
- * to a mismatch between the parents color space
- * and the group blending space */
- parent_color = pdev->ctx->stack->parent_color_info;
- if (!(parent_color->parent_color_mapping_procs == NULL &&
- parent_color->parent_color_comp_index == NULL)) {
- pgs->get_cmap_procs = parent_color->get_cmap_procs;
- gx_set_cmap_procs(pgs, dev);
- set_dev_proc(pdev, get_color_mapping_procs, parent_color->parent_color_mapping_procs);
- set_dev_proc(pdev, get_color_comp_index, parent_color->parent_color_comp_index);
- pdev->color_info.polarity = parent_color->polarity;
- pdev->color_info.num_components = parent_color->num_components;
- pdev->blend_procs = parent_color->parent_blending_procs;
- pdev->ctx->additive = parent_color->isadditive;
- pdev->pdf14_procs = parent_color->unpack_procs;
- pdev->color_info.depth = parent_color->depth;
- pdev->color_info.max_color = parent_color->max_color;
- pdev->color_info.max_gray = parent_color->max_gray;
- memcpy(&(pdev->color_info.comp_bits),&(parent_color->comp_bits),
- GX_DEVICE_COLOR_MAX_COMPONENTS);
- memcpy(&(pdev->color_info.comp_shift),&(parent_color->comp_shift),
- GX_DEVICE_COLOR_MAX_COMPONENTS);
- parent_color->get_cmap_procs = NULL;
- parent_color->parent_color_comp_index = NULL;
- parent_color->parent_color_mapping_procs = NULL;
- if (parent_color->icc_profile != NULL) {
- /* make sure to decrement the device profile. If it was allocated
- with the push then it will be freed. */
- gsicc_adjust_profile_rc(dev->icc_struct->device_profile[0], -1, "pdf14_end_transparency_group");
- dev->icc_struct->device_profile[0] = parent_color->icc_profile;
- parent_color->icc_profile = NULL;
- }
+ /* If this group is the base group, then restore the color model
+ of the device at this time. Note that during the actual device pop
+ we will need to use the profile of the buffer not the pdf14 device
+ as the source color space */
+ if (pdev->ctx->stack->group_popped) {
+ pdf14_pop_color_model(dev, pdev->ctx->base_color);
+ } else {
+ pdf14_pop_color_model(dev, pdev->ctx->stack->group_color_info);
}
+
return code;
}
-static int
-pdf14_update_device_color_procs(gx_device *dev,
- gs_transparency_color_t group_color,
- int64_t icc_hashcode, gs_gstate *pgs,
- cmm_profile_t *iccprofile, bool is_mask)
+static pdf14_group_color_t*
+pdf14_push_color_model(gx_device *dev, gs_transparency_color_t group_color_type,
+ int64_t icc_hashcode, cmm_profile_t *iccprofile,
+ bool is_mask)
{
pdf14_device *pdevproto = NULL;
pdf14_device *pdev = (pdf14_device *)dev;
const pdf14_procs_t *new_14procs = NULL;
- pdf14_parent_color_t *parent_color_info;
+ pdf14_group_color_t *group_color;
gx_color_polarity_t new_polarity;
uchar new_num_comps;
bool new_additive;
@@ -5441,37 +6272,19 @@ pdf14_update_device_color_procs(gx_device *dev,
byte comp_shift[GX_DEVICE_COLOR_MAX_COMPONENTS];
int k;
bool has_tags = device_encodes_tags(dev);
- gsicc_rendering_param_t render_cond;
- cmm_dev_profile_t *dev_profile;
bool deep = pdev->ctx->deep;
- if (pdev->ctx->stack != NULL){
- parent_color_info = pdev->ctx->stack->parent_color_info;
- } else {
- /* This should not occur */
- return_error(gs_error_undefined);
- }
- if_debug0m('v', dev->memory, "[v]pdf14_update_device_color_procs\n");
+ if_debug0m('v', dev->memory, "[v]pdf14_push_color_model\n");
- memset(comp_bits, 0, GX_DEVICE_COLOR_MAX_COMPONENTS);
- memset(comp_shift, 0, GX_DEVICE_COLOR_MAX_COMPONENTS);
+ group_color = gs_alloc_struct(dev->memory->stable_memory,
+ pdf14_group_color_t, &st_pdf14_clr,
+ "pdf14_push_color_model");
+ if (group_color == NULL)
+ return NULL;
- /* Update the device procs at this stage. Many of the procs are based upon
- the color space of the device. We want to remain in the color space
- defined by the color space of the soft mask or transparency group as
- opposed to the device color space. Later, when we pop the softmask we will
- collapse it to a single band and then compose with it to the device color
- space (or the parent layer space). In the case where we pop an isolated
- transparency group, we will do the blending in the proper color space and
- then transform the data when we pop the group. Remember that only isolated
- groups can have color spaces that are different than their parent.
- Separation devices that have to maintain separate spot color planes need
- special handling here */
- parent_color_info->get_cmap_procs = NULL;
- parent_color_info->parent_color_mapping_procs = NULL;
- parent_color_info->parent_color_comp_index = NULL;
-
- switch (group_color) {
+ memset(group_color, 0, sizeof(pdf14_group_color_t));
+
+ switch (group_color_type) {
case GRAY_SCALE:
new_polarity = GX_CINFO_POLARITY_ADDITIVE;
new_num_comps = 1;
@@ -5520,16 +6333,19 @@ pdf14_update_device_color_procs(gx_device *dev,
iccprofile = gsicc_read_serial_icc((gx_device *) pcrdev,
icc_hashcode);
if (iccprofile == NULL)
- return gs_throw(gs_error_unknownerror, "ICC data not found in clist");
+ return NULL;
/* Keep a pointer to the clist device */
iccprofile->dev = (gx_device *) pcrdev;
} else {
/* Go ahead and rc increment right now. This way when
we pop, we will make sure to decrement and avoid a
- leak for the above profile that we just created */
+ leak for the above profile that we just created. This
+ goes with the assignment to the device's profile.
+ Note that we still do the increment for the group_color
+ assignment below. */
if (iccprofile == NULL)
- return gs_throw(gs_error_unknownerror, "ICC data unknown");
- gsicc_adjust_profile_rc(iccprofile, 1, "pdf14_update_device_color_procs");
+ return NULL;
+ gsicc_adjust_profile_rc(iccprofile, 1, "pdf14_push_color_model");
}
new_num_comps = iccprofile->num_comps;
if (new_num_comps == 4) {
@@ -5579,48 +6395,25 @@ pdf14_update_device_color_procs(gx_device *dev,
}
break;
default:
- return_error(gs_error_rangecheck);
+ return NULL;
break;
}
break;
default:
- return_error(gs_error_rangecheck);
+ return NULL;
break;
}
- /* Save the old information */
- parent_color_info->get_cmap_procs = pgs->get_cmap_procs;
- parent_color_info->parent_color_mapping_procs =
- dev_proc(pdev, get_color_mapping_procs);
- parent_color_info->parent_color_comp_index =
- dev_proc(pdev, get_color_comp_index);
- parent_color_info->parent_blending_procs = pdev->blend_procs;
- parent_color_info->polarity = pdev->color_info.polarity;
- parent_color_info->num_components = pdev->color_info.num_components;
- parent_color_info->isadditive = pdev->ctx->additive;
- parent_color_info->unpack_procs = pdev->pdf14_procs;
- parent_color_info->depth = pdev->color_info.depth;
- parent_color_info->max_color = pdev->color_info.max_color;
- parent_color_info->max_gray = pdev->color_info.max_gray;
- parent_color_info->encode = dev_proc(pdev, encode_color);
- parent_color_info->decode = dev_proc(pdev, decode_color);
- memcpy(&(parent_color_info->comp_bits), &(pdev->color_info.comp_bits),
- GX_DEVICE_COLOR_MAX_COMPONENTS);
- memcpy(&(parent_color_info->comp_shift), &(pdev->color_info.comp_shift),
- GX_DEVICE_COLOR_MAX_COMPONENTS);
-
- /* Don't increment the space since we are going to remove it from the
- ICC manager anyway. */
- if (group_color == ICC && iccprofile != NULL) {
- dev_proc(dev, get_profile)(dev, &dev_profile);
- gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile,
- &(parent_color_info->icc_profile), &render_cond);
- }
- /* Set new information */
+
+ if (group_color_type == ICC && iccprofile != NULL) {
+ group_color->icc_profile = iccprofile;
+ gsicc_adjust_profile_rc(iccprofile, 1, "pdf14_push_color_model");
+ }
+
/* If we are a sep device and this is not a softmask, ensure we maintain the
spot colorants and know how to index into them */
if (pdev->sep_device && !is_mask) {
- int num_spots = parent_color_info->num_components -
- parent_color_info->icc_profile->num_comps;
+ int num_spots = dev->color_info.num_components -
+ dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE]->num_comps;
if (num_spots > 0) {
new_num_comps += num_spots;
@@ -5630,16 +6423,19 @@ pdf14_update_device_color_procs(gx_device *dev,
}
}
}
+
+ /* Set device values now and store settings in group_color. Then they
+ are available when we pop the previous group */
if_debug2m('v', pdev->memory,
- "[v]pdf14_update_device_color_procs,num_components_old = %d num_components_new = %d\n",
+ "[v]pdf14_push_color_model, num_components_old = %d num_components_new = %d\n",
pdev->color_info.num_components,new_num_comps);
set_dev_proc(pdev, get_color_mapping_procs, pdevproto->static_procs->get_color_mapping_procs);
set_dev_proc(pdev, get_color_comp_index, pdevproto->static_procs->get_color_comp_index);
- pdev->blend_procs = pdevproto->blend_procs;
- pdev->color_info.polarity = new_polarity;
- pdev->color_info.num_components = new_num_comps;
- pdev->ctx->additive = new_additive;
- pdev->pdf14_procs = new_14procs;
+ group_color->blend_procs = pdev->blend_procs = pdevproto->blend_procs;
+ group_color->polarity = pdev->color_info.polarity = new_polarity;
+ group_color->num_components = pdev->color_info.num_components = new_num_comps;
+ group_color->isadditive = pdev->ctx->additive = new_additive;
+ group_color->unpack_procs = pdev->pdf14_procs = new_14procs;
pdev->color_info.depth = new_num_comps * (8<<deep);
memset(&(pdev->color_info.comp_bits), 0, GX_DEVICE_COLOR_MAX_COMPONENTS);
memset(&(pdev->color_info.comp_shift), 0, GX_DEVICE_COLOR_MAX_COMPONENTS);
@@ -5649,34 +6445,43 @@ pdf14_update_device_color_procs(gx_device *dev,
pdev->color_info.comp_shift[pdev->color_info.num_components] = pdev->color_info.depth;
pdev->color_info.depth += 8;
}
- pdev->color_info.max_color = deep ? 65535 : 255;
- pdev->color_info.max_gray = deep ? 65535 : 255;
+ group_color->max_color = pdev->color_info.max_color = deep ? 65535 : 255;
+ group_color->max_gray = pdev->color_info.max_gray = deep ? 65535 : 255;
+ group_color->depth = pdev->color_info.depth;
+ group_color->decode = dev_proc(pdev, decode_color);
+ group_color->encode = dev_proc(pdev, encode_color);
+ group_color->group_color_mapping_procs = dev_proc(pdev, get_color_mapping_procs);
+ group_color->group_color_comp_index = dev_proc(pdev, get_color_comp_index);
+ memcpy(&(group_color->comp_bits), &(pdev->color_info.comp_bits),
+ GX_DEVICE_COLOR_MAX_COMPONENTS);
+ memcpy(&(group_color->comp_shift), &(pdev->color_info.comp_shift),
+ GX_DEVICE_COLOR_MAX_COMPONENTS);
+ group_color->get_cmap_procs = pdf14_get_cmap_procs;
+
/* If the CS was ICC based, we need to update the device ICC profile
in the ICC manager, since that is the profile that is used for the
PDF14 device */
- if (group_color == ICC && iccprofile != NULL) {
+ if (group_color_type == ICC && iccprofile != NULL) {
/* iccprofile was incremented above if we had not just created it.
When we do the pop we will decrement and if we just created it, it
will be destroyed */
- dev->icc_struct->device_profile[0] = iccprofile;
+ dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE] = iccprofile;
}
- return 1; /* Lets us detect that we did do an update */
+ return group_color;
}
-/* A new version that works with the color_procs stack
- for transparency groups */
static int
-pdf14_update_device_color_procs_push_c(gx_device *dev,
- gs_transparency_color_t group_color,
- int64_t icc_hashcode,
- gs_gstate *pgs,
- cmm_profile_t *icc_profile,
- bool is_mask)
-{
- pdf14_device *pdevproto;
- pdf14_device *pdev = (pdf14_device *)dev;
- gx_device_clist_writer * cldev = (gx_device_clist_writer *)pdev->pclist_device;
- const pdf14_procs_t *new_14procs;
+pdf14_clist_push_color_model(gx_device *dev, gx_device* cdev, gs_gstate *pgs,
+ const gs_pdf14trans_t *pdf14pct, gs_memory_t* mem,
+ bool is_mask)
+{
+ pdf14_device* pdev = (pdf14_device*)dev;
+ pdf14_group_color_t* new_group_color;
+ gsicc_rendering_param_t render_cond;
+ cmm_dev_profile_t* dev_profile;
+ pdf14_device* pdevproto;
+ gx_device_clist_writer* cldev = (gx_device_clist_writer*)pdev->pclist_device;
+ const pdf14_procs_t* new_14procs;
bool update_color_info;
gx_color_polarity_t new_polarity;
int new_num_comps;
@@ -5686,146 +6491,192 @@ pdf14_update_device_color_procs_push_c(gx_device *dev,
byte comp_shift[GX_DEVICE_COLOR_MAX_COMPONENTS];
int k;
bool has_tags = device_encodes_tags(dev);
- cmm_profile_t *icc_profile_dev = NULL;
- gsicc_rendering_param_t render_cond;
- cmm_dev_profile_t *dev_profile;
bool deep = device_is_deep(dev);
+ gs_transparency_color_t group_color_type = pdf14pct->params.group_color_type;
+ cmm_profile_t *new_profile = pdf14pct->params.iccprofile;
+ cmm_profile_t *old_profile = NULL;
+
+ dev_proc(dev, get_profile)(dev, &dev_profile);
+ gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile, &old_profile,
+ &render_cond);
+ if_debug0m('v', dev->memory, "[v]pdf14_clist_push_color_model\n");
+
+ /* Allocate a new one */
+ new_group_color = gs_alloc_struct(dev->memory->stable_memory, pdf14_group_color_t,
+ &st_pdf14_clr, "pdf14_clist_push_color_model");
+
+ /* Link to old one */
+ new_group_color->previous = pdev->color_model_stack;
+
+ /* Reassign new one to dev */
+ pdev->color_model_stack = new_group_color;
+
+ /* Initialize with values */
+ new_group_color->get_cmap_procs = pgs->get_cmap_procs;
+ new_group_color->group_color_mapping_procs =
+ dev_proc(pdev, get_color_mapping_procs);
+ new_group_color->group_color_comp_index =
+ dev_proc(pdev, get_color_comp_index);
+ new_group_color->blend_procs = pdev->blend_procs;
+ new_group_color->polarity = pdev->color_info.polarity;
+ new_group_color->num_components = pdev->color_info.num_components;
+ new_group_color->unpack_procs = pdev->pdf14_procs;
+ new_group_color->depth = pdev->color_info.depth;
+ new_group_color->max_color = pdev->color_info.max_color;
+ new_group_color->max_gray = pdev->color_info.max_gray;
+ new_group_color->decode = dev_proc(pdev, decode_color);
+ new_group_color->encode = dev_proc(pdev, encode_color);
+ memcpy(&(new_group_color->comp_bits), &(pdev->color_info.comp_bits),
+ GX_DEVICE_COLOR_MAX_COMPONENTS);
+ memcpy(&(new_group_color->comp_shift), &(pdev->color_info.comp_shift),
+ GX_DEVICE_COLOR_MAX_COMPONENTS);
+
+ if (new_profile == NULL)
+ new_group_color->icc_profile = NULL;
+
+ /* isadditive is only used in ctx */
+ if (pdev->ctx) {
+ new_group_color->isadditive = pdev->ctx->additive;
+ }
memset(comp_bits, 0, GX_DEVICE_COLOR_MAX_COMPONENTS);
memset(comp_shift, 0, GX_DEVICE_COLOR_MAX_COMPONENTS);
- if (group_color == ICC && icc_profile == NULL)
+ if (group_color_type == ICC && new_profile == NULL)
return gs_throw(gs_error_undefinedresult, "Missing ICC data");
- if_debug0m('v', cldev->memory, "[v]pdf14_update_device_color_procs_push_c\n");
- /* Check if we need to alter the device procs at this stage. Many of the procs
- are based upon the color space of the device. We want to remain in the
- color space defined by the color space of the soft mask or transparency
- group as opposed to the device color space. Later, when we pop the softmask
- we will collapse it to a single band and then compose with it to the device
- color space (or the parent layer space). In the case where we pop an
- isolated transparency group, we will do the blending in the proper color
- space and then transform the data when we pop the group. Remember that only
- isolated groups can have color spaces that are different than their parent. */
+ if_debug0m('v', cldev->memory, "[v]pdf14_clist_push_color_model\n");
+ /* Check if we need to alter the device procs at this stage. Many of the procs
+ are based upon the color space of the device. We want to remain in the
+ color space defined by the color space of the soft mask or transparency
+ group as opposed to the device color space. Later, when we pop the softmask
+ we will collapse it to a single band and then compose with it to the device
+ color space (or the parent layer space). In the case where we pop an
+ isolated transparency group, we will do the blending in the proper color
+ space and then transform the data when we pop the group. Remember that only
+ isolated groups can have color spaces that are different than their parent. */
update_color_info = false;
- switch (group_color) {
- case GRAY_SCALE:
- if (pdev->color_info.num_components != 1){
- update_color_info = true;
+ switch (group_color_type) {
+ case GRAY_SCALE:
+ if (pdev->color_info.num_components != 1) {
+ update_color_info = true;
+ new_polarity = GX_CINFO_POLARITY_ADDITIVE;
+ new_num_comps = 1;
+ pdevproto = (pdf14_device*)&gs_pdf14_Gray_device;
+ new_additive = true;
+ new_14procs = &gray_pdf14_procs;
+ new_depth = 8 << deep;
+ comp_bits[0] = 8 << deep;
+ comp_shift[0] = 0;
+ }
+ break;
+ case DEVICE_RGB:
+ case CIE_XYZ:
+ if (pdev->color_info.num_components != 3) {
+ update_color_info = true;
+ new_polarity = GX_CINFO_POLARITY_ADDITIVE;
+ new_num_comps = 3;
+ pdevproto = (pdf14_device*)&gs_pdf14_RGB_device;
+ new_additive = true;
+ new_14procs = &rgb_pdf14_procs;
+ new_depth = 24 << deep;
+ for (k = 0; k < 3; k++) {
+ comp_bits[k] = 8 << deep;
+ comp_shift[k] = (2 - k) * (8 << deep);
+ }
+ }
+ break;
+ case DEVICE_CMYK:
+ if (pdev->color_info.num_components != 4) {
+ update_color_info = true;
+ new_polarity = GX_CINFO_POLARITY_SUBTRACTIVE;
+ new_num_comps = 4;
+ pdevproto = (pdf14_device*)&gs_pdf14_CMYK_device;
+ new_additive = false;
+ /* This is needed due to the mismatched compressed encode decode
+ between the device procs and the pdf14 procs */
+ if (dev->color_info.num_components > 4) {
+ new_14procs = &cmykspot_pdf14_procs;
+ }
+ else {
+ new_14procs = &cmyk_pdf14_procs;
+ }
+ new_depth = 32 << deep;
+ for (k = 0; k < 4; k++) {
+ comp_bits[k] = 8 << deep;
+ comp_shift[k] = (3 - k) * (8 << deep);
+ }
+ }
+ break;
+ case ICC:
+ /* Check if the profile is different. */
+ if (old_profile->hashcode != new_profile->hashcode) {
+ update_color_info = true;
+ new_num_comps = new_profile->num_comps;
+ new_depth = new_profile->num_comps * (8 << deep);
+ switch (new_num_comps) {
+ case 1:
+ if (pdev->sep_device && !is_mask) {
+ pdevproto = (pdf14_device*)&gs_pdf14_Grayspot_device;
+ new_14procs = &grayspot_pdf14_procs;
+ }
+ else {
+ pdevproto = (pdf14_device*)&gs_pdf14_Gray_device;
+ new_14procs = &gray_pdf14_procs;
+ }
new_polarity = GX_CINFO_POLARITY_ADDITIVE;
- new_num_comps = 1;
- pdevproto = (pdf14_device *)&gs_pdf14_Gray_device;
new_additive = true;
- new_14procs = &gray_pdf14_procs;
- new_depth = 8<<deep;
- comp_bits[0] = 8<<deep;
+ comp_bits[0] = 8 << deep;
comp_shift[0] = 0;
- }
- break;
- case DEVICE_RGB:
- case CIE_XYZ:
- if (pdev->color_info.num_components != 3){
- update_color_info = true;
+ break;
+ case 3:
+ if (pdev->sep_device) {
+ pdevproto = (pdf14_device*)&gs_pdf14_RGBspot_device;
+ new_14procs = &rgbspot_pdf14_procs;
+ }
+ else {
+ pdevproto = (pdf14_device*)&gs_pdf14_RGB_device;
+ new_14procs = &rgb_pdf14_procs;
+ }
new_polarity = GX_CINFO_POLARITY_ADDITIVE;
- new_num_comps = 3;
- pdevproto = (pdf14_device *)&gs_pdf14_RGB_device;
new_additive = true;
- new_14procs = &rgb_pdf14_procs;
- new_depth = 24<<deep;
for (k = 0; k < 3; k++) {
- comp_bits[k] = 8<<deep;
- comp_shift[k] = (2-k)*(8<<deep);
+ comp_bits[k] = 8 << deep;
+ comp_shift[k] = (2 - k) * (8 << deep);
}
- }
- break;
- case DEVICE_CMYK:
- if (pdev->color_info.num_components != 4){
- update_color_info = true;
- new_polarity = GX_CINFO_POLARITY_SUBTRACTIVE;
- new_num_comps = 4;
- pdevproto = (pdf14_device *)&gs_pdf14_CMYK_device;
- new_additive = false;
- /* This is needed due to the mismatched compressed encode decode
- between the device procs and the pdf14 procs */
- if (dev->color_info.num_components > 4){
+ break;
+ case 4:
+ if (pdev->sep_device) {
+ pdevproto = (pdf14_device*)&gs_pdf14_CMYKspot_device;
new_14procs = &cmykspot_pdf14_procs;
- } else {
+ }
+ else {
+ pdevproto = (pdf14_device*)&gs_pdf14_CMYK_device;
new_14procs = &cmyk_pdf14_procs;
}
- new_depth = 32<<deep;
+ new_polarity = GX_CINFO_POLARITY_SUBTRACTIVE;
+ new_additive = false;
for (k = 0; k < 4; k++) {
- comp_bits[k] = 8<<deep;
- comp_shift[k] = (3-k)*(8<<deep);
- }
- }
- break;
- case ICC:
- /* Check if the profile is different. */
- dev_proc(dev, get_profile)(dev, &dev_profile);
- gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile,
- &icc_profile_dev, &render_cond);
- if (icc_profile_dev->hashcode != icc_profile->hashcode) {
- update_color_info = true;
- new_num_comps = icc_profile->num_comps;
- new_depth = icc_profile->num_comps * (8<<deep);
- switch (new_num_comps) {
- case 1:
- if (pdev->sep_device && !is_mask) {
- pdevproto = (pdf14_device *)&gs_pdf14_Grayspot_device;
- new_14procs = &grayspot_pdf14_procs;
- } else {
- pdevproto = (pdf14_device *)&gs_pdf14_Gray_device;
- new_14procs = &gray_pdf14_procs;
- }
- new_polarity = GX_CINFO_POLARITY_ADDITIVE;
- new_additive = true;
- comp_bits[0] = 8<<deep;
- comp_shift[0] = 0;
- break;
- case 3:
- if (pdev->sep_device) {
- pdevproto = (pdf14_device *)&gs_pdf14_RGBspot_device;
- new_14procs = &rgbspot_pdf14_procs;
- } else {
- pdevproto = (pdf14_device *)&gs_pdf14_RGB_device;
- new_14procs = &rgb_pdf14_procs;
- }
- new_polarity = GX_CINFO_POLARITY_ADDITIVE;
- new_additive = true;
- for (k = 0; k < 3; k++) {
- comp_bits[k] = 8<<deep;
- comp_shift[k] = (2-k)*(8<<deep);
- }
- break;
- case 4:
- if (pdev->sep_device) {
- pdevproto = (pdf14_device *)&gs_pdf14_CMYKspot_device;
- new_14procs = &cmykspot_pdf14_procs;
- } else {
- pdevproto = (pdf14_device *)&gs_pdf14_CMYK_device;
- new_14procs = &cmyk_pdf14_procs;
- }
- new_polarity = GX_CINFO_POLARITY_SUBTRACTIVE;
- new_additive = false;
- for (k = 0; k < 4; k++) {
- comp_bits[k] = 8<<deep;
- comp_shift[k] = (3-k)*(8<<deep);
- }
- break;
- default:
- return gs_throw(gs_error_undefinedresult,
- "ICC Number of colorants illegal");
+ comp_bits[k] = 8 << deep;
+ comp_shift[k] = (3 - k) * (8 << deep);
}
+ break;
+ default:
+ return gs_throw(gs_error_undefinedresult,
+ "ICC Number of colorants illegal");
}
- break;
- case UNKNOWN:
- return 0;
- break;
- default:
- return_error(gs_error_rangecheck);
- break;
+ }
+ break;
+ case UNKNOWN:
+ return 0;
+ break;
+ default:
+ return_error(gs_error_rangecheck);
+ break;
}
if (!update_color_info) {
+ /* Profile not updated */
+ new_group_color->icc_profile = NULL;
if_debug0m('v', pdev->memory, "[v]procs not updated\n");
return 0;
}
@@ -5833,26 +6684,26 @@ pdf14_update_device_color_procs_push_c(gx_device *dev,
if (pdev->sep_device && !is_mask) {
int num_spots;
- if (icc_profile_dev == NULL)
+ if (old_profile == NULL)
return_error(gs_error_undefined);
- num_spots = pdev->color_info.num_components - icc_profile_dev->num_comps;
+ num_spots = pdev->color_info.num_components - old_profile->num_comps;
if (num_spots > 0) {
new_num_comps += num_spots;
for (k = 0; k < new_num_comps; k++) {
- comp_bits[k] = 8<<deep;
- comp_shift[k] = (new_num_comps - k - 1) * (8<<deep);
+ comp_bits[k] = 8 << deep;
+ comp_shift[k] = (new_num_comps - k - 1) * (8 << deep);
}
- new_depth = (8<<deep) * new_num_comps;
+ new_depth = (8 << deep) * new_num_comps;
}
}
if (has_tags) {
new_depth += 8;
}
if_debug2m('v', pdev->memory,
- "[v]pdf14_update_device_color_procs_push_c,num_components_old = %d num_components_new = %d\n",
- pdev->color_info.num_components,new_num_comps);
+ "[v]pdf14_clist_push_color_model, num_components_old = %d num_components_new = %d\n",
+ pdev->color_info.num_components, new_num_comps);
/* Set new information in the device */
set_dev_proc(pdev, get_color_mapping_procs, pdevproto->static_procs->get_color_mapping_procs);
set_dev_proc(pdev, get_color_comp_index, pdevproto->static_procs->get_color_comp_index);
@@ -5863,8 +6714,8 @@ pdf14_update_device_color_procs_push_c(gx_device *dev,
pdev->color_info.max_gray = deep ? 65535 : 255;
pdev->pdf14_procs = new_14procs;
pdev->color_info.depth = new_depth;
- memset(&(pdev->color_info.comp_bits),0,GX_DEVICE_COLOR_MAX_COMPONENTS);
- memset(&(pdev->color_info.comp_shift),0,GX_DEVICE_COLOR_MAX_COMPONENTS);
+ memset(&(pdev->color_info.comp_bits), 0, GX_DEVICE_COLOR_MAX_COMPONENTS);
+ memset(&(pdev->color_info.comp_shift), 0, GX_DEVICE_COLOR_MAX_COMPONENTS);
memcpy(&(pdev->color_info.comp_bits), comp_bits, new_num_comps);
memcpy(&(pdev->color_info.comp_shift), comp_shift, new_num_comps);
pdev->color_info.comp_shift[new_num_comps] = new_depth - 8; /* in case we has_tags is set */
@@ -5882,55 +6733,56 @@ pdf14_update_device_color_procs_push_c(gx_device *dev,
cldev->clist_color_info.max_color = pdev->color_info.max_color;
cldev->clist_color_info.max_gray = pdev->color_info.max_gray;
/* For the ICC profiles, we want to update the ICC profile for the
- device in the ICC manager. We already stored in in pdf14_parent_color_t.
+ device. We store the original in group_color.
That will be stored in the clist and restored during the reading phase. */
- if (group_color == ICC) {
- gsicc_adjust_profile_rc(icc_profile, 1, "pdf14_update_device_color_procs_push_c");
- gsicc_adjust_profile_rc(dev->icc_struct->device_profile[0], -1, "pdf14_update_device_color_procs_push_c");
- dev->icc_struct->device_profile[0] = icc_profile;
+ if (group_color_type == ICC) {
+ gsicc_adjust_profile_rc(new_profile, 1, "pdf14_clist_push_color_model");
+ new_group_color->icc_profile =
+ dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE];
+ dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE] = new_profile;
}
if (pdev->ctx) {
pdev->ctx->additive = new_additive;
}
- return(1); /* Lets us detect that we did do an update */
+ return 1; /* Lets us detect that we did do an update */
}
static int
-pdf14_update_device_color_procs_pop_c(gx_device *dev,gs_gstate *pgs)
+pdf14_clist_pop_color_model(gx_device *dev, gs_gstate *pgs)
{
pdf14_device *pdev = (pdf14_device *)dev;
- pdf14_parent_color_t *parent_color = pdev->trans_group_parent_cmap_procs;
+ pdf14_group_color_t *group_color = pdev->color_model_stack;
gx_device_clist_writer * cldev = (gx_device_clist_writer *)pdev->pclist_device;
- if (parent_color == NULL)
+ if (group_color == NULL)
return_error(gs_error_unknownerror); /* Unmatched group pop */
- if_debug0m('v', pdev->memory, "[v]pdf14_update_device_color_procs_pop_c\n");
+ if_debug0m('v', pdev->memory, "[v]pdf14_clist_pop_color_model\n");
/* The color procs are always pushed. Simply restore them. */
- if (parent_color->parent_color_mapping_procs == NULL &&
- parent_color->parent_color_comp_index == NULL) {
- if_debug0m('v', dev->memory, "[v]pdf14_update_device_color_procs_pop_c ERROR \n");
+ if (group_color->group_color_mapping_procs == NULL &&
+ group_color->group_color_comp_index == NULL) {
+ if_debug0m('v', dev->memory, "[v]pdf14_clist_pop_color_model ERROR \n");
} else {
if_debug2m('v', pdev->memory,
- "[v]pdf14_update_device_color_procs_pop_c,num_components_old = %d num_components_new = %d\n",
- pdev->color_info.num_components,parent_color->num_components);
- pgs->get_cmap_procs = parent_color->get_cmap_procs;
+ "[v]pdf14_clist_pop_color_model, num_components_old = %d num_components_new = %d\n",
+ pdev->color_info.num_components,group_color->num_components);
+ pgs->get_cmap_procs = group_color->get_cmap_procs;
gx_set_cmap_procs(pgs, dev);
- set_dev_proc(pdev, get_color_mapping_procs, parent_color->parent_color_mapping_procs);
- set_dev_proc(pdev, get_color_comp_index, parent_color->parent_color_comp_index);
- pdev->color_info.polarity = parent_color->polarity;
- pdev->color_info.depth = parent_color->depth;
- pdev->color_info.num_components = parent_color->num_components;
- pdev->blend_procs = parent_color->parent_blending_procs;
- pdev->pdf14_procs = parent_color->unpack_procs;
- pdev->color_info.max_color = parent_color->max_color;
- pdev->color_info.max_gray = parent_color->max_gray;
- set_dev_proc(pdev, encode_color, parent_color->encode);
- set_dev_proc(pdev, decode_color, parent_color->decode);
- memcpy(&(pdev->color_info.comp_bits),&(parent_color->comp_bits),
+ set_dev_proc(pdev, get_color_mapping_procs, group_color->group_color_mapping_procs);
+ set_dev_proc(pdev, get_color_comp_index, group_color->group_color_comp_index);
+ pdev->color_info.polarity = group_color->polarity;
+ pdev->color_info.depth = group_color->depth;
+ pdev->color_info.num_components = group_color->num_components;
+ pdev->blend_procs = group_color->blend_procs;
+ pdev->pdf14_procs = group_color->unpack_procs;
+ pdev->color_info.max_color = group_color->max_color;
+ pdev->color_info.max_gray = group_color->max_gray;
+ set_dev_proc(pdev, encode_color, group_color->encode);
+ set_dev_proc(pdev, decode_color, group_color->decode);
+ memcpy(&(pdev->color_info.comp_bits),&(group_color->comp_bits),
GX_DEVICE_COLOR_MAX_COMPONENTS);
- memcpy(&(pdev->color_info.comp_shift),&(parent_color->comp_shift),
+ memcpy(&(pdev->color_info.comp_shift),&(group_color->comp_shift),
GX_DEVICE_COLOR_MAX_COMPONENTS);
/* clist writer fill rect has no access to gs_gstate */
/* and it forwards the target device. this information */
@@ -5940,95 +6792,43 @@ pdf14_update_device_color_procs_pop_c(gx_device *dev,gs_gstate *pgs)
cldev->clist_color_info.num_components = pdev->color_info.num_components;
cldev->clist_color_info.max_color = pdev->color_info.max_color;
cldev->clist_color_info.max_gray = pdev->color_info.max_gray;
- memcpy(&(cldev->clist_color_info.comp_bits),&(parent_color->comp_bits),
+ memcpy(&(cldev->clist_color_info.comp_bits),&(group_color->comp_bits),
GX_DEVICE_COLOR_MAX_COMPONENTS);
- memcpy(&(cldev->clist_color_info.comp_shift),&(parent_color->comp_shift),
+ memcpy(&(cldev->clist_color_info.comp_shift),&(group_color->comp_shift),
GX_DEVICE_COLOR_MAX_COMPONENTS);
if (pdev->ctx){
- pdev->ctx->additive = parent_color->isadditive;
+ pdev->ctx->additive = group_color->isadditive;
}
/* The device profile must be restored. */
- gsicc_adjust_profile_rc(dev->icc_struct->device_profile[0], -1, "pdf14_update_device_color_procs_pop_c");
- dev->icc_struct->device_profile[0] = parent_color->icc_profile;
- parent_color->icc_profile = NULL;
+ if (group_color->icc_profile != NULL) {
+ gsicc_adjust_profile_rc(dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ -1, "pdf14_clist_pop_color_model");
+ dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE] = group_color->icc_profile;
+ }
if_debug0m('v', dev->memory, "[v]procs updated\n");
}
- pdf14_pop_parent_color(dev, pgs);
+ pdf14_pop_group_color(dev, pgs);
return 0;
}
-/* When a transparency group is pushed, the parent colorprocs are initialized.
- Since the color mapping procs are all based upon the device, we must have
- a nested list based upon the transparency group color space. This nesting
- must be outside the nested ctx structures to allow the nesting for the clist
- writer */
-static void
-pdf14_push_parent_color(gx_device *dev, const gs_gstate *pgs)
-{
- pdf14_device *pdev = (pdf14_device *)dev;
- pdf14_parent_color_t *new_parent_color;
- cmm_profile_t *icc_profile;
- gsicc_rendering_param_t render_cond;
- cmm_dev_profile_t *dev_profile;
-
- dev_proc(dev, get_profile)(dev, &dev_profile);
- gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile, &icc_profile,
- &render_cond);
- if_debug0m('v', dev->memory, "[v]pdf14_push_parent_color\n");
- /* Allocate a new one */
- new_parent_color = gs_alloc_struct(dev->memory->stable_memory, pdf14_parent_color_t,
- &st_pdf14_clr,"pdf14_clr_new");
- /* Link to old one */
- new_parent_color->previous = pdev->trans_group_parent_cmap_procs;
- /* Reassign new one to dev */
- pdev->trans_group_parent_cmap_procs = new_parent_color;
- /* Initialize with values */
- new_parent_color->get_cmap_procs = pgs->get_cmap_procs;
- new_parent_color->parent_color_mapping_procs =
- dev_proc(pdev, get_color_mapping_procs);
- new_parent_color->parent_color_comp_index =
- dev_proc(pdev, get_color_comp_index);
- new_parent_color->parent_blending_procs = pdev->blend_procs;
- new_parent_color->polarity = pdev->color_info.polarity;
- new_parent_color->num_components = pdev->color_info.num_components;
- new_parent_color->unpack_procs = pdev->pdf14_procs;
- new_parent_color->depth = pdev->color_info.depth;
- new_parent_color->max_color = pdev->color_info.max_color;
- new_parent_color->max_gray = pdev->color_info.max_gray;
- new_parent_color->decode = dev_proc(pdev, decode_color);
- new_parent_color->encode = dev_proc(pdev, encode_color);
- memcpy(&(new_parent_color->comp_bits), &(pdev->color_info.comp_bits),
- GX_DEVICE_COLOR_MAX_COMPONENTS);
- memcpy(&(new_parent_color->comp_shift), &(pdev->color_info.comp_shift),
- GX_DEVICE_COLOR_MAX_COMPONENTS);
- /* The ICC manager has the ICC profile for the device */
- new_parent_color->icc_profile = icc_profile;
- gsicc_adjust_profile_rc(icc_profile, 1, "pdf14_push_parent_color");
- /* isadditive is only used in ctx */
- if (pdev->ctx) {
- new_parent_color->isadditive = pdev->ctx->additive;
- }
-}
-
/* When a transparency group is popped, the parent colorprocs must be restored.
Since the color mapping procs are all based upon the device, we must have a
nested list based upon the transparency group color space. This nesting
must be outside the nested ctx structures to allow the nesting for the
clist writer */
static void
-pdf14_pop_parent_color(gx_device *dev, const gs_gstate *pgs)
+pdf14_pop_group_color(gx_device *dev, const gs_gstate *pgs)
{
pdf14_device *pdev = (pdf14_device *)dev;
- pdf14_parent_color_t *old_parent_color_info = pdev->trans_group_parent_cmap_procs;
+ pdf14_group_color_t *group_color = pdev->color_model_stack;
+
+ if_debug0m('v', dev->memory, "[v]pdf14_pop_group_color\n");
- if_debug0m('v', dev->memory, "[v]pdf14_pop_parent_color\n");
- /* We need to compliment pdf14_push_parent color */
- if (old_parent_color_info->icc_profile != NULL)
- gsicc_adjust_profile_rc(old_parent_color_info->icc_profile, -1, "pdf14_pop_parent_color");
/* Update the link */
- pdev->trans_group_parent_cmap_procs = old_parent_color_info->previous;
+ pdev->color_model_stack = group_color->previous;
+
/* Free the old one */
- gs_free_object(dev->memory->stable_memory, old_parent_color_info, "pdf14_clr_free");
+ gs_free_object(dev->memory->stable_memory, group_color, "pdf14_clr_free");
}
static int
@@ -6043,8 +6843,14 @@ pdf14_begin_transparency_mask(gx_device *dev,
gs_int_rect rect;
int code;
int group_color_numcomps;
- gs_transparency_color_t group_color;
+ gs_transparency_color_t group_color_type;
bool deep = device_is_deep(dev);
+ pdf14_group_color_t* group_color_info;
+
+ code = pdf14_initialize_ctx(dev, dev->color_info.num_components,
+ dev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE, (const gs_gstate*)pgs);
+ if (code < 0)
+ return code;
if (ptmp->subtype == TRANSPARENCY_MASK_None) {
pdf14_ctx *ctx = pdev->ctx;
@@ -6073,7 +6879,7 @@ pdf14_begin_transparency_mask(gx_device *dev,
memcpy(transfer_fn, ptmp->transfer_fn, (256+deep)<<deep);
/* If the group color is unknown, then we must use the previous group color
space or the device process color space */
- if (ptmp->group_color == UNKNOWN){
+ if (ptmp->group_color_type == UNKNOWN){
if (pdev->ctx->stack){
/* Use previous group color space */
group_color_numcomps = pdev->ctx->stack->n_chan-1; /* Remove alpha */
@@ -6083,30 +6889,30 @@ pdf14_begin_transparency_mask(gx_device *dev,
}
switch (group_color_numcomps) {
case 1:
- group_color = GRAY_SCALE;
+ group_color_type = GRAY_SCALE;
break;
case 3:
- group_color = DEVICE_RGB;
+ group_color_type = DEVICE_RGB;
break;
case 4:
- group_color = DEVICE_CMYK;
+ group_color_type = DEVICE_CMYK;
break;
default:
/* We can end up here if we are in a deviceN color space and
we have a sep output device */
- group_color = DEVICEN;
+ group_color_type = DEVICEN;
break;
}
} else {
- group_color = ptmp->group_color;
+ group_color_type = ptmp->group_color_type;
group_color_numcomps = ptmp->group_color_numcomps;
}
- /* Always update the color mapping procs. Otherwise we end up
- fowarding to the target device. */
- code = pdf14_update_device_color_procs(dev, group_color, ptmp->icc_hashcode,
- pgs, ptmp->iccprofile, true);
- if (code < 0)
- return code;
+
+ group_color_info = pdf14_push_color_model(dev, group_color_type, ptmp->icc_hashcode,
+ ptmp->iccprofile, true);
+ if (group_color_info == NULL)
+ return gs_error_VMerror;
+
/* Note that the soft mask always follows the group color requirements even
when we have a separable device */
code = pdf14_push_transparency_mask(pdev->ctx, &rect, bg_alpha,
@@ -6118,7 +6924,8 @@ pdf14_begin_transparency_mask(gx_device *dev,
ptmp->Background,
ptmp->Matte_components,
ptmp->Matte,
- ptmp->GrayBackground);
+ ptmp->GrayBackground,
+ group_color_info);
if (code < 0)
return code;
@@ -6129,7 +6936,7 @@ static int
pdf14_end_transparency_mask(gx_device *dev, gs_gstate *pgs)
{
pdf14_device *pdev = (pdf14_device *)dev;
- pdf14_parent_color_t *parent_color;
+ pdf14_group_color_t *group_color;
int ok;
if_debug0m('v', dev->memory, "pdf14_end_transparency_mask\n");
@@ -6142,35 +6949,32 @@ pdf14_end_transparency_mask(gx_device *dev, gs_gstate *pgs)
* to a mismatch between the Smask color space
* and the Smask blending space */
if (pdev->ctx->stack != NULL ) {
- parent_color = pdev->ctx->stack->parent_color_info;
- if (!(parent_color->parent_color_mapping_procs == NULL &&
- parent_color->parent_color_comp_index == NULL)) {
- pgs->get_cmap_procs = parent_color->get_cmap_procs;
+ group_color = pdev->ctx->stack->group_color_info;
+ if (!(group_color->group_color_mapping_procs == NULL &&
+ group_color->group_color_comp_index == NULL)) {
+ pgs->get_cmap_procs = group_color->get_cmap_procs;
gx_set_cmap_procs(pgs, dev);
- set_dev_proc(pdev, get_color_mapping_procs, parent_color->parent_color_mapping_procs);
- set_dev_proc(pdev, get_color_comp_index, parent_color->parent_color_comp_index);
- pdev->color_info.polarity = parent_color->polarity;
- pdev->color_info.num_components = parent_color->num_components;
- pdev->color_info.depth = parent_color->depth;
- pdev->blend_procs = parent_color->parent_blending_procs;
- pdev->ctx->additive = parent_color->isadditive;
- pdev->pdf14_procs = parent_color->unpack_procs;
- pdev->color_info.max_color = parent_color->max_color;
- pdev->color_info.max_gray = parent_color->max_gray;
- parent_color->get_cmap_procs = NULL;
- parent_color->parent_color_comp_index = NULL;
- parent_color->parent_color_mapping_procs = NULL;
- set_dev_proc(pdev, encode_color, parent_color->encode);
- set_dev_proc(pdev, decode_color, parent_color->decode);
- memcpy(&(pdev->color_info.comp_bits),&(parent_color->comp_bits),
+ set_dev_proc(pdev, get_color_mapping_procs, group_color->group_color_mapping_procs);
+ set_dev_proc(pdev, get_color_comp_index, group_color->group_color_comp_index);
+ pdev->color_info.polarity = group_color->polarity;
+ pdev->color_info.num_components = group_color->num_components;
+ pdev->color_info.depth = group_color->depth;
+ pdev->blend_procs = group_color->blend_procs;
+ pdev->ctx->additive = group_color->isadditive;
+ pdev->pdf14_procs = group_color->unpack_procs;
+ pdev->color_info.max_color = group_color->max_color;
+ pdev->color_info.max_gray = group_color->max_gray;
+ set_dev_proc(pdev, encode_color, group_color->encode);
+ set_dev_proc(pdev, decode_color, group_color->decode);
+ memcpy(&(pdev->color_info.comp_bits),&(group_color->comp_bits),
GX_DEVICE_COLOR_MAX_COMPONENTS);
- memcpy(&(pdev->color_info.comp_shift),&(parent_color->comp_shift),
+ memcpy(&(pdev->color_info.comp_shift),&(group_color->comp_shift),
GX_DEVICE_COLOR_MAX_COMPONENTS);
/* Take care of the ICC profile */
- if (parent_color->icc_profile != NULL) {
- gsicc_adjust_profile_rc(dev->icc_struct->device_profile[0], -1, "pdf14_end_transparency_mask");
- dev->icc_struct->device_profile[0] = parent_color->icc_profile;
- parent_color->icc_profile = NULL;
+ if (group_color->icc_profile != NULL) {
+ gsicc_adjust_profile_rc(dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ -1, "pdf14_end_transparency_mask");
+ dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE] = group_color->icc_profile;
}
}
}
@@ -6608,18 +7412,6 @@ static const gx_color_map_procs pdf14_cmap_many = {
pdf14_cmap_is_halftoned
};
-#if 0 /* NOT USED */
-static const gx_color_map_procs pdf14_cmap_many_group = {
- pdf14_cmap_gray_direct,
- pdf14_cmap_rgb_direct,
- pdf14_cmap_cmyk_direct,
- pdf14_cmap_rgb_alpha_direct,
- pdf14_cmap_separation_direct,
- pdf14_cmap_devicen_direct,
- pdf14_cmap_is_halftoned
- };
-#endif /* NOT USED */
-
/**
* Note: copied from gxcmap.c because it's inlined.
**/
@@ -6980,7 +7772,8 @@ pdf14_dev_spec_op(gx_device *pdev, int dev_spec_op,
return 1;
}
}
- if (dev_spec_op == gxdso_supports_devn) {
+ if (dev_spec_op == gxdso_supports_devn
+ || dev_spec_op == gxdso_skip_icc_component_validation) {
cmm_dev_profile_t *dev_profile;
int code;
code = dev_proc(pdev, get_profile)((gx_device*) pdev, &dev_profile);
@@ -6990,6 +7783,14 @@ pdf14_dev_spec_op(gx_device *pdev, int dev_spec_op,
return 0;
}
}
+ if (dev_spec_op == gxdso_pdf14_sep_device) {
+ pdf14_device* dev = (pdf14_device*)pdev;
+
+ if (strcmp(dev->dname, "pdf14cmykspot") == 0 ||
+ strcmp(dev->dname, "pdf14clistcmykspot") == 0)
+ return 1;
+ return 0;
+ }
if (dev_spec_op == gxdso_is_encoding_direct)
return 1;
@@ -7102,6 +7903,13 @@ gs_pdf14_device_push(gs_memory_t *mem, gs_gstate * pgs,
p14dev->pad = target->pad;
p14dev->log2_align_mod = target->log2_align_mod;
p14dev->is_planar = target->is_planar;
+
+ p14dev->alpha = 1.0;
+ p14dev->shape = 1.0;
+ p14dev->opacity = 1.0;
+ p14dev->fillconstantalpha = 1.0;
+ p14dev->strokeconstantalpha = 1.0;
+
/* If the target profile was CIELAB (and we are not using a blend CS),
then overide with default RGB for
proper blending. During put_image we will convert from RGB to
@@ -7110,8 +7918,9 @@ gs_pdf14_device_push(gs_memory_t *mem, gs_gstate * pgs,
if ((icc_profile->data_cs == gsCIELAB || icc_profile->islab)
&& pgs->icc_manager->default_rgb != NULL && !p14dev->using_blend_cs) {
gsicc_adjust_profile_rc(pgs->icc_manager->default_rgb, 1, "gs_pdf14_device_push");
- gsicc_adjust_profile_rc(p14dev->icc_struct->device_profile[0], -1, "gs_pdf14_device_push");
- p14dev->icc_struct->device_profile[0] = pgs->icc_manager->default_rgb;
+ gsicc_adjust_profile_rc(p14dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ -1, "gs_pdf14_device_push");
+ p14dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE] = pgs->icc_manager->default_rgb;
}
/* The number of color planes should not exceed that of the target.
Unless we are using a blend CS */
@@ -7138,12 +7947,14 @@ gs_pdf14_device_push(gs_memory_t *mem, gs_gstate * pgs,
p14dev->color_info.comp_shift[p14dev->color_info.num_components] = p14dev->color_info.depth;
p14dev->color_info.depth += 8;
}
+
/* by definition pdf14_encode _is_ standard */
p14dev->color_info.separable_and_linear = GX_CINFO_SEP_LIN_STANDARD;
gx_device_fill_in_procs((gx_device *)p14dev);
p14dev->save_get_cmap_procs = pgs->get_cmap_procs;
pgs->get_cmap_procs = pdf14_get_cmap_procs;
gx_set_cmap_procs(pgs, (gx_device *)p14dev);
+
/* Components shift, etc have to be based upon 8 (or 16) bit */
for (k = 0; k < p14dev->color_info.num_components; k++) {
p14dev->color_info.comp_bits[k] = 8<<deep;
@@ -7160,21 +7971,19 @@ gs_pdf14_device_push(gs_memory_t *mem, gs_gstate * pgs,
code = dev_proc((gx_device *) p14dev, open_device) ((gx_device *) p14dev);
*pdev = (gx_device *) p14dev;
pdf14_set_marking_params((gx_device *)p14dev, pgs);
- p14dev->trans_group_parent_cmap_procs = NULL;
+ p14dev->color_model_stack = NULL;
+
/* In case we have alphabits set */
p14dev->color_info.anti_alias = target->color_info.anti_alias;
-#if RAW_DUMP
- /* Dump the current buffer to see what we have. */
- dump_raw_buffer(p14dev->ctx->memory,
- p14dev->ctx->stack->rect.q.y-p14dev->ctx->stack->rect.p.y,
- p14dev->ctx->stack->rect.q.x-p14dev->ctx->stack->rect.p.x,
- p14dev->ctx->stack->n_planes,
- p14dev->ctx->stack->planestride, p14dev->ctx->stack->rowstride,
- "Device_Push", p14dev->ctx->stack->data,
- p14dev->ctx->stack->deep);
- global_index++;
-#endif
+ if (pdf14pct->params.is_pattern) {
+ code = pdf14_initialize_ctx((gx_device*)p14dev,
+ p14dev->color_info.num_components,
+ p14dev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE, (const gs_gstate*) pgs);
+ if (code < 0)
+ return code;
+ }
+
/* We should never go into this when using a blend color space */
if (use_pdf14_accum) {
const gx_device_pdf14_accum *accum_proto = NULL;
@@ -7346,6 +8155,9 @@ c_pdf14trans_write(const gs_composite_t * pct, byte * data, uint * psize,
gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile, &icc_profile,
&render_cond);
*pbuf++ = opcode; /* 1 byte */
+ if (trans_group_level < 0 && opcode != PDF14_PUSH_DEVICE)
+ return_error(gs_error_unregistered); /* prevent spurious transparency ops (Bug 702327) */
+
switch (opcode) {
default: /* Should not occur. */
break;
@@ -7375,7 +8187,7 @@ c_pdf14trans_write(const gs_composite_t * pct, byte * data, uint * psize,
break;
case PDF14_POP_DEVICE:
pdf14_needed = false; /* reset pdf14_needed */
- trans_group_level = 0;
+ trans_group_level = -1; /* reset so we need to PUSH_DEVICE next */
smask_level = 0;
put_value(pbuf, pparams->is_pattern);
break;
@@ -7394,18 +8206,20 @@ c_pdf14trans_write(const gs_composite_t * pct, byte * data, uint * psize,
return code;
*pbuf++ = (pparams->Isolated & 1) + ((pparams->Knockout & 1) << 1);
*pbuf++ = pparams->blend_mode;
- *pbuf++ = pparams->group_color;
+ *pbuf++ = pparams->group_color_type;
+ *pbuf++ = pparams->page_group;
put_value(pbuf, pparams->group_color_numcomps);
- put_value(pbuf, pparams->opacity.alpha);
- put_value(pbuf, pparams->shape.alpha);
+ put_value(pbuf, pparams->opacity);
+ put_value(pbuf, pparams->shape);
put_value(pbuf, pparams->bbox);
+ put_value(pbuf, pparams->shade_group);
put_value(pbuf, pparams->text_group);
mask_id = pparams->mask_id;
put_value(pbuf, mask_id);
/* Color space information maybe ICC based
in this case we need to store the ICC
profile or the ID if it is cached already */
- if (pparams->group_color == ICC) {
+ if (pparams->group_color_type == ICC) {
/* Check if it is already in the ICC clist table */
hashcode = pparams->iccprofile->hashcode;
found_icc = clist_icc_searchtable(cdev, hashcode);
@@ -7430,7 +8244,7 @@ c_pdf14trans_write(const gs_composite_t * pct, byte * data, uint * psize,
if (code < 0)
return code;
put_value(pbuf, pparams->subtype);
- *pbuf++ = pparams->group_color;
+ *pbuf++ = pparams->group_color_type;
put_value(pbuf, pparams->group_color_numcomps);
*pbuf++ = pparams->replacing;
*pbuf++ = (pparams->function_is_identity) | (deep<<1);
@@ -7458,7 +8272,7 @@ c_pdf14trans_write(const gs_composite_t * pct, byte * data, uint * psize,
/* Color space information may be ICC based
in this case we need to store the ICC
profile or the ID if it is cached already */
- if (pparams->group_color == ICC) {
+ if (pparams->group_color_type == ICC) {
/* Check if it is already in the ICC clist table */
hashcode = pparams->iccprofile->hashcode;
found_icc = clist_icc_searchtable(cdev, hashcode);
@@ -7480,8 +8294,8 @@ c_pdf14trans_write(const gs_composite_t * pct, byte * data, uint * psize,
pdf14_needed = cdev->page_pdf14_needed;
break;
case PDF14_SET_BLEND_PARAMS:
- if (pparams->blend_mode != BLEND_MODE_Normal || pparams->opacity.alpha != 1.0 ||
- pparams->shape.alpha != 1.0)
+ if (pparams->blend_mode != BLEND_MODE_Normal || pparams->opacity != 1.0 ||
+ pparams->shape != 1.0)
pdf14_needed = true; /* the compositor will be needed while reading */
else if (smask_level == 0 && trans_group_level == 0)
pdf14_needed = false; /* At page level, set back to false */
@@ -7493,10 +8307,8 @@ c_pdf14trans_write(const gs_composite_t * pct, byte * data, uint * psize,
*pbuf++ = pparams->blend_mode;
if (pparams->changed & PDF14_SET_TEXT_KNOCKOUT)
*pbuf++ = pparams->text_knockout;
- if (pparams->changed & PDF14_SET_OPACITY_ALPHA)
- put_value(pbuf, pparams->opacity.alpha);
- if (pparams->changed & PDF14_SET_SHAPE_ALPHA)
- put_value(pbuf, pparams->shape.alpha);
+ if (pparams->changed & PDF14_SET_AIS)
+ put_value(pbuf, pparams->ais);
if (pparams->changed & PDF14_SET_OVERPRINT)
put_value(pbuf, pparams->overprint);
if (pparams->changed & PDF14_SET_STROKEOVERPRINT)
@@ -7616,11 +8428,13 @@ c_pdf14trans_read(gs_composite_t * * ppct, const byte * data,
params.Isolated = (*data) & 1;
params.Knockout = (*data++ >> 1) & 1;
params.blend_mode = *data++;
- params.group_color = *data++; /* Trans group color */
+ params.group_color_type = *data++; /* Trans group color */
+ params.page_group = *data++;
read_value(data,params.group_color_numcomps); /* color group size */
- read_value(data, params.opacity.alpha);
- read_value(data, params.shape.alpha);
+ read_value(data, params.opacity);
+ read_value(data, params.shape);
read_value(data, params.bbox);
+ read_value(data, params.shade_group);
read_value(data, params.text_group);
read_value(data, params.mask_id);
read_value(data, params.icc_hash);
@@ -7640,7 +8454,7 @@ c_pdf14trans_read(gs_composite_t * * ppct, const byte * data,
*/
data = cmd_read_matrix(&params.ctm, data);
read_value(data, params.subtype);
- params.group_color = *data++;
+ params.group_color_type = *data++;
read_value(data, params.group_color_numcomps);
params.replacing = *data++;
params.function_is_identity = *data & 1;
@@ -7696,10 +8510,8 @@ c_pdf14trans_read(gs_composite_t * * ppct, const byte * data,
params.blend_mode = *data++;
if (params.changed & PDF14_SET_TEXT_KNOCKOUT)
params.text_knockout = *data++;
- if (params.changed & PDF14_SET_OPACITY_ALPHA)
- read_value(data, params.opacity.alpha);
- if (params.changed & PDF14_SET_SHAPE_ALPHA)
- read_value(data, params.shape.alpha);
+ if (params.changed & PDF14_SET_AIS)
+ read_value(data, params.ais);
if (params.changed & PDF14_SET_OVERPRINT)
read_value(data, params.overprint);
if (params.changed & PDF14_SET_STROKEOVERPRINT)
@@ -7748,6 +8560,7 @@ c_pdf14trans_adjust_ctm(gs_composite_t * pct0, int x0, int y0, gs_gstate *pgs)
*
* Note that this routine will be called only if the device is not already
* a PDF 1.4 transparency compositor.
+ * Return an error if it is not a PDF14_PUSH_DEVICE operation.
*/
static int
c_pdf14trans_create_default_compositor(const gs_composite_t * pct,
@@ -7769,8 +8582,9 @@ c_pdf14trans_create_default_compositor(const gs_composite_t * pct,
*pp14dev = p14dev;
break;
default:
- *pp14dev = tdev;
- break;
+ /* No other compositor actions are allowed if this isn't a pdf14 compositor */
+ *pp14dev = NULL;
+ return_error(gs_error_unregistered);
}
return code;
}
@@ -8461,7 +9275,7 @@ pdf14_create_clist_device(gs_memory_t *mem, gs_gstate * pgs,
CIELAB */
if ((target_profile->data_cs == gsCIELAB || target_profile->islab) &&
!pdev->using_blend_cs) {
- rc_assign(pdev->icc_struct->device_profile[0],
+ rc_assign(pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE],
pgs->icc_manager->default_rgb, "pdf14_create_clist_device");
}
pdev->my_encode_color = dev_proc(pdev, encode_color);
@@ -8545,7 +9359,7 @@ pdf14_ret_devn_params(gx_device *pdev)
{
pdf14_device *p14dev = (pdf14_device *)pdev;
- return(&(p14dev->devn_params));
+ return &(p14dev->devn_params);
}
/*
@@ -8556,7 +9370,7 @@ pdf14_accum_ret_devn_params(gx_device *pdev)
{
gx_device_pdf14_accum *p14dev = (gx_device_pdf14_accum *)pdev;
- return(&(p14dev->devn_params));
+ return &(p14dev->devn_params);
}
static int
@@ -8808,18 +9622,15 @@ pdf14_clist_create_compositor(gx_device * dev, gx_device ** pcdev,
pdf14pct->params.Background_components !=
pdev->color_info.num_components)
return_error(gs_error_rangecheck);
+
/* We need to update the clist writer device procs based upon the
- the group color space. For simplicity, the list item is
+ the group color space. This ensures the proper color data is
+ written out to the device. For simplicity, the list item is
created even if the color space did not change */
- /* First store the current ones */
- pdf14_push_parent_color(dev, pgs);
-
- code = pdf14_update_device_color_procs_push_c(dev,
- pdf14pct->params.group_color,
- pdf14pct->params.icc_hash, pgs,
- pdf14pct->params.iccprofile, false);
+ code = pdf14_clist_push_color_model(dev, cdev, pgs, pdf14pct, mem, false);
if (code < 0)
return code;
+
break;
case PDF14_BEGIN_TRANS_MASK:
/* We need to update the clist writer device procs based upon the
@@ -8828,32 +9639,12 @@ pdf14_clist_create_compositor(gx_device * dev, gx_device ** pcdev,
/* First store the current ones */
if (pdf14pct->params.subtype == TRANSPARENCY_MASK_None)
break;
- pdf14_push_parent_color(dev, pgs);
- /* If we are playing back from a clist, the iccprofile may need to be loaded */
- if (pdf14pct->params.iccprofile == NULL) {
- gs_pdf14trans_params_t *pparams_noconst = (gs_pdf14trans_params_t *)&(pdf14pct->params);
-
- pparams_noconst->iccprofile = gsicc_read_serial_icc((gx_device *) cdev,
- pdf14pct->params.icc_hash);
- if (pparams_noconst->iccprofile == NULL)
- return gs_throw(-1, "ICC data not found in clist");
- /* Keep a pointer to the clist device */
- pparams_noconst->iccprofile->dev = (gx_device *)cdev;
- /* Now we need to load the rest of the profile buffer */
- if (pparams_noconst->iccprofile->buffer == NULL) {
- gcmmhprofile_t dummy = gsicc_get_profile_handle_clist(pparams_noconst->iccprofile, mem);
-
- if (dummy == NULL)
- return_error(gs_error_VMerror);
- }
- }
- /* Now update the device procs */
- code = pdf14_update_device_color_procs_push_c(dev,
- pdf14pct->params.group_color,
- pdf14pct->params.icc_hash, pgs,
- pdf14pct->params.iccprofile, true);
+
+ /* Update the color settings of the clist writer. Store information in stack */
+ code = pdf14_clist_push_color_model(dev, cdev, pgs, pdf14pct, mem, true);
if (code < 0)
return code;
+
/* Also, if the BC is a value that may end up as something other
than transparent. We must use the parent colors bounding box in
determining the range of bands in which this mask can affect.
@@ -8874,7 +9665,7 @@ pdf14_clist_create_compositor(gx_device * dev, gx_device ** pcdev,
return 0; /* Avoids spurious ET calls in interpreter */
}
pdev->text_group = PDF14_TEXTGROUP_NO_BT; /* These can't be nested */
- code = pdf14_update_device_color_procs_pop_c(dev, pgs);
+ code = pdf14_clist_pop_color_model(dev, pgs);
if (code < 0)
return code;
break;
@@ -8888,7 +9679,7 @@ pdf14_clist_create_compositor(gx_device * dev, gx_device ** pcdev,
case PDF14_END_TRANS_GROUP:
/* We need to update the clist writer device procs based upon the
the group color space. */
- code = pdf14_update_device_color_procs_pop_c(dev,pgs);
+ code = pdf14_clist_pop_color_model(dev, pgs);
if (pdev->depth_within_smask)
pdev->depth_within_smask--;
if (code < 0)
@@ -9123,13 +9914,9 @@ pdf14_clist_update_params(pdf14_clist_device * pdev, const gs_gstate * pgs,
changed |= PDF14_SET_TEXT_KNOCKOUT;
params.text_knockout = pdev->text_knockout = pgs->text_knockout;
}
- if (pgs->shape.alpha != pdev->shape) {
- changed |= PDF14_SET_SHAPE_ALPHA;
- params.shape.alpha = pdev->shape = pgs->shape.alpha;
- }
- if (pgs->opacity.alpha != pdev->opacity) {
- changed |= PDF14_SET_OPACITY_ALPHA;
- params.opacity.alpha = pdev->opacity = pgs->opacity.alpha;
+ if (pgs->alphaisshape != pdev->ais) {
+ changed |= PDF14_SET_AIS;
+ params.ais = pdev->ais = pgs->alphaisshape;
}
if (pgs->overprint != pdev->overprint) {
changed |= PDF14_SET_OVERPRINT;
@@ -9147,9 +9934,13 @@ pdf14_clist_update_params(pdf14_clist_device * pdev, const gs_gstate * pgs,
changed |= PDF14_SET_STROKECONSTANTALPHA;
params.strokeconstantalpha = pdev->strokeconstantalpha = pgs->strokeconstantalpha;
}
- if (pgs->is_fill_color != pdev->op_state) {
+ if ((pgs->is_fill_color && pdev->op_state != PDF14_OP_STATE_FILL)) {
+ changed |= PDF_SET_FILLSTROKE_STATE;
+ params.op_fs_state = pdev->op_state = PDF14_OP_STATE_FILL;
+ }
+ if ((!pgs->is_fill_color && pdev->op_state != PDF14_OP_STATE_STROKE)) {
changed |= PDF_SET_FILLSTROKE_STATE;
- params.op_fs_state = pdev->op_state = pgs->is_fill_color;
+ params.op_fs_state = pdev->op_state = PDF14_OP_STATE_STROKE;
}
if (crop_blend_params) {
params.ctm = group_params->ctm;
@@ -9224,7 +10015,7 @@ pdf14_clist_fill_path(gx_device *dev, const gs_gstate *pgs,
/* Non-idempotent blends require a transparency
* group to be pushed because shadings might
* paint several pixels twice. */
- push_group = gs_currentopacityalpha(pgs) != 1.0 ||
+ push_group = pgs->fillconstantalpha != 1.0 ||
!blend_is_idempotent(gs_currentblendmode(pgs));
pinst =
(gs_pattern2_instance_t *)pdcolor->ccolor.pattern;
@@ -9252,6 +10043,7 @@ pdf14_clist_fill_path(gx_device *dev, const gs_gstate *pgs,
if (box.q.y > path_box.q.y)
box.q.y = path_box.q.y;
}
+ /* Group alpha set from fill value. push_shfill_group does reset to 1.0 */
code = push_shfill_group(pdev, &new_pgs, &box);
} else
update_lop_for_pdf14(&new_pgs, pdcolor);
@@ -9306,9 +10098,9 @@ pdf14_clist_stroke_path(gx_device *dev, const gs_gstate *pgs,
/* Non-idempotent blends require a transparency
* group to be pushed because shadings might
* paint several pixels twice. */
- push_group = gs_currentopacityalpha(pgs) != 1.0 ||
+ push_group = pgs->strokeconstantalpha != 1.0 ||
!blend_is_idempotent(gs_currentblendmode(pgs));
- if (pdev->trans_group_parent_cmap_procs != NULL) {
+ if (pdev->color_model_stack != NULL) {
pinst =
(gs_pattern2_instance_t *)pdcolor->ccolor.pattern;
pinst->saved->has_transparency = true;
@@ -9358,6 +10150,8 @@ pdf14_clist_stroke_path(gx_device *dev, const gs_gstate *pgs,
if (box.q.y > path_box.q.y)
box.q.y = path_box.q.y;
}
+ /* Group alpha set from fill value. push_shfill_group does reset to 1.0 */
+ new_pgs.fillconstantalpha = new_pgs.strokeconstantalpha;
code = push_shfill_group(pdev, &new_pgs, &box);
} else
update_lop_for_pdf14(&new_pgs, pdcolor);
@@ -9397,7 +10191,8 @@ pdf14_clist_fill_stroke_path_pattern_setup(gx_device* dev, const gs_gstate* cpgs
gs_transparency_group_params_t params = { 0 };
gs_fixed_rect clip_bbox;
gs_rect bbox, group_stroke_box;
- float opacity;
+ float fill_alpha;
+ float stroke_alpha;
gs_blend_mode_t blend_mode;
gs_fixed_rect path_bbox;
int expansion_code;
@@ -9407,7 +10202,8 @@ pdf14_clist_fill_stroke_path_pattern_setup(gx_device* dev, const gs_gstate* cpgs
const_breaker.cpgs = cpgs;
pgs = const_breaker.pgs;
- opacity = pgs->opacity.alpha;
+ fill_alpha = pgs->fillconstantalpha;
+ stroke_alpha = pgs->strokeconstantalpha;
blend_mode = pgs->blend_mode;
code = gx_curr_fixed_bbox(pgs, &clip_bbox, NO_PATH);
@@ -9447,87 +10243,92 @@ pdf14_clist_fill_stroke_path_pattern_setup(gx_device* dev, const gs_gstate* cpgs
/* See if overprint is enabled for both stroke and fill AND if ca == CA */
if (pgs->fillconstantalpha == pgs->strokeconstantalpha &&
- pgs->overprint && pgs->stroke_overprint &&
+ pgs->overprint && pgs->stroke_overprint && dev->icc_struct->sim_overprint &&
dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE) {
- /* Push a non-isolated non-knockout group with alpha = 1.0 and
- compatible overprint mode. Group will be composited with
- original alpha and blend mode */
+
params.Isolated = false;
- params.group_color = UNKNOWN;
+ params.group_color_type = UNKNOWN;
params.Knockout = false;
+ params.page_group = false;
+ params.group_opacity = fill_alpha;
+ params.group_shape = 1.0;
/* non-isolated non-knockout group pushed with original alpha and blend mode */
code = gs_begin_transparency_group(pgs, &params, &group_stroke_box, PDF14_BEGIN_TRANS_GROUP);
if (code < 0)
return code;
- /* Change alpha to 1.0 and blend mode to compatible overprint for actual drawing */
- (void)gs_setopacityalpha(pgs, 1.0); /* Can never fail */
+ /* Set alpha to 1.0 and compatible overprint mode for actual drawings */
+ (void)gs_setfillconstantalpha(pgs, 1.0);
+ (void)gs_setstrokeconstantalpha(pgs, 1.0);
(void)gs_setblendmode(pgs, BLEND_MODE_CompatibleOverprint); /* Can never fail */
- /* Do fill */
- if (pgs->fillconstantalpha > 0.0) {
- code = pdf14_clist_fill_path(dev, pgs, ppath, params_fill, pdevc_fill, pcpath);
- if (code < 0)
- goto cleanup;
- }
+ code = pdf14_clist_fill_path(dev, pgs, ppath, params_fill, pdevc_fill, pcpath);
+ if (code < 0)
+ goto cleanup;
- /* Do stroke */
- if (pgs->strokeconstantalpha > 0.0) {
- code = pdf14_clist_stroke_path(dev, pgs, ppath, params_stroke, pdevc_stroke, pcpath);
- if (code < 0)
- goto cleanup;
- }
+ code = pdf14_clist_stroke_path(dev, pgs, ppath, params_stroke, pdevc_stroke, pcpath);
+ if (code < 0)
+ goto cleanup;
} else {
/* Push a non-isolated knockout group. Do not change the alpha or
blend modes */
params.Isolated = false;
- params.group_color = UNKNOWN;
+ params.group_color_type = UNKNOWN;
params.Knockout = true;
+ params.page_group = false;
+ params.group_opacity = 1.0;
+ params.group_shape = 1.0;
/* non-isolated knockout group is pushed with alpha = 1.0 and Normal blend mode */
- (void)gs_setopacityalpha(pgs, 1.0); /* Can never fail */
+ (void)gs_setfillconstantalpha(pgs, 1.0);
(void)gs_setblendmode(pgs, BLEND_MODE_Normal); /* Can never fail */
-
code = gs_begin_transparency_group(pgs, &params, &group_stroke_box, PDF14_BEGIN_TRANS_GROUP);
+
/* restore blend mode for actual drawing in the group */
(void)gs_setblendmode(pgs, blend_mode); /* Can never fail */
- if (code < 0) {
- (void)gs_setopacityalpha(pgs, opacity); /* Can never fail */
- return code;
- }
- if (pgs->fillconstantalpha > 0.0) {
- (void)gs_setopacityalpha(pgs, pgs->fillconstantalpha); /* Can never fail */
+ if (fill_alpha > 0.0) {
+ (void)gs_setfillconstantalpha(pgs, fill_alpha);
/* If we are in an overprint situation, set the blend mode to compatible
overprint */
- if (pgs->overprint && dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
+ if (dev->icc_struct->sim_overprint && pgs->overprint &&
+ dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
(void)gs_setblendmode(pgs, BLEND_MODE_CompatibleOverprint); /* Can never fail */
code = pdf14_clist_fill_path(dev, pgs, ppath, params_fill, pdevc_fill, pcpath);
if (code < 0)
goto cleanup;
- if (pgs->overprint && dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
+ if (dev->icc_struct->sim_overprint && pgs->overprint &&
+ dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
(void)gs_setblendmode(pgs, blend_mode); /* Can never fail */
}
- if (pgs->strokeconstantalpha > 0.0) {
- (void)gs_setopacityalpha(pgs, pgs->strokeconstantalpha); /* Can never fail */
- if (pgs->stroke_overprint && dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
+ if (stroke_alpha > 0.0) {
+ /* Note that the stroke can end up looking like a fill here */
+ (void)gs_setstrokeconstantalpha(pgs, stroke_alpha);
+ (void)gs_setfillconstantalpha(pgs, stroke_alpha);
+
+ if (pgs->overprint && dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
(void)gs_setblendmode(pgs, BLEND_MODE_CompatibleOverprint); /* Can never fail */
code = pdf14_clist_stroke_path(dev, pgs, ppath, params_stroke, pdevc_stroke, pcpath);
if (code < 0)
goto cleanup;
+
+ if (dev->icc_struct->sim_overprint && pgs->overprint &&
+ dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
+ (void)gs_setblendmode(pgs, blend_mode); /* Can never fail */
}
}
cleanup:
/* Now during the pop do the compositing with alpha of 1.0 and normal blend */
- (void)gs_setopacityalpha(pgs, 1.0); /* Can never fail */
+ (void)gs_setfillconstantalpha(pgs, 1.0);
+ (void)gs_setstrokeconstantalpha(pgs, 1.0);
(void)gs_setblendmode(pgs, BLEND_MODE_Normal); /* Can never fail */
/* Restore where we were. If an error occured while in the group push
@@ -9540,7 +10341,8 @@ cleanup:
}
/* Restore if there were any changes */
- (void)gs_setopacityalpha(pgs, opacity); /* Can never fail */
+ (void)gs_setfillconstantalpha(pgs, fill_alpha);
+ (void)gs_setstrokeconstantalpha(pgs, stroke_alpha);
(void)gs_setblendmode(pgs, blend_mode); /* Can never fail */
return code;
@@ -9608,9 +10410,13 @@ pdf14_clist_text_begin(gx_device * dev, gs_gstate * pgs,
gs_text_enum_t *penum;
int code;
gs_blend_mode_t blend_mode = gs_currentblendmode(pgs);
- float opacity = gs_currentopacityalpha(pgs);
+ float opacity = pgs->fillconstantalpha;
+ float shape = 1.0;
bool blend_issue = !(blend_mode == BLEND_MODE_Normal || blend_mode == BLEND_MODE_Compatible || blend_mode == BLEND_MODE_CompatibleOverprint);
bool draw = !(text->operation & TEXT_DO_NONE);
+ uint text_mode = gs_currenttextrenderingmode(pgs);
+ bool text_stroke = (text_mode == 1 || text_mode == 2 || text_mode == 5 || text_mode == 6);
+ bool text_fill = (text_mode == 0 || text_mode == 2 || text_mode == 4 || text_mode == 6);
if_debug0m('v', memory, "[v]pdf14_clist_text_begin\n");
/*
@@ -9648,11 +10454,14 @@ pdf14_clist_text_begin(gx_device * dev, gs_gstate * pgs,
3) Text knockout is set to true
4) And we are actually drawing text
*/
- if (gs_currenttextknockout(pgs) && (blend_issue || opacity != 1.0) &&
- gs_currenttextrenderingmode(pgs) != 3 && /* don't bother with invisible text */
+
+ if (gs_currenttextknockout(pgs) && (blend_issue ||
+ (pgs->fillconstantalpha != 1.0 && text_fill) ||
+ (pgs->strokeconstantalpha != 1.0 && text_stroke)) &&
+ text_mode != 3 && /* don't bother with invisible text */
pdev->text_group == PDF14_TEXTGROUP_BT_NOT_PUSHED) {
if (draw) {
- code = pdf14_push_text_group(dev, pgs, blend_mode, opacity, true);
+ code = pdf14_push_text_group(dev, pgs, blend_mode, opacity, shape, true);
if (code == 0)
pdev->text_group = PDF14_TEXTGROUP_BT_PUSHED; /* Needed during clist writing */
}
@@ -9768,6 +10577,7 @@ pdf14_clist_begin_typed_image(gx_device * dev, const gs_gstate * pgs,
if_debug0m('v', pgs->memory, "[v]Pushing special trans group for image\n");
tgp.Isolated = true;
tgp.Knockout = false;
+ tgp.page_group = false;
tgp.mask_id = 0;
tgp.image_with_SMask = false;
tgp.idle = false;
@@ -9776,6 +10586,8 @@ pdf14_clist_begin_typed_image(gx_device * dev, const gs_gstate * pgs,
tgp.group_color_numcomps = ptile->ttrans->n_chan-1;
tgp.ColorSpace = NULL;
tgp.text_group = 0;
+ tgp.group_opacity = pgs->fillconstantalpha;
+ tgp.group_shape = 1.0;
/* This will handle the compositor command */
gs_begin_transparency_group((gs_gstate *) pgs_noconst, &tgp,
&bbox_out, PDF14_BEGIN_TRANS_GROUP);
@@ -10017,8 +10829,9 @@ c_pdf14trans_clist_read_update(gs_composite_t * pcte, gx_device * cdev,
switch (pdf14pct->params.pdf14_op) {
case PDF14_PUSH_DEVICE:
gsicc_adjust_profile_rc(cl_icc_profile, 1, "c_pdf14trans_clist_read_update");
- gsicc_adjust_profile_rc(p14dev->icc_struct->device_profile[0], -1, "c_pdf14trans_clist_read_update");
- p14dev->icc_struct->device_profile[0] = cl_icc_profile;
+ gsicc_adjust_profile_rc(p14dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ -1, "c_pdf14trans_clist_read_update");
+ p14dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE] = cl_icc_profile;
/*
* If we are blending using spot colors (i.e. the output device
* supports spot colors) then we need to transfer
@@ -10081,11 +10894,13 @@ c_pdf14trans_clist_read_update(gs_composite_t * pcte, gx_device * cdev,
happens to be something like CIELAB. Then we will blend in
RGB (unless a trans group is specified) */
if (cl_icc_profile->data_cs == gsCIELAB || cl_icc_profile->islab) {
- gsicc_adjust_profile_rc(p14dev->icc_struct->device_profile[0], -1, "c_pdf14trans_clist_read_update");
+ gsicc_adjust_profile_rc(p14dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ -1, "c_pdf14trans_clist_read_update");
/* Initial ref count from gsicc_read_serial_icc() is 1, which is what we want */
- p14dev->icc_struct->device_profile[0] = gsicc_read_serial_icc(cdev, pcrdev->trans_dev_icc_hash);
+ p14dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE] =
+ gsicc_read_serial_icc(cdev, pcrdev->trans_dev_icc_hash);
/* Keep a pointer to the clist device */
- p14dev->icc_struct->device_profile[0]->dev = (gx_device *) cdev;
+ p14dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE]->dev = (gx_device *) cdev;
}
break;
@@ -10095,7 +10910,7 @@ c_pdf14trans_clist_read_update(gs_composite_t * pcte, gx_device * cdev,
writing. */
cdev->color_info = p14dev->saved_target_color_info;
# endif
- break;
+ break;
default:
break; /* do nothing for remaining ops */
@@ -10359,9 +11174,13 @@ pdf14_increment_smask_color(gs_gstate * pgs, gx_device * dev)
result = gs_alloc_struct(pdev->memory->stable_memory, pdf14_smaskcolor_t,
&st_pdf14_smaskcolor,
"pdf14_increment_smask_color");
- if (result == NULL ) return(-1);
+ if (result == NULL)
+ return gs_error_VMerror;
+
result->profiles = gsicc_new_iccsmask(pdev->memory->stable_memory);
- if (result->profiles == NULL ) return(-1);
+ if (result->profiles == NULL)
+ return gs_error_VMerror;
+
pdev->smaskcolor = result;
result->profiles->smask_gray = pgs->icc_manager->default_gray;
@@ -10416,7 +11235,7 @@ pdf14_increment_smask_color(gs_gstate * pgs, gx_device * dev)
}
}
}
- return(0);
+ return 0;
}
static int
@@ -10498,7 +11317,7 @@ pdf14_decrement_smask_color(gs_gstate * pgs, gx_device * dev)
pdf14_free_smask_color(pdev);
}
}
- return(0);
+ return 0;
}
static void
@@ -10523,15 +11342,15 @@ pdf14_device_finalize(const gs_memory_t *cmem, void *vptr)
gx_device * const dev = (gx_device *)vptr;
pdf14_device * pdev = (pdf14_device *)dev;
- pdf14_cleanup_parent_color_profiles (pdev);
+ pdf14_cleanup_group_color_profiles (pdev);
if (pdev->ctx) {
pdf14_ctx_free(pdev->ctx);
pdev->ctx = NULL;
}
- while (pdev->trans_group_parent_cmap_procs) {
- pdf14_pop_parent_color(dev, NULL);
+ while (pdev->color_model_stack) {
+ pdf14_pop_group_color(dev, NULL);
}
gx_device_finalize(cmem, vptr);
}
diff --git a/base/gdevp14.h b/base/gdevp14.h
index e4d4dfaa..635ab111 100644
--- a/base/gdevp14.h
+++ b/base/gdevp14.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -97,18 +97,15 @@ struct pdf14_mask_s {
};
-/* A structure to hold information
- * about the parent color related
- * procs and other information.
- * These may change depending upon
- * if the blending space is different
- * than the base space. The structure
- * is a list that is updated upon
- * every transparency group push and pop */
+/* A structure to hold information about the group color related
+ * procs and other information. These may change depending upon
+ * if the blending space is different than the base space.
+ * The structure is a list that is updated upo every transparency
+ * group push and pop */
-typedef struct pdf14_parent_color_s pdf14_parent_color_t;
+typedef struct pdf14_group_color_s pdf14_group_color_t;
-struct pdf14_parent_color_s {
+struct pdf14_group_color_s {
int num_components;
bool isadditive;
gx_color_polarity_t polarity;
@@ -119,14 +116,14 @@ struct pdf14_parent_color_s {
uint max_color; /* Causes issues if these are not maintained */
const gx_color_map_procs *(*get_cmap_procs)(const gs_gstate *,
const gx_device *);
- const gx_cm_color_map_procs *(*parent_color_mapping_procs)(const gx_device *);
+ const gx_cm_color_map_procs *(*group_color_mapping_procs)(const gx_device *);
gx_color_index (*encode)(gx_device *, const gx_color_value value[]);
int (*decode)(gx_device *, gx_color_index, gx_color_value *);
- int (*parent_color_comp_index)(gx_device *, const char *, int, int);
+ int (*group_color_comp_index)(gx_device *, const char *, int, int);
const pdf14_procs_t * unpack_procs;
- const pdf14_nonseparable_blending_procs_t * parent_blending_procs;
+ const pdf14_nonseparable_blending_procs_t * blend_procs;
cmm_profile_t *icc_profile; /* Opaque to GC. Allocated in non-gc memory */
- pdf14_parent_color_t *previous;
+ pdf14_group_color_t *previous;
};
typedef struct pdf14_ctx_s pdf14_ctx;
@@ -137,6 +134,7 @@ struct pdf14_buf_s {
bool isolated;
bool knockout;
uint16_t alpha;
+ uint16_t opacity;
uint16_t shape;
gs_blend_mode_t blend_mode;
int num_spots; /* helpful when going between Gray+spots, RGB+spots, CMYK+spots */
@@ -145,7 +143,9 @@ struct pdf14_buf_s {
bool has_tags;
bool deep; /* false => 8 bits, true => 16 bits */
bool page_group;
-
+ bool group_popped; /* Can occur in cases where clist created shading groups */
+ /* If there is a group and is pushed and popped, with
+ nothing drawn AND the clist created shading groups */
gs_int_rect rect;
/* Note: the traditional GS name for rowstride is "raster" */
@@ -168,7 +168,7 @@ struct pdf14_buf_s {
gs_transparency_mask_subtype_t SMask_SubType;
uint mask_id;
- pdf14_parent_color_t *parent_color_info;
+ pdf14_group_color_t *group_color_info;
gs_transparency_color_t color_space; /* Different groups can have different spaces for blending */
gs_memory_t *memory;
@@ -189,6 +189,9 @@ struct pdf14_ctx_s {
int smask_depth; /* used to catch smasks embedded in smasks. bug691803 */
bool smask_blend;
bool deep; /* If true, 16 bit data, false, 8 bit data. */
+ bool has_tags;
+ int num_spots;
+ pdf14_group_color_t* base_color;
};
typedef struct gs_pdf14trans_params_s gs_pdf14trans_params_t;
@@ -208,6 +211,7 @@ typedef struct pdf14_device_s {
pdf14_ctx *ctx;
pdf14_smaskcolor_t *smaskcolor;
+ bool ais;
float opacity;
float shape;
float alpha; /* alpha = opacity * shape */
@@ -266,7 +270,7 @@ typedef struct pdf14_device_s {
dev_proc_get_color_mapping_procs(*my_get_color_mapping_procs);
dev_proc_get_color_comp_index(*my_get_color_comp_index);
- pdf14_parent_color_t *trans_group_parent_cmap_procs;
+ pdf14_group_color_t *color_model_stack;
} pdf14_device_t;
@@ -316,4 +320,6 @@ int gs_pdf14_device_color_mon_set(gx_device *pdev, bool monitoring);
/* depth are critical since these must match when reading back colors. */
bool pdf14_ok_to_optimize(gx_device *bdev);
+
+
#endif /* gdevp14_INCLUDED */
diff --git a/base/gdevpccm.c b/base/gdevpccm.c
index bd8906f2..fbbbf97c 100644
--- a/base/gdevpccm.c
+++ b/base/gdevpccm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevpccm.h b/base/gdevpccm.h
index 89e76d21..ae3de6dc 100644
--- a/base/gdevpccm.h
+++ b/base/gdevpccm.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevpipe.c b/base/gdevpipe.c
index a7742e16..b4f2acb1 100644
--- a/base/gdevpipe.c
+++ b/base/gdevpipe.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -29,8 +29,14 @@
static int
do_pclose(FILE *file)
{
-#ifndef GS_NO_FILESYSTEM
- return pclose(file);
+#ifdef GS_NO_FILESYSTEM
+ return gs_error_ok;
+#else
+ int status = pclose(file);
+ if (status < 0 || status > 0)
+ return_error(gs_error_ioerror);
+
+ return gs_error_ok;
#endif
}
@@ -96,10 +102,11 @@ pipe_fopen(gx_io_device * iodev, const char *fname, const char *access,
static int
pipe_fclose(gx_io_device * iodev, gp_file * file)
{
-#ifndef GS_NO_FILESYSTEM
- gp_fclose(file);
-#endif
+#ifdef GS_NO_FILESYSTEM
return 0;
+#else
+ return gp_fclose(file);
+#endif
}
static int
diff --git a/base/gdevplnx.c b/base/gdevplnx.c
index a8e7aab1..3a85b6d0 100644
--- a/base/gdevplnx.c
+++ b/base/gdevplnx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -29,6 +29,7 @@
#include "gxgetbit.h"
#include "gxiparam.h"
#include "gxgstate.h"
+#include "gsstate.h"
#include "gdevplnx.h"
/* Define the size of the locally allocated bitmap buffers. */
@@ -428,6 +429,7 @@ plane_device_init(gx_device_plane_extract *edev, gx_device *target,
gx_device_set_target((gx_device_forward *)edev, target);
gx_device_copy_params((gx_device *)edev, target);
edev->plane_dev = plane_dev;
+ gx_device_retain(plane_dev, true);
edev->plane = *render_plane;
plane_open_device((gx_device *)edev);
if (clear) {
@@ -841,6 +843,8 @@ typedef struct plane_image_enum_s {
const gs_gstate *pgs; /* original gs_gstate */
gs_gstate *pgs_image; /* modified gs_gstate state */
} plane_image_enum_t;
+/* Note that we include the pgs_image which is 'bytes' type (not gs_gstate) */
+/* It still needs to be traced so that a GC won't free it prematurely. */
gs_private_st_suffix_add3(st_plane_image_enum, plane_image_enum_t,
"plane_image_enum_t", plane_image_enum_enum_ptrs,
plane_image_enum_reloc_ptrs, st_gx_image_enum_common, info, pgs, pgs_image);
@@ -991,10 +995,9 @@ plane_begin_typed_image(gx_device * dev,
}
info = gs_alloc_struct(memory, plane_image_enum_t, &st_plane_image_enum,
"plane_image_begin_typed(info)");
- pgs_image = gs_gstate_copy_temp(pgs, memory);
+ pgs_image = gs_gstate_copy(pgs, memory);
if (pgs_image == 0 || info == 0)
goto fail;
- *pgs_image = *pgs;
pgs_image->client_data = info;
pgs_image->get_cmap_procs = plane_get_cmap_procs;
code = dev_proc(edev->plane_dev, begin_typed_image)
@@ -1034,6 +1037,7 @@ plane_image_end_image(gx_image_enum_common_t * info, bool draw_last)
plane_image_enum_t * const ppie = (plane_image_enum_t *)info;
int code = gx_image_end(ppie->info, draw_last);
+ ppie->pgs_image->client_data = NULL; /* this isn't a complete client_data struct */
gs_free_object(ppie->memory, ppie->pgs_image,
"plane_image_end_image(pgs_image)");
gx_image_free_enum(&info);
diff --git a/base/gdevplnx.h b/base/gdevplnx.h
index 05674636..63226cbc 100644
--- a/base/gdevplnx.h
+++ b/base/gdevplnx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevppla.c b/base/gdevppla.c
index 6ff8f2da..a4df7798 100644
--- a/base/gdevppla.c
+++ b/base/gdevppla.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevppla.h b/base/gdevppla.h
index e132fcb6..d3092f0b 100644
--- a/base/gdevppla.h
+++ b/base/gdevppla.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevprn.c b/base/gdevprn.c
index 9d5c9e9f..9bcc5e50 100644
--- a/base/gdevprn.c
+++ b/base/gdevprn.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -37,10 +37,7 @@
/* GC information */
static
ENUM_PTRS_WITH(device_printer_enum_ptrs, gx_device_printer *pdev);
- if (PRINTER_IS_CLIST(pdev))
- ENUM_PREFIX(st_device_clist, 2);
- else
- ENUM_PREFIX(st_device_forward, 2);
+ ENUM_PREFIX(st_device_clist_mutatable, 2);
break;
case 0:ENUM_RETURN(gx_device_enum_ptr(pdev->parent));
case 1:ENUM_RETURN(gx_device_enum_ptr(pdev->child));
@@ -50,10 +47,7 @@ RELOC_PTRS_WITH(device_printer_reloc_ptrs, gx_device_printer *pdev)
{
pdev->parent = gx_device_reloc_ptr(pdev->parent, gcst);
pdev->child = gx_device_reloc_ptr(pdev->child, gcst);
- if (PRINTER_IS_CLIST(pdev))
- RELOC_PREFIX(st_device_clist);
- else
- RELOC_PREFIX(st_device_forward);
+ RELOC_PREFIX(st_device_clist_mutatable);
} RELOC_PTRS_END
public_st_device_printer();
@@ -67,7 +61,7 @@ const gx_device_procs prn_bg_procs =
/* Forward references */
int gdev_prn_maybe_realloc_memory(gx_device_printer *pdev,
- gdev_prn_space_params *old_space,
+ gdev_space_params *old_space,
int old_width, int old_height,
bool old_page_uses_transparency);
@@ -222,7 +216,7 @@ gdev_prn_dev_spec_op(gx_device *pdev, int dev_spec_op, void *data, int size)
static int /* returns 0 ok, else -ve error cde */
gdev_prn_setup_as_command_list(gx_device *pdev, gs_memory_t *buffer_memory,
byte **the_memory,
- const gdev_prn_space_params *space_params,
+ const gdev_space_params *space_params,
bool bufferSpace_is_exact)
{
gx_device_printer * const ppdev = (gx_device_printer *)pdev;
@@ -246,7 +240,7 @@ gdev_prn_setup_as_command_list(gx_device *pdev, gs_memory_t *buffer_memory,
BEGIN\
ulong *fp_ = (ulong *)&first_arg - 2;\
for (; fp_ && (fp_[1] & 0xff000000) == 0x08000000; fp_ = (ulong *)*fp_)\
- dmprintf2(buffer_memory, " fp=0x%lx ip=0x%lx\n", (ulong)fp_, fp_[1]);\
+ dmprintf2(buffer_memory, " fp="PRI_INTPTR" ip=0x%lx\n", (intptr_t)fp_, fp_[1]);\
END
dmputs(buffer_memory, "alloc buffer:\n");
BACKTRACE(pdev);
@@ -271,7 +265,7 @@ BACKTRACE(pdev);
open_c:
ppdev->buf = base;
ppdev->buffer_space = space;
- pclist_dev->common.is_printer = 1;
+ pclist_dev->common.orig_spec_op = dev_proc(ppdev, dev_spec_op);
clist_init_io_procs(pclist_dev, ppdev->BLS_force_memory);
clist_init_params(pclist_dev, base, space, target,
ppdev->printer_procs.buf_procs,
@@ -362,21 +356,21 @@ gdev_prn_tear_down(gx_device *pdev, byte **the_memory)
}
/* Reset device proc vector to default */
- if (ppdev->orig_procs.open_device != 0)
+ if (ppdev->orig_procs.open_device != NULL)
pdev->procs = ppdev->orig_procs;
- ppdev->orig_procs.open_device = 0; /* prevent uninit'd restore of procs */
+ ppdev->orig_procs.open_device = NULL; /* prevent uninit'd restore of procs */
return was_command_list;
}
static int
-gdev_prn_allocate(gx_device *pdev, gdev_prn_space_params *new_space_params,
+gdev_prn_allocate(gx_device *pdev, gdev_space_params *new_space_params,
int new_width, int new_height, bool reallocate)
{
gx_device_printer * const ppdev = (gx_device_printer *)pdev;
gx_device_memory * const pmemdev = (gx_device_memory *)pdev;
byte *the_memory = 0;
- gdev_prn_space_params save_params = ppdev->space_params;
+ gdev_space_params save_params = ppdev->space_params;
int save_width = 0x0badf00d; /* Quiet compiler */
int save_height = 0x0badf00d; /* Quiet compiler */
bool is_command_list = false; /* Quiet compiler */
@@ -400,7 +394,7 @@ gdev_prn_allocate(gx_device *pdev, gdev_prn_space_params *new_space_params,
ulong pdf14_trans_buffer_size = 0;
byte *base = 0;
bool bufferSpace_is_default = false;
- gdev_prn_space_params space_params;
+ gdev_space_params space_params;
gx_device_buf_space_t buf_space;
if (reallocate)
@@ -520,13 +514,15 @@ gdev_prn_allocate(gx_device *pdev, gdev_prn_space_params *new_space_params,
if (ecode == 0)
ecode = code;
- if ( code >= 0 || (reallocate && pass > 1) )
+ if (code >= 0 || (reallocate && pass > 1))
ppdev->procs = gs_clist_device_procs;
- /*
- * Now the device is a clist device, we enable multi-threaded rendering.
- * It will remain enabled, but that doesn't really cause any problems.
- */
- clist_enable_multi_thread_render(pdev);
+ if (code > 0) {
+ /*
+ * Now the device is a clist device, we enable multi-threaded rendering.
+ * It will remain enabled, but that doesn't really cause any problems.
+ */
+ clist_enable_multi_thread_render(pdev);
+ }
} else {
/* Render entirely in memory. */
gx_device *bdev = (gx_device *)pmemdev;
@@ -598,7 +594,7 @@ gdev_prn_allocate(gx_device *pdev, gdev_prn_space_params *new_space_params,
int
gdev_prn_allocate_memory(gx_device *pdev,
- gdev_prn_space_params *new_space_params,
+ gdev_space_params *new_space_params,
int new_width, int new_height)
{
return gdev_prn_allocate(pdev, new_space_params,
@@ -607,7 +603,7 @@ gdev_prn_allocate_memory(gx_device *pdev,
int
gdev_prn_reallocate_memory(gx_device *pdev,
- gdev_prn_space_params *new_space_params,
+ gdev_space_params *new_space_params,
int new_width, int new_height)
{
return gdev_prn_allocate(pdev, new_space_params,
@@ -795,7 +791,7 @@ gdev_prn_put_params(gx_device * pdev, gs_param_list * plist)
int width = pdev->width;
int height = pdev->height;
int nthreads = ppdev->num_render_threads_requested;
- gdev_prn_space_params save_sp;
+ gdev_space_params save_sp;
gs_param_string ofs;
gs_param_string bls;
gs_param_dict mdict;
@@ -1005,7 +1001,7 @@ gdev_prn_put_params(gx_device * pdev, gs_param_list * plist)
/* Default routine to (not) override current space_params. */
void
gx_default_get_space_params(const gx_device_printer *printer_dev,
- gdev_prn_space_params *space_params)
+ gdev_space_params *space_params)
{
return;
}
@@ -1715,11 +1711,11 @@ gdev_prn_copy_scan_lines(gx_device_printer * pdev, int y, byte * str, uint size)
count = max(0, min(requested_count, pdev->height - y));
for (i = 0; i < count; i++, dest += line_size) {
code = gdev_prn_get_bits(pdev, y + i, dest, NULL);
- if (code < 0)
+ if (code < 0)
break; /* will fill remaining lines and return code outside the loop */
}
/* fill remaining lines with 0's to prevent printing garbage */
- memset(dest, 0, line_size * (requested_count - i));
+ memset(dest, 0, (size_t)line_size * (requested_count - i));
return (code < 0 ) ? code : count;
}
@@ -1742,35 +1738,10 @@ gdev_prn_close_printer(gx_device * pdev)
return 0;
}
-/* compare two space_params, we can't do this with memcmp since there is padding in the structure */
-static int
-compare_gdev_prn_space_params(const gdev_prn_space_params sp1,
- const gdev_prn_space_params sp2) {
- if (sp1.MaxBitmap != sp2.MaxBitmap)
- return(1);
- if (sp1.BufferSpace != sp2.BufferSpace)
- return(1);
- if (sp1.band.BandWidth != sp2.band.BandWidth)
- return(1);
- if (sp1.band.BandHeight != sp2.band.BandHeight)
- return(1);
- if (sp1.band.BandBufferSpace != sp2.band.BandBufferSpace)
- return(1);
- if (sp1.band.tile_cache_size != sp2.band.tile_cache_size)
- return(1);
- if (sp1.params_are_read_only != sp2.params_are_read_only)
- return(1);
- if (sp1.banding_type != sp2.banding_type)
- return(1);
-
- return(0);
-}
-
-
/* If necessary, free and reallocate the printer memory after changing params */
int
gdev_prn_maybe_realloc_memory(gx_device_printer *prdev,
- gdev_prn_space_params *old_sp,
+ gdev_space_params *old_sp,
int old_width, int old_height,
bool old_page_uses_transparency)
{
@@ -1787,13 +1758,13 @@ gdev_prn_maybe_realloc_memory(gx_device_printer *prdev,
* for these filesets.
*/
if (prdev->is_open &&
- (compare_gdev_prn_space_params(prdev->space_params, *old_sp) != 0 ||
+ (gdev_space_params_cmp(prdev->space_params, *old_sp) != 0 ||
prdev->width != old_width || prdev->height != old_height ||
prdev->page_uses_transparency != old_page_uses_transparency)
) {
int new_width = prdev->width;
int new_height = prdev->height;
- gdev_prn_space_params new_sp;
+ gdev_space_params new_sp;
#ifdef DEBUGGING_HACKS
debug_dump_bytes(pdev->memory, (const byte *)old_sp, (const byte *)(old_sp + 1), "old");
diff --git a/base/gdevprn.h b/base/gdevprn.h
index 1d05b9c9..5b2690b6 100644
--- a/base/gdevprn.h
+++ b/base/gdevprn.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -99,7 +99,7 @@ typedef struct gx_printer_device_procs_s {
*/
#define prn_dev_proc_get_space_params(proc)\
- void proc(const gx_device_printer *, gdev_prn_space_params *)
+ void proc(const gx_device_printer *, gdev_space_params *)
prn_dev_proc_get_space_params((*get_space_params));
} gx_printer_device_procs;
@@ -127,8 +127,7 @@ typedef struct bg_print_s {
} bg_print_t;
#define gx_prn_device_common\
- byte skip[max(sizeof(gx_device_memory), sizeof(gx_device_clist)) -\
- sizeof(gx_device) + sizeof(double) /* padding */];\
+ gx_device_clist_mutatable_common;\
gx_printer_device_procs printer_procs;\
/* ------ Device parameters that must be set ------ */\
/* ------ before calling the device open routine. ------ */\
@@ -141,18 +140,11 @@ typedef struct bg_print_s {
/* ------ End of parameters ------ */\
bool file_is_new; /* true iff file just opened */\
gp_file *file; /* output file */\
- long buffer_space; /* amount of space for clist buffer, */\
- /* 0 means not using clist */\
- byte *buf; /* buffer for rendering */\
- gs_memory_t *buffer_memory; /* allocator for command list */\
- gs_memory_t *bandlist_memory; /* allocator for bandlist files */\
- uint clist_disable_mask; /* mask of clist options to disable */\
bool bg_print_requested; /* request background printing of page from clist */\
bg_print_t bg_print; /* background printing data shared with thread */\
int num_render_threads_requested; /* for multiple band rendering threads */\
gx_saved_pages_list *saved_pages_list; /* list when we are saving pages instead of printing */\
- gx_device_procs save_procs_while_delaying_erasepage; /* save device procs while delaying erasepage. */\
- gx_device_procs orig_procs /* original (std_)procs */
+ gx_device_procs save_procs_while_delaying_erasepage /* save device procs while delaying erasepage. */
/* The device descriptor */
struct gx_device_printer_s {
@@ -161,7 +153,7 @@ struct gx_device_printer_s {
};
/* A useful check to determine if the page is being rendered as a clist */
-#define PRINTER_IS_CLIST(pdev) ((gx_device_printer *)(pdev)->buffer_space != 0)
+#define PRINTER_IS_CLIST(pdev) (((gx_device_printer *)(pdev))->buffer_space != 0)
extern_st(st_device_printer);
#define public_st_device_printer() /* in gdevprn.c */\
@@ -300,7 +292,7 @@ extern const gx_device_procs prn_bg_procs;
*/
#define prn_device_body_rest2_(print_page, print_page_copies, duplex_set)\
{ 0 }, /* std_procs */\
- { 0 }, /* skip */\
+ GX_CLIST_MUTATABLE_DEVICE_DEFAULTS,\
{ print_page,\
print_page_copies,\
{ gx_default_create_buf_device,\
@@ -316,17 +308,11 @@ extern const gx_device_procs prn_bg_procs;
0/*false*/, duplex_set, /* Duplex[_set] */\
0/*false*/, /* file_is_new */\
0, /* *file */\
- 0, /* buffer_space */\
- 0, /* *buf */\
- 0, /* *buffer_memory */\
- 0, /* *bandlist_memory */\
- 0, /* clist_disable_mask */\
0/*false*/, /* bg_print_requested */\
{ 0/*sema*/, 0/*device*/, 0/*thread_id*/, 0/*num_copies*/, 0/*return_code*/ }, /* bg_print */\
0, /* num_render_threads_requested */\
0, /* saved_pages_list */\
- { 0 }, /* save_procs_while_delaying_erasepage */\
- { 0 } /* ... orig_procs */
+ { 0 } /* save_procs_while_delaying_erasepage */
#define prn_device_body_rest_(print_page)\
prn_device_body_rest2_(print_page, gx_default_print_page_copies, -1)
#define prn_device_body_copies_rest_(print_page_copies)\
@@ -580,10 +566,10 @@ int gdev_prn_print_scan_lines(gx_device *);
/* Allocate / reallocate / free printer memory. */
int gdev_prn_allocate_memory(gx_device *pdev,
- gdev_prn_space_params *space,
+ gdev_space_params *space,
int new_width, int new_height);
int gdev_prn_reallocate_memory(gx_device *pdev,
- gdev_prn_space_params *space,
+ gdev_space_params *space,
int new_width, int new_height);
int gdev_prn_free_memory(gx_device *pdev);
diff --git a/base/gdevpxat.h b/base/gdevpxat.h
index 3bc8afea..1b70c569 100644
--- a/base/gdevpxat.h
+++ b/base/gdevpxat.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevpxen.h b/base/gdevpxen.h
index e6a9702e..e4c6b76f 100644
--- a/base/gdevpxen.h
+++ b/base/gdevpxen.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevpxop.h b/base/gdevpxop.h
index 7f626f77..f63e30ac 100644
--- a/base/gdevpxop.h
+++ b/base/gdevpxop.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevrops.c b/base/gdevrops.c
index f4806c55..544593d9 100644
--- a/base/gdevrops.c
+++ b/base/gdevrops.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevsclass.c b/base/gdevsclass.c
index 60f110c4..dfa721f7 100644
--- a/base/gdevsclass.c
+++ b/base/gdevsclass.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevsclass.h b/base/gdevsclass.h
index cc7a4359..e020e2c4 100644
--- a/base/gdevsclass.h
+++ b/base/gdevsclass.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevvec.c b/base/gdevvec.c
index 7136d76c..3204720f 100644
--- a/base/gdevvec.c
+++ b/base/gdevvec.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gdevvec.h b/base/gdevvec.h
index 29298438..3ce08b2c 100644
--- a/base/gdevvec.h
+++ b/base/gdevvec.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gen_ordered.c b/base/gen_ordered.c
index c8574c6e..e34e6202 100644
--- a/base/gen_ordered.c
+++ b/base/gen_ordered.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -381,7 +381,7 @@ htsc_mask_to_tos(htsc_dig_grid_t *final_mask)
}
#endif
/* Sort */
- qsort(values, height * width, sizeof(htsc_threshpoint_t), compare);
+ qsort(values, (size_t)height * width, sizeof(htsc_threshpoint_t), compare);
#if RAW_SCREEN_DUMP
EPRINTF(final_mask->memory, "Sorted\n");
for (k = 0; k < count; k++) {
@@ -483,7 +483,7 @@ htsc_determine_cell_shape(int *x_out, int *y_out, int *v_out,
}
x = x_use;
}
- if (ratio >= 1 && ratio!=0) {
+ if (ratio >= 1) {
/* The minimal step is in y */
if (params.verbose > 0) {
PRINTF(mem, "x\ty\tu\tv\tAngle\tLPI\tLevels\n");
@@ -808,10 +808,10 @@ htsc_create_dot_mask(htsc_dig_grid_t *dot_grid, int x, int y, int u, int v,
dot_grid->height = abs(val_min) + y;
dot_grid->width = x + u;
dot_grid->data =
- (int *) ALLOC(dot_grid->memory, dot_grid->height * dot_grid->width * sizeof(int));
+ (int *) ALLOC(dot_grid->memory, (size_t)dot_grid->height * dot_grid->width * sizeof(int));
if (dot_grid->data == NULL)
return -1;
- memset(dot_grid->data,0,dot_grid->height * dot_grid->width * sizeof(int));
+ memset(dot_grid->data,0,(size_t)dot_grid->height * dot_grid->width * sizeof(int));
index_x = 0;
for (k = 0; k < (x+u); k++) {
index_y=0;
@@ -839,10 +839,10 @@ htsc_create_dot_mask(htsc_dig_grid_t *dot_grid, int x, int y, int u, int v,
/* All points are valid */
dot_grid->height = y;
dot_grid->width = u;
- dot_grid->data = (int *) ALLOC(dot_grid->memory, y * u * sizeof(int));
+ dot_grid->data = (int *) ALLOC(dot_grid->memory, (size_t)y * u * sizeof(int));
if (dot_grid->data == NULL)
return -1;
- memset(dot_grid->data, -1, y * u * sizeof(int));
+ memset(dot_grid->data, -1, (size_t)y * u * sizeof(int));
val_min = 0;
}
return 0;
@@ -1058,10 +1058,10 @@ htsc_allocate_supercell(htsc_dig_grid_t *super_cell, int x, int y, int u,
super_cell->height = super_size_y;
super_cell->width = super_size_x;
super_cell->data =
- (int *) ALLOC(dot_grid.memory, super_size_x * super_size_y * sizeof(int));
+ (int *) ALLOC(dot_grid.memory, (size_t)super_size_x * super_size_y * sizeof(int));
if (super_cell->data == NULL)
return -1;
- memset(super_cell->data, 0, super_size_x * super_size_y * sizeof(int));
+ memset(super_cell->data, 0, (size_t)super_size_x * super_size_y * sizeof(int));
return 0;
}
@@ -1733,13 +1733,13 @@ htsc_create_holladay_mask(htsc_dig_grid_t super_cell, int H, int L,
final_mask->height = H;
final_mask->width = L;
- final_mask->data = (int *) ALLOC(final_mask->memory, H * L * sizeof(int));
+ final_mask->data = (int *) ALLOC(final_mask->memory, (size_t)H * L * sizeof(int));
if (final_mask->data == NULL) {
code = -1;
goto out;
}
- thresholds = (double *) ALLOC(final_mask->memory, H * L * sizeof(double));
+ thresholds = (double *) ALLOC(final_mask->memory, (size_t)H * L * sizeof(double));
if (final_mask->data == NULL) {
code = -1;
goto out;
@@ -1753,7 +1753,7 @@ htsc_create_holladay_mask(htsc_dig_grid_t super_cell, int H, int L,
thresholds[number_points - k - 1] =
ROUND(temp * MAXVAL * white_scale + 1);
}
- memset(final_mask->data, 0, H * L * sizeof(int));
+ memset(final_mask->data, 0, (size_t)H * L * sizeof(int));
for (j = 0; j < H; j++) {
for (k = 0; k < L; k++) {
@@ -1783,13 +1783,14 @@ htsc_create_nondithered_mask(htsc_dig_grid_t super_cell, int H, int L,
final_mask->height = super_cell.height;
final_mask->width = super_cell.width;
- final_mask->data = (int *) ALLOC(final_mask->memory, super_cell.height * super_cell.width *
+ final_mask->data = (int *) ALLOC(final_mask->memory,
+ (size_t)super_cell.height * super_cell.width *
sizeof(int));
if (final_mask->data == NULL) {
code = -1;
goto out;
}
- thresholds = (double *) ALLOC(final_mask->memory, H * L * sizeof(double));
+ thresholds = (double *) ALLOC(final_mask->memory, (size_t)H * L * sizeof(double));
if (thresholds == NULL) {
code = -1;
goto out;
@@ -1803,7 +1804,7 @@ htsc_create_nondithered_mask(htsc_dig_grid_t super_cell, int H, int L,
thresholds[number_points - k - 1] =
ROUND(temp * MAXVAL * white_scale + 1);
}
- memset(final_mask->data, 0, super_cell.height * super_cell.width *
+ memset(final_mask->data, 0, (size_t)super_cell.height * super_cell.width *
sizeof(int));
for (j = 0; j < super_cell.height; j++) {
for (k = 0; k < super_cell.width; k++) {
diff --git a/base/gen_ordered.h b/base/gen_ordered.h
index f1bf750e..30024773 100644
--- a/base/gen_ordered.h
+++ b/base/gen_ordered.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/genarch.c b/base/genarch.c
index c3a63277..6953c190 100644
--- a/base/genarch.c
+++ b/base/genarch.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/genconf.c b/base/genconf.c
index de9afc95..58b271c0 100644
--- a/base/genconf.c
+++ b/base/genconf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gendev.c b/base/gendev.c
index 8808feb6..8001e26a 100644
--- a/base/gendev.c
+++ b/base/gendev.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/genht.c b/base/genht.c
index 5a673170..7b46a051 100644
--- a/base/genht.c
+++ b/base/genht.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp.h b/base/gp.h
index 948bbdb3..3321c4e6 100644
--- a/base/gp.h
+++ b/base/gp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -191,7 +191,7 @@ struct gp_file_s {
/* Allocate a structure based on a gp_file, initialise it with the
* given prototype, and zero the rest of it. Returns NULL on failure
* to allocate. */
-gp_file *gp_file_alloc(gs_memory_t *mem, const gp_file_ops_t *prototype, size_t size, const char *cname);
+gp_file *gp_file_alloc(const gs_memory_t *mem, const gp_file_ops_t *prototype, size_t size, const char *cname);
/* Called automatically by gp_fclose. May be needed for implementers to
* clear up allocations if errors occur while opening files. */
@@ -252,7 +252,7 @@ gp_feof(gp_file *f) {
static inline int
gp_fclose(gp_file *f) {
- int ret = (f->ops.close)(f);
+ int ret = (f->ops.close ? (f->ops.close)(f) : 0);
gp_file_dealloc(f);
return ret;
}
@@ -297,6 +297,8 @@ gp_fflush(gp_file *f) {
static inline int
gp_ferror(gp_file *f) {
+ if (f->ops.ferror == NULL)
+ return 0;
return (f->ops.ferror)(f);
}
@@ -429,6 +431,12 @@ gp_file *gp_open_scratch_file_rm(const gs_memory_t *mem,
char fname[gp_file_name_sizeof],
const char *mode);
+/* Unlink utf-8 filename, subject to 'control' path permissions */
+int gp_unlink(gs_memory_t *mem, const char *fname);
+
+/* Rename utf-8 filename, subject to 'control' path permissions */
+int gp_rename(gs_memory_t *mem, const char *from, const char *to);
+
/* gp_stat is defined in stat_.h rather than here due to macro problems */
typedef enum {
@@ -621,6 +629,10 @@ FILE *gp_fopen_impl(gs_memory_t *mem, const char *fname, const char *mode);
FILE *gp_fdup_impl(FILE *f, const char *mode);
+int gp_unlink_impl(gs_memory_t *mem, const char *fname);
+
+int gp_rename_impl(gs_memory_t *mem, const char *from, const char *to);
+
int gp_pread_impl(char *buf, size_t count, gs_offset_t offset, FILE *f);
int gp_pwrite_impl(const char *buf, size_t count, gs_offset_t offset, FILE *f);
@@ -644,7 +656,8 @@ gp_open_printer_impl(gs_memory_t *mem,
int *binary_mode,
int (**close)(FILE *));
-/* Create a scratch file (utf8) (self-deleting if remove) */
+/* Create a scratch file (utf8) (self-deleting if remove). If remove
+ * is requested, but cannot be honoured, the file is NOT opened. */
FILE *gp_open_scratch_file_impl(const gs_memory_t *mem,
const char *prefix,
char fname[gp_file_name_sizeof],
diff --git a/base/gp_dosfe.c b/base/gp_dosfe.c
index 48347c18..abea97c8 100644
--- a/base/gp_dosfe.c
+++ b/base/gp_dosfe.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_dosfs.c b/base/gp_dosfs.c
index cd143535..76779ad5 100644
--- a/base/gp_dosfs.c
+++ b/base/gp_dosfs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_dvx.c b/base/gp_dvx.c
index e59a2692..52918cee 100644
--- a/base/gp_dvx.c
+++ b/base/gp_dvx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_getnv.c b/base/gp_getnv.c
index 6e29e0b3..5eab3e34 100644
--- a/base/gp_getnv.c
+++ b/base/gp_getnv.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_mktmp.c b/base/gp_mktmp.c
index ebdd5ee6..5ecef5d7 100644
--- a/base/gp_mktmp.c
+++ b/base/gp_mktmp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_msdll.c b/base/gp_msdll.c
index c5ae075d..040dd69f 100644
--- a/base/gp_msdll.c
+++ b/base/gp_msdll.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_msdos.c b/base/gp_msdos.c
index 8621911c..16b6e1fe 100644
--- a/base/gp_msdos.c
+++ b/base/gp_msdos.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_mshdl.c b/base/gp_mshdl.c
index 98d2d3cf..8bc04a1c 100644
--- a/base/gp_mshdl.c
+++ b/base/gp_mshdl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_mslib.c b/base/gp_mslib.c
index d0f7e26a..3f62985c 100644
--- a/base/gp_mslib.c
+++ b/base/gp_mslib.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_mspol.c b/base/gp_mspol.c
index 155a5f19..7dc80602 100644
--- a/base/gp_mspol.c
+++ b/base/gp_mspol.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -39,7 +39,7 @@ gp_check_interrupts(const gs_memory_t *mem)
}
#endif
if (mem && mem->gs_lib_ctx && mem->gs_lib_ctx->core->poll_fn)
- return (*mem->gs_lib_ctx->core->poll_fn)(mem->gs_lib_ctx->core->caller_handle);
+ return (*mem->gs_lib_ctx->core->poll_fn)(mem->gs_lib_ctx->core->poll_caller_handle);
return 0;
}
#endif
diff --git a/base/gp_msprn.c b/base/gp_msprn.c
index cca95e0e..758b8a55 100644
--- a/base/gp_msprn.c
+++ b/base/gp_msprn.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -72,12 +72,12 @@ const gx_io_device gs_iodev_printer = {
};
typedef struct tid_s {
- unsigned long tid;
+ uintptr_t tid;
} tid_t;
void mswin_printer_thread(void *arg)
{
- int fd = (int)arg;
+ int fd = (int)(intptr_t)arg;
char pname[gp_file_name_sizeof];
char data[4096];
HANDLE hprinter = INVALID_HANDLE_VALUE;
@@ -162,10 +162,10 @@ mswin_printer_fopen(gx_io_device * iodev, const char *fname, const char *access,
DWORD version = GetVersion();
HANDLE hprinter;
int pipeh[2];
- unsigned long tid;
+ uintptr_t tid;
HANDLE hthread;
char pname[gp_file_name_sizeof];
- unsigned long *ptid = &((tid_t *)(iodev->state))->tid;
+ uintptr_t *ptid = &((tid_t *)(iodev->state))->tid;
gs_lib_ctx_t *ctx = mem->gs_lib_ctx;
gs_fs_list_t *fs = ctx->core->fs;
@@ -224,7 +224,7 @@ mswin_printer_fopen(gx_io_device * iodev, const char *fname, const char *access,
}
/* start a thread to read the pipe */
- tid = _beginthread(&mswin_printer_thread, 32768, (void *)(pipeh[0]));
+ tid = _beginthread(&mswin_printer_thread, 32768, (void *)(intptr_t)(pipeh[0]));
if (tid == -1) {
gp_fclose(*pfile);
*pfile = NULL;
@@ -242,7 +242,7 @@ mswin_printer_fopen(gx_io_device * iodev, const char *fname, const char *access,
*pfile = NULL;
return_error(gs_error_invalidfileaccess);
}
- *ptid = (unsigned long)hthread;
+ *ptid = (uintptr_t)hthread;
/* Give the name of the printer to the thread by writing
* it to the pipe. This is avoids elaborate thread
@@ -257,7 +257,7 @@ mswin_printer_fopen(gx_io_device * iodev, const char *fname, const char *access,
static int
mswin_printer_fclose(gx_io_device * iodev, gp_file * file)
{
- unsigned long *ptid = &((tid_t *)(iodev->state))->tid;
+ uintptr_t *ptid = &((tid_t *)(iodev->state))->tid;
HANDLE hthread;
gp_fclose(file);
if (*ptid != -1) {
diff --git a/base/gp_mswin.c b/base/gp_mswin.c
index fd7cc826..1415cc82 100644
--- a/base/gp_mswin.c
+++ b/base/gp_mswin.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -145,7 +145,7 @@ gp_close_printer(gp_file * pfile, const char *fname)
return; /* a file, not a printer */
gp_printfile(mem, win_prntmp, fname);
- unlink(win_prntmp);
+ unlink(win_prntmp); /* unlink not gp_unlink */
#endif
}
@@ -537,7 +537,7 @@ FILE *mswin_popen(const char *cmd, const char *mode)
else {
CloseHandle(piProcInfo.hProcess);
CloseHandle(piProcInfo.hThread);
- handle = _open_osfhandle((long)hChildStdinWr, 0);
+ handle = _open_osfhandle((intptr_t)hChildStdinWr, 0);
}
if (hChildStdinRd != INVALID_HANDLE_VALUE)
@@ -670,7 +670,7 @@ gp_open_scratch_file_impl(const gs_memory_t *mem,
}
if (hfile != INVALID_HANDLE_VALUE) {
/* Associate a C file handle with an OS file handle. */
- fd = _open_osfhandle((long)hfile, 0);
+ fd = _open_osfhandle((intptr_t)hfile, 0);
if (fd == -1)
CloseHandle(hfile);
else {
diff --git a/base/gp_mswin.h b/base/gp_mswin.h
index 9c6aae1d..bf187903 100644
--- a/base/gp_mswin.h
+++ b/base/gp_mswin.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_nsync.c b/base/gp_nsync.c
index d1ca98f6..32bb772d 100644
--- a/base/gp_nsync.c
+++ b/base/gp_nsync.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_ntfs.c b/base/gp_ntfs.c
index 40bd1489..4bcbc341 100644
--- a/base/gp_ntfs.c
+++ b/base/gp_ntfs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_nxpsprn.c b/base/gp_nxpsprn.c
index b777c6ad..e74d64a3 100644
--- a/base/gp_nxpsprn.c
+++ b/base/gp_nxpsprn.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_os2.c b/base/gp_os2.c
index 63c7bdb0..26a1165b 100644
--- a/base/gp_os2.c
+++ b/base/gp_os2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -328,7 +328,7 @@ gp_close_printer(gp_file *pfile, const char *fname)
if ((strlen(fname) == 0) || is_os2_spool(fname)) {
/* spool temporary file */
pm_spool(mem, pm_prntmp, fname);
- unlink(pm_prntmp);
+ unlink(pm_prntmp); /* unlink, not gp_unlink */
}
}
@@ -590,11 +590,11 @@ bool gp_fseekable_impl(FILE *f)
{
struct stat s;
int fno;
-
+
fno = fileno(f);
if (fno < 0)
return(false);
-
+
if (fstat(fno, &s) < 0)
return(false);
diff --git a/base/gp_os2.h b/base/gp_os2.h
index d9456a27..a0b72c03 100644
--- a/base/gp_os2.h
+++ b/base/gp_os2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_os2fs.c b/base/gp_os2fs.c
index 98c0bb90..943d9458 100644
--- a/base/gp_os2fs.c
+++ b/base/gp_os2fs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -268,6 +268,18 @@ gp_fopen_impl(const gs_memory_t *mem, const char *fname, const char *mode)
return fopen(fname, mode);
}
+int
+gp_unlink_impl(gs_memory_t *mem, const char *fname)
+{
+ return unlink(fname);
+}
+
+int
+gp_rename_impl(gs_memory_t *mem, const char *from, const char *to)
+{
+ return rename(from, to);
+}
+
int gp_stat_impl(gs_memory_t *mem, const char *path, struct stat *buf)
{
return stat(path, buf);
diff --git a/base/gp_os2pr.c b/base/gp_os2pr.c
index cfafdb46..ebbc50b3 100644
--- a/base/gp_os2pr.c
+++ b/base/gp_os2pr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -154,6 +154,6 @@ os2_printer_fclose(gx_io_device * iodev, FILE * file)
os2_printer_t *pr = (os2_printer_t *)iodev->state;
fclose(file);
pm_spool(pr->memory, pr->filename, pr->queue);
- unlink(pr->filename);
+ unlink(pr->filename); /* unlink, not gp_unlink */
return 0;
}
diff --git a/base/gp_os9.c b/base/gp_os9.c
index 8baad73c..190b1277 100644
--- a/base/gp_os9.c
+++ b/base/gp_os9.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_paper.c b/base/gp_paper.c
index 5ed28391..f4677338 100644
--- a/base/gp_paper.c
+++ b/base/gp_paper.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_psync.c b/base/gp_psync.c
index 3a7d6a4d..6d2c583e 100644
--- a/base/gp_psync.c
+++ b/base/gp_psync.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_stdia.c b/base/gp_stdia.c
index 1f7b97fc..07da07e7 100644
--- a/base/gp_stdia.c
+++ b/base/gp_stdia.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_stdin.c b/base/gp_stdin.c
index 3bceadae..68230cdd 100644
--- a/base/gp_stdin.c
+++ b/base/gp_stdin.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_strdl.c b/base/gp_strdl.c
index f85c9440..b6b345c0 100644
--- a/base/gp_strdl.c
+++ b/base/gp_strdl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_unifn.c b/base/gp_unifn.c
index 643f3973..bbba02a4 100644
--- a/base/gp_unifn.c
+++ b/base/gp_unifn.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_unifs.c b/base/gp_unifs.c
index 70752634..dea5c6da 100644
--- a/base/gp_unifs.c
+++ b/base/gp_unifs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -139,7 +139,7 @@ gp_open_scratch_file_impl(const gs_memory_t *mem,
emprintf1(mem, "**** Could not open temporary file %s\n", fname);
if (remove)
- unlink(fname);
+ unlink(fname); /* unlink, not gp_unlink here. */
return fp;
#endif
@@ -156,6 +156,18 @@ gp_fopen_impl(gs_memory_t *mem, const char *fname, const char *mode)
#endif
}
+int
+gp_unlink_impl(gs_memory_t *mem, const char *fname)
+{
+ return unlink(fname);
+}
+
+int
+gp_rename_impl(gs_memory_t *mem, const char *from, const char *to)
+{
+ return rename(from, to);
+}
+
int gp_stat_impl(const gs_memory_t *mem, const char *path, struct stat *buf)
{
return stat(path, buf);
diff --git a/base/gp_unix.c b/base/gp_unix.c
index bd2745f9..e4599508 100644
--- a/base/gp_unix.c
+++ b/base/gp_unix.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -373,6 +373,9 @@ void *gp_enumerate_fonts_init(gs_memory_t *mem)
pat = FcPatternBuild(NULL,
FC_OUTLINE, FcTypeBool, 1,
FC_SCALABLE, FcTypeBool, 1,
+#if defined(FC_MAJOR) && FC_MAJOR >= 2 && defined(FC_MINOR) && FC_MINOR >= 13
+ FC_VARIABLE, FcTypeBool, 0,
+#endif
NULL);
os = FcObjectSetBuild(FC_FILE, FC_OUTLINE,
FC_FAMILY, FC_WEIGHT, FC_SLANT,
@@ -411,42 +414,50 @@ int gp_enumerate_fonts_next(void *enum_state, char **fontname, char **path)
return 0; /* gp_enumerate_fonts_init failed for some reason */
}
- if (state->index == state->font_list->nfont) {
- return 0; /* we've run out of fonts */
- }
-
- /* Bits of the following were borrowed from Red Hat's
- * fontconfig patch for Ghostscript 7 */
- font = state->font_list->fonts[state->index];
+ /* We use the loop so we can skip over fonts that return errors */
+ while(1) {
+ if (state->index == state->font_list->nfont) {
+ return 0; /* we've run out of fonts */
+ }
- result = FcPatternGetString (font, FC_FAMILY, 0, &family_fc);
- if (result != FcResultMatch || family_fc == NULL) {
- dmlprintf(state->mem, "DEBUG: FC_FAMILY mismatch\n");
- return 0;
- }
+ /* Bits of the following were borrowed from Red Hat's
+ * fontconfig patch for Ghostscript 7 */
+ font = state->font_list->fonts[state->index];
+ state->index++;
+
+ /* We do the FC_FILE first because this *should* never fail
+ * and it gives us a string to use in later debug prints
+ */
+ result = FcPatternGetString (font, FC_FILE, 0, &file_fc);
+ if (result != FcResultMatch || file_fc == NULL) {
+ dmlprintf(state->mem, "DEBUG: FC_FILE mismatch\n");
+ continue;
+ }
- result = FcPatternGetString (font, FC_FILE, 0, &file_fc);
- if (result != FcResultMatch || file_fc == NULL) {
- dmlprintf(state->mem, "DEBUG: FC_FILE mismatch\n");
- return 0;
- }
+ result = FcPatternGetString (font, FC_FAMILY, 0, &family_fc);
+ if (result != FcResultMatch || family_fc == NULL) {
+ dmlprintf1(state->mem, "DEBUG: FC_FAMILY mismatch in %s\n", (char *)file_fc);
+ continue;
+ }
- result = FcPatternGetBool (font, FC_OUTLINE, 0, &outline_fc);
- if (result != FcResultMatch) {
- dmlprintf1(state->mem, "DEBUG: FC_OUTLINE failed to match on %s\n", (char*)family_fc);
- return 0;
- }
+ result = FcPatternGetBool (font, FC_OUTLINE, 0, &outline_fc);
+ if (result != FcResultMatch) {
+ dmlprintf2(state->mem, "DEBUG: FC_OUTLINE failed to match on %s in %s\n", (char*)family_fc, (char *)file_fc);
+ continue;
+ }
- result = FcPatternGetInteger (font, FC_SLANT, 0, &slant_fc);
- if (result != FcResultMatch) {
- dmlprintf(state->mem, "DEBUG: FC_SLANT didn't match\n");
- return 0;
- }
+ result = FcPatternGetInteger (font, FC_SLANT, 0, &slant_fc);
+ if (result != FcResultMatch) {
+ dmlprintf1(state->mem, "DEBUG: FC_SLANT didn't match in %s\n", (char *)file_fc);
+ continue;
+ }
- result = FcPatternGetInteger (font, FC_WEIGHT, 0, &weight_fc);
- if (result != FcResultMatch) {
- dmlprintf(state->mem, "DEBUG: FC_WEIGHT didn't match\n");
- return 0;
+ result = FcPatternGetInteger (font, FC_WEIGHT, 0, &weight_fc);
+ if (result != FcResultMatch) {
+ dmlprintf1(state->mem, "DEBUG: FC_WEIGHT didn't match in %s\n", (char *)file_fc);
+ continue;
+ }
+ break;
}
/* Gross hack to work around Fontconfig's inability to tell
@@ -459,7 +470,6 @@ int gp_enumerate_fonts_next(void *enum_state, char **fontname, char **path)
/* return the font path straight out of fontconfig */
*path = (char*)file_fc;
- state->index ++;
return 1;
#else
return 0;
diff --git a/base/gp_upapr.c b/base/gp_upapr.c
index 47d1c472..a3f56c00 100644
--- a/base/gp_upapr.c
+++ b/base/gp_upapr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_vms.c b/base/gp_vms.c
index a69fb8e8..1d31815b 100644
--- a/base/gp_vms.c
+++ b/base/gp_vms.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -274,6 +274,18 @@ gp_fopen_impl(gs_memory_t *mem, const char *fname, const char *mode)
return fopen(fname, mode);
}
+int
+gp_unlink_impl(gs_memory_t *mem, const char *fname)
+{
+ return unlink(fname);
+}
+
+int
+gp_rename_impl(gs_memory_t *mem, const char *from, const char *to)
+{
+ return rename(from, to);
+}
+
int gp_stat_impl(const gs_memory_t *mem, const char *path, struct stat *buf)
{
return stat(path, buf);
@@ -711,11 +723,11 @@ bool gp_fseekable_impl(FILE *f)
{
struct stat s;
int fno;
-
+
fno = fileno(f);
if (fno < 0)
return(false);
-
+
if (fstat(fno, &s) < 0)
return(false);
diff --git a/base/gp_wgetv.c b/base/gp_wgetv.c
index 72f65825..0f634214 100644
--- a/base/gp_wgetv.c
+++ b/base/gp_wgetv.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -157,11 +157,13 @@ gp_getenv(const char *name, char *ptr, int *plen)
&& ((HIWORD(version) & 0x4000) == 0))) {
/* not Win32s */
int code;
+ int major = (int)(gs_revision / 1000);
+ int minor = (int)(gs_revision - (major * 1000)) / 10;
+ int patch = gs_revision % 10;
wchar_t key[256];
wchar_t dotversion[16];
- wsprintfW(dotversion, L"%d.%02d", (int)(gs_revision / 100),
- (int)(gs_revision % 100));
+ wsprintfW(dotversion, L"%d.%02d.%d", major, minor, patch);
wsprintfW(key, L"Software\\%hs\\%s", gs_productfamily, dotversion);
code = gp_getenv_registry(HKEY_CURRENT_USER, key, name, ptr, plen);
if ( code <= 0 )
diff --git a/base/gp_win32.c b/base/gp_win32.c
index b080b7c4..ed6516b2 100644
--- a/base/gp_win32.c
+++ b/base/gp_win32.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_winfs.c b/base/gp_winfs.c
index a1e40970..6c01ddc9 100644
--- a/base/gp_winfs.c
+++ b/base/gp_winfs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -21,9 +21,13 @@
#include "gp.h"
#include "memory_.h"
#include "stat_.h"
+#include "gserrors.h"
#include "gp_mswin.h"
+/* Should be in io.h */
+extern intptr_t _get_osfhandle(int fd);
+
/* Open a file with the given name, as a stream of uninterpreted bytes. */
FILE *
gp_fopen_impl(gs_memory_t *mem, const char *fname, const char *mode)
@@ -47,6 +51,54 @@ gp_fopen_impl(gs_memory_t *mem, const char *fname, const char *mode)
return file;
}
+int
+gp_unlink_impl(gs_memory_t *mem, const char *fname)
+{
+ int len = utf8_to_wchar(NULL, fname);
+ wchar_t *uni;
+ int ret;
+
+ if (len <= 0)
+ return gs_error_unknownerror;
+
+ uni = (wchar_t *)gs_alloc_bytes(mem, len*sizeof(wchar_t), "gp_unlink_impl");
+ if (uni == NULL)
+ return gs_error_VMerror;
+ utf8_to_wchar(uni, fname);
+ ret = _wunlink(uni);
+ gs_free_object(mem, uni, "gs_unlink_impl");
+
+ return ret;
+}
+
+int
+gp_rename_impl(gs_memory_t *mem, const char *from, const char *to)
+{
+ int lenf = utf8_to_wchar(NULL, from);
+ int lent = utf8_to_wchar(NULL, to);
+ wchar_t *unif, *unit;
+ int ret;
+
+ if (lenf <= 0 || lent <= 0)
+ return gs_error_unknownerror;
+
+ unif = (wchar_t *)gs_alloc_bytes(mem, lenf*sizeof(wchar_t), "gp_rename_impl");
+ if (unif == NULL)
+ return gs_error_VMerror;
+ unit = (wchar_t *)gs_alloc_bytes(mem, lent*sizeof(wchar_t), "gp_rename_impl");
+ if (unit == NULL) {
+ gs_free_object(mem, unif, "gs_unlink_impl");
+ return gs_error_VMerror;
+ }
+ utf8_to_wchar(unif, from);
+ utf8_to_wchar(unit, to);
+ ret = _wrename(unif, unit);
+ gs_free_object(mem, unif, "gs_rename_impl");
+ gs_free_object(mem, unit, "gs_rename_impl");
+
+ return ret;
+}
+
/* Create a second open FILE on the basis of a given one */
FILE *gp_fdup_impl(FILE *f, const char *mode)
{
@@ -144,11 +196,11 @@ bool gp_fseekable_impl(FILE *f)
{
struct __stat64 s;
int fno;
-
+
fno = fileno(f);
if (fno < 0)
return(false);
-
+
if (_fstat64(fno, &s) < 0)
return(false);
diff --git a/base/gp_winfs2.c b/base/gp_winfs2.c
index 9dcf6229..423b63fa 100644
--- a/base/gp_winfs2.c
+++ b/base/gp_winfs2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_wpapr.c b/base/gp_wpapr.c
index 777053f2..07efc617 100644
--- a/base/gp_wpapr.c
+++ b/base/gp_wpapr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_wsync.c b/base/gp_wsync.c
index 69c0a4a1..8fca9006 100644
--- a/base/gp_wsync.c
+++ b/base/gp_wsync.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_wutf8.c b/base/gp_wutf8.c
index 8c0d9eca..0d816f99 100644
--- a/base/gp_wutf8.c
+++ b/base/gp_wutf8.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gp_wxpsprn.cpp b/base/gp_wxpsprn.cpp
index 6e2f835a..a629b095 100644
--- a/base/gp_wxpsprn.cpp
+++ b/base/gp_wxpsprn.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gpcheck.h b/base/gpcheck.h
index 01fb97c9..4292c438 100644
--- a/base/gpcheck.h
+++ b/base/gpcheck.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gpgetenv.h b/base/gpgetenv.h
index 4fd9ae7a..1f1a4bca 100644
--- a/base/gpgetenv.h
+++ b/base/gpgetenv.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gpmisc.c b/base/gpmisc.c
index 34cd71fb..bae297d8 100644
--- a/base/gpmisc.c
+++ b/base/gpmisc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -401,16 +401,16 @@ generic_pread(gp_file *f, size_t count, gs_offset_t offset, void *buf)
int c;
int64_t os, curroff = gp_ftell(f);
if (curroff < 0) return curroff;
-
+
os = gp_fseek(f, offset, 0);
if (os < 0) return os;
-
+
c = gp_fread(buf, 1, count, f);
if (c < 0) return c;
-
+
os = gp_fseek(f, curroff, 0);
if (os < 0) return os;
-
+
return c;
}
@@ -420,20 +420,20 @@ generic_pwrite(gp_file *f, size_t count, gs_offset_t offset, const void *buf)
int c;
int64_t os, curroff = gp_ftell(f);
if (curroff < 0) return curroff;
-
+
os = gp_fseek(f, offset, 0);
if (os < 0) return os;
-
+
c = gp_fwrite(buf, 1, count, f);
if (c < 0) return c;
-
+
os = gp_fseek(f, curroff, 0);
if (os < 0) return os;
-
+
return c;
}
-gp_file *gp_file_alloc(gs_memory_t *mem, const gp_file_ops_t *prototype, size_t size, const char *cname)
+gp_file *gp_file_alloc(const gs_memory_t *mem, const gp_file_ops_t *prototype, size_t size, const char *cname)
{
gp_file *file = (gp_file *)gs_alloc_bytes(mem->non_gc_memory, size, cname ? cname : "gp_file");
if (file == NULL)
@@ -764,15 +764,17 @@ gp_open_printer(const gs_memory_t *mem,
return file;
}
-gp_file *
-gp_open_scratch_file(const gs_memory_t *mem,
+static gp_file *
+do_open_scratch_file(const gs_memory_t *mem,
const char *prefix,
char *fname,
- const char *mode)
+ const char *mode,
+ int rm)
{
gp_file *file = NULL;
gs_lib_ctx_t *ctx = mem->gs_lib_ctx;
gs_fs_list_t *fs = ctx->core->fs;
+ int code = 0;
/* If the prefix is absolute, then we must check it's a permissible
* path. If not, we're OK. */
@@ -782,46 +784,74 @@ gp_open_scratch_file(const gs_memory_t *mem,
for (fs = ctx->core->fs; fs != NULL; fs = fs->next)
{
- int code = 0;
if (fs->fs.open_scratch)
- code = fs->fs.open_scratch(mem, fs->secret, prefix, fname, mode, 0, &file);
+ code = fs->fs.open_scratch(mem, fs->secret, prefix, fname, mode, rm, &file);
if (code < 0)
return NULL;
if (file != NULL)
break;
}
+ if (file == NULL) {
+ /* The file failed to open. Don't add it to the list. */
+ } else if (rm) {
+ /* This file has already been deleted by the underlying system.
+ * We don't need to add it to the lists as it will never be
+ * deleted manually, nor do we need to tidy it up on closedown. */
+ } else {
+ /* This file was not requested to be deleted. We add it to the
+ * list so that it will either be deleted by any future call to
+ * zdeletefile, OR on closedown. */
+ /* Add the scratch file name to the lists. We can't do this any
+ * earlier as we didn't know the name until now! Unfortunately
+ * that makes cleanup harder. */
+ code = gs_add_control_path_flags(mem, gs_permit_file_control, fname,
+ gs_path_control_flag_is_scratch_file);
+ if (code >= 0)
+ code = gs_add_control_path_flags(mem, gs_permit_file_reading, fname,
+ gs_path_control_flag_is_scratch_file);
+ if (code >= 0)
+ code = gs_add_control_path_flags(mem, gs_permit_file_writing, fname,
+ gs_path_control_flag_is_scratch_file);
+
+ if (code < 0) {
+ gp_fclose(file);
+ file = NULL;
+ /* Call directly through to the unlink implementation. We know
+ * we're 'permitted' to do this, but we might not be on all the
+ * required permit lists because of the failure. The only bad
+ * thing here, is that we're deleting an fname that might not
+ * have come from the filing system itself. */
+ if (fname && fname[0])
+ gp_unlink_impl(ctx->memory, fname);
+ (void)gs_remove_control_path_flags(mem, gs_permit_file_control, fname,
+ gs_path_control_flag_is_scratch_file);
+ (void)gs_remove_control_path_flags(mem, gs_permit_file_reading, fname,
+ gs_path_control_flag_is_scratch_file);
+ (void)gs_remove_control_path_flags(mem, gs_permit_file_writing, fname,
+ gs_path_control_flag_is_scratch_file);
+ }
+ }
+
return file;
}
gp_file *
+gp_open_scratch_file(const gs_memory_t *mem,
+ const char *prefix,
+ char *fname,
+ const char *mode)
+{
+ return do_open_scratch_file(mem, prefix, fname, mode, 0);
+}
+
+gp_file *
gp_open_scratch_file_rm(const gs_memory_t *mem,
const char *prefix,
char *fname,
const char *mode)
{
- gp_file *file = NULL;
- gs_lib_ctx_t *ctx = mem->gs_lib_ctx;
- gs_fs_list_t *fs = ctx->core->fs;
-
- /* If the prefix is absolute, then we must check it's a permissible
- * path. If not, we're OK. */
- if (gp_file_name_is_absolute(prefix, strlen(prefix)) &&
- gp_validate_path(mem, prefix, mode) != 0)
- return NULL;
-
- for (fs = ctx->core->fs; fs != NULL; fs = fs->next)
- {
- int code = 0;
- if (fs->fs.open_scratch)
- code = fs->fs.open_scratch(mem, fs->secret, prefix, fname, mode, 1, &file);
- if (code < 0)
- return NULL;
- if (file != NULL)
- break;
- }
-
- return file;
+ return do_open_scratch_file(mem, prefix, fname, mode, 1);
}
int
@@ -901,7 +931,7 @@ validate(const gs_memory_t *mem,
gs_path_control_t type)
{
gs_lib_ctx_core_t *core = mem->gs_lib_ctx->core;
- const gs_path_control_set_t *control;
+ gs_path_control_set_t *control;
unsigned int i, n;
switch (type) {
@@ -921,7 +951,7 @@ validate(const gs_memory_t *mem,
n = control->num;
for (i = 0; i < n; i++) {
const char *a = path;
- const char *b = control->paths[i];
+ const char *b = control->entry[i].path;
while (1) {
if (*a == 0) {
if (*b == 0)
@@ -963,7 +993,7 @@ validate(const gs_memory_t *mem,
/* Continue matching */
a--; /* Subtract 1 as the loop will increment it again later */
} else if (*b == 0) {
- if (b != control->paths[i] &&
+ if (b != control->entry[i].path &&
gs_file_name_check_separator(b, -1, b)) {
const char *a2 = a;
const char *aend = path + strlen(path);
@@ -1003,14 +1033,14 @@ validate(const gs_memory_t *mem,
return gs_error_invalidfileaccess;
found:
- return 0;
+ return control->entry[i].flags;
}
int
gp_validate_path_len(const gs_memory_t *mem,
- const char *path,
- const uint len,
- const char *mode)
+ const char *path,
+ const uint len,
+ const char *mode)
{
char *buffer, *bufferfull;
uint rlen;
@@ -1072,6 +1102,13 @@ gp_validate_path_len(const gs_memory_t *mem,
case 'c': /* "Control" */
code = validate(mem, buffer, gs_permit_file_control);
break;
+ case 'd': /* "Delete" (special case of control) */
+ code = validate(mem, buffer, gs_permit_file_control);
+ break;
+ case 'f': /* "Rename from" */
+ code = (validate(mem, buffer, gs_permit_file_writing) |
+ validate(mem, buffer, gs_permit_file_control));
+ break;
case 't': /* "Rename to" */
code = (validate(mem, buffer, gs_permit_file_writing) |
validate(mem, buffer, gs_permit_file_control));
@@ -1092,13 +1129,23 @@ gp_validate_path_len(const gs_memory_t *mem,
}
break;
}
+ if (code > 0 && (mode[0] == 'd' || mode[0] == 'f') &&
+ (code & gs_path_control_flag_is_scratch_file) != 0) {
+ (void)gs_remove_control_path_flags(mem, gs_permit_file_reading, buffer,
+ gs_path_control_flag_is_scratch_file);
+ (void)gs_remove_control_path_flags(mem, gs_permit_file_writing, buffer,
+ gs_path_control_flag_is_scratch_file);
+ (void)gs_remove_control_path_flags(mem, gs_permit_file_control, buffer,
+ gs_path_control_flag_is_scratch_file);
+ }
gs_free_object(mem->non_gc_memory, bufferfull, "gp_validate_path");
#ifdef EACCES
if (code == gs_error_invalidfileaccess)
errno = EACCES;
#endif
- return code;
+
+ return code < 0 ? code : 0;
}
int
@@ -1108,3 +1155,25 @@ gp_validate_path(const gs_memory_t *mem,
{
return gp_validate_path_len(mem, path, strlen(path), mode);
}
+
+int
+gp_unlink(gs_memory_t *mem, const char *fname)
+{
+ if (gp_validate_path(mem, fname, "d") != 0)
+ return gs_error_invalidaccess;
+
+ return gp_unlink_impl(mem, fname);
+}
+
+int
+gp_rename(gs_memory_t *mem, const char *from, const char *to)
+{
+ /* Always check 'to' before 'from', in case 'from' is a tempfile,
+ * and testing it might remove it from the list! */
+ if (gp_validate_path(mem, to, "t") != 0)
+ return gs_error_invalidaccess;
+ if (gp_validate_path(mem, from, "f") != 0)
+ return gs_error_invalidaccess;
+
+ return gp_rename_impl(mem, from, to);
+}
diff --git a/base/gpmisc.h b/base/gpmisc.h
index af4a2ba3..9b3a0654 100644
--- a/base/gpmisc.h
+++ b/base/gpmisc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gpsync.h b/base/gpsync.h
index bebae986..a2d9b229 100644
--- a/base/gpsync.h
+++ b/base/gpsync.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gs.mak b/base/gs.mak
index d1b32355..c4fbb91b 100644
--- a/base/gs.mak
+++ b/base/gs.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/gs_dll_call.h b/base/gs_dll_call.h
index 1df48dae..3a5efc63 100644
--- a/base/gs_dll_call.h
+++ b/base/gs_dll_call.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gs_mgl_e.h b/base/gs_mgl_e.h
index 9601e631..ef2d21e6 100644
--- a/base/gs_mgl_e.h
+++ b/base/gs_mgl_e.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gs_mro_e.h b/base/gs_mro_e.h
index fd899706..32f74114 100644
--- a/base/gs_mro_e.h
+++ b/base/gs_mro_e.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsalloc.c b/base/gsalloc.c
index c9c3ba0e..b8fb7b67 100644
--- a/base/gsalloc.c
+++ b/base/gsalloc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -68,11 +68,11 @@ static void
alloc_trace(const char *chars, gs_ref_memory_t * imem, client_name_t cname,
gs_memory_type_ptr_t stype, uint size, const void *ptr)
{
- if_debug7m('A', (const gs_memory_t *)imem, "[a%d%s]%s %s(%u) %s0x%lx\n",
+ if_debug7m('A', (const gs_memory_t *)imem, "[a%d%s]%s %s(%u) %s"PRI_INTPTR"\n",
alloc_trace_space(imem), chars, client_name_string(cname),
(ptr == 0 || stype == 0 ? "" :
struct_type_name_string(stype)),
- size, (chars[1] == '+' ? "= " : ""), (ulong) ptr);
+ size, (chars[1] == '+' ? "= " : ""), (intptr_t)ptr);
}
static bool
alloc_size_is_ok(gs_memory_type_ptr_t stype)
@@ -82,8 +82,8 @@ alloc_size_is_ok(gs_memory_type_ptr_t stype)
# define ALLOC_CHECK_SIZE(mem,stype)\
BEGIN\
if (!alloc_size_is_ok(stype)) {\
- mlprintf2(mem,"size of struct type 0x%lx is 0x%lx!\n",\
- (ulong)(stype), (ulong)((stype)->ssize));\
+ mlprintf2(mem,"size of struct type "PRI_INTPTR" is 0x%lx!\n",\
+ (intptr_t)(stype), (ulong)((stype)->ssize));\
return 0;\
}\
END
@@ -778,7 +778,7 @@ ialloc_alloc_state(gs_memory_t * parent, uint clump_size)
#endif
iimem->is_controlled = false;
iimem->gc_status.vm_threshold = clump_size * 3L;
- iimem->gc_status.max_vm = max_long;
+ iimem->gc_status.max_vm = MAX_MAX_VM;
iimem->gc_status.signal_value = 0;
iimem->gc_status.enabled = false;
iimem->gc_status.requested = 0;
@@ -865,8 +865,7 @@ ialloc_add_clump(gs_ref_memory_t *imem, ulong space, client_name_t cname)
/* Allow acquisition of this clump. */
imem->is_controlled = false;
imem->large_size = imem->clump_size;
- imem->limit = max_size_t;
- imem->gc_status.max_vm = max_size_t;
+ imem->limit = imem->gc_status.max_vm = MAX_MAX_VM;
/* Acquire the clump. */
cp = alloc_add_clump(imem, space, cname);
@@ -954,7 +953,7 @@ ialloc_set_limit(register gs_ref_memory_t * mem)
* exceeds the lesser of max_vm or (if GC is enabled)
* gc_allocated + vm_threshold.
*/
- ulong max_allocated =
+ size_t max_allocated =
(mem->gc_status.max_vm > mem->previous_status.allocated ?
mem->gc_status.max_vm - mem->previous_status.allocated :
0);
@@ -1071,13 +1070,17 @@ gs_memory_set_gc_status(gs_ref_memory_t * mem, const gs_memory_gc_status_t * pst
ialloc_set_limit(mem);
}
-/* Set VM threshold. */
+/* Set VM threshold. Value passed as int64_t since it is signed */
void
-gs_memory_set_vm_threshold(gs_ref_memory_t * mem, size_t val)
+gs_memory_set_vm_threshold(gs_ref_memory_t * mem, int64_t val)
{
gs_memory_gc_status_t stat;
gs_ref_memory_t * stable = (gs_ref_memory_t *)mem->stable_memory;
+ if (val < MIN_VM_THRESHOLD)
+ val = MIN_VM_THRESHOLD;
+ else if (val > MAX_VM_THRESHOLD)
+ val = MAX_VM_THRESHOLD;
gs_memory_gc_status(mem, &stat);
stat.vm_threshold = val;
gs_memory_set_gc_status(mem, &stat);
@@ -1300,10 +1303,10 @@ i_alloc_byte_array(gs_memory_t * mem, size_t num_elements, size_t elt_size,
obj = alloc_obj(imem, lsize,
&st_bytes, ALLOC_DIRECT, cname);
- if_debug6m('A', mem, "[a%d:+b.]%s -bytes-*(%"PRIuSIZE"=%"PRIuSIZE"*%"PRIuSIZE") = 0x%lx\n",
+ if_debug6m('A', mem, "[a%d:+b.]%s -bytes-*(%"PRIuSIZE"=%"PRIuSIZE"*%"PRIuSIZE") = "PRI_INTPTR"\n",
alloc_trace_space(imem), client_name_string(cname),
num_elements * elt_size,
- num_elements, elt_size, (ulong) obj);
+ num_elements, elt_size, (intptr_t)obj);
return (byte *) obj;
}
static byte *
@@ -1327,10 +1330,10 @@ i_alloc_byte_array_immovable(gs_memory_t * mem, size_t num_elements,
&st_bytes, ALLOC_IMMOVABLE | ALLOC_DIRECT,
cname);
- if_debug6m('A', mem, "[a%d|+b.]%s -bytes-*(%"PRIuSIZE"=%"PRIuSIZE"*%"PRIuSIZE") = 0x%lx\n",
+ if_debug6m('A', mem, "[a%d|+b.]%s -bytes-*(%"PRIuSIZE"=%"PRIuSIZE"*%"PRIuSIZE") = "PRI_INTPTR"\n",
alloc_trace_space(imem), client_name_string(cname),
num_elements * elt_size,
- num_elements, elt_size, (ulong) obj);
+ num_elements, elt_size, (intptr_t)obj);
return (byte *) obj;
}
static void *
@@ -1360,11 +1363,11 @@ i_alloc_struct_array(gs_memory_t * mem, size_t num_elements,
if ((size_t)lsize != slsize)
return NULL;
obj = alloc_obj(imem, lsize, pstype, ALLOC_DIRECT, cname);
- if_debug7m('A', mem, "[a%d:+<.]%s %s*(%"PRIuSIZE"=%"PRIuSIZE"*%u) = 0x%lx\n",
+ if_debug7m('A', mem, "[a%d:+<.]%s %s*(%"PRIuSIZE"=%"PRIuSIZE"*%u) = "PRI_INTPTR"\n",
alloc_trace_space(imem), client_name_string(cname),
struct_type_name_string(pstype),
num_elements * pstype->ssize,
- num_elements, pstype->ssize, (ulong) obj);
+ num_elements, pstype->ssize, (intptr_t)obj);
return (char *)obj;
}
static void *
@@ -1387,11 +1390,11 @@ i_alloc_struct_array_immovable(gs_memory_t * mem, size_t num_elements,
if ((size_t)lsize != slsize)
return NULL;
obj = alloc_obj(imem, lsize, pstype, ALLOC_IMMOVABLE | ALLOC_DIRECT, cname);
- if_debug7m('A', mem, "[a%d|+<.]%s %s*(%"PRIuSIZE"=%"PRIuSIZE"*%u) = 0x%lx\n",
+ if_debug7m('A', mem, "[a%d|+<.]%s %s*(%"PRIuSIZE"=%"PRIuSIZE"*%u) = "PRI_INTPTR"\n",
alloc_trace_space(imem), client_name_string(cname),
struct_type_name_string(pstype),
num_elements * pstype->ssize,
- num_elements, pstype->ssize, (ulong) obj);
+ num_elements, pstype->ssize, (intptr_t)obj);
return (char *)obj;
}
static void *
@@ -1430,13 +1433,13 @@ i_resize_object(gs_memory_t * mem, void *obj, size_t new_num_elements,
new_obj = obj;
}
if (new_obj) {
- if_debug8m('A', mem, "[a%d:%c%c ]%s %s(%"PRIuSIZE"=>%"PRIuSIZE") 0x%lx\n",
+ if_debug8m('A', mem, "[a%d:%c%c ]%s %s(%"PRIuSIZE"=>%"PRIuSIZE") "PRI_INTPTR"\n",
alloc_trace_space(imem),
(new_size > old_size ? '>' : '<'),
(pstype == &st_bytes ? 'b' : '<'),
client_name_string(cname),
struct_type_name_string(pstype),
- old_size, new_size, (ulong) obj);
+ old_size, new_size, (intptr_t)obj);
return new_obj;
}
/* Punt. */
@@ -1468,8 +1471,8 @@ i_free_object(gs_memory_t * mem, void *ptr, client_name_t cname)
clump_locator_t cld;
if (pstype == &st_free) {
- mlprintf2(mem, "%s: object 0x%lx already free!\n",
- client_name_string(cname), (ulong) ptr);
+ mlprintf2(mem, "%s: object "PRI_INTPTR" already free!\n",
+ client_name_string(cname), (intptr_t)ptr);
return; /*gs_abort(); */
}
/* Check that this allocator owns the object being freed. */
@@ -1478,9 +1481,9 @@ i_free_object(gs_memory_t * mem, void *ptr, client_name_t cname)
!clump_locate_ptr(ptr, &cld)
) {
if (!cld.memory->saved) {
- mlprintf3(mem, "%s: freeing 0x%lx, not owned by memory 0x%lx!\n",
- client_name_string(cname), (ulong) ptr,
- (ulong) mem);
+ mlprintf3(mem, "%s: freeing "PRI_INTPTR", not owned by memory "PRI_INTPTR"!\n",
+ client_name_string(cname), (intptr_t)ptr,
+ (intptr_t)mem);
return; /*gs_abort(); */
}
/****** HACK: we know the saved state is the first ******
@@ -1491,10 +1494,10 @@ i_free_object(gs_memory_t * mem, void *ptr, client_name_t cname)
if (!(PTR_BETWEEN((const byte *)pp, cld.cp->cbase,
cld.cp->cbot))
) {
- mlprintf5(mem, "%s: freeing 0x%lx,\n\toutside clump 0x%lx cbase=0x%lx, cbot=0x%lx!\n",
- client_name_string(cname), (ulong) ptr,
- (ulong) cld.cp, (ulong) cld.cp->cbase,
- (ulong) cld.cp->cbot);
+ mlprintf5(mem, "%s: freeing "PRI_INTPTR",\n\toutside clump "PRI_INTPTR" cbase="PRI_INTPTR", cbot="PRI_INTPTR"!\n",
+ client_name_string(cname), (intptr_t) ptr,
+ (intptr_t) cld.cp, (intptr_t) cld.cp->cbase,
+ (intptr_t) cld.cp->cbot);
return; /*gs_abort(); */
}
}
@@ -1510,9 +1513,9 @@ i_free_object(gs_memory_t * mem, void *ptr, client_name_t cname)
if (gs_debug['a'] || gs_debug['A'])
saved_stype = *pstype;
- if_debug3m('u', mem, "[u]finalizing %s 0x%lx (%s)\n",
+ if_debug3m('u', mem, "[u]finalizing %s "PRI_INTPTR" (%s)\n",
struct_type_name_string(pstype),
- (ulong) ptr, client_name_string(cname));
+ (intptr_t)ptr, client_name_string(cname));
(*finalize) (mem, ptr);
if (gs_debug['a'] || gs_debug['A'])
@@ -1637,9 +1640,9 @@ i_alloc_string(gs_memory_t * mem, size_t nbytes, client_name_t cname)
}
top:
if (imem->cc && !imem->cc->c_alone && imem->cc->ctop - imem->cc->cbot > nbytes) {
- if_debug4m('A', mem, "[a%d:+> ]%s(%"PRIuSIZE") = 0x%lx\n",
+ if_debug4m('A', mem, "[a%d:+> ]%s(%"PRIuSIZE") = "PRI_INTPTR"\n",
alloc_trace_space(imem), client_name_string(cname), nbytes,
- (ulong) (imem->cc->ctop - nbytes));
+ (intptr_t)(imem->cc->ctop - nbytes));
str = imem->cc->ctop -= nbytes;
gs_alloc_fill(str, gs_alloc_fill_alloc, nbytes);
str += HDR_ID_OFFSET;
@@ -1698,9 +1701,9 @@ i_alloc_string_immovable(gs_memory_t * mem, size_t nbytes, client_name_t cname)
cp->c_alone = true;
str = cp->ctop = cp->climit - nbytes;
- if_debug4m('a', mem, "[a%d|+>L]%s(%"PRIuSIZE") = 0x%lx\n",
+ if_debug4m('a', mem, "[a%d|+>L]%s(%"PRIuSIZE") = "PRI_INTPTR"\n",
alloc_trace_space(imem), client_name_string(cname), nbytes,
- (ulong) str);
+ (intptr_t)str);
gs_alloc_fill(str, gs_alloc_fill_alloc, nbytes);
str += HDR_ID_OFFSET;
ASSIGN_HDR_ID(str);
@@ -1727,11 +1730,11 @@ i_resize_string(gs_memory_t * mem, byte * data, size_t old_num, size_t new_num,
imem->cc->ctop - imem->cc->cbot > new_num - old_num)
) { /* Resize in place. */
ptr = data + old_num - new_num;
- if_debug6m('A', mem, "[a%d:%c> ]%s(%"PRIuSIZE"->%"PRIuSIZE") 0x%lx\n",
+ if_debug6m('A', mem, "[a%d:%c> ]%s(%"PRIuSIZE"->%"PRIuSIZE") "PRI_INTPTR"\n",
alloc_trace_space(imem),
(new_num > old_num ? '>' : '<'),
client_name_string(cname), old_num, new_num,
- (ulong) ptr);
+ (intptr_t)ptr);
imem->cc->ctop = ptr;
memmove(ptr, data, min(old_num, new_num));
#ifdef DEBUG
@@ -1750,9 +1753,9 @@ i_resize_string(gs_memory_t * mem, byte * data, size_t old_num, size_t new_num,
imem->lost.strings += old_num - new_num;
gs_alloc_fill(data + new_num, gs_alloc_fill_free,
old_num - new_num);
- if_debug5m('A', mem, "[a%d:<> ]%s(%"PRIuSIZE"->%"PRIuSIZE") 0x%lx\n",
+ if_debug5m('A', mem, "[a%d:<> ]%s(%"PRIuSIZE"->%"PRIuSIZE") "PRI_INTPTR"\n",
alloc_trace_space(imem), client_name_string(cname),
- old_num, new_num, (ulong)ptr);
+ old_num, new_num, (intptr_t)ptr);
ptr += HDR_ID_OFFSET;
ASSIGN_HDR_ID(ptr);
} else { /* Punt. */
@@ -1780,14 +1783,14 @@ i_free_string(gs_memory_t * mem, byte * data, size_t nbytes,
data -= HDR_ID_OFFSET;
nbytes += HDR_ID_OFFSET;
if (imem->cc && data == imem->cc->ctop) {
- if_debug4m('A', mem, "[a%d:-> ]%s(%"PRIuSIZE") 0x%lx\n",
+ if_debug4m('A', mem, "[a%d:-> ]%s(%"PRIuSIZE") "PRI_INTPTR"\n",
alloc_trace_space(imem), client_name_string(cname), nbytes,
- (ulong) data);
+ (intptr_t)data);
imem->cc->ctop += nbytes;
} else {
- if_debug4m('A', mem, "[a%d:->#]%s(%"PRIuSIZE") 0x%lx\n",
+ if_debug4m('A', mem, "[a%d:->#]%s(%"PRIuSIZE") "PRI_INTPTR"\n",
alloc_trace_space(imem), client_name_string(cname), nbytes,
- (ulong) data);
+ (intptr_t)data);
imem->lost.strings += nbytes;
}
gs_alloc_fill(data, gs_alloc_fill_free, nbytes);
@@ -2102,9 +2105,9 @@ consolidate_clump_free(clump_t *cp, gs_ref_memory_t *mem)
/* Remove the free objects from the freelists. */
remove_range_from_freelist(mem, begin_free, cp->cbot);
if_debug4m('a', (const gs_memory_t *)mem,
- "[a]resetting clump 0x%lx cbot from 0x%lx to 0x%lx (%lu free)\n",
- (ulong) cp, (ulong) cp->cbot, (ulong) begin_free,
- (ulong) ((byte *) cp->cbot - (byte *) begin_free));
+ "[a]resetting clump "PRI_INTPTR" cbot from "PRI_INTPTR" to "PRI_INTPTR" (%lu free)\n",
+ (intptr_t)cp, (intptr_t)cp->cbot, (intptr_t)begin_free,
+ (intptr_t)((byte *)cp->cbot - (byte *)begin_free));
cp->cbot = (byte *) begin_free;
}
}
@@ -2321,8 +2324,8 @@ trim_obj(gs_ref_memory_t *mem, obj_header_t *obj, obj_size_t size, clump_t *cp)
if (cp) {
#ifdef DEBUG
if (cp->cbot != (byte *)obj + old_rounded_size) {
- lprintf3("resizing 0x%lx, old size %u, new size %u, cbot wrong!\n",
- (ulong)obj, old_rounded_size, size);
+ lprintf3("resizing "PRI_INTPTR", old size %u, new size %u, cbot wrong!\n",
+ (intptr_t)obj, old_rounded_size, size);
/* gs_abort */
} else
#endif
@@ -2390,8 +2393,8 @@ i_register_root(gs_memory_t * mem, gs_gc_root_t ** rpp, gs_ptr_type_t ptype,
rp = *rpp;
rp->free_on_unregister = false;
}
- if_debug3m('8', mem, "[8]register root(%s) 0x%lx -> 0x%lx\n",
- client_name_string(cname), (ulong)rp, (ulong)up);
+ if_debug3m('8', mem, "[8]register root(%s) "PRI_INTPTR" -> "PRI_INTPTR"\n",
+ client_name_string(cname), (intptr_t)rp, (intptr_t)up);
rp->ptype = ptype;
rp->p = up;
rp->next = imem->roots;
@@ -2406,8 +2409,8 @@ i_unregister_root(gs_memory_t * mem, gs_gc_root_t * rp, client_name_t cname)
gs_ref_memory_t * const imem = (gs_ref_memory_t *)mem;
gs_gc_root_t **rpp = &imem->roots;
- if_debug2m('8', mem, "[8]unregister root(%s) 0x%lx\n",
- client_name_string(cname), (ulong) rp);
+ if_debug2m('8', mem, "[8]unregister root(%s) "PRI_INTPTR"\n",
+ client_name_string(cname), (intptr_t)rp);
while (*rpp != rp)
rpp = &(*rpp)->next;
*rpp = (*rpp)->next;
@@ -2602,8 +2605,8 @@ alloc_unlink_clump(clump_t * cp, gs_ref_memory_t * mem)
clump_splay_app(mem->root, mem, check_in_clump, &found);
if (found != NULL) {
- mlprintf2((const gs_memory_t *)mem, "unlink_clump 0x%lx not owned by memory 0x%lx!\n",
- (ulong) cp, (ulong) mem);
+ mlprintf2((const gs_memory_t *)mem, "unlink_clump "PRI_INTPTR" not owned by memory "PRI_INTPTR"!\n",
+ (intptr_t)cp, (intptr_t)mem);
return; /*gs_abort(); */
}
}
@@ -2767,7 +2770,7 @@ debug_dump_contents(const gs_memory_t *mem, const byte * bot,
}
continue;
}
- gs_sprintf(label, "0x%lx:", (ulong) block);
+ gs_sprintf(label, PRI_INTPTR":", (intptr_t)block);
debug_indent(mem, indent);
dmputs(mem, label);
for (i = 0; i < block_size; ++i) {
@@ -2811,15 +2814,15 @@ debug_print_object(const gs_memory_t *mem, const void *obj, const dump_control_t
const gs_memory_struct_type_t *type = pre->o_type;
dump_options_t options = control->options;
- dmprintf3(mem, " pre=0x%lx(obj=0x%lx) size=%lu", (ulong) pre, (ulong) obj,
- size);
+ dmprintf3(mem, " pre="PRI_INTPTR"(obj="PRI_INTPTR") size=%lu",
+ (intptr_t) pre, (intptr_t) obj, size);
switch (options & (dump_do_type_addresses | dump_do_no_types)) {
case dump_do_type_addresses + dump_do_no_types: /* addresses only */
- dmprintf1(mem, " type=0x%lx", (ulong) type);
+ dmprintf1(mem, " type="PRI_INTPTR"", (intptr_t) type);
break;
case dump_do_type_addresses: /* addresses & names */
- dmprintf2(mem, " type=%s(0x%lx)", struct_type_name_string(type),
- (ulong) type);
+ dmprintf2(mem, " type=%s("PRI_INTPTR")", struct_type_name_string(type),
+ (intptr_t)type);
break;
case 0: /* names only */
dmprintf1(mem, " type=%s", struct_type_name_string(type));
@@ -2827,7 +2830,7 @@ debug_print_object(const gs_memory_t *mem, const void *obj, const dump_control_t
;
}
if (options & dump_do_marks) {
- dmprintf2(mem, " smark/back=%u (0x%x)", pre->o_smark, pre->o_smark);
+ dmprintf2(mem, " smark/back=%u ("PRI_INTPTR")", pre->o_smark, pre->o_smark);
}
dmputc(mem, '\n');
if (type == &st_free)
@@ -2851,7 +2854,7 @@ debug_print_object(const gs_memory_t *mem, const void *obj, const dump_control_t
if (!str)
dmprintf(mem, "0x0");
else
- dmprintf2(mem, "0x%lx(%u)", (ulong) str->data, str->size);
+ dmprintf2(mem, PRI_INTPTR "(%u)", (intptr_t)str->data, str->size);
if (options & dump_do_pointed_strings) {
dmputs(mem, " =>\n");
if (!str)
@@ -2864,7 +2867,7 @@ debug_print_object(const gs_memory_t *mem, const void *obj, const dump_control_t
}
} else {
dmprintf1(mem, (PTR_BETWEEN(ptr, obj, (const byte *)obj + size) ?
- "(0x%lx)\n" : "0x%lx\n"), (ulong) ptr);
+ "("PRI_INTPTR")\n" : PRI_INTPTR "\n"), (intptr_t) ptr);
}
}
} else { /* proc == 0 */
@@ -2883,22 +2886,22 @@ debug_print_object(const gs_memory_t *mem, const void *obj, const dump_control_t
void
debug_dump_clump(const gs_memory_t *mem, const clump_t * cp, const dump_control_t * control)
{
- dmprintf1(mem, "clump at 0x%lx:\n", (ulong) cp);
- dmprintf3(mem, " chead=0x%lx cbase=0x%lx sbase=0x%lx\n",
- (ulong) cp->chead, (ulong) cp->cbase, (ulong) cp->sbase);
- dmprintf3(mem, " rcur=0x%lx rtop=0x%lx cbot=0x%lx\n",
- (ulong) cp->rcur, (ulong) cp->rtop, (ulong) cp->cbot);
- dmprintf4(mem, " ctop=0x%lx climit=0x%lx smark=0x%lx, size=%u\n",
- (ulong) cp->ctop, (ulong) cp->climit, (ulong) cp->smark,
+ dmprintf1(mem, "clump at "PRI_INTPTR":\n", (intptr_t) cp);
+ dmprintf3(mem, " chead="PRI_INTPTR" cbase="PRI_INTPTR" sbase="PRI_INTPTR"\n",
+ (intptr_t)cp->chead, (intptr_t)cp->cbase, (intptr_t)cp->sbase);
+ dmprintf3(mem, " rcur="PRI_INTPTR" rtop="PRI_INTPTR" cbot="PRI_INTPTR"\n",
+ (intptr_t)cp->rcur, (intptr_t)cp->rtop, (intptr_t)cp->cbot);
+ dmprintf4(mem, " ctop="PRI_INTPTR" climit="PRI_INTPTR" smark="PRI_INTPTR", size=%u\n",
+ (intptr_t)cp->ctop, (intptr_t)cp->climit, (intptr_t)cp->smark,
cp->smark_size);
- dmprintf2(mem, " sreloc=0x%lx cend=0x%lx\n",
- (ulong) cp->sreloc, (ulong) cp->cend);
- dmprintf6(mem, "left=0x%lx right=0x%lx parent=0x%lx outer=0x%lx inner_count=%u has_refs=%s\n",
- (ulong) cp->left, (ulong) cp->right, (ulong) cp->parent, (ulong) cp->outer,
+ dmprintf2(mem, " sreloc="PRI_INTPTR" cend="PRI_INTPTR"\n",
+ (intptr_t)cp->sreloc, (intptr_t)cp->cend);
+ dmprintf6(mem, "left="PRI_INTPTR" right="PRI_INTPTR" parent="PRI_INTPTR" outer="PRI_INTPTR" inner_count=%u has_refs=%s\n",
+ (intptr_t)cp->left, (intptr_t)cp->right, (intptr_t)cp->parent, (intptr_t)cp->outer,
cp->inner_count, (cp->has_refs ? "true" : "false"));
- dmprintf2(mem, " sfree1=0x%lx sfree=0x%x\n",
- (ulong) cp->sfree1, cp->sfree);
+ dmprintf2(mem, " sfree1="PRI_INTPTR" sfree="PRI_INTPTR"\n",
+ (intptr_t)cp->sfree1, (intptr_t)cp->sfree);
if (control->options & dump_do_strings) {
debug_dump_contents(mem, (control->bottom == 0 ? cp->ctop :
max(control->bottom, cp->ctop)),
@@ -2982,10 +2985,10 @@ static void ddct(const gs_memory_t *mem, clump_t *cp, clump_t *parent, int depth
for (i = 0; i < depth; i++)
dmlprintf(mem, " ");
- dmlprintf7(mem, "Clump %p:%p parent=%p left=%p:%p right=%p:%p\n",
- cp, cp->cbase, cp->parent,
- cp->left, cp->left ? cp->left->cbase : NULL,
- cp->right, cp->right ? cp->right->cbase : NULL);
+ dmlprintf7(mem, "Clump "PRI_INTPTR":"PRI_INTPTR" parent="PRI_INTPTR" left="PRI_INTPTR":"PRI_INTPTR" right="PRI_INTPTR":"PRI_INTPTR"\n",
+ (intptr_t)cp, (intptr_t)cp->cbase, (intptr_t)cp->parent,
+ (intptr_t)cp->left, (intptr_t)cp->left ? cp->left->cbase : NULL,
+ (intptr_t)cp->right, (intptr_t)cp->right ? cp->right->cbase : NULL);
if (cp->parent != parent)
dmlprintf(mem, "Parent pointer mismatch!\n");
ddct(mem, cp->left, cp, depth+1);
diff --git a/base/gsalloc.h b/base/gsalloc.h
index 7112b047..4c9113fe 100644
--- a/base/gsalloc.h
+++ b/base/gsalloc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -20,6 +20,7 @@
# define gsalloc_INCLUDED
#include "std.h"
+#include "stdint_.h" /* make sure stdint types are available - for int64_t */
typedef struct gs_ref_memory_s gs_ref_memory_t;
@@ -28,7 +29,8 @@ typedef struct gs_ref_memory_s gs_ref_memory_t;
*/
typedef struct gs_memory_gc_status_s {
/* Set by client */
- size_t vm_threshold; /* GC interval */
+ /* Note vm_threshold is set as a signed value */
+ int64_t vm_threshold; /* GC interval */
size_t max_vm; /* maximum allowed allocation */
int signal_value; /* value to store in gs_lib_ctx->gcsignal */
@@ -36,9 +38,20 @@ typedef struct gs_memory_gc_status_s {
/* Set by allocator */
size_t requested; /* amount of last failing request */
} gs_memory_gc_status_t;
+
+/* max_vm values, and vm_threshold are signed in PostScript. */
+#if ARCH_SIZEOF_SIZE_T < ARCH_SIZEOF_INT64_T
+# define MAX_VM_THRESHOLD max_size_t
+#else
+# define MAX_VM_THRESHOLD max_int64_t
+#endif
+#define MAX_MAX_VM (max_size_t>>1)
+#define MIN_VM_THRESHOLD 1
+
void gs_memory_gc_status(const gs_ref_memory_t *, gs_memory_gc_status_t *);
void gs_memory_set_gc_status(gs_ref_memory_t *, const gs_memory_gc_status_t *);
-void gs_memory_set_vm_threshold(gs_ref_memory_t * mem, size_t val);
+/* Value passed as int64_t, but limited to MAX_VM_THRESHOLD (see set_vm_threshold) */
+void gs_memory_set_vm_threshold(gs_ref_memory_t * mem, int64_t val);
void gs_memory_set_vm_reclaim(gs_ref_memory_t * mem, bool enabled);
/* ------ Initialization ------ */
diff --git a/base/gsalpha.c b/base/gsalpha.c
deleted file mode 100644
index a4bf7229..00000000
--- a/base/gsalpha.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
- 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.
-
- Refer to licensing information at http://www.artifex.com or contact
- Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
- CA 94945, U.S.A., +1(415)492-9861, for further information.
-*/
-
-
-/* Graphics state alpha value access */
-#include "gx.h"
-#include "gsalpha.h"
-#include "gxdcolor.h"
-#include "gzstate.h"
-
-/* setalpha */
-int
-gs_setalpha(gs_gstate * pgs, double alpha)
-{
- pgs->alpha =
- (gx_color_value) (alpha < 0 ? 0 : alpha > 1 ? gx_max_color_value :
- alpha * gx_max_color_value);
- gx_unset_dev_color(pgs);
- return 0;
-}
-
-/* currentalpha */
-float
-gs_currentalpha(const gs_gstate * pgs)
-{
- return (float)pgs->alpha / gx_max_color_value;
-}
diff --git a/base/gsalphac.c b/base/gsalphac.c
deleted file mode 100644
index 4edb1936..00000000
--- a/base/gsalphac.c
+++ /dev/null
@@ -1,842 +0,0 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
- 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.
-
- Refer to licensing information at http://www.artifex.com or contact
- Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
- CA 94945, U.S.A., +1(415)492-9861, for further information.
-*/
-
-
-/* Alpha-compositing implementation */
-#include "memory_.h"
-#include "gx.h"
-#include "gserrors.h"
-#include "gsalphac.h"
-#include "gsiparam.h" /* for gs_image_alpha_t */
-#include "gsutil.h" /* for gs_next_ids */
-#include "gxalpha.h"
-#include "gxcomp.h"
-#include "gxdevice.h"
-#include "gxgetbit.h"
-#include "gxlum.h"
-#include "gsbitops.h"
-
-/* ---------------- Internal definitions ---------------- */
-
-/* Define the parameters for a compositing operation. */
-typedef struct gs_composite_params_s {
- gs_composite_op_t cop;
- float delta; /* only for dissolve */
- uint source_alpha; /* only if !psource->alpha */
- uint source_values[4]; /* only if !psource->data */
-} gs_composite_params_t;
-
-/* Define the source or destination for a compositing operation. */
-#define pixel_row_fields(elt_type)\
- elt_type *data;\
- int bits_per_value; /* 1, 2, 4, 8, 12, 16 */\
- int initial_x;\
- gs_image_alpha_t alpha
-typedef struct pixel_row_s {
- pixel_row_fields(byte);
-} pixel_row_t;
-typedef struct const_pixel_row_s {
- pixel_row_fields(const byte);
-} const_pixel_row_t;
-
-/*
- * Composite two arrays of (premultiplied) pixel values. Legal values of
- * values_per_pixel are 1-4, not including alpha. Note that if pdest->alpha
- * is "none", the alpha value for all destination pixels will be taken as
- * unity, and any operation that could generate alpha values other than
- * unity will return an error. "Could generate" means that there are
- * possible values of the source and destination alpha values for which the
- * result has non-unity alpha: the error check does not scan the actual
- * alpha data to test whether there are any actual values that would
- * generate a non-unity alpha result.
- */
-int composite_values(const pixel_row_t * pdest,
- const const_pixel_row_t * psource,
- int values_per_pixel, uint num_pixels,
- const gs_composite_params_t * pcp);
-
-/* ---------------- Alpha-compositing objects ---------------- */
-
-/*
- * Define which operations can generate non-unity alpha values in 3 of the 4
- * cases of source and destination not having unity alphas. (This is always
- * possible in the fourth case, both S & D non-unity, except for CLEAR.) We
- * do this with a bit mask indexed by the operation, counting from the LSB.
- * The name indicates whether S and/or D has non-unity alphas.
- */
-#define alpha_out_notS_notD\
- (1<<composite_Dissolve)
-#define _alpha_out_either\
- (alpha_out_notS_notD|(1<<composite_Satop)|(1<<composite_Datop)|\
- (1<<composite_Xor)|(1<<composite_PlusD)|(1<<composite_PlusL))
-#define alpha_out_S_notD\
- (_alpha_out_either|(1<<composite_Copy)|(1<<composite_Sover)|\
- (1<<composite_Din)|(1<<composite_Dout))
-#define alpha_out_notS_D\
- (_alpha_out_either|(1<<composite_Sin)|(1<<composite_Sout)|\
- (1<<composite_Dover)|(1<<composite_Highlight))
-
-/* ------ Object definition and creation ------ */
-
-/* Define alpha-compositing objects. */
-static composite_create_default_compositor_proc(c_alpha_create_default_compositor);
-static composite_equal_proc(c_alpha_equal);
-static composite_write_proc(c_alpha_write);
-static composite_read_proc(c_alpha_read);
-const gs_composite_type_t gs_composite_alpha_type =
-{
- GX_COMPOSITOR_ALPHA,
- {
- c_alpha_create_default_compositor,
- c_alpha_equal,
- c_alpha_write,
- c_alpha_read,
- gx_default_composite_adjust_ctm,
- gx_default_composite_is_closing,
- gx_default_composite_is_friendly,
- gx_default_composite_clist_write_update,
- gx_default_composite_clist_read_update,
- gx_default_composite_get_cropping
- }
-};
-typedef struct gs_composite_alpha_s {
- gs_composite_common;
- gs_composite_alpha_params_t params;
-} gs_composite_alpha_t;
-
-gs_private_st_simple(st_composite_alpha, gs_composite_alpha_t,
- "gs_composite_alpha_t");
-
-/* Create an alpha-compositing object. */
-int
-gs_create_composite_alpha(gs_composite_t ** ppcte,
- const gs_composite_alpha_params_t * params, gs_memory_t * mem)
-{
- gs_composite_alpha_t *pcte;
-
- pcte = gs_alloc_struct(mem, gs_composite_alpha_t, &st_composite_alpha,
- "gs_create_composite_alpha");
- if (pcte == NULL)
- return_error(gs_error_VMerror);
- pcte->type = &gs_composite_alpha_type;
- pcte->id = gs_next_ids(mem, 1);
- pcte->params = *params;
- pcte->idle = false;
- *ppcte = (gs_composite_t *) pcte;
- return 0;
-}
-
-/* ------ Object implementation ------ */
-
-#define pacte ((const gs_composite_alpha_t *)pcte)
-
-static bool
-c_alpha_equal(const gs_composite_t * pcte, const gs_composite_t * pcte2)
-{
- return (pcte2->type == pcte->type &&
-#define pacte2 ((const gs_composite_alpha_t *)pcte2)
- pacte2->params.op == pacte->params.op &&
- (pacte->params.op != composite_Dissolve ||
- pacte2->params.delta == pacte->params.delta));
-#undef pacte2
-}
-
-static int
-c_alpha_write(const gs_composite_t * pcte, byte * data, uint * psize, gx_device_clist_writer *cdev)
-{
- uint size = *psize;
- uint used;
-
- if_debug1m('v', ((gx_device *)cdev)->memory, "[v]c_alpha_write(%d)\n", pacte->params.op);
- if (pacte->params.op == composite_Dissolve) {
- used = 1 + sizeof(pacte->params.delta);
- if (size < used) {
- *psize = used;
- return_error(gs_error_rangecheck);
- }
- memcpy(data + 1, &pacte->params.delta, sizeof(pacte->params.delta));
- } else {
- used = 1;
- if (size < used) {
- *psize = used;
- return_error(gs_error_rangecheck);
- }
- }
- *data = (byte) pacte->params.op;
- *psize = used;
- return 0;
-}
-
-static int
-c_alpha_read(gs_composite_t ** ppcte, const byte * data, uint size,
- gs_memory_t * mem)
-{
- gs_composite_alpha_params_t params = {composite_Clear, 0};
- int code, nbytes = 1;
-
- if (size < 1 || *data > composite_op_last)
- return_error(gs_error_rangecheck);
- params.op = *data;
- if_debug1m('v', mem, "[v]c_alpha_read(%d)\n", params.op);
- if (params.op == composite_Dissolve) {
- if (size < 1 + sizeof(params.delta))
- return_error(gs_error_rangecheck);
- memcpy(&params.delta, data + 1, sizeof(params.delta));
- nbytes += sizeof(params.delta);
- }
- code = gs_create_composite_alpha(ppcte, &params, mem);
- return code < 0 ? code : nbytes;
-}
-
-/* ---------------- Alpha-compositing device ---------------- */
-
-/* Define the default alpha-compositing device. */
-typedef struct gx_device_composite_alpha_s {
- gx_device_forward_common;
- gs_composite_alpha_params_t params;
-} gx_device_composite_alpha;
-
-gs_private_st_suffix_add0_final(st_device_composite_alpha,
- gx_device_composite_alpha, "gx_device_composite_alpha",
- device_c_alpha_enum_ptrs, device_c_alpha_reloc_ptrs, gx_device_finalize,
- st_device_forward);
-/* The device descriptor. */
-static dev_proc_close_device(dca_close);
-static dev_proc_fill_rectangle(dca_fill_rectangle);
-static dev_proc_map_rgb_color(dca_map_rgb_color);
-static dev_proc_map_color_rgb(dca_map_color_rgb);
-static dev_proc_copy_mono(dca_copy_mono);
-static dev_proc_copy_color(dca_copy_color);
-static dev_proc_map_rgb_alpha_color(dca_map_rgb_alpha_color);
-static dev_proc_map_color_rgb_alpha(dca_map_color_rgb_alpha);
-static dev_proc_copy_alpha(dca_copy_alpha);
-static const gx_device_composite_alpha gs_composite_alpha_device =
-{std_device_std_body_open(gx_device_composite_alpha, 0,
- "alpha compositor", 0, 0, 1, 1),
- {gx_default_open_device,
- gx_forward_get_initial_matrix,
- gx_default_sync_output,
- gx_default_output_page,
- dca_close,
- dca_map_rgb_color,
- dca_map_color_rgb,
- dca_fill_rectangle,
- gx_default_tile_rectangle,
- dca_copy_mono,
- dca_copy_color,
- gx_default_draw_line,
- gx_default_get_bits,
- gx_forward_get_params,
- gx_forward_put_params,
- gx_default_cmyk_map_cmyk_color, /* only called for CMYK */
- gx_forward_get_xfont_procs,
- gx_forward_get_xfont_device,
- dca_map_rgb_alpha_color,
- gx_forward_get_page_device,
- gx_forward_get_alpha_bits,
- dca_copy_alpha,
- gx_forward_get_band,
- gx_default_copy_rop,
- gx_default_fill_path,
- gx_default_stroke_path,
- gx_default_fill_mask,
- gx_default_fill_trapezoid,
- gx_default_fill_parallelogram,
- gx_default_fill_triangle,
- gx_default_draw_thin_line,
- gx_default_begin_image,
- gx_default_image_data,
- gx_default_end_image,
- gx_default_strip_tile_rectangle,
- gx_default_strip_copy_rop,
- gx_forward_get_clipping_box,
- gx_default_begin_typed_image,
- gx_forward_get_bits_rectangle,
- dca_map_color_rgb_alpha,
- gx_no_create_compositor
- }
-};
-
-/* Create an alpha compositor. */
-static int
-c_alpha_create_default_compositor(const gs_composite_t * pcte,
- gx_device ** pcdev, gx_device * dev, gs_gstate * pgs,
- gs_memory_t * mem)
-{
- gx_device_composite_alpha *cdev;
-
- if (pacte->params.op == composite_Copy) {
- /* Just use the original device. */
- *pcdev = dev;
- return 0;
- }
- cdev =
- gs_alloc_struct_immovable(mem, gx_device_composite_alpha,
- &st_device_composite_alpha,
- "create default alpha compositor");
- *pcdev = (gx_device *)cdev;
- if (cdev == 0)
- return_error(gs_error_VMerror);
- gx_device_init((gx_device *)cdev,
- (const gx_device *)&gs_composite_alpha_device, mem, true);
- gx_device_copy_params((gx_device *)cdev, dev);
- /*
- * Set the color_info and depth to be compatible with the target,
- * but using standard chunky color storage, including alpha.
- ****** CURRENTLY ALWAYS USE 8-BIT COLOR ******
- */
- cdev->color_info.depth =
- (dev->color_info.num_components == 4 ? 32 /* CMYK, no alpha */ :
- (dev->color_info.num_components + 1) * 8);
- cdev->color_info.max_gray = cdev->color_info.max_color = 255;
- /* No halftoning will occur, but we fill these in anyway.... */
- cdev->color_info.dither_grays = cdev->color_info.dither_colors = 256;
- /*
- * We could speed things up a little by tailoring the procedures in
- * the device to the specific num_components, but for simplicity,
- * we'll defer considering that until there is a demonstrated need.
- */
- gx_device_set_target((gx_device_forward *)cdev, dev);
- cdev->params = pacte->params;
- return 0;
-}
-
-/* Close the device and free its storage. */
-static int
-dca_close(gx_device * dev)
-{ /*
- * Finalization will call close again: avoid a recursion loop.
- */
- set_dev_proc(dev, close_device, gx_default_close_device);
- gs_free_object(dev->memory, dev, "dca_close");
- return 0;
-}
-
-/* ------ (RGB) color mapping ------ */
-
-static gx_color_index
-dca_map_rgb_color(gx_device * dev, const gx_color_value cv[])
-{
- return dca_map_rgb_alpha_color(dev, cv[0], cv[1], cv[2], gx_max_color_value);
-}
-static gx_color_index
-dca_map_rgb_alpha_color(gx_device * dev,
- gx_color_value red, gx_color_value green, gx_color_value blue,
- gx_color_value alpha)
-{ /*
- * We work exclusively with premultiplied color values, so we
- * have to premultiply the color components by alpha here.
- */
- byte a = gx_color_value_to_byte(alpha);
-
-#define premult_(c)\
- (((c) * a + gx_max_color_value / 2) / gx_max_color_value)
-#ifdef PREMULTIPLY_TOWARDS_WHITE
- byte bias = ~a;
-
-# define premult(c) (premult_(c) + bias)
-#else
-# define premult(c) premult_(c)
-#endif
- gx_color_index color;
-
- if (dev->color_info.num_components == 1) {
- uint lum =
- (red * lum_red_weight + green * lum_green_weight +
- blue * lum_blue_weight + lum_all_weights / 2) /
- lum_all_weights;
-
- if (a == 0xff)
- color = gx_color_value_to_byte(lum);
- else /* Premultiplication is necessary. */
- color = premult(lum);
- } else {
- if (a == 0xff)
- color =
- ((uint) gx_color_value_to_byte(red) << 16) +
- ((uint) gx_color_value_to_byte(green) << 8) +
- gx_color_value_to_byte(blue);
- else /* Premultiplication is necessary. */
- color =
- (premult(red) << 16) + (premult(green) << 8) + premult(blue);
- }
-#undef premult
- return (color << 8) + a;
-}
-static int
-dca_map_color_rgb(gx_device * dev, gx_color_index color,
- gx_color_value prgb[3])
-{
- gx_color_value red = gx_color_value_from_byte((byte) (color >> 24));
- byte a = (byte) color;
-
-#define postdiv_(c)\
- (((c) * 0xff + a / 2) / a)
-#ifdef PREMULTIPLY_TOWARDS_WHITE
- byte bias = ~a;
-
-# define postdiv(c) postdiv_(c - bias)
-#else
-# define postdiv(c) postdiv_(c)
-#endif
-
- if (dev->color_info.num_components == 1) {
- if (a != 0xff) {
- /* Undo premultiplication. */
- if (a == 0)
- red = 0;
- else
- red = postdiv(red);
- }
- prgb[0] = prgb[1] = prgb[2] = red;
- } else {
- gx_color_value
- green = gx_color_value_from_byte((byte) (color >> 16)),
- blue = gx_color_value_from_byte((byte) (color >> 8));
-
- if (a != 0xff) {
- /* Undo premultiplication. */
-/****** WHAT TO DO ABOUT BIG LOSS OF PRECISION? ******/
- if (a == 0)
- red = green = blue = 0;
- else {
- red = postdiv(red);
- green = postdiv(green);
- blue = postdiv(blue);
- }
- }
- prgb[0] = red, prgb[1] = green, prgb[2] = blue;
- }
-#undef postdiv
- return 0;
-}
-static int
-dca_map_color_rgb_alpha(gx_device * dev, gx_color_index color,
- gx_color_value prgba[4])
-{
- prgba[3] = gx_color_value_from_byte((byte) color);
- return dca_map_color_rgb(dev, color, prgba);
-}
-
-/* ------ Imaging ------ */
-
-static int
-dca_fill_rectangle(gx_device * dev, int x, int y, int w, int h,
- gx_color_index color)
-{ /* This is where all the real work gets done! */
- gx_device_composite_alpha *adev = (gx_device_composite_alpha *) dev;
- gx_device *target = adev->target;
- byte *std_row;
- byte *native_row;
- gs_int_rect rect;
- gs_get_bits_params_t std_params, native_params;
- int code = 0;
- int yi;
- gs_composite_params_t cp;
- const_pixel_row_t source;
- pixel_row_t dest;
-
- fit_fill(dev, x, y, w, h);
- std_row = gs_alloc_bytes(dev->memory,
- (dev->color_info.depth * w + 7) >> 3,
- "dca_fill_rectangle(std)");
- native_row = gs_alloc_bytes(dev->memory,
- (target->color_info.depth * w + 7) >> 3,
- "dca_fill_rectangle(native)");
- if (std_row == 0 || native_row == 0) {
- code = gs_note_error(gs_error_VMerror);
- goto out;
- }
- rect.p.x = x, rect.q.x = x + w;
- std_params.options =
- GB_COLORS_NATIVE |
- (GB_ALPHA_LAST | GB_DEPTH_8 | GB_PACKING_CHUNKY |
- GB_RETURN_COPY | GB_RETURN_POINTER | GB_ALIGN_ANY |
- GB_OFFSET_0 | GB_OFFSET_ANY | GB_RASTER_STANDARD |
- GB_RASTER_ANY);
- cp.cop = adev->params.op;
- if (cp.cop == composite_Dissolve)
- cp.delta = adev->params.delta;
- {
- gx_color_value rgba[4];
-
-/****** DOESN'T HANDLE CMYK ******/
- (*dev_proc(dev, map_color_rgb_alpha)) (dev, color, rgba);
- cp.source_values[0] = gx_color_value_to_byte(rgba[0]);
- cp.source_values[1] = gx_color_value_to_byte(rgba[1]);
- cp.source_values[2] = gx_color_value_to_byte(rgba[2]);
- cp.source_alpha = gx_color_value_to_byte(rgba[3]);
- }
- source.data = 0;
- source.bits_per_value = 8;
- source.alpha = gs_image_alpha_none;
- for (yi = y; yi < y + h; ++yi) {
- /* Read a row in standard representation. */
- rect.p.y = yi, rect.q.y = yi + 1;
- std_params.data[0] = std_row;
- code = (*dev_proc(target, get_bits_rectangle))
- (target, &rect, &std_params, NULL);
- if (code < 0)
- break;
- /* Do the work. */
- dest.data = std_params.data[0];
- dest.bits_per_value = 8;
- dest.initial_x =
- (std_params.options & GB_OFFSET_ANY ? std_params.x_offset : 0);
- dest.alpha =
- (std_params.options & GB_ALPHA_FIRST ? gs_image_alpha_first :
- std_params.options & GB_ALPHA_LAST ? gs_image_alpha_last :
- gs_image_alpha_none);
- code = composite_values(&dest, &source,
- dev->color_info.num_components, w, &cp);
- if (code < 0)
- break;
- if (std_params.data[0] == std_row) {
- /* Convert the row back to native representation. */
- /* (Otherwise, we had a direct pointer to device data.) */
- native_params.options =
- (GB_COLORS_NATIVE | GB_PACKING_CHUNKY | GB_RETURN_COPY |
- GB_OFFSET_0 | GB_RASTER_ALL | GB_ALIGN_STANDARD);
- native_params.data[0] = native_row;
- code = gx_get_bits_copy(target, 0, w, 1, &native_params,
- &std_params, std_row,
- 0 /* raster is irrelevant */ );
- if (code < 0)
- break;
- code = (*dev_proc(target, copy_color))
- (target, native_row, 0, 0 /* raster is irrelevant */ ,
- gx_no_bitmap_id, x, yi, w, 1);
- if (code < 0)
- break;
- }
- }
- out:gs_free_object(dev->memory, native_row, "dca_fill_rectangle(native)");
- gs_free_object(dev->memory, std_row, "dca_fill_rectangle(std)");
- return code;
-}
-
-static int
-dca_copy_mono(gx_device * dev, const byte * data,
- int dx, int raster, gx_bitmap_id id, int x, int y, int w, int h,
- gx_color_index zero, gx_color_index one)
-{
-/****** TEMPORARY ******/
- return gx_default_copy_mono(dev, data, dx, raster, id, x, y, w, h,
- zero, one);
-}
-
-static int
-dca_copy_color(gx_device * dev, const byte * data,
- int dx, int raster, gx_bitmap_id id,
- int x, int y, int w, int h)
-{
-/****** TEMPORARY ******/
- return gx_default_copy_color(dev, data, dx, raster, id, x, y, w, h);
-}
-
-static int
-dca_copy_alpha(gx_device * dev, const byte * data, int data_x,
- int raster, gx_bitmap_id id, int x, int y, int width, int height,
- gx_color_index color, int depth)
-{
-/****** TEMPORARY ******/
- return gx_default_copy_alpha(dev, data, data_x, raster, id, x, y,
- width, height, color, depth);
-}
-
-/*
- * Composite two arrays of (premultiplied) pixel values.
- * See gsdpnext.h for the specification.
- *
- * The current implementation is simple but inefficient. We'll speed it up
- * later if necessary.
- */
-int
-composite_values(const pixel_row_t * pdest, const const_pixel_row_t * psource,
- int values_per_pixel, uint num_pixels, const gs_composite_params_t * pcp)
-{
- int dest_bpv = pdest->bits_per_value;
- int source_bpv = psource->bits_per_value;
-
- /*
- * source_alpha_j gives the source component index for the alpha value,
- * if the source has alpha.
- */
- int source_alpha_j =
- (psource->alpha == gs_image_alpha_last ? values_per_pixel :
- psource->alpha == gs_image_alpha_first ? 0 : -1);
-
- /* dest_alpha_j does the same for the destination. */
- int dest_alpha_j =
- (pdest->alpha == gs_image_alpha_last ? values_per_pixel :
- pdest->alpha == gs_image_alpha_first ? 0 : -1);
-
- /* dest_vpp is the number of stored destination values. */
- int dest_vpp = values_per_pixel + (dest_alpha_j >= 0);
-
- /* source_vpp is the number of stored source values. */
- int source_vpp = values_per_pixel + (source_alpha_j >= 0);
-
- bool constant_colors = psource->data == 0;
- uint highlight_value = (1 << dest_bpv) - 1;
-
- const byte *sptr;
- int sbit;
- byte *dptr;
- int dbit;
- byte dbyte;
-
- {
- uint xbit = pdest->initial_x * dest_bpv * dest_vpp;
-
- dbit = xbit & 7;
- dptr = pdest->data + (xbit >> 3);
- }
- {
- uint xbit = psource->initial_x * source_bpv * source_vpp;
-
- sbit = xbit & 7;
- sptr = psource->data + (xbit >> 3);
- }
- {
- uint source_max = (1 << source_bpv) - 1;
- uint dest_max = (1 << dest_bpv) - 1;
-
- /*
- * We could save a little work by only setting up source_delta
- * and dest_delta if the operation is Dissolve.
- */
- float source_delta = pcp->delta * dest_max / source_max;
- float dest_delta = 1.0 - pcp->delta;
- uint source_alpha = pcp->source_alpha;
- uint dest_alpha = dest_max;
-
-#ifdef PREMULTIPLY_TOWARDS_WHITE
- uint source_bias = source_max - source_alpha;
- uint dest_bias = 0;
- uint result_bias = 0;
-
-#endif
- uint x;
-
- if (!pdest->alpha) {
- uint mask =
- (psource->alpha || source_alpha != source_max ?
- alpha_out_S_notD : alpha_out_notS_notD);
-
- if ((mask >> pcp->cop) & 1) {
- /*
- * The operation could produce non-unity alpha values, but
- * the destination can't store them. Return an error.
- */
- return_error(gs_error_rangecheck);
- }
- }
- /* Preload the output byte buffer if necessary. */
- dbyte = (dbit ? (byte)(*dptr & (0xff00 >> dbit)) : 0);
-
- for (x = 0; x < num_pixels; ++x) {
- int j;
- uint result_alpha = dest_alpha;
-
- /* Get destination alpha value. */
- if (dest_alpha_j >= 0) {
- int dabit = dbit + dest_bpv * dest_alpha_j;
- const byte *daptr = dptr + (dabit >> 3);
-
- if (sample_load16(&dest_alpha, daptr, dabit & 7, dest_bpv) < 0)
- return_error(gs_error_rangecheck);
-#ifdef PREMULTIPLY_TOWARDS_WHITE
- dest_bias = dest_max - dest_alpha;
-#endif
- }
- /* Get source alpha value. */
- if (source_alpha_j >= 0) {
- int sabit = sbit;
- const byte *saptr = sptr;
-
- if (source_alpha_j == 0) {
- sbit += (source_bpv);
- sptr += sbit >> 3;
- sbit &= 7;
- }
- else {
- sabit += (source_bpv * source_alpha_j);
- saptr += sabit >> 3;
- sabit &= 7;
- }
- if (sample_load16(&dest_alpha, saptr, sabit, source_bpv) < 0)
- return_error(gs_error_rangecheck);
-#ifdef PREMULTIPLY_TOWARDS_WHITE
- source_bias = source_max - source_alpha;
-#endif
- }
-/*
- * We are always multiplying a dest value by a source value to compute a
- * dest value, so the denominator is always source_max. (Dissolve is the
- * one exception.)
- */
-#define fr(v, a) ((v) * (a) / source_max)
-#define nfr(v, a, maxv) ((v) * (maxv - (a)) / source_max)
-
- /*
- * Iterate over the components of a single pixel.
- * j = 0 for alpha, 1 .. values_per_pixel for color
- * components, regardless of the actual storage order;
- * we arrange things so that sptr/sbit and dptr/dbit
- * always point to the right place.
- */
- for (j = 0; j <= values_per_pixel; ++j) {
- uint dest_v, source_v, result;
-
-#define set_clamped(r, v)\
- BEGIN if ( (r = (v)) > dest_max ) r = dest_max; END
-
- if (j == 0) {
- source_v = source_alpha;
- dest_v = dest_alpha;
- } else {
- if (constant_colors)
- source_v = pcp->source_values[j - 1];
- else {
- if (sample_load16(&source_v, sptr, sbit, source_bpv) < 0)
- return_error(gs_error_rangecheck);
- sbit += (source_bpv);
- sptr += sbit >> 3;
- sbit &= 7;
- }
- if (sample_load16(&dest_v, dptr, dbit, dest_bpv) < 0)
- return_error(gs_error_rangecheck);
-#ifdef PREMULTIPLY_TOWARDS_WHITE
- source_v -= source_bias;
- dest_v -= dest_bias;
-#endif
- }
-
- switch (pcp->cop) {
- case composite_Clear:
- /*
- * The NeXT documentation doesn't say this, but the CLEAR
- * operation sets not only alpha but also all the color
- * values to 0.
- */
- result = 0;
- break;
- case composite_Copy:
- result = source_v;
- break;
- case composite_PlusD:
- /*
- * This is the only case where we have to worry about
- * clamping a possibly negative result.
- */
- result = source_v + dest_v;
- result = (result < dest_max ? 0 : result - dest_max);
- break;
- case composite_PlusL:
- set_clamped(result, source_v + dest_v);
- break;
- case composite_Sover:
- set_clamped(result, source_v + nfr(dest_v, source_alpha, source_max));
- break;
- case composite_Dover:
- set_clamped(result, nfr(source_v, dest_alpha, dest_max) + dest_v);
- break;
- case composite_Sin:
- result = fr(source_v, dest_alpha);
- break;
- case composite_Din:
- result = fr(dest_v, source_alpha);
- break;
- case composite_Sout:
- result = nfr(source_v, dest_alpha, dest_max);
- break;
- case composite_Dout:
- result = nfr(dest_v, source_alpha, source_max);
- break;
- case composite_Satop:
- set_clamped(result, fr(source_v, dest_alpha) +
- nfr(dest_v, source_alpha, source_max));
- break;
- case composite_Datop:
- set_clamped(result, nfr(source_v, dest_alpha, dest_max) +
- fr(dest_v, source_alpha));
- break;
- case composite_Xor:
- set_clamped(result, nfr(source_v, dest_alpha, dest_max) +
- nfr(dest_v, source_alpha, source_max));
- break;
- case composite_Highlight:
- /*
- * Bizarre but true: this operation converts white and
- * light gray into each other, and leaves all other values
- * unchanged. We only implement it properly for gray-scale
- * devices.
- */
- if (j != 0 && !((source_v ^ highlight_value) & ~1))
- result = source_v ^ 1;
- else
- result = source_v;
- break;
- case composite_Dissolve:
- /*
- * In this case, and only this case, we need to worry about
- * source and dest having different bpv values. For the
- * moment, we wimp out and do everything in floating point.
- */
- result = (uint) (source_v * source_delta + dest_v * dest_delta);
- break;
- default:
- return_error(gs_error_rangecheck);
- }
- /*
- * Store the result. We don't have to worry about
- * destinations that don't store alpha, because we don't
- * even compute an alpha value in that case.
- */
-#ifdef PREMULTIPLY_TOWARDS_WHITE
- if (j == 0) {
- result_alpha = result;
- result_bias = dest_max - result_alpha;
- if (dest_alpha_j != 0)
- continue;
- } else {
- result += result_bias;
- }
-#else
- if (j == 0 && dest_alpha_j != 0) {
- result_alpha = result;
- continue;
- }
-#endif
- if (sample_store_next16(result, &dptr, &dbit, dest_bpv, &dbyte) < 0)
- return_error(gs_error_rangecheck);
- }
- /* Skip a trailing source alpha value. */
- if (source_alpha_j > 0) {
- sbit += (source_bpv);
- sptr += sbit >> 3;
- sbit &= 7;
- }
- /* Store a trailing destination alpha value. */
- if (dest_alpha_j > 0)
- if (sample_store_next16(result_alpha, &dptr, &dbit, dest_bpv, &dbyte) < 0)
- return_error(gs_error_rangecheck);
- }
- /* Store any partial output byte. */
- sample_store_flush(dptr, dbit, dbyte);
- }
- return 0;
-}
diff --git a/base/gsalphac.h b/base/gsalphac.h
deleted file mode 100644
index f1c67801..00000000
--- a/base/gsalphac.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
- 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.
-
- Refer to licensing information at http://www.artifex.com or contact
- Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
- CA 94945, U.S.A., +1(415)492-9861, for further information.
-*/
-
-
-/* Alpha-compositing interface */
-
-#ifndef gsalphac_INCLUDED
-# define gsalphac_INCLUDED
-
-#include "std.h"
-#include "gscompt.h"
-
-/*
- * Define the compositing operations. These values must match the ones in
- * dpsNeXT.h.
- */
-typedef enum {
- composite_Clear = 0,
- composite_Copy,
- composite_Sover,
- composite_Sin,
- composite_Sout,
- composite_Satop,
- composite_Dover,
- composite_Din,
- composite_Dout,
- composite_Datop,
- composite_Xor,
- composite_PlusD,
- composite_PlusL,
-#define composite_last composite_PlusL
- composite_Highlight, /* (only for compositerect) */
-#define compositerect_last composite_Highlight
- composite_Dissolve /* (not for PostScript composite operators) */
-#define composite_op_last composite_Dissolve
-} gs_composite_op_t;
-
-/*
- * Define parameters for alpha-compositing.
- */
-typedef struct gs_composite_alpha_params_s {
- gs_composite_op_t op;
- float delta; /* only for Dissolve */
-} gs_composite_alpha_params_t;
-
-/* Create an alpha-compositing object. */
-int gs_create_composite_alpha(gs_composite_t ** ppcte,
- const gs_composite_alpha_params_t * params,
- gs_memory_t * mem);
-
-#endif /* gsalphac_INCLUDED */
diff --git a/base/gsargs.c b/base/gsargs.c
index 24e9ccec..5ea73698 100644
--- a/base/gsargs.c
+++ b/base/gsargs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsargs.h b/base/gsargs.h
index e82835cb..2f277001 100644
--- a/base/gsargs.h
+++ b/base/gsargs.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsbitcom.c b/base/gsbitcom.c
index 6c8c78fe..0d5856d0 100644
--- a/base/gsbitcom.c
+++ b/base/gsbitcom.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsbitmap.h b/base/gsbitmap.h
index 9120dc76..7e8f87cd 100644
--- a/base/gsbitmap.h
+++ b/base/gsbitmap.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsbitops.c b/base/gsbitops.c
index 4980671f..b3a59c27 100644
--- a/base/gsbitops.c
+++ b/base/gsbitops.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsbitops.h b/base/gsbitops.h
index aa38bcdf..6e1826a4 100644
--- a/base/gsbitops.h
+++ b/base/gsbitops.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsbittab.c b/base/gsbittab.c
index 932a54fa..3e171d3d 100644
--- a/base/gsbittab.c
+++ b/base/gsbittab.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsbittab.h b/base/gsbittab.h
index a100e91e..45b652c5 100644
--- a/base/gsbittab.h
+++ b/base/gsbittab.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsccode.h b/base/gsccode.h
index 56a2baf1..433818f0 100644
--- a/base/gsccode.h
+++ b/base/gsccode.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -20,6 +20,7 @@
# define gsccode_INCLUDED
#include "std.h"
+#include "stdint_.h"
#include "gstypes.h"
/*
@@ -27,9 +28,9 @@
* string, but because of composite fonts, character codes must be
* at least 32 bits.
*/
-typedef ulong gs_char;
+typedef uint64_t gs_char;
-#define GS_NO_CHAR ((gs_char)~0UL)
+#define GS_NO_CHAR ((gs_char)~((uint64_t)0))
/* Backward compatibility */
#define gs_no_char GS_NO_CHAR
@@ -74,15 +75,17 @@ typedef ulong gs_char;
* "name", not an integer), but should not make assumptions about whether
* GS_NO_GLYPH is less than or greater than gs_c_min_std_encoding_glyph.
*/
-typedef ulong gs_glyph;
+typedef uint64_t gs_glyph;
#define GS_NO_GLYPH ((gs_glyph)0x7fffffff)
-#if ARCH_SIZEOF_LONG > 4
+
+#if ARCH_SIZEOF_LONG_LONG > 4
# define GS_MIN_CID_GLYPH ((gs_glyph)0x80000000L)
#else
/* Avoid compiler warnings about signed/unsigned constants. */
# define GS_MIN_CID_GLYPH ((gs_glyph)~0x7fffffff)
#endif
+
#define GS_MIN_GLYPH_INDEX (GS_MIN_CID_GLYPH | (GS_MIN_CID_GLYPH >> 1))
#define GS_GLYPH_TAG (gs_glyph)(GS_MIN_CID_GLYPH | GS_MIN_GLYPH_INDEX)
#define GS_MAX_GLYPH max_ulong
diff --git a/base/gsccolor.h b/base/gsccolor.h
index d304dbeb..1bdef311 100644
--- a/base/gsccolor.h
+++ b/base/gsccolor.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscdef.c b/base/gscdef.c
index e2eb1c9d..2dcd6537 100644
--- a/base/gscdef.c
+++ b/base/gscdef.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscdefs.h b/base/gscdefs.h
index 5691c2e8..0ef78c02 100644
--- a/base/gscdefs.h
+++ b/base/gscdefs.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscdevn.c b/base/gscdevn.c
index 5a4187cb..07b20f4d 100644
--- a/base/gscdevn.c
+++ b/base/gscdevn.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -660,6 +660,8 @@ gx_check_process_names_DeviceN(gs_color_space * pcs, gs_gstate * pgs)
return SEP_PURE_CMYK;
if (num_rgb_process > 0 && num_cmyk_process == 0 && num_spots == 0)
return SEP_PURE_RGB;
+ if (num_spots > 0 && num_cmyk_process == 0 && num_rgb_process == 0)
+ return SEP_PURE_SPOT;
return SEP_MIX;
}
diff --git a/base/gscdevn.h b/base/gscdevn.h
index f2c23281..1a5603f5 100644
--- a/base/gscdevn.h
+++ b/base/gscdevn.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscedata.c b/base/gscedata.c
index 7d1740f4..e8deca00 100644
--- a/base/gscedata.c
+++ b/base/gscedata.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscedata.h b/base/gscedata.h
index ff8137f0..4f67aac1 100644
--- a/base/gscedata.h
+++ b/base/gscedata.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscencs.c b/base/gscencs.c
index f3961ac3..2b05289c 100644
--- a/base/gscencs.c
+++ b/base/gscencs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscencs.h b/base/gscencs.h
index 62e5e17f..6c0c4aad 100644
--- a/base/gscencs.h
+++ b/base/gscencs.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gschar.c b/base/gschar.c
index cd13e732..c01019d8 100644
--- a/base/gschar.c
+++ b/base/gschar.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gschar.h b/base/gschar.h
index b49d645b..a856860b 100644
--- a/base/gschar.h
+++ b/base/gschar.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gschar0.c b/base/gschar0.c
index 5af36b66..935d7c53 100644
--- a/base/gschar0.c
+++ b/base/gschar0.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -46,8 +46,8 @@ gs_stack_modal_fonts(gs_text_enum_t *pte)
cfont = cmfont->data.FDepVector[cmfont->data.Encoding[0]];
pte->fstack.items[fdepth].font = cfont;
pte->fstack.items[fdepth - 1].index = 0;
- if_debug2m('j', pte->memory, "[j]stacking depth=%d font=0x%lx\n",
- fdepth, (ulong) cfont);
+ if_debug2m('j', pte->memory, "[j]stacking depth=%d font="PRI_INTPTR"\n",
+ fdepth, (intptr_t)cfont);
}
pte->fstack.depth = fdepth;
return 0;
@@ -59,8 +59,8 @@ gs_type0_init_fstack(gs_text_enum_t *pte, gs_font * pfont)
{
if (!(pte->text.operation & (TEXT_FROM_STRING | TEXT_FROM_BYTES)))
return_error(gs_error_invalidfont);
- if_debug1m('j', pte->memory, "[j]stacking depth=0 font=0x%lx\n",
- (ulong) pfont);
+ if_debug1m('j', pte->memory, "[j]stacking depth=0 font="PRI_INTPTR"\n",
+ (intptr_t)pfont);
pte->fstack.depth = 0;
pte->fstack.items[0].font = pfont;
pte->fstack.items[0].index = 0;
@@ -147,8 +147,8 @@ gs_type0_next_char_glyph(gs_text_enum_t *pte, gs_char *pchr, gs_glyph *pglyph)
p += 2;
if_debug1m('j', pte->memory, "[j]from root: escape %d\n", fidx);
rdown:select_descendant(pfont, pdata, fidx, idepth);
- if_debug2m('j', pte->memory, "[j]... new depth=%d, new font=0x%lx\n",
- idepth, (ulong) pfont);
+ if_debug2m('j', pte->memory, "[j]... new depth=%d, new font="PRI_INTPTR"\n",
+ idepth, (intptr_t)pfont);
continue;
case fmap_double_escape:
if (chr != root_esc_char(pte))
@@ -222,8 +222,8 @@ gs_type0_next_char_glyph(gs_text_enum_t *pte, gs_char *pchr, gs_glyph *pglyph)
fdepth--;
do {
select_descendant(pfont, pdata, fidx, fdepth);
- if_debug3m('j', pte->memory, "[j]down from modal: new depth=%d, index=%d, new font=0x%lx\n",
- fdepth, fidx, (ulong) pfont);
+ if_debug3m('j', pte->memory, "[j]down from modal: new depth=%d, index=%d, new font="PRI_INTPTR"\n",
+ fdepth, fidx, (intptr_t)pfont);
if (pfont->FontType != ft_composite)
break;
pdata = &pfont0->data;
@@ -402,8 +402,8 @@ gs_type0_next_char_glyph(gs_text_enum_t *pte, gs_char *pchr, gs_glyph *pglyph)
return code;
pte->cmap_code = code; /* hack for widthshow */
p = str + mindex;
- if_debug3m('J', pte->memory, "[J]CMap returns %d, chr=0x%lx, glyph=0x%lx\n",
- code, (ulong) chr, (ulong) glyph);
+ if_debug3m('J', pte->memory, "[J]CMap returns %d, chr=0x%lx, glyph="PRI_INTPTR"\n",
+ code, (ulong)chr, (intptr_t)glyph);
if (code == 0) {
if (glyph == GS_NO_GLYPH) {
glyph = GS_MIN_CID_GLYPH;
@@ -422,8 +422,8 @@ gs_type0_next_char_glyph(gs_text_enum_t *pte, gs_char *pchr, gs_glyph *pglyph)
}
select_descendant(pfont, pdata, fidx, fdepth);
- if_debug2m('J', pte->memory, "... new depth=%d, new font=0x%lx\n",
- fdepth, (ulong) pfont);
+ if_debug2m('J', pte->memory, "... new depth=%d, new font="PRI_INTPTR"\n",
+ fdepth, (intptr_t)pfont);
}
done:
/* FontBBox may be used as metrics2 with WMode=1 :
@@ -462,8 +462,8 @@ done:
if (str == pte->text.data.bytes)
pte->index = p - str;
pte->fstack.depth = fdepth;
- if_debug4m('J', pte->memory, "[J]depth=%d font=0x%lx index=%d changed=%d\n",
- fdepth, (ulong) pte->fstack.items[fdepth].font,
+ if_debug4m('J', pte->memory, "[J]depth=%d font="PRI_INTPTR" index=%d changed=%d\n",
+ fdepth, (intptr_t)pte->fstack.items[fdepth].font,
pte->fstack.items[fdepth].index, changed);
return changed;
}
diff --git a/base/gscicach.c b/base/gscicach.c
index 10c4b82f..b524feb1 100644
--- a/base/gscicach.c
+++ b/base/gscicach.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscicach.h b/base/gscicach.h
index 580e4445..de3f926f 100644
--- a/base/gscicach.h
+++ b/base/gscicach.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscie.c b/base/gscie.c
index 3d637f96..f7a45765 100644
--- a/base/gscie.c
+++ b/base/gscie.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -98,8 +98,8 @@ static void
cache_set_linear(cie_cache_floats *pcf)
{
if (pcf->params.is_identity) {
- if_debug1('c', "[c]is_linear(0x%lx) = true (is_identity)\n",
- (ulong)pcf);
+ if_debug1('c', "[c]is_linear("PRI_INTPTR") = true (is_identity)\n",
+ (intptr_t)pcf);
pcf->params.linear.is_linear = true;
pcf->params.linear.origin = 0;
pcf->params.linear.scale = 1;
@@ -108,14 +108,14 @@ cache_set_linear(cie_cache_floats *pcf)
fabs(pcf->params.linear.scale - 1) < 0.00001)
pcf->params.is_identity = true;
if_debug4('c',
- "[c]is_linear(0x%lx) = true, origin = %g, scale = %g%s\n",
- (ulong)pcf, pcf->params.linear.origin,
+ "[c]is_linear("PRI_INTPTR") = true, origin = %g, scale = %g%s\n",
+ (intptr_t)pcf, pcf->params.linear.origin,
pcf->params.linear.scale,
(pcf->params.is_identity ? " (=> is_identity)" : ""));
}
#ifdef DEBUG
else
- if_debug1('c', "[c]linear(0x%lx) = false\n", (ulong)pcf);
+ if_debug1('c', "[c]linear("PRI_INTPTR") = false\n", (intptr_t)pcf);
#endif
}
static void
@@ -871,8 +871,8 @@ gs_cie_cache_init(cie_cache_params * pcache, gs_sample_loop_params_t * pslp,
* Genoa test file 050-01.ps.
*/
pcache->factor = (any_abs(delta) < 1e-30 ? 1.0 : N / R);
- if_debug4('c', "[c]cache %s 0x%lx base=%g, factor=%g\n",
- (const char *)cname, (ulong) pcache,
+ if_debug4('c', "[c]cache %s "PRI_INTPTR" base=%g, factor=%g\n",
+ (const char *)cname, (intptr_t)pcache,
pcache->base, pcache->factor);
pslp->A = A;
pslp->B = B;
diff --git a/base/gscie.h b/base/gscie.h
index c5a007b0..9c022df2 100644
--- a/base/gscie.h
+++ b/base/gscie.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsciemap.c b/base/gsciemap.c
index b09d751f..0374ca0e 100644
--- a/base/gsciemap.c
+++ b/base/gsciemap.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -84,8 +84,8 @@ static void
cie_lookup_map3(cie_cached_vector3 * pvec,
const gx_cie_vector_cache3_t * pc, const char *cname)
{
- if_debug5('c', "[c]lookup %s 0x%lx [%g %g %g]\n",
- (const char *)cname, (ulong) pc,
+ if_debug5('c', "[c]lookup %s "PRI_INTPTR" [%g %g %g]\n",
+ (const char *)cname, (intptr_t)pc,
cie_cached2float(pvec->u), cie_cached2float(pvec->v),
cie_cached2float(pvec->w));
cie_lookup_mult3(pvec, pc);
diff --git a/base/gscindex.h b/base/gscindex.h
index b921d5dc..c45e168e 100644
--- a/base/gscindex.h
+++ b/base/gscindex.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsclipsr.c b/base/gsclipsr.c
index 587ee0f5..a5d2e9bb 100644
--- a/base/gsclipsr.c
+++ b/base/gsclipsr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsclipsr.h b/base/gsclipsr.h
index 195a65a6..88daa189 100644
--- a/base/gsclipsr.h
+++ b/base/gsclipsr.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscms.h b/base/gscms.h
index 127b9ef7..dfface69 100644
--- a/base/gscms.h
+++ b/base/gscms.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -28,6 +28,10 @@
#define ICC_MAX_CHANNELS 15
#define NUM_DEVICE_PROFILES 4
#define NUM_SOURCE_PROFILES 3
+#define GS_DEFAULT_DEVICE_PROFILE 0
+#define GS_GRAPHIC_DEVICE_PROFILE 1
+#define GS_IMAGE_DEVICE_PROFILE 2
+#define GS_TEXT_DEVICE_PROFILE 3
#define AB_NEUTRAL_8 5
#define AB_NEUTRAL_16 5
diff --git a/base/gscolor.c b/base/gscolor.c
index 81effa94..477b7648 100644
--- a/base/gscolor.c
+++ b/base/gscolor.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscolor.h b/base/gscolor.h
index 64f45064..a330a8e3 100644
--- a/base/gscolor.h
+++ b/base/gscolor.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscolor1.c b/base/gscolor1.c
index 37c5840f..9ba3da02 100644
--- a/base/gscolor1.c
+++ b/base/gscolor1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscolor1.h b/base/gscolor1.h
index 7099e547..573d4c82 100644
--- a/base/gscolor1.h
+++ b/base/gscolor1.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscolor2.c b/base/gscolor2.c
index 146e4c79..08bdfc27 100644
--- a/base/gscolor2.c
+++ b/base/gscolor2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscolor2.h b/base/gscolor2.h
index f4e9905c..939630e7 100644
--- a/base/gscolor2.h
+++ b/base/gscolor2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscolor3.c b/base/gscolor3.c
index 47b22f0b..f63161c3 100644
--- a/base/gscolor3.c
+++ b/base/gscolor3.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscolor3.h b/base/gscolor3.h
index 57614a04..116fe1be 100644
--- a/base/gscolor3.h
+++ b/base/gscolor3.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscompt.h b/base/gscompt.h
index 7975ffab..191708f1 100644
--- a/base/gscompt.h
+++ b/base/gscompt.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscoord.c b/base/gscoord.c
index 72c936de..e5e8cc82 100644
--- a/base/gscoord.c
+++ b/base/gscoord.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscoord.h b/base/gscoord.h
index 8c22e18c..df8b0d3d 100644
--- a/base/gscoord.h
+++ b/base/gscoord.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscparam.c b/base/gscparam.c
index bc1c43ab..6fc65582 100644
--- a/base/gscparam.c
+++ b/base/gscparam.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -526,6 +526,7 @@ c_param_read_typed(gs_param_list * plist, gs_param_name pkey,
fa.data = (float *)pparam->alternate_typed_data;
pvalue->value.fa = fa;
+ pvalue->type = req_type;
return 0;
}
return code;
diff --git a/base/gscpixel.c b/base/gscpixel.c
index 37904406..345a191a 100644
--- a/base/gscpixel.c
+++ b/base/gscpixel.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscpixel.h b/base/gscpixel.h
index dff306bc..7edc14ca 100644
--- a/base/gscpixel.h
+++ b/base/gscpixel.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscpm.h b/base/gscpm.h
index c589552b..6e9bff0a 100644
--- a/base/gscpm.h
+++ b/base/gscpm.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscrd.c b/base/gscrd.c
index 92fea7ce..5ab156cc 100644
--- a/base/gscrd.c
+++ b/base/gscrd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscrd.h b/base/gscrd.h
index 4bdf2ccb..b8ba96bc 100644
--- a/base/gscrd.h
+++ b/base/gscrd.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscrdp.c b/base/gscrdp.c
index 3de28773..119558f5 100644
--- a/base/gscrdp.c
+++ b/base/gscrdp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscrdp.h b/base/gscrdp.h
index f443ca95..549e6f08 100644
--- a/base/gscrdp.h
+++ b/base/gscrdp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscrypt1.c b/base/gscrypt1.c
index 4376c502..2b464700 100644
--- a/base/gscrypt1.c
+++ b/base/gscrypt1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscrypt1.h b/base/gscrypt1.h
index d79c7295..6072239e 100644
--- a/base/gscrypt1.h
+++ b/base/gscrypt1.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscscie.c b/base/gscscie.c
index bc83a4b6..76824cac 100644
--- a/base/gscscie.c
+++ b/base/gscscie.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscsel.h b/base/gscsel.h
index 3babf8d3..1642ffd7 100644
--- a/base/gscsel.h
+++ b/base/gscsel.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscsepr.c b/base/gscsepr.c
index abde8590..5afa4dea 100644
--- a/base/gscsepr.c
+++ b/base/gscsepr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -170,11 +170,9 @@ gx_install_Separation(gs_color_space * pcs, gs_gstate * pgs)
* Give the device an opportunity to capture equivalent colors for any
* spot colors which might be present in the color space.
*/
- if (code >= 0) {
- if (dev_proc(pgs->device, update_spot_equivalent_colors))
- code = dev_proc(pgs->device, update_spot_equivalent_colors)
- (pgs->device, pgs);
- }
+ if (dev_proc(pgs->device, update_spot_equivalent_colors))
+ code = dev_proc(pgs->device, update_spot_equivalent_colors)
+ (pgs->device, pgs);
}
return code;
}
diff --git a/base/gscsepr.h b/base/gscsepr.h
index a9eba04d..790443be 100644
--- a/base/gscsepr.h
+++ b/base/gscsepr.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscspace.c b/base/gscspace.c
index 2538c827..e847b383 100644
--- a/base/gscspace.c
+++ b/base/gscspace.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -98,9 +98,12 @@ gs_cspace_final(const gs_memory_t *cmem, void *vptr)
gs_color_space *pcs = (gs_color_space *)vptr;
(void)cmem; /* unused */
+ if (pcs->interpreter_free_cspace_proc != NULL) {
+ (*pcs->interpreter_free_cspace_proc) ((gs_memory_t *)cmem, pcs);
+ }
if (pcs->type->final)
pcs->type->final(pcs);
- if_debug2m('c', cmem, "[c]cspace final %p %d\n", pcs, (int)pcs->id);
+ if_debug2m('c', cmem, "[c]cspace final "PRI_INTPTR" %d\n", (intptr_t)pcs, (int)pcs->id);
rc_decrement_only_cs(pcs->base_space, "gs_cspace_final");
if (pcs->params.device_n.devn_process_space != NULL)
rc_decrement_only_cs(pcs->params.device_n.devn_process_space, "gs_cspace_final");
@@ -118,12 +121,14 @@ gs_cspace_alloc_with_id(gs_memory_t *mem, ulong id,
rc_alloc_struct_1(pcs, gs_color_space, &st_color_space, mem, return NULL,
"gs_cspace_alloc_with_id");
- if_debug3m('c', mem, "[c]cspace alloc %p %s %d\n",
- pcs, pcstype->stype->sname, pcstype->index);
+ if_debug3m('c', mem, "[c]cspace alloc "PRI_INTPTR" %s %d\n",
+ (intptr_t)pcs, pcstype->stype->sname, pcstype->index);
pcs->type = pcstype;
pcs->id = id;
pcs->base_space = NULL;
pcs->pclient_color_space_data = NULL;
+ pcs->interpreter_data = NULL;
+ pcs->interpreter_free_cspace_proc = NULL;
pcs->cmm_icc_profile_data = NULL;
pcs->icc_equivalent = NULL;
pcs->params.device_n.devn_process_space = NULL;
@@ -329,8 +334,11 @@ gx_install_DeviceGray(gs_color_space * pcs, gs_gstate * pgs)
return 0;
/* If we haven't initialised the iccmanager, do it now. */
- if (pgs->icc_manager->default_gray == NULL)
- gsicc_init_iccmanager(pgs);
+ if (pgs->icc_manager->default_gray == NULL) {
+ int code = gsicc_init_iccmanager(pgs);
+ if (code < 0)
+ return code;
+ }
/* pcs takes a reference to the default_gray profile data */
pcs->cmm_icc_profile_data = pgs->icc_manager->default_gray;
@@ -487,6 +495,35 @@ gx_set_no_overprint(gs_gstate* pgs)
return gs_gstate_update_overprint(pgs, &params);
}
+/* Retain all the spot colorants and not the process
+ colorants. This occurs if we have a process color
+ mismatch between the source and the destination but
+ the output device supports spot colors */
+int
+gx_set_spot_only_overprint(gs_gstate* pgs)
+{
+ gs_overprint_params_t params = { 0 };
+ gx_device* dev = pgs->device;
+ gx_color_index drawn_comps = 0;
+ gx_device_color_info* pcinfo = (dev == 0 ? 0 : &dev->color_info);
+
+ if (dev) {
+ /* check if color model behavior must be determined */
+ if (pcinfo->opmode == GX_CINFO_OPMODE_UNKNOWN)
+ drawn_comps = check_cmyk_color_model_comps(dev);
+ else
+ drawn_comps = pcinfo->process_comps;
+ }
+
+ params.retain_any_comps = true;
+ params.op_state = OP_STATE_NONE;
+ params.is_fill_color = pgs->is_fill_color;
+ params.effective_opm = pgs->color[0].effective_opm = 0;
+ params.drawn_comps = drawn_comps;
+
+ return gs_gstate_update_overprint(pgs, &params);
+}
+
/*
* Push an overprint compositor onto the current device indicating that,
* at most, the spot color parameters are to be preserved.
@@ -643,7 +680,9 @@ gx_set_overprint_DeviceCMYK(const gs_color_space * pcs, gs_gstate * pgs)
simulation ICC profile that is different than the source profile,
overprinting is no longer previewed. We follow the same logic here.
If the source and destination ICC profiles do not match, then there is
- effectively no overprinting enabled. This is bug 692433 */
+ effectively no overprinting enabled. This is bug 692433. However,
+ even with the mismatch, if the device supports spot colorants, those
+ colors should be maintained. This is bug 702725. */
int gx_set_overprint_cmyk(const gs_color_space * pcs, gs_gstate * pgs)
{
gx_device * dev = pgs->device;
@@ -677,7 +716,7 @@ int gx_set_overprint_cmyk(const gs_color_space * pcs, gs_gstate * pgs)
}
if_debug1m(gs_debug_flag_overprint, pgs->memory,
- "[overprint] gx_set_overprint_cmyk. drawn_comps = 0x%x\n", drawn_comps);
+ "[overprint] gx_set_overprint_cmyk. drawn_comps = 0x%x\n", (uint)drawn_comps);
if (drawn_comps == 0)
return gx_spot_colors_set_overprint(pcs, pgs);
@@ -760,7 +799,7 @@ int gx_set_overprint_cmyk(const gs_color_space * pcs, gs_gstate * pgs)
if_debug2m(gs_debug_flag_overprint, pgs->memory,
"[overprint] gx_set_overprint_cmyk. retain_any_comps = %d, drawn_comps = 0x%x\n",
- params.retain_any_comps, params.drawn_comps);
+ params.retain_any_comps, (uint)(params.drawn_comps));
/* We are in CMYK, the profiles match and overprint is true. Set effective
overprint mode to overprint mode but only if effective has not already
diff --git a/base/gscspace.h b/base/gscspace.h
index b4ef3e07..0c07ccef 100644
--- a/base/gscspace.h
+++ b/base/gscspace.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -218,10 +218,10 @@ typedef ulong gs_separation_name; /* BOGUS */
* names.
*/
typedef int (gs_callback_func_get_colorname_string)
- (const gs_memory_t *mem, gs_separation_name colorname, unsigned char **ppstr, unsigned int *plen);
+ (gs_gstate *pgs, gs_separation_name colorname, unsigned char **ppstr, unsigned int *plen);
typedef enum { SEP_NONE, SEP_ALL, SEP_OTHER } separation_type;
-typedef enum { SEP_ENUM, SEP_MIX, SEP_PURE_RGB, SEP_PURE_CMYK } separation_colors;
+typedef enum { SEP_ENUM, SEP_MIX, SEP_PURE_RGB, SEP_PURE_CMYK, SEP_PURE_SPOT} separation_colors;
typedef struct gs_separation_params_s {
gs_memory_t *mem;
@@ -290,6 +290,8 @@ typedef struct gs_pattern_params_s {
#define cs_DeviceRGB_id 3
#define cs_DeviceCMYK_id 4
+typedef void (*gs_cspace_free_proc_t) (gs_memory_t * mem, void *pcs);
+
/*
* The colorspace object. For pattern and indexed colorspaces, the
* base_space refers to the underlying colorspace. For separation,
@@ -304,6 +306,8 @@ struct gs_color_space_s {
gs_color_space *base_space;
gs_color_space *icc_equivalent;
client_color_space_data_t *pclient_color_space_data;
+ void *interpreter_data;
+ gs_cspace_free_proc_t interpreter_free_cspace_proc;
cmm_profile_t *cmm_icc_profile_data;
union {
gs_device_pixel_params pixel;
@@ -370,6 +374,9 @@ void gs_color_space_restrict_color(gs_client_color *, const gs_color_space *);
/* Communicate to overprint compositor that overprint is not to be used */
int gx_set_no_overprint(gs_gstate* pgs);
+/* Communicate to overprint compositor that only spot colors are to be preserved */
+int gx_set_spot_only_overprint(gs_gstate* pgs);
+
/*
* Get the base space of an Indexed or uncolored Pattern color space, or the
* alternate space of a Separation or DeviceN space. Return NULL if the
diff --git a/base/gscssub.c b/base/gscssub.c
index ca2b7ed5..7891a4e3 100644
--- a/base/gscssub.c
+++ b/base/gscssub.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gscssub.h b/base/gscssub.h
index fe426286..0835c00c 100644
--- a/base/gscssub.h
+++ b/base/gscssub.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsdcolor.h b/base/gsdcolor.h
index 857ba735..778da76b 100644
--- a/base/gsdcolor.h
+++ b/base/gsdcolor.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsdevice.c b/base/gsdevice.c
index 6e3ce83f..ac78af93 100644
--- a/base/gsdevice.c
+++ b/base/gsdevice.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -417,6 +417,11 @@ gs_copydevice2(gx_device ** pnew_dev, const gx_device * dev, bool keep_open,
*/
new_dev->is_open = dev->is_open && keep_open;
fill_dev_proc(new_dev, finish_copydevice, gx_default_finish_copydevice);
+ /* We really want to be able to interrogate the device for capabilities
+ * and/or preferences right from when it is created, so set dev_spec_op
+ * now (if not already set).
+ */
+ fill_dev_proc(new_dev, dev_spec_op, gx_default_dev_spec_op);
code = dev_proc(new_dev, finish_copydevice)(new_dev, dev);
if (code < 0) {
gs_free_object(mem, new_dev, "gs_copydevice(device)");
@@ -1180,7 +1185,7 @@ int gx_device_delete_output_file(const gx_device * dev, const char *fname)
parsed.len = strlen(parsed.fname);
}
if (parsed.iodev)
- code = parsed.iodev->procs.delete_file((gx_io_device *)(&parsed.iodev), (const char *)parsed.fname);
+ code = parsed.iodev->procs.delete_file((gx_io_device *)(parsed.iodev), (const char *)parsed.fname);
else
code = gs_note_error(gs_error_invalidfileaccess);
@@ -1346,3 +1351,33 @@ bool gx_color_info_equal(const gx_device_color_info * p1, const gx_device_color_
return false;
return true;
}
+
+int gx_callout(gx_device *dev, int id, int size, void *data)
+{
+ return gs_lib_ctx_callout(dev->memory, dev->dname,
+ id, size, data);
+}
+
+/* compare two space_params, we can't do this with memcmp since there is padding in the structure */
+int
+gdev_space_params_cmp(const gdev_space_params sp1,
+ const gdev_space_params sp2) {
+ if (sp1.MaxBitmap != sp2.MaxBitmap)
+ return(1);
+ if (sp1.BufferSpace != sp2.BufferSpace)
+ return(1);
+ if (sp1.band.BandWidth != sp2.band.BandWidth)
+ return(1);
+ if (sp1.band.BandHeight != sp2.band.BandHeight)
+ return(1);
+ if (sp1.band.BandBufferSpace != sp2.band.BandBufferSpace)
+ return(1);
+ if (sp1.band.tile_cache_size != sp2.band.tile_cache_size)
+ return(1);
+ if (sp1.params_are_read_only != sp2.params_are_read_only)
+ return(1);
+ if (sp1.banding_type != sp2.banding_type)
+ return(1);
+
+ return(0);
+}
diff --git a/base/gsdevice.h b/base/gsdevice.h
index 27bbf8a6..35f1e38c 100644
--- a/base/gsdevice.h
+++ b/base/gsdevice.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsdevmem.c b/base/gsdevmem.c
index 07e5a6b0..78443bfd 100644
--- a/base/gsdevmem.c
+++ b/base/gsdevmem.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsdll.h b/base/gsdll.h
index 79cbd580..8f0137cb 100644
--- a/base/gsdll.h
+++ b/base/gsdll.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsdllwin.h b/base/gsdllwin.h
index a3bdb0c1..f04dad46 100644
--- a/base/gsdllwin.h
+++ b/base/gsdllwin.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsdparam.c b/base/gsdparam.c
index 70a2305b..a07a7c33 100644
--- a/base/gsdparam.c
+++ b/base/gsdparam.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -216,16 +216,16 @@ int gx_default_get_param(gx_device *dev, char *Param, void *list)
return param_write_bool(plist, ".LockSafetyParams", &dev->LockSafetyParams);
}
if (strcmp(Param, "MaxPatternBitmap") == 0) {
- return param_write_int(plist, "MaxPatternBitmap", &dev->MaxPatternBitmap);
+ return param_write_size_t(plist, "MaxPatternBitmap", &dev->MaxPatternBitmap);
}
if (strcmp(Param, "PageUsesTransparency") == 0) {
return param_write_bool(plist, "PageUsesTransparency", &dev->page_uses_transparency);
}
if (strcmp(Param, "MaxBitmap") == 0) {
- return param_write_long(plist, "MaxBitmap", &(dev->space_params.MaxBitmap));
+ return param_write_size_t(plist, "MaxBitmap", &(dev->space_params.MaxBitmap));
}
if (strcmp(Param, "BandBufferSpace") == 0) {
- return param_write_long(plist, "BandBufferSpace", &dev->space_params.band.BandBufferSpace);
+ return param_write_size_t(plist, "BandBufferSpace", &dev->space_params.band.BandBufferSpace);
}
if (strcmp(Param, "BandHeight") == 0) {
return param_write_int(plist, "BandHeight", &dev->space_params.band.BandHeight);
@@ -234,7 +234,7 @@ int gx_default_get_param(gx_device *dev, char *Param, void *list)
return param_write_int(plist, "BandWidth", &dev->space_params.band.BandWidth);
}
if (strcmp(Param, "BufferSpace") == 0) {
- return param_write_long(plist, "BufferSpace", &dev->space_params.BufferSpace);
+ return param_write_size_t(plist, "BufferSpace", &dev->space_params.BufferSpace);
}
if (strcmp(Param, "InterpolateControl") == 0) {
int interpolate_control = dev->interpolate_control;
@@ -719,13 +719,13 @@ gx_default_get_params(gx_device * dev, gs_param_list * plist)
(code = param_write_bool(plist, "AntidropoutDownscaler",
&dev->color_info.use_antidropout_downscaler)) < 0 ||
(code = param_write_bool(plist, ".LockSafetyParams", &dev->LockSafetyParams)) < 0 ||
- (code = param_write_int(plist, "MaxPatternBitmap", &dev->MaxPatternBitmap)) < 0 ||
+ (code = param_write_size_t(plist, "MaxPatternBitmap", &dev->MaxPatternBitmap)) < 0 ||
(code = param_write_bool(plist, "PageUsesTransparency", &dev->page_uses_transparency)) < 0 ||
- (code = param_write_long(plist, "MaxBitmap", &(dev->space_params.MaxBitmap))) < 0 ||
- (code = param_write_long(plist, "BandBufferSpace", &dev->space_params.band.BandBufferSpace)) < 0 ||
+ (code = param_write_size_t(plist, "MaxBitmap", &(dev->space_params.MaxBitmap))) < 0 ||
+ (code = param_write_size_t(plist, "BandBufferSpace", &dev->space_params.band.BandBufferSpace)) < 0 ||
(code = param_write_int(plist, "BandHeight", &dev->space_params.band.BandHeight)) < 0 ||
(code = param_write_int(plist, "BandWidth", &dev->space_params.band.BandWidth)) < 0 ||
- (code = param_write_long(plist, "BufferSpace", &dev->space_params.BufferSpace)) < 0 ||
+ (code = param_write_size_t(plist, "BufferSpace", &dev->space_params.BufferSpace)) < 0 ||
(code = param_write_int(plist, "InterpolateControl", &dev->interpolate_control)) < 0
)
return code;
@@ -754,7 +754,7 @@ gx_default_get_params(gx_device * dev, gs_param_list * plist)
}
else
param_string_from_string(pagelist, null_str);
- if ((code = param_write_name(plist, "PageList", &pagelist)) < 0)
+ if ((code = param_write_string(plist, "PageList", &pagelist)) < 0)
return code;
temp_bool = dev->ObjectFilter & FILTERIMAGE;
@@ -1406,7 +1406,7 @@ gx_default_put_params(gx_device * dev, gs_param_list * plist)
long ColorValues = (depth >= 32 ? -1 : 1L << depth);
int tab = dev->color_info.anti_alias.text_bits;
int gab = dev->color_info.anti_alias.graphics_bits;
- int mpbm = dev->MaxPatternBitmap;
+ size_t mpbm = dev->MaxPatternBitmap;
int ic = dev->interpolate_control;
bool page_uses_transparency = dev->page_uses_transparency;
gdev_space_params sp = dev->space_params;
@@ -1770,7 +1770,7 @@ nce:
ecode = code;
if ((code = param_read_bool(plist, "AntidropoutDownscaler", &use_antidropout)) < 0)
ecode = code;
- if ((code = param_read_int(plist, "MaxPatternBitmap", &mpbm)) < 0)
+ if ((code = param_read_size_t(plist, "MaxPatternBitmap", &mpbm)) < 0)
ecode = code;
if ((code = param_read_int(plist, "InterpolateControl", &ic)) < 0)
ecode = code;
@@ -1779,7 +1779,7 @@ nce:
ecode = code;
param_signal_error(plist, param_name, ecode);
}
- if ((code = param_read_long(plist, "MaxBitmap", &sp.MaxBitmap)) < 0)
+ if ((code = param_read_size_t(plist, "MaxBitmap", &sp.MaxBitmap)) < 0)
ecode = code;
#define CHECK_PARAM_CASES(member, bad, label)\
@@ -1796,7 +1796,7 @@ label:\
case 1:\
break
- switch (code = param_read_long(plist, (param_name = "BufferSpace"), &sp.BufferSpace)) {
+ switch (code = param_read_size_t(plist, (param_name = "BufferSpace"), &sp.BufferSpace)) {
CHECK_PARAM_CASES(BufferSpace, sp.BufferSpace < 10000, bse);
}
@@ -1808,8 +1808,8 @@ label:\
CHECK_PARAM_CASES(band.BandHeight, sp.band.BandHeight < 0, bhe);
}
- switch (code = param_read_long(plist, (param_name = "BandBufferSpace"), &sp.band.BandBufferSpace)) {
- CHECK_PARAM_CASES(band.BandBufferSpace, sp.band.BandBufferSpace < 0, bbse);
+ switch (code = param_read_size_t(plist, (param_name = "BandBufferSpace"), &sp.band.BandBufferSpace)) {
+ CHECK_PARAM_CASES(band.BandBufferSpace, 0, bbse);
}
@@ -1925,9 +1925,16 @@ label:\
if (code == 0)
dev->DisablePageHandler = temp_bool;
- if ((code = param_read_string(plist, "PageList", &pagelist)) != 1 && pagelist.size > 0) {
+ code = param_read_string(plist, "PageList", &pagelist);
+ if (code < 0)
+ ecode = code;
+ if (code == 0) {
if (dev->PageList)
rc_decrement(dev->PageList, "default put_params PageList");
+ dev->PageList = NULL;
+ }
+
+ if (code == 0 && pagelist.size > 0) {
dev->PageList = (gdev_pagelist *)gs_alloc_bytes(dev->memory->non_gc_memory, sizeof(gdev_pagelist), "structure to hold page list");
if (!dev->PageList)
return gs_note_error(gs_error_VMerror);
diff --git a/base/gsdps1.c b/base/gsdps1.c
index 020eac67..84980d4b 100644
--- a/base/gsdps1.c
+++ b/base/gsdps1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsdsrc.c b/base/gsdsrc.c
index 2cd28871..fcfb9d58 100644
--- a/base/gsdsrc.c
+++ b/base/gsdsrc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsdsrc.h b/base/gsdsrc.h
index 96efd488..a9afae66 100644
--- a/base/gsdsrc.h
+++ b/base/gsdsrc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsequivc.c b/base/gsequivc.c
index 7bb3b66f..fabcd331 100644
--- a/base/gsequivc.c
+++ b/base/gsequivc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -178,7 +178,7 @@ update_ICC_spot_equivalent_cmyk_colors(gx_device * pdev,
name_entry = dev_profile->spotnames->head;
- for (j = 0; j < dev_profile->device_profile[0]->num_comps; j++) {
+ for (j = 0; j < dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]->num_comps; j++) {
client_color.paint.values[j] = 0.0;
}
for (j = 0; j < dev_profile->spotnames->count; j++) {
@@ -518,9 +518,11 @@ capture_spot_equivalent_cmyk_colors(gx_device * pdev, const gs_gstate * pgs,
for the CMYK + OG values. */
if (curr_output_profile->data_cs == gsNCHANNEL) {
- temp_profile.device_profile[0] = temp_state.icc_manager->default_cmyk;
+ temp_profile.device_profile[GS_DEFAULT_DEVICE_PROFILE] =
+ temp_state.icc_manager->default_cmyk;
} else {
- temp_profile.device_profile[0] = curr_output_profile;
+ temp_profile.device_profile[GS_DEFAULT_DEVICE_PROFILE] =
+ curr_output_profile;
}
set_dev_proc(&temp_device, get_profile, gx_default_get_profile);
diff --git a/base/gsequivc.h b/base/gsequivc.h
index 246b4d28..7fddce58 100644
--- a/base/gsequivc.h
+++ b/base/gsequivc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gserrors.h b/base/gserrors.h
index 39bb4ed5..d27b1c56 100644
--- a/base/gserrors.h
+++ b/base/gserrors.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -102,6 +102,12 @@ enum gs_error_type {
gs_error_NeedInput = -106,
/*
+ * Internal code to all run_string to request that the data is rerun
+ * using run_file.
+ */
+ gs_error_NeedFile = -107,
+
+/*
* Internal code for a normal exit when usage info is displayed.
* This allows Window versions of Ghostscript to pause until
* the message can be read.
diff --git a/base/gsexit.h b/base/gsexit.h
index 27ad869c..226942d9 100644
--- a/base/gsexit.h
+++ b/base/gsexit.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfcid.c b/base/gsfcid.c
index 3d9d9f90..1dfd2a9b 100644
--- a/base/gsfcid.c
+++ b/base/gsfcid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfcid2.c b/base/gsfcid2.c
index d81e100e..fe23b070 100644
--- a/base/gsfcid2.c
+++ b/base/gsfcid2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfcmap.c b/base/gsfcmap.c
index 9efc6dea..32a32fdf 100644
--- a/base/gsfcmap.c
+++ b/base/gsfcmap.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -581,13 +581,14 @@ gs_cmap_ToUnicode_alloc(gs_memory_t *mem, int id, int num_codes, int key_size, i
0, cmap_name, name_len, NULL, 0, &gs_cmap_ToUnicode_procs, mem);
if (code < 0)
return code;
- map = (uchar *)gs_alloc_bytes(mem, num_codes * (value_size + 2),
+ map = (uchar *)gs_alloc_bytes(mem,
+ (size_t)num_codes * (value_size + 2),
"gs_cmap_ToUnicode_alloc");
if (map == NULL) {
gs_cmap_free(*ppcmap, mem);
return_error(gs_error_VMerror);
}
- memset(map, 0, num_codes * (value_size + 2));
+ memset(map, 0, (size_t)num_codes * (value_size + 2));
cmap = (gs_cmap_ToUnicode_t *)*ppcmap;
cmap->glyph_name_data = map;
cmap->CMapType = 2;
@@ -621,13 +622,15 @@ gs_cmap_ToUnicode_realloc(gs_memory_t *mem, int new_value_size, gs_cmap_t **ppcm
uchar *new_ptr, *new_map, *old_map = cmap->glyph_name_data;
int i;
- new_map = (uchar *)gs_alloc_bytes(mem, cmap->num_codes * (new_value_size + 2),
- "gs_cmap_ToUnicode_alloc");
+ new_map = (uchar *)gs_alloc_bytes(mem,
+ (size_t)cmap->num_codes *
+ (new_value_size + 2),
+ "gs_cmap_ToUnicode_alloc");
if (new_map == NULL) {
return_error(gs_error_VMerror);
}
new_ptr = new_map;
- memset(new_map, 0, cmap->num_codes * (new_value_size + 2));
+ memset(new_map, 0, (size_t)cmap->num_codes * (new_value_size + 2));
for (i=0;i<cmap->num_codes;i++) {
memcpy(new_ptr, old_map, cmap->value_size + 2);
diff --git a/base/gsfcmap.h b/base/gsfcmap.h
index 7bc0c72c..73516c3e 100644
--- a/base/gsfcmap.h
+++ b/base/gsfcmap.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfcmap1.c b/base/gsfcmap1.c
index dd52ad37..7fc3403e 100644
--- a/base/gsfcmap1.c
+++ b/base/gsfcmap1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -17,6 +17,7 @@
/* Adobe-based CMap character decoding */
#include "memory_.h"
#include "string_.h"
+#include "stdint_.h"
#include "gx.h"
#include "gserrors.h"
#include "gsstruct.h"
@@ -46,11 +47,11 @@ ENUM_PTRS_WITH(cmap_lookup_range_enum_ptrs,
case 0:
if (pclr->value_type == CODE_VALUE_GLYPH) {
const byte *pv = pclr->values.data;
- int size = pclr->value_size;
+ int gsize = pclr->value_size;
int k;
- for (k = 0; k < pclr->num_entries; ++k, pv += size) {
- gs_glyph glyph = bytes2int(pv, size);
+ for (k = 0; k < pclr->num_entries; ++k, pv += gsize) {
+ gs_glyph glyph = bytes2int(pv, gsize);
pclr->cmap->mark_glyph(mem, glyph, pclr->cmap->mark_glyph_data);
}
@@ -187,8 +188,8 @@ code_map_decode_next_multidim_regime(const gx_code_map_t * pcmap,
if (gs_debug_c('J')) {
dlprintf("[J]CMDNmr() is called: str=(");
debug_print_string_hex_nomem(str, ssize);
- dlprintf3(") @ 0x%lx ssize=%d, %d ranges to check\n",
- (ulong)str, ssize, pcmap->num_lookup);
+ dlprintf3(") @ "PRI_INTPTR" ssize=%d, %d ranges to check\n",
+ (intptr_t)str, ssize, pcmap->num_lookup);
}
#endif
#endif
diff --git a/base/gsflip.c b/base/gsflip.c
index 7b465e79..b86dcf41 100644
--- a/base/gsflip.c
+++ b/base/gsflip.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsflip.h b/base/gsflip.h
index 0754a528..9bbe8908 100644
--- a/base/gsflip.h
+++ b/base/gsflip.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfname.c b/base/gsfname.c
index b8aadf21..37acd07c 100644
--- a/base/gsfname.c
+++ b/base/gsfname.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -46,7 +46,8 @@ gs_parse_file_name(gs_parsed_file_name_t * pfn, const char *pname, uint len,
pdelim = memchr(pname + 1, '%', len - 1);
if (pdelim == NULL) /* %device */
dlen = len;
- else if (pdelim[1] == 0) { /* %device% */
+ /* gs strings aren't necessarily null terminated */
+ else if (pdelim[1] == 0 || pdelim - pname == len - 1) { /* %device% */
pdelim = NULL;
dlen = len;
} else {
diff --git a/base/gsfname.h b/base/gsfname.h
index 7f5a6c9b..dcc5f359 100644
--- a/base/gsfname.h
+++ b/base/gsfname.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfont.c b/base/gsfont.c
index d987ba2a..ba2e90ef 100644
--- a/base/gsfont.c
+++ b/base/gsfont.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -160,8 +160,8 @@ gs_font_finalize(const gs_memory_t *cmem, void *vptr)
gs_font *prev = pfont->prev;
(void)cmem; /* unused */
- if_debug4m('u', cmem, "[u]unlinking font 0x%lx, base=0x%lx, prev=0x%lx, next=0x%lx\n",
- (ulong) pfont, (ulong) pfont->base, (ulong) prev, (ulong) next);
+ if_debug4m('u', cmem, "[u]unlinking font "PRI_INTPTR", base="PRI_INTPTR", prev="PRI_INTPTR", next="PRI_INTPTR"\n",
+ (intptr_t)pfont, (intptr_t)pfont->base, (intptr_t)prev, (intptr_t)next);
/* Notify clients that the font is being freed. */
gs_notify_all(&pfont->notify_list, NULL);
gs_purge_font_from_char_caches(pfont);
@@ -439,8 +439,8 @@ gs_definefont(gs_font_dir * pdir, gs_font * pfont)
return code;
}
font_link_first(&pdir->orig_fonts, pfont);
- if_debug2m('m', pfont->memory, "[m]defining font 0x%lx, next=0x%lx\n",
- (ulong) pfont, (ulong) pfont->next);
+ if_debug2m('m', pfont->memory, "[m]defining font "PRI_INTPTR", next="PRI_INTPTR"\n",
+ (intptr_t)pfont, (intptr_t)pfont->next);
return 0;
}
@@ -507,8 +507,8 @@ gs_makefont(gs_font_dir * pdir, const gs_font * pfont,
dmlprintf1(mem, "[m]XUID(%u)", (uint) (-pbfont->UID.id));
else
dmlprintf(mem, "[m]no UID");
- dmprintf8(mem, ", FontType=%d, base=0x%lx,\n[m] new FontMatrix=[%g %g %g %g %g %g]\n",
- pfont->FontType, (ulong)pfont->base,
+ dmprintf8(mem, ", FontType=%d, base="PRI_INTPTR",\n[m] new FontMatrix=[%g %g %g %g %g %g]\n",
+ pfont->FontType, (intptr_t)pfont->base,
pmat->xx, pmat->xy, pmat->yx, pmat->yy,
pmat->tx, pmat->ty);
}
@@ -529,7 +529,7 @@ gs_makefont(gs_font_dir * pdir, const gs_font * pfont,
pf_out->FontMatrix.ty == newmat.ty
) {
*ppfont = pf_out;
- if_debug1m('m', pfont->memory, "[m]found font=0x%lx\n", (ulong) pf_out);
+ if_debug1m('m', pfont->memory, "[m]found font="PRI_INTPTR"\n", (intptr_t)pf_out);
return 0;
}
can_cache = true;
@@ -557,8 +557,8 @@ gs_makefont(gs_font_dir * pdir, const gs_font * pfont,
* (We can't free it, because there might be
* other references to it.)
*/
- if_debug1m('m', pfont->memory, "[m]discarding font 0x%lx\n",
- (ulong) prev);
+ if_debug1m('m', pfont->memory, "[m]discarding font "PRI_INTPTR"\n",
+ (intptr_t)prev);
if (prev->prev != 0)
prev->prev->next = 0;
else
@@ -615,8 +615,8 @@ gs_makefont(gs_font_dir * pdir, const gs_font * pfont,
} else { /* Prevent garbage pointers. */
pf_out->next = pf_out->prev = 0;
}
- if_debug2m('m', pfont->memory, "[m]new font=0x%lx can_cache=%s\n",
- (ulong) * ppfont, (can_cache ? "true" : "false"));
+ if_debug2m('m', pfont->memory, "[m]new font="PRI_INTPTR" can_cache=%s\n",
+ (intptr_t)*ppfont, (can_cache ? "true" : "false"));
return 1;
}
@@ -771,7 +771,7 @@ gs_purge_font(gs_font * pfont)
else if (pdir->scaled_fonts == pfont)
pdir->scaled_fonts = next;
else { /* Shouldn't happen! */
- lprintf1("purged font 0x%lx not found\n", (ulong) pfont);
+ lprintf1("purged font "PRI_INTPTR" not found\n", (intptr_t)pfont);
}
/* Purge the font from the scaled font cache. */
diff --git a/base/gsfont.h b/base/gsfont.h
index 32920bb2..0c5298e0 100644
--- a/base/gsfont.h
+++ b/base/gsfont.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfont0.c b/base/gsfont0.c
index 92814c21..875a93a5 100644
--- a/base/gsfont0.c
+++ b/base/gsfont0.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfont0c.c b/base/gsfont0c.c
index 58a714f0..6d1d1585 100644
--- a/base/gsfont0c.c
+++ b/base/gsfont0c.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsform1.h b/base/gsform1.h
index ef44d7d0..26f3353c 100644
--- a/base/gsform1.h
+++ b/base/gsform1.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsftopts.h b/base/gsftopts.h
index ce7113ef..bcfcb9da 100644
--- a/base/gsftopts.h
+++ b/base/gsftopts.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfunc.c b/base/gsfunc.c
index 9844b8d7..c45b652e 100644
--- a/base/gsfunc.c
+++ b/base/gsfunc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -127,7 +127,7 @@ fn_copy_values(const void *pvalues, int count, int size, gs_memory_t *mem)
void *values = gs_alloc_byte_array(mem, count, size, "fn_copy_values");
if (values)
- memcpy(values, pvalues, count * size);
+ memcpy(values, pvalues, (size_t)count * size);
return values;
} else
return 0; /* caller must check */
diff --git a/base/gsfunc.h b/base/gsfunc.h
index 0875b923..59f51464 100644
--- a/base/gsfunc.h
+++ b/base/gsfunc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfunc0.c b/base/gsfunc0.c
index 6de41259..133c097f 100644
--- a/base/gsfunc0.c
+++ b/base/gsfunc0.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -399,7 +399,7 @@ fn_Sd_evaluate_general(const gs_function_t * pfn_common, const float *in, float
/* Look up and interpolate the output values. */
{
- ulong factor = bps * pfn->params.n;
+ ulong factor = (ulong)bps * pfn->params.n;
for (i = 0; i < pfn->params.m; factor *= pfn->params.Size[i++]) {
int ipart = (int)encoded[i];
@@ -493,7 +493,7 @@ fn_Sd_evaluate_cubic_cached_1d(const gs_function_Sd_t *pfn, const float *in, flo
int bps = pfn->params.BitsPerSample;
p = &pfn->params.pole[i * pole_step];
- fn_get_samples[pfn->params.BitsPerSample](pfn, i * bps * pfn->params.n, sdata);
+ fn_get_samples[pfn->params.BitsPerSample](pfn, (ulong)i * bps * pfn->params.n, sdata);
for (k = 0; k < pfn->params.n; k++, p++)
*p = fn_Sd_encode(pfn, k, (double)sdata[k]);
}
@@ -1367,6 +1367,10 @@ gs_function_Sd_free_params(gs_function_Sd_params_t * params, gs_memory_t * mem)
gs_free_const_object(mem, params->Encode, "Encode");
params->Encode = NULL;
fn_common_free_params((gs_function_params_t *) params, mem);
+ if (params->DataSource.type == data_source_type_stream && params->DataSource.data.strm != NULL) {
+ s_close_filters(&params->DataSource.data.strm, params->DataSource.data.strm->strm);
+ params->DataSource.data.strm = NULL;
+ }
gs_free_object(mem, params->pole, "gs_function_Sd_free_params");
params->pole = NULL;
gs_free_object(mem, params->array_step, "gs_function_Sd_free_params");
diff --git a/base/gsfunc0.h b/base/gsfunc0.h
index 97726f66..7b7bb4f8 100644
--- a/base/gsfunc0.h
+++ b/base/gsfunc0.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfunc3.c b/base/gsfunc3.c
index 08d1dc65..eee07a95 100644
--- a/base/gsfunc3.c
+++ b/base/gsfunc3.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfunc3.h b/base/gsfunc3.h
index a0a64828..068de58c 100644
--- a/base/gsfunc3.h
+++ b/base/gsfunc3.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfunc4.c b/base/gsfunc4.c
index f71fa63a..7f8da5d1 100644
--- a/base/gsfunc4.c
+++ b/base/gsfunc4.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsfunc4.h b/base/gsfunc4.h
index 63e549e2..2df906a4 100644
--- a/base/gsfunc4.h
+++ b/base/gsfunc4.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsgc.h b/base/gsgc.h
index b07006b0..481009ab 100644
--- a/base/gsgc.h
+++ b/base/gsgc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsgcache.c b/base/gsgcache.c
index cc0fd50d..c7a35dbe 100644
--- a/base/gsgcache.c
+++ b/base/gsgcache.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsgcache.h b/base/gsgcache.h
index d3600fae..aca563d8 100644
--- a/base/gsgcache.h
+++ b/base/gsgcache.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsgdata.c b/base/gsgdata.c
index 653a05a0..8d254464 100644
--- a/base/gsgdata.c
+++ b/base/gsgdata.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsgdata.h b/base/gsgdata.h
index 64479713..76617310 100644
--- a/base/gsgdata.h
+++ b/base/gsgdata.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsgstate.c b/base/gsgstate.c
index 35ce6b32..d74a6f09 100644
--- a/base/gsgstate.c
+++ b/base/gsgstate.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -148,24 +148,6 @@ gs_gstate_initialize(gs_gstate * pgs, gs_memory_t * mem)
return 0;
}
-/*
- * Make a temporary copy of a gs_gstate. Note that this does not
- * do all the necessary reference counting, etc. However, it does
- * clear out the transparency stack in the destination.
- */
-gs_gstate *
-gs_gstate_copy_temp(const gs_gstate * pgs, gs_memory_t * mem)
-{
- gs_gstate *pgs_copy =
- gs_alloc_struct(mem, gs_gstate, &st_gs_gstate,
- "gs_gstate_copy");
-
- if (pgs_copy) {
- *pgs_copy = *pgs;
- }
- return pgs_copy;
-}
-
/* Increment reference counts to note that an gs_gstate has been copied. */
void
gs_gstate_copied(gs_gstate * pgs)
diff --git a/base/gsgstate.h b/base/gsgstate.h
index 75a2377b..780a561f 100644
--- a/base/gsgstate.h
+++ b/base/gsgstate.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gshsb.c b/base/gshsb.c
index a77b1022..78f623ef 100644
--- a/base/gshsb.c
+++ b/base/gshsb.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gshsb.h b/base/gshsb.h
index 76f8bbca..61f251b2 100644
--- a/base/gshsb.h
+++ b/base/gshsb.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsht.c b/base/gsht.c
index df20e843..5b27b623 100644
--- a/base/gsht.c
+++ b/base/gsht.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -322,7 +322,7 @@ gx_ht_copy_ht_order(gx_ht_order * pdest, gx_ht_order * psrc, gs_memory_t * mem)
memcpy(pdest->levels, psrc->levels, psrc->num_levels * sizeof(uint));
if (pdest->bit_data != 0)
memcpy(pdest->bit_data, psrc->bit_data,
- psrc->num_bits * psrc->procs->bit_data_elt_size);
+ (size_t)psrc->num_bits * psrc->procs->bit_data_elt_size);
pdest->transfer = psrc->transfer;
rc_increment(pdest->transfer);
return 0;
@@ -548,7 +548,7 @@ gx_ht_construct_bits(gx_ht_order * porder)
gx_ht_construct_bit(phb, porder->width, phb->offset);
#ifdef DEBUG
if (gs_debug_c('H')) {
- dmlprintf1(porder->data_memory, "[H]Halftone order bits 0x%lx:\n", (ulong)porder->bit_data);
+ dmlprintf1(porder->data_memory, "[H]Halftone order bits "PRI_INTPTR":\n", (intptr_t)porder->bit_data);
for (i = 0, phb = (gx_ht_bit *)porder->bit_data;
i < porder->num_bits;
i++, phb++)
@@ -1364,7 +1364,7 @@ gx_ht_construct_threshold( gx_ht_order *d_order, gx_device *dev,
shift = d_order->shift;
if (d_order->threshold != NULL) return 0;
- thresh = (byte *)gs_malloc(memory, d_order->width * d_order->full_height, 1,
+ thresh = (byte *)gs_malloc(memory, (size_t)d_order->width * d_order->full_height, 1,
"gx_ht_construct_threshold");
if (thresh == NULL) {
return -1 ; /* error if allocation failed */
diff --git a/base/gsht.h b/base/gsht.h
index 04f9c55e..ae40bdc0 100644
--- a/base/gsht.h
+++ b/base/gsht.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsht1.c b/base/gsht1.c
index 41cc7f51..918fb229 100644
--- a/base/gsht1.c
+++ b/base/gsht1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsht1.h b/base/gsht1.h
index a1036a53..90cba95d 100644
--- a/base/gsht1.h
+++ b/base/gsht1.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gshtscr.c b/base/gshtscr.c
index 7ceb20cf..ab3f5fba 100644
--- a/base/gshtscr.c
+++ b/base/gshtscr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -209,8 +209,8 @@ gs_screen_order_alloc(gx_ht_order *porder, gs_memory_t *mem)
if (!FORCE_STRIP_HALFTONES &&
((ulong)porder->params.W1 * bitmap_raster(porder->params.W) +
- num_levels * sizeof(*porder->levels) +
- porder->params.W * porder->params.W1 * sizeof(gx_ht_bit)) <=
+ (ulong)num_levels * sizeof(*porder->levels) +
+ (ulong)porder->params.W * porder->params.W1 * sizeof(gx_ht_bit)) <=
porder->screen_params.max_size) {
/*
* Allocate an order for the entire tile, but only sample one
@@ -389,11 +389,13 @@ pick_cell_size(gs_screen_halftone * ph, const gs_matrix * pmat, ulong max_size,
/* Compute the corresponding values of F and A. */
if (landscape)
- ar = atan2(p.M * pmat->xy, p.N * pmat->yx),
+ ar = atan2(p.M * (double)pmat->xy,
+ p.N * (double)pmat->yx),
fr = 72.0 * (p.M == 0 ? pmat->xy / p.N * cos(ar) :
pmat->yx / p.M * sin(ar));
else
- ar = atan2(p.N * pmat->xx, p.M * pmat->yy),
+ ar = atan2(p.N * (double)pmat->xx,
+ p.M * (double)pmat->yy),
fr = 72.0 * (p.M == 0 ? pmat->yy / p.N * sin(ar) :
pmat->xx / p.M * cos(ar));
ft = fabs(fr) * rt;
diff --git a/base/gshtx.c b/base/gshtx.c
index 6ac3ccdc..ea7d2e20 100644
--- a/base/gshtx.c
+++ b/base/gshtx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gshtx.h b/base/gshtx.h
index 950e2024..8a2d94b6 100644
--- a/base/gshtx.h
+++ b/base/gshtx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsicc.c b/base/gsicc.c
index 6cf4803e..e44fa120 100644
--- a/base/gsicc.c
+++ b/base/gsicc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -32,6 +32,7 @@
#include "gsicc_manage.h"
#include "gxdevice.h"
#include "gsccolor.h"
+#include "gxdevsop.h"
#define SAVEICCPROFILE 0
@@ -316,7 +317,8 @@ gx_remap_concrete_icc_devicen(const gs_color_space * pcs, const frac * pconc,
up the equivalent CMYK colors for the spot colors that are present.
This allows us to have some sort of composite viewing of the spot
colors as they would colorimetrically appear. */
- code = gsicc_set_devicen_equiv_colors(dev, pgs, dev_profile->device_profile[0]);
+ code = gsicc_set_devicen_equiv_colors(dev, pgs,
+ dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]);
dev_profile->spotnames->equiv_cmyk_set = true;
}
gx_remap_concrete_devicen(pconc, pdc, pgs, dev, select, pcs);
@@ -695,9 +697,17 @@ gx_set_overprint_ICC(const gs_color_space * pcs, gs_gstate * pgs)
"[overprint] gx_set_overprint_ICC. cs_ok = %d is_fill_color = %d overprint = %d stroke_overprint = %d \n",
cs_ok, pgs->is_fill_color, pgs->overprint, pgs->stroke_overprint);
- if (!op || pcinfo->opmode == GX_CINFO_OPMODE_NOT || !cs_ok)
+ if (!op || pcinfo->opmode == GX_CINFO_OPMODE_NOT) {
return gx_set_no_overprint(pgs);
- else
+ } else if (!cs_ok) {
+ /* In this case, we still need to maintain any spot
+ colorant channels. Per Table 7.14. */
+ if (dev_proc(dev, dev_spec_op)(dev, gxdso_supports_devn, NULL, 0)) {
+ return gx_set_spot_only_overprint(pgs);
+ } else {
+ return gx_set_no_overprint(pgs);
+ }
+ } else
return gx_set_overprint_cmyk(pcs, pgs);
}
diff --git a/base/gsicc.h b/base/gsicc.h
index 28347acc..8fa86877 100644
--- a/base/gsicc.h
+++ b/base/gsicc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsicc_cache.c b/base/gsicc_cache.c
index 713c4ba4..df51e88b 100644
--- a/base/gsicc_cache.c
+++ b/base/gsicc_cache.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -123,8 +123,8 @@ gsicc_cache_new(gs_memory_t *memory)
}
rc_init_free(result, memory->stable_memory, 1, rc_gsicc_link_cache_free);
if_debug2m(gs_debug_flag_icc, memory,
- "[icc] Allocating link cache = 0x%p memory = 0x%p\n",
- result, result->memory);
+ "[icc] Allocating link cache = "PRI_INTPTR" memory = "PRI_INTPTR"\n",
+ (intptr_t)result, (intptr_t)result->memory);
return(result);
}
@@ -135,8 +135,8 @@ rc_gsicc_link_cache_free(gs_memory_t * mem, void *ptr_in, client_name_t cname)
gsicc_link_cache_t *link_cache = (gsicc_link_cache_t * ) ptr_in;
if_debug2m(gs_debug_flag_icc, mem,
- "[icc] Removing link cache = 0x%p memory = 0x%p\n",
- link_cache, link_cache->memory);
+ "[icc] Removing link cache = "PRI_INTPTR" memory = "PRI_INTPTR"\n",
+ (intptr_t)link_cache, (intptr_t)link_cache->memory);
/* NB: freeing the link_cache will call icc_linkcache_finalize */
gs_free_object(mem->stable_memory, link_cache, "rc_gsicc_link_cache_free");
}
@@ -149,8 +149,8 @@ icc_linkcache_finalize(const gs_memory_t *mem, void *ptr)
while (link_cache->head != NULL) {
if (link_cache->head->ref_count != 0) {
- emprintf2(mem, "link at 0x%p being removed, but has ref_count = %d\n",
- link_cache->head, link_cache->head->ref_count);
+ emprintf2(mem, "link at "PRI_INTPTR" being removed, but has ref_count = %d\n",
+ (intptr_t)link_cache->head, link_cache->head->ref_count);
link_cache->head->ref_count = 0; /* force removal */
}
gsicc_remove_link(link_cache->head, mem);
@@ -214,8 +214,8 @@ gsicc_alloc_link_dev(gs_memory_t *memory, cmm_profile_t *src_profile,
result->valid = true;
result->memory = memory->stable_memory;
- if_debug1m('^', result->memory, "[^]icclink 0x%p init = 1\n",
- result);
+ if_debug1m('^', result->memory, "[^]icclink "PRI_INTPTR" init = 1\n",
+ (intptr_t)result);
if (src_profile->profile_handle == NULL) {
src_profile->profile_handle = gsicc_get_profile_handle_buffer(
@@ -304,8 +304,8 @@ gsicc_alloc_link(gs_memory_t *memory, gsicc_hashlink_t hashcode)
}
gx_monitor_enter(result->lock); /* this link is owned by this thread until built and made "valid" */
- if_debug1m('^', result->memory, "[^]icclink 0x%p init = 1\n",
- result);
+ if_debug1m('^', result->memory, "[^]icclink "PRI_INTPTR" init = 1\n",
+ (intptr_t)result);
return result;
}
@@ -520,8 +520,8 @@ gsicc_findcachelink(gsicc_hashlink_t hash, gsicc_link_cache_t *icc_link_cache,
}
/* bump the ref_count since we will be using this one */
curr->ref_count++;
- if_debug3m('^', curr->memory, "[^]%s 0x%p ++ => %d\n",
- "icclink", curr, curr->ref_count);
+ if_debug3m('^', curr->memory, "[^]%s "PRI_INTPTR" ++ => %d\n",
+ "icclink", (intptr_t)curr, curr->ref_count);
while (curr->valid == false) {
gx_monitor_leave(icc_link_cache->lock); /* exit to let other threads run briefly */
gx_monitor_enter(curr->lock); /* wait until we can acquire the lock */
@@ -530,7 +530,7 @@ gsicc_findcachelink(gsicc_hashlink_t hash, gsicc_link_cache_t *icc_link_cache,
/* that was building it failed to be able to complete building it */
/* this is probably a fatal error. MV ??? */
if (curr->valid == false) {
- emprintf1(curr->memory, "link 0x%p lock released, but still not valid.\n", curr); /* Breakpoint here */
+ emprintf1(curr->memory, "link "PRI_INTPTR" lock released, but still not valid.\n", (intptr_t)curr); /* Breakpoint here */
}
gx_monitor_enter(icc_link_cache->lock); /* re-enter to loop and check */
}
@@ -552,12 +552,12 @@ gsicc_remove_link(gsicc_link_t *link, const gs_memory_t *memory)
gsicc_link_cache_t *icc_link_cache = link->icc_link_cache;
if_debug2m(gs_debug_flag_icc, memory,
- "[icc] Removing link = 0x%p memory = 0x%p\n", link,
- memory->stable_memory);
+ "[icc] Removing link = "PRI_INTPTR" memory = "PRI_INTPTR"\n",
+ (intptr_t)link, (intptr_t)memory->stable_memory);
/* NOTE: link->ref_count must be 0: assert ? */
gx_monitor_enter(icc_link_cache->lock);
if (link->ref_count != 0) {
- emprintf2(memory, "link at 0x%p being removed, but has ref_count = %d\n", link, link->ref_count);
+ emprintf2(memory, "link at "PRI_INTPTR" being removed, but has ref_count = %d\n", (intptr_t)link, link->ref_count);
}
curr = icc_link_cache->head;
prev = NULL;
@@ -734,9 +734,8 @@ gsicc_get_link(const gs_gstate *pgs1, gx_device *dev_in,
render_cond.black_point_comp & gsBP_MASK;
return gsicc_get_link_profile(pgs, dev, gs_input_profile,
- dev_profile->device_profile[0],
- rendering_params, memory,
- false);
+ dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ rendering_params, memory, false);
}
} else {
/* In this case we may be wanting for a "unmanaged color"
@@ -755,7 +754,7 @@ gsicc_get_link(const gs_gstate *pgs1, gx_device *dev_in,
/* Set the identity case if we are in that situation */
if (link != NULL) {
if (gs_input_profile->num_comps ==
- dev_profile->device_profile[0]->num_comps) {
+ dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]->num_comps) {
link->is_identity = true;
}
return link;
@@ -787,7 +786,7 @@ gsicc_get_link(const gs_gstate *pgs1, gx_device *dev_in,
gs_input_profile->num_comps);
if (link != NULL) {
if (gs_input_profile->num_comps ==
- dev_profile->device_profile[0]->num_comps) {
+ dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]->num_comps) {
link->is_identity = true;
}
return link;
@@ -859,8 +858,8 @@ gsicc_alloc_link_entry(gsicc_link_cache_t *icc_link_cache,
while (link != NULL ) {
if (link->ref_count == 0) {
/* we will use this one */
- if_debug3m('^', cache_mem, "[^]%s 0x%lx ++ => %d\n",
- "icclink", (ulong)link, link->ref_count);
+ if_debug3m('^', cache_mem, "[^]%s "PRI_INTPTR" ++ => %d\n",
+ "icclink", (intptr_t)link, link->ref_count);
break;
}
link = link->next;
@@ -974,8 +973,8 @@ gsicc_get_link_profile(const gs_gstate *pgs, gx_device *dev,
/* Got a hit, return link (ref_count for the link was already bumped */
if (found_link != NULL) {
if_debug2m(gs_debug_flag_icc, memory,
- "[icc] Found Link = 0x%p, hash = %lld \n",
- found_link, (long long)hash.link_hashcode);
+ "[icc] Found Link = "PRI_INTPTR", hash = %lld \n",
+ (intptr_t)found_link, (long long)hash.link_hashcode);
if_debug2m(gs_debug_flag_icc, memory,
"[icc] input_numcomps = %d, input_hash = %lld \n",
gs_input_profile->num_comps,
@@ -1017,7 +1016,7 @@ gsicc_get_link_profile(const gs_gstate *pgs, gx_device *dev,
/* Set the identity case if we are in that situation */
if (link != NULL) {
if (gs_input_profile->num_comps ==
- dev_profile->device_profile[0]->num_comps) {
+ dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]->num_comps) {
link->is_identity = true;
}
return link;
@@ -1219,8 +1218,8 @@ gsicc_get_link_profile(const gs_gstate *pgs, gx_device *dev,
include_softproof, include_devicelink, pageneutralcolor,
gs_input_profile->data_cs);
if_debug2m(gs_debug_flag_icc, cache_mem,
- "[icc] New Link = 0x%p, hash = %lld \n",
- link, (long long)hash.link_hashcode);
+ "[icc] New Link = "PRI_INTPTR", hash = %lld \n",
+ (intptr_t)link, (long long)hash.link_hashcode);
if_debug2m(gs_debug_flag_icc, cache_mem,
"[icc] input_numcomps = %d, input_hash = %lld \n",
gs_input_profile->num_comps,
@@ -1234,8 +1233,8 @@ gsicc_get_link_profile(const gs_gstate *pgs, gx_device *dev,
/* This could result in an infinite loop if other threads are waiting */
/* for it to be made valid. (see gsicc_findcachelink). */
link->ref_count--; /* this thread no longer using this link entry */
- if_debug2m('^', link->memory, "[^]icclink 0x%p -- => %d\n",
- link, link->ref_count);
+ if_debug2m('^', link->memory, "[^]icclink "PRI_INTPTR" -- => %d\n",
+ (intptr_t)link, link->ref_count);
if (icc_link_cache->cache_full) {
icc_link_cache->cache_full = false;
@@ -1481,8 +1480,8 @@ gsicc_support_named_color(const gs_color_space *pcs, const gs_gstate *pgs)
int k, code, i, num_comp, num_spots=0, num_process=0, num_other=0;
gs_color_space_index type = gs_color_space_get_index(pcs);
char **names = NULL;
- byte *pname;
- uint name_size;
+ byte *pname = NULL; /* Silence compiler warning */
+ uint name_size = 0; /* Silence compiler warning */
bool is_supported;
/* Get the data for the named profile */
@@ -1504,6 +1503,7 @@ gsicc_support_named_color(const gs_color_space *pcs, const gs_gstate *pgs)
num_comp = pcs->params.device_n.num_components;
} else if (type == gs_color_space_index_Separation) {
pname = (byte *)pcs->params.separation.sep_name;
+ name_size = strlen(pcs->params.separation.sep_name);
num_comp = 1;
} else
return false;
@@ -1514,9 +1514,6 @@ gsicc_support_named_color(const gs_color_space *pcs, const gs_gstate *pgs)
pname = (byte *)names[i];
name_size = strlen(names[i]);
}
- else {
- name_size = strlen(pcs->params.separation.sep_name);
- }
/* Classify */
if (strncmp((char *)pname, "None", name_size) == 0 ||
@@ -1730,8 +1727,8 @@ gsicc_release_link(gsicc_link_t *icclink)
icc_link_cache = icclink->icc_link_cache;
gx_monitor_enter(icc_link_cache->lock);
- if_debug2m('^', icclink->memory, "[^]icclink 0x%p -- => %d\n",
- icclink, icclink->ref_count - 1);
+ if_debug2m('^', icclink->memory, "[^]icclink "PRI_INTPTR" -- => %d\n",
+ (intptr_t)icclink, icclink->ref_count - 1);
/* Decrement the reference count */
if (--(icclink->ref_count) == 0) {
@@ -1792,9 +1789,11 @@ gsicc_init_buffer(gsicc_bufferdesc_t *buffer_desc, unsigned char num_chan, unsig
buffer_desc->num_rows = num_rows;
buffer_desc->pixels_per_row = pixels_per_row;
- /* sample endianess is consistent across platforms */
+#if ARCH_IS_BIG_ENDIAN
+ buffer_desc->little_endian = false;
+#else
buffer_desc->little_endian = true;
-
+#endif
}
/* Return the proper component numbers based upon the profiles of the device.
@@ -1804,7 +1803,7 @@ int
gsicc_get_device_profile_comps(const cmm_dev_profile_t *dev_profile)
{
if (dev_profile->link_profile == NULL) {
- return dev_profile->device_profile[0]->num_comps;
+ return dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]->num_comps;
} else {
return dev_profile->link_profile->num_comps_out;
}
diff --git a/base/gsicc_cache.h b/base/gsicc_cache.h
index 4afaef3e..c9b9d0ab 100644
--- a/base/gsicc_cache.h
+++ b/base/gsicc_cache.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsicc_cms.h b/base/gsicc_cms.h
index 1db7c858..9a067093 100644
--- a/base/gsicc_cms.h
+++ b/base/gsicc_cms.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsicc_create.c b/base/gsicc_create.c
index ef464600..3fc8492b 100644
--- a/base/gsicc_create.c
+++ b/base/gsicc_create.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -1176,8 +1176,8 @@ add_lutAtoBtype(unsigned char *input_ptr, gsicc_lutatob *lutatobparts)
memset(curr_ptr,0,4); /* A curves */
} else {
write_bigendian_4bytes(curr_ptr,data_offset);
- mlut_size = lutatobparts->clut->clut_num_entries *
- lutatobparts->clut->clut_word_width * 3;
+ mlut_size = (long)lutatobparts->clut->clut_num_entries *
+ lutatobparts->clut->clut_word_width * 3;
pad_bytes = (4 - mlut_size%4)%4;
data_offset += (mlut_size + pad_bytes + 20);
curr_ptr += 4;
@@ -2491,14 +2491,16 @@ create_clut_v2(gsicc_clut *clut, gsicc_link_t *link, int num_in,
if (bitdepth == 2) {
clut->data_byte = NULL;
clut->data_short = (unsigned short*)gs_alloc_bytes(memory,
- clut->clut_num_entries * num_out * sizeof(unsigned short),
- "create_clut_v2");
+ (size_t)clut->clut_num_entries * num_out *
+ sizeof(unsigned short),
+ "create_clut_v2");
if (clut->data_short == NULL)
return -1;
} else {
clut->data_short = NULL;
clut->data_byte = (byte*)gs_alloc_bytes(memory,
- clut->clut_num_entries * num_out, "create_clut_v2");
+ (size_t)clut->clut_num_entries * num_out,
+ "create_clut_v2");
if (clut->data_byte == NULL)
return -1;
}
diff --git a/base/gsicc_create.h b/base/gsicc_create.h
index 9977af4d..ca84eb3a 100644
--- a/base/gsicc_create.h
+++ b/base/gsicc_create.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsicc_lcms2.c b/base/gsicc_lcms2.c
index 2fc3645c..43a7a93a 100644
--- a/base/gsicc_lcms2.c
+++ b/base/gsicc_lcms2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsicc_lcms2mt.c b/base/gsicc_lcms2mt.c
index ec65fec7..dbb9c4b2 100644
--- a/base/gsicc_lcms2mt.c
+++ b/base/gsicc_lcms2mt.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsicc_manage.c b/base/gsicc_manage.c
index a841df7b..8d28bcf1 100644
--- a/base/gsicc_manage.c
+++ b/base/gsicc_manage.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -1580,7 +1580,7 @@ gsicc_set_device_profile_colorants(gx_device *dev, char *name_str)
/* Create a default name string that we can use */
int total_len;
int kk;
- int num_comps = profile_struct->device_profile[0]->num_comps;
+ int num_comps = profile_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE]->num_comps;
char temp_str[DEFAULT_ICC_COLORANT_LENGTH+2];
/* If names are already set then we do not want to set default ones */
@@ -1837,16 +1837,16 @@ gsicc_verify_device_profiles(gx_device * pdev)
{
int k;
cmm_dev_profile_t *dev_icc = pdev->icc_struct;
- bool is_sep = false;
+ bool check_components = true;
bool can_postrender = false;
bool objects = false;
- if (pdev->procs.dev_spec_op != NULL) {
- is_sep = dev_proc(pdev, dev_spec_op)(pdev, gxdso_supports_devn, NULL, 0);
+ if (dev_proc(pdev, dev_spec_op) != NULL) {
+ check_components = !(dev_proc(pdev, dev_spec_op)(pdev, gxdso_skip_icc_component_validation, NULL, 0));
can_postrender = dev_proc(pdev, dev_spec_op)(pdev, gxdso_supports_iccpostrender, NULL, 0);
}
- if (dev_icc->device_profile[0] == NULL)
+ if (dev_icc->device_profile[GS_DEFAULT_DEVICE_PROFILE] == NULL)
return 0;
if (dev_icc->postren_profile != NULL && dev_icc->link_profile != NULL) {
@@ -1864,7 +1864,7 @@ gsicc_verify_device_profiles(gx_device * pdev)
if (!can_postrender) {
return gs_rethrow(-1, "Post render profile not supported by device");
}
- if (!is_sep) {
+ if (check_components) {
if (dev_icc->postren_profile->num_comps !=
pdev->color_info.num_components) {
return gs_rethrow(-1, "Post render profile does not match the device color model");
@@ -1883,33 +1883,37 @@ gsicc_verify_device_profiles(gx_device * pdev)
if (dev_icc->link_profile == NULL) {
if (!objects) {
- if (!is_sep && dev_icc->device_profile[0]->num_comps !=
+ if (check_components && dev_icc->device_profile[GS_DEFAULT_DEVICE_PROFILE]->num_comps !=
pdev->color_info.num_components)
return gs_rethrow(-1, "Mismatch of ICC profiles and device color model");
else
return 0; /* Currently sep devices have some leeway here */
} else {
- for (k = 1; k < NUM_DEVICE_PROFILES; k++)
- if (!is_sep && dev_icc->device_profile[k] != NULL) {
- if (dev_icc->device_profile[k]->num_comps !=
- pdev->color_info.num_components)
- return gs_rethrow(-1, "Mismatch of object dependent ICC profiles and device color model");
- }
+ if (check_components) {
+ for (k = 1; k < NUM_DEVICE_PROFILES; k++)
+ if (dev_icc->device_profile[k] != NULL) {
+ if (dev_icc->device_profile[k]->num_comps !=
+ pdev->color_info.num_components)
+ return gs_rethrow(-1, "Mismatch of object dependent ICC profiles and device color model");
+ }
+ }
return 0;
}
} else {
/* The input of the device link must match the output of the device
profile and the device link output must match the device color
model */
- if (!is_sep && dev_icc->link_profile->num_comps_out !=
+ if (check_components && dev_icc->link_profile->num_comps_out !=
pdev->color_info.num_components) {
return gs_rethrow(-1, "Mismatch of device link profile and device color model");
}
- for (k = 0; k < NUM_DEVICE_PROFILES; k++) {
- if (!is_sep && dev_icc->device_profile[k] != NULL) {
- if (dev_icc->device_profile[k]->num_comps !=
- dev_icc->link_profile->num_comps) {
- return gs_rethrow(-1, "Mismatch of device link profile and device ICC profile");
+ if (check_components) {
+ for (k = 0; k < NUM_DEVICE_PROFILES; k++) {
+ if (dev_icc->device_profile[k] != NULL) {
+ if (dev_icc->device_profile[k]->num_comps !=
+ dev_icc->link_profile->num_comps) {
+ return gs_rethrow(-1, "Mismatch of device link profile and device ICC profile");
+ }
}
}
}
@@ -2165,7 +2169,7 @@ gsicc_profile_new(stream *s, gs_memory_t *memory, const char* pname,
return NULL;
}
if_debug1m(gs_debug_flag_icc, mem_nongc,
- "[icc] allocating ICC profile = 0x%p\n", result);
+ "[icc] allocating ICC profile = "PRI_INTPTR"\n", (intptr_t)result);
return result;
}
@@ -2176,8 +2180,8 @@ rc_free_icc_profile(gs_memory_t * mem, void *ptr_in, client_name_t cname)
gs_memory_t *mem_nongc = profile->memory;
if_debug2m(gs_debug_flag_icc, mem,
- "[icc] rc decrement profile = 0x%p rc = %ld\n",
- ptr_in, profile->rc.ref_count);
+ "[icc] rc decrement profile = "PRI_INTPTR" rc = %ld\n",
+ (intptr_t)ptr_in, profile->rc.ref_count);
if (profile->rc.ref_count <= 1 ) {
/* Clear out the buffer if it is full */
if (profile->buffer != NULL) {
@@ -2787,31 +2791,31 @@ gsicc_extract_profile(gs_graphics_type_tag_t graphics_type_tag,
case GS_UNKNOWN_TAG:
case GS_UNTOUCHED_TAG:
default:
- (*profile) = profile_struct->device_profile[0];
- *render_cond = profile_struct->rendercond[0];
+ (*profile) = profile_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE];
+ *render_cond = profile_struct->rendercond[GS_DEFAULT_DEVICE_PROFILE];
break;
case GS_PATH_TAG:
- *render_cond = profile_struct->rendercond[1];
- if (profile_struct->device_profile[1] != NULL) {
- (*profile) = profile_struct->device_profile[1];
+ *render_cond = profile_struct->rendercond[GS_GRAPHIC_DEVICE_PROFILE];
+ if (profile_struct->device_profile[GS_GRAPHIC_DEVICE_PROFILE] != NULL) {
+ (*profile) = profile_struct->device_profile[GS_GRAPHIC_DEVICE_PROFILE];
} else {
- (*profile) = profile_struct->device_profile[0];
+ (*profile) = profile_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE];
}
break;
case GS_IMAGE_TAG:
- *render_cond = profile_struct->rendercond[2];
- if (profile_struct->device_profile[2] != NULL) {
- (*profile) = profile_struct->device_profile[2];
+ *render_cond = profile_struct->rendercond[GS_IMAGE_DEVICE_PROFILE];
+ if (profile_struct->device_profile[GS_IMAGE_DEVICE_PROFILE] != NULL) {
+ (*profile) = profile_struct->device_profile[GS_IMAGE_DEVICE_PROFILE];
} else {
- (*profile) = profile_struct->device_profile[0];
+ (*profile) = profile_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE];
}
break;
case GS_TEXT_TAG:
- *render_cond = profile_struct->rendercond[3];
- if (profile_struct->device_profile[3] != NULL) {
- (*profile) = profile_struct->device_profile[3];
+ *render_cond = profile_struct->rendercond[GS_TEXT_DEVICE_PROFILE];
+ if (profile_struct->device_profile[GS_TEXT_DEVICE_PROFILE] != NULL) {
+ (*profile) = profile_struct->device_profile[GS_TEXT_DEVICE_PROFILE];
} else {
- (*profile) = profile_struct->device_profile[0];
+ (*profile) = profile_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE];
}
break;
}
@@ -3010,7 +3014,7 @@ gs_seticcdirectory(const gs_gstate * pgs, gs_param_string * pval)
pname = (char *)gs_alloc_bytes(mem, namelen,
"gs_seticcdirectory");
if (pname == NULL)
- return gs_rethrow(-1, "cannot allocate directory name");
+ return gs_rethrow(gs_error_VMerror, "cannot allocate directory name");
memcpy(pname,pval->data,namelen-1);
pname[namelen-1] = 0;
if (gs_lib_ctx_set_icc_directory(mem, (const char*) pname, namelen) < 0) {
diff --git a/base/gsicc_manage.h b/base/gsicc_manage.h
index c21407e7..a4bde945 100644
--- a/base/gsicc_manage.h
+++ b/base/gsicc_manage.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsicc_monitorcm.c b/base/gsicc_monitorcm.c
index 0a1ef9a5..2e305e9d 100644
--- a/base/gsicc_monitorcm.c
+++ b/base/gsicc_monitorcm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -264,7 +264,7 @@ gsicc_mcm_transform_general(gx_device *dev, gsicc_link_t *icclink,
if (icclink->hashcode.des_hash == icclink->hashcode.src_hash) {
if (num_bytes_in == num_bytes_out) {
/* The easy case */
- memcpy(outputcolor, inputcolor, num_bytes_in * icclink->num_input);
+ memcpy(outputcolor, inputcolor, (size_t)num_bytes_in * icclink->num_input);
} else {
if (num_bytes_in == 2) {
unsigned short *in_ptr = (unsigned short*) inputcolor;
diff --git a/base/gsicc_nocm.c b/base/gsicc_nocm.c
index b56b7a36..6d23382f 100644
--- a/base/gsicc_nocm.c
+++ b/base/gsicc_nocm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsicc_profilecache.c b/base/gsicc_profilecache.c
index 0b1411f7..adb4ad1d 100644
--- a/base/gsicc_profilecache.c
+++ b/base/gsicc_profilecache.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -114,8 +114,8 @@ gsicc_add_cs(gs_gstate * pgs, gs_color_space * colorspace, uint64_t dictkey)
rc_increment(colorspace);
result->key = dictkey;
if_debug2m(gs_debug_flag_icc, memory,
- "[icc] Add cs to cache = 0x%p, hash = %"PRIu64"\n",
- result->color_space, (uint64_t)result->key);
+ "[icc] Add cs to cache = "PRI_INTPTR", hash = %"PRIu64"\n",
+ (intptr_t)result->color_space, (uint64_t)result->key);
profile_cache->num_entries++;
}
@@ -129,8 +129,8 @@ gsicc_find_cs(uint64_t key_test, gs_gstate * pgs)
while (curr != NULL ){
if (curr->key == key_test){
if_debug2m(gs_debug_flag_icc, pgs->memory,
- "[icc] Found cs = 0x%p, hash = %"PRIu64"\n",
- curr->color_space, (uint64_t)curr->key);
+ "[icc] Found cs = "PRI_INTPTR", hash = %"PRIu64"\n",
+ (intptr_t)curr->color_space, (uint64_t)curr->key);
/* If not already at head of list, move this one there */
if (curr != profile_cache->head) {
/* We need to move found one to the top of the list. */
@@ -182,8 +182,8 @@ gsicc_remove_cs_entry(gsicc_profile_cache_t *profile_cache)
/* If found again in the source document, it will be regenerated
and added back into the cache. */
if_debug2m(gs_debug_flag_icc, memory,
- "[icc] Remove cs from cache = 0x%p, hash = %"PRIu64"\n",
- curr->color_space, (uint64_t)curr->key);
+ "[icc] Remove cs from cache = "PRI_INTPTR", hash = %"PRIu64"\n",
+ (intptr_t)curr->color_space, (uint64_t)curr->key);
rc_decrement(curr->color_space, "gsicc_remove_cs_entry");
gs_free_object(memory->stable_memory, curr, "gsicc_remove_cs_entry");
}
diff --git a/base/gsicc_profilecache.h b/base/gsicc_profilecache.h
index 43a8bcd0..8a344770 100644
--- a/base/gsicc_profilecache.h
+++ b/base/gsicc_profilecache.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsicc_replacecm.c b/base/gsicc_replacecm.c
index 815b8419..906f2ebb 100644
--- a/base/gsicc_replacecm.c
+++ b/base/gsicc_replacecm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsimage.c b/base/gsimage.c
index 7b4602fc..d62c76eb 100644
--- a/base/gsimage.c
+++ b/base/gsimage.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -489,8 +489,8 @@ free_row_buffers(gs_image_enum *penum, int num_planes, client_name_t cname)
int i;
for (i = num_planes - 1; i >= 0; --i) {
- if_debug3m('b', penum->memory, "[b]free plane %d row (0x%lx,%u)\n",
- i, (ulong)penum->planes[i].row.data,
+ if_debug3m('b', penum->memory, "[b]free plane %d row ("PRI_INTPTR",%u)\n",
+ i, (intptr_t)penum->planes[i].row.data,
penum->planes[i].row.size);
gs_free_string(gs_image_row_memory(penum), penum->planes[i].row.data,
penum->planes[i].row.size, cname);
@@ -538,10 +538,10 @@ gs_image_next_planes(gs_image_enum * penum,
int pi;
for (pi = 0; pi < num_planes; ++pi)
- dmprintf6(penum->memory, "[b]plane %d source=0x%lx,%u pos=%u data=0x%lx,%u\n",
- pi, (ulong)penum->planes[pi].source.data,
+ dmprintf6(penum->memory, "[b]plane %d source="PRI_INTPTR",%u pos=%u data="PRI_INTPTR",%u\n",
+ pi, (intptr_t)penum->planes[pi].source.data,
penum->planes[pi].source.size, penum->planes[pi].pos,
- (ulong)plane_data[pi].data, plane_data[pi].size);
+ (intptr_t)plane_data[pi].data, plane_data[pi].size);
}
#endif
for (i = 0; i < num_planes; ++i) {
@@ -582,9 +582,9 @@ gs_image_next_planes(gs_image_enum * penum,
gs_resize_string(mem, old_data, old_size, raster,
"gs_image_next(row)"));
- if_debug5m('b', mem, "[b]plane %d row (0x%lx,%u) => (0x%lx,%u)\n",
- i, (ulong)old_data, old_size,
- (ulong)row, raster);
+ if_debug5m('b', mem, "[b]plane %d row ("PRI_INTPTR",%u) => ("PRI_INTPTR",%u)\n",
+ i, (intptr_t)old_data, old_size,
+ (intptr_t)row, raster);
if (row == 0) {
code = gs_note_error(gs_error_VMerror);
free_row_buffers(penum, i, "gs_image_next(row)");
diff --git a/base/gsimage.h b/base/gsimage.h
index f7c5b0a3..29cf9f81 100644
--- a/base/gsimage.h
+++ b/base/gsimage.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsimpath.c b/base/gsimpath.c
index 2cbc8416..073dffe4 100644
--- a/base/gsimpath.c
+++ b/base/gsimpath.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsinit.c b/base/gsinit.c
index f7c0bdb7..e80353d7 100644
--- a/base/gsinit.c
+++ b/base/gsinit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsio.h b/base/gsio.h
index 222b71c7..8857bb09 100644
--- a/base/gsio.h
+++ b/base/gsio.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsiodev.c b/base/gsiodev.c
index 1619f46a..7b405947 100644
--- a/base/gsiodev.c
+++ b/base/gsiodev.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -305,13 +305,13 @@ iodev_os_fclose(gx_io_device * iodev, gp_file * file)
static int
os_delete(gx_io_device * iodev, const char *fname)
{
- return (unlink(fname) == 0 ? 0 : gs_error_ioerror);
+ return (gp_unlink(iodev->memory, fname) == 0 ? 0 : gs_error_ioerror);
}
static int
os_rename(gx_io_device * iodev, const char *from, const char *to)
{
- return (rename(from, to) == 0 ? 0 : gs_error_ioerror);
+ return (gp_rename(iodev->memory, from, to) == 0 ? 0 : gs_error_ioerror);
}
static int
diff --git a/base/gsiodevs.c b/base/gsiodevs.c
index 32f26133..1e459701 100644
--- a/base/gsiodevs.c
+++ b/base/gsiodevs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsiodisk.c b/base/gsiodisk.c
index 24f53426..5a127e1b 100644
--- a/base/gsiodisk.c
+++ b/base/gsiodisk.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsioram.c b/base/gsioram.c
index e21e3207..40cdb91e 100644
--- a/base/gsioram.c
+++ b/base/gsioram.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsiorom.c b/base/gsiorom.c
index 6516568a..767a35cf 100644
--- a/base/gsiorom.c
+++ b/base/gsiorom.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -412,3 +412,40 @@ romfs_enumerate_next(gs_memory_t * mem, file_enum *pfen, char *ptr, uint maxlen)
romfs_enumerate_close(mem, pfen);
return ~(uint)0;
}
+
+int
+romfs_file_len(gs_memory_t * mem, const char *fname)
+{
+ extern const uint32_t *gs_romfs[];
+ extern const time_t gs_romfs_buildtime;
+ const uint32_t *node_scan = gs_romfs[0], *node = NULL;
+ uint32_t filelen, blocks;
+ int i;
+ char *filename;
+ uint namelen = strlen(fname);
+
+ /* a build time of zero indicates we have the "dummy" romfs
+ * used when COMPILE_INITS==0 - returning a specific error here
+ * gives us a quick way to check for that.
+ */
+ if (gs_romfs_buildtime == (time_t)0) {
+ return_error(gs_error_unregistered);
+ }
+
+ /* scan the inodes to find the requested file */
+ for (i=0; node_scan != 0; i++, node_scan = gs_romfs[i]) {
+ filelen = get_u32_big_endian(node_scan) & 0x7fffffff; /* ignore compression bit */
+ blocks = (filelen+ROMFS_BLOCKSIZE-1)/ ROMFS_BLOCKSIZE;
+ filename = (char *)(&(node_scan[1+(2*blocks)]));
+ if ((namelen == strlen(filename)) &&
+ (strncmp(filename, fname, namelen) == 0)) {
+ node = node_scan;
+ break;
+ }
+ }
+ /* inode points to the file (or NULL if not found */
+ if (node == NULL)
+ return_error(gs_error_undefinedfilename);
+
+ return (int)filelen;
+}
diff --git a/base/gsiorom.h b/base/gsiorom.h
index 06e8c37d..90f9ef02 100644
--- a/base/gsiorom.h
+++ b/base/gsiorom.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsipar3x.h b/base/gsipar3x.h
index 77c595c9..2cf6e3d9 100644
--- a/base/gsipar3x.h
+++ b/base/gsipar3x.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsiparam.h b/base/gsiparam.h
index af9044b9..8fc9172c 100644
--- a/base/gsiparam.h
+++ b/base/gsiparam.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsiparm3.h b/base/gsiparm3.h
index 9229b5d8..14a249ec 100644
--- a/base/gsiparm3.h
+++ b/base/gsiparm3.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsiparm4.h b/base/gsiparm4.h
index d2a479aa..c9f0e704 100644
--- a/base/gsiparm4.h
+++ b/base/gsiparm4.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsjconf.h b/base/gsjconf.h
index 74f33a33..18de9026 100644
--- a/base/gsjconf.h
+++ b/base/gsjconf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsjmorec.h b/base/gsjmorec.h
index 4c4ee3c5..2d2cb051 100644
--- a/base/gsjmorec.h
+++ b/base/gsjmorec.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gslib.c b/base/gslib.c
index 151da9a1..ee21b5d8 100644
--- a/base/gslib.c
+++ b/base/gslib.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -930,7 +930,7 @@ test10(gs_gstate * pgs, gs_memory_t * mem)
gs_param_int_array HWSa;
int HWSize[2];
float HWResolution[2], PageSize[2];
- long MaxBitmap;
+ size_t MaxBitmap;
int code;
gx_device *dev = gs_currentdevice(pgs);
float xlate_x, xlate_y;
@@ -972,13 +972,13 @@ test10(gs_gstate * pgs, gs_memory_t * mem)
}
emprintf3(mem, "PageSize[%d] = [ %f, %f ]\n", PSa.size,
PSa.data[0], PSa.data[1]);
- code = param_read_long((gs_param_list *) & list,
- "MaxBitmap", &MaxBitmap);
+ code = param_read_size_t((gs_param_list *) & list,
+ "MaxBitmap", &MaxBitmap);
if (code < 0) {
lprintf1("reading MaxBitmap failed! code = %d\n", code);
gs_abort(mem);
}
- emprintf1(mem, "MaxBitmap = %ld\n", MaxBitmap);
+ emprintf1(mem, "MaxBitmap = %"PRIi64"\n", MaxBitmap);
/* Switch to param list functions to "write" */
gs_c_param_list_write(&list, mem);
/* Always set the PageSize. */
@@ -1015,8 +1015,8 @@ test10(gs_gstate * pgs, gs_memory_t * mem)
code = param_write_int_array((gs_param_list *) & list,
"HWSize", &HWSa);
MaxBitmap = 1000000L;
- code = param_write_long((gs_param_list *) & list,
- "MaxBitmap", &MaxBitmap);
+ code = param_write_size_t((gs_param_list *) & list,
+ "MaxBitmap", &MaxBitmap);
}
gs_c_param_list_read(&list);
code = gs_putdeviceparams(dev, (gs_param_list *) & list);
diff --git a/base/gslib.h b/base/gslib.h
index b1065a37..2291fbca 100644
--- a/base/gslib.h
+++ b/base/gslib.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gslibctx.c b/base/gslibctx.c
index fbfd9143..63dfbe2e 100644
--- a/base/gslibctx.c
+++ b/base/gslibctx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -86,7 +86,7 @@ gs_lib_ctx_set_icc_directory(const gs_memory_t *mem_gc, const char* pname,
result = (char*) gs_alloc_bytes(p_ctx_mem, dir_namelen+1,
"gs_lib_ctx_set_icc_directory");
if (result == NULL) {
- return -1;
+ return gs_error_VMerror;
}
strcpy(result, pname);
p_ctx->profiledir = result;
@@ -388,6 +388,7 @@ void gs_lib_ctx_fin(gs_memory_t *mem)
gs_memory_t *ctx_mem;
int refs, i;
gs_fs_list_t *fs;
+ gs_callout_list_t *entry;
if (!mem || !mem->gs_lib_ctx)
return;
@@ -419,6 +420,7 @@ void gs_lib_ctx_fin(gs_memory_t *mem)
#ifdef WITH_CAL
cal_fin(ctx->core->cal_ctx, ctx->core->memory);
#endif
+ gs_purge_scratch_files(ctx->core->memory);
gs_purge_control_paths(ctx->core->memory, gs_permit_file_reading);
gs_purge_control_paths(ctx->core->memory, gs_permit_file_writing);
gs_purge_control_paths(ctx->core->memory, gs_permit_file_control);
@@ -430,6 +432,13 @@ void gs_lib_ctx_fin(gs_memory_t *mem)
fs = next;
}
+ entry = ctx->core->callouts;
+ while (entry) {
+ gs_callout_list_t *next = entry->next;
+ gs_free_object(mem->non_gc_memory, entry, "gs_callout_list_t");
+ entry = next;
+ }
+
for (i = 0; i < ctx->core->argc; i++)
gs_free_object(ctx->core->memory, ctx->core->argv[i], "gs_lib_ctx_arg");
gs_free_object(ctx->core->memory, ctx->core->argv, "gs_lib_ctx_args");
@@ -486,7 +495,7 @@ int outwrite(const gs_memory_t *mem, const char *str, int len)
code = gp_fwrite(str, 1, len, core->fstdout2);
gp_fflush(core->fstdout2);
} else if (core->stdout_fn) {
- return (*core->stdout_fn)(core->caller_handle, str, len);
+ return (*core->stdout_fn)(core->std_caller_handle, str, len);
} else {
code = fwrite(str, 1, len, core->fstdout);
fflush(core->fstdout);
@@ -522,7 +531,7 @@ int errwrite(const gs_memory_t *mem, const char *str, int len)
return 0;
core = ctx->core;
if (core->stderr_fn)
- return (*core->stderr_fn)(core->caller_handle, str, len);
+ return (*core->stderr_fn)(core->std_caller_handle, str, len);
code = fwrite(str, 1, len, core->fstderr);
fflush(core->fstderr);
@@ -638,7 +647,7 @@ gs_add_outputfile_control_path(gs_memory_t *mem, const char *fname)
char *fp, f[gp_file_name_sizeof];
const int pipe = 124; /* ASCII code for '|' */
const int len = strlen(fname);
- int i;
+ int i, code;
/* Be sure the string copy will fit */
if (len >= gp_file_name_sizeof)
@@ -649,8 +658,6 @@ gs_add_outputfile_control_path(gs_memory_t *mem, const char *fname)
rewrite_percent_specifiers(f);
for (i = 0; i < len; i++) {
if (f[i] == pipe) {
- int code;
-
fp = &f[i + 1];
/* Because we potentially have to check file permissions at two levels
for the output file (gx_device_open_output_file and the low level
@@ -661,11 +668,17 @@ gs_add_outputfile_control_path(gs_memory_t *mem, const char *fname)
code = gs_add_control_path(mem, gs_permit_file_writing, f);
if (code < 0)
return code;
+ code = gs_add_control_path(mem, gs_permit_file_control, f);
+ if (code < 0)
+ return code;
break;
}
if (!IS_WHITESPACE(f[i]))
break;
}
+ code = gs_add_control_path(mem, gs_permit_file_control, fp);
+ if (code < 0)
+ return code;
return gs_add_control_path(mem, gs_permit_file_writing, fp);
}
@@ -675,7 +688,7 @@ gs_remove_outputfile_control_path(gs_memory_t *mem, const char *fname)
char *fp, f[gp_file_name_sizeof];
const int pipe = 124; /* ASCII code for '|' */
const int len = strlen(fname);
- int i;
+ int i, code;
/* Be sure the string copy will fit */
if (len >= gp_file_name_sizeof)
@@ -685,8 +698,6 @@ gs_remove_outputfile_control_path(gs_memory_t *mem, const char *fname)
/* Try to rewrite any %d (or similar) in the string */
for (i = 0; i < len; i++) {
if (f[i] == pipe) {
- int code;
-
fp = &f[i + 1];
/* Because we potentially have to check file permissions at two levels
for the output file (gx_device_open_output_file and the low level
@@ -697,11 +708,17 @@ gs_remove_outputfile_control_path(gs_memory_t *mem, const char *fname)
code = gs_remove_control_path(mem, gs_permit_file_writing, f);
if (code < 0)
return code;
+ code = gs_remove_control_path(mem, gs_permit_file_control, f);
+ if (code < 0)
+ return code;
break;
}
if (!IS_WHITESPACE(f[i]))
break;
}
+ code = gs_remove_control_path(mem, gs_permit_file_control, fp);
+ if (code < 0)
+ return code;
return gs_remove_control_path(mem, gs_permit_file_writing, fp);
}
@@ -727,6 +744,12 @@ gs_add_explicit_control_path(gs_memory_t *mem, const char *arg, gs_path_control_
int
gs_add_control_path_len(const gs_memory_t *mem, gs_path_control_t type, const char *path, size_t len)
{
+ return gs_add_control_path_len_flags(mem, type, path, len, 0);
+}
+
+int
+gs_add_control_path_len_flags(const gs_memory_t *mem, gs_path_control_t type, const char *path, size_t len, int flags)
+{
gs_path_control_set_t *control;
unsigned int n, i;
gs_lib_ctx_core_t *core;
@@ -766,33 +789,34 @@ gs_add_control_path_len(const gs_memory_t *mem, gs_path_control_t type, const ch
n = control->num;
for (i = 0; i < n; i++)
{
- if (strncmp(control->paths[i], buffer, rlen) == 0 &&
- control->paths[i][rlen] == 0) {
+ if (strncmp(control->entry[i].path, buffer, rlen) == 0 &&
+ control->entry[i].path[rlen] == 0) {
gs_free_object(core->memory, buffer, "gs_add_control_path_len");
return 0; /* Already there! */
}
}
if (control->num == control->max) {
- char **p;
+ gs_path_control_entry_t *p;
n = control->max * 2;
if (n == 0) {
n = 4;
- p = (char **)gs_alloc_bytes(core->memory, sizeof(*p)*n, "gs_lib_ctx(paths)");
+ p = (gs_path_control_entry_t *)gs_alloc_bytes(core->memory, sizeof(*p)*n, "gs_lib_ctx(entries)");
} else
- p = (char **)gs_resize_object(core->memory, control->paths, sizeof(*p)*n, "gs_lib_ctx(paths)");
+ p = (gs_path_control_entry_t *)gs_resize_object(core->memory, control->entry, sizeof(*p)*n, "gs_lib_ctx(entries)");
if (p == NULL) {
gs_free_object(core->memory, buffer, "gs_add_control_path_len");
return gs_error_VMerror;
}
- control->paths = p;
+ control->entry = p;
control->max = n;
}
n = control->num;
- control->paths[n] = buffer;
- control->paths[n][len] = 0;
+ control->entry[n].path = buffer;
+ control->entry[n].path[len] = 0;
+ control->entry[n].flags = flags;
control->num++;
return 0;
@@ -801,15 +825,24 @@ gs_add_control_path_len(const gs_memory_t *mem, gs_path_control_t type, const ch
int
gs_add_control_path(const gs_memory_t *mem, gs_path_control_t type, const char *path)
{
- if (path == NULL)
- return 0;
+ return gs_add_control_path_len_flags(mem, type, path, strlen(path), 0);
+}
- return gs_add_control_path_len(mem, type, path, strlen(path));
+int
+gs_add_control_path_flags(const gs_memory_t *mem, gs_path_control_t type, const char *path, int flags)
+{
+ return gs_add_control_path_len_flags(mem, type, path, strlen(path), flags);
}
int
gs_remove_control_path_len(const gs_memory_t *mem, gs_path_control_t type, const char *path, size_t len)
{
+ return gs_remove_control_path_len_flags(mem, type, path, len, 0);
+}
+
+int
+gs_remove_control_path_len_flags(const gs_memory_t *mem, gs_path_control_t type, const char *path, size_t len, int flags)
+{
gs_path_control_set_t *control;
unsigned int n, i;
gs_lib_ctx_core_t *core;
@@ -848,17 +881,18 @@ gs_remove_control_path_len(const gs_memory_t *mem, gs_path_control_t type, const
n = control->num;
for (i = 0; i < n; i++) {
- if (strncmp(control->paths[i], buffer, len) == 0 &&
- control->paths[i][len] == 0)
+ if (control->entry[i].flags == flags &&
+ strncmp(control->entry[i].path, buffer, len) == 0 &&
+ control->entry[i].path[len] == 0)
break;
}
gs_free_object(core->memory, buffer, "gs_remove_control_path_len");
if (i == n)
return 0;
- gs_free_object(core->memory, control->paths[i], "gs_lib_ctx(path)");
+ gs_free_object(core->memory, control->entry[i].path, "gs_lib_ctx(path)");
for (;i < n-1; i++)
- control->paths[i] = control->paths[i+1];
+ control->entry[i] = control->entry[i+1];
control->num = n-1;
return 0;
@@ -870,14 +904,23 @@ gs_remove_control_path(const gs_memory_t *mem, gs_path_control_t type, const cha
if (path == NULL)
return 0;
- return gs_remove_control_path_len(mem, type, path, strlen(path));
+ return gs_remove_control_path_len_flags(mem, type, path, strlen(path), 0);
+}
+
+int
+gs_remove_control_path_flags(const gs_memory_t *mem, gs_path_control_t type, const char *path, int flags)
+{
+ if (path == NULL)
+ return 0;
+
+ return gs_remove_control_path_len_flags(mem, type, path, strlen(path), flags);
}
void
gs_purge_control_paths(const gs_memory_t *mem, gs_path_control_t type)
{
gs_path_control_set_t *control;
- unsigned int n, i;
+ unsigned int n, in, out;
gs_lib_ctx_core_t *core;
if (mem == NULL || mem->gs_lib_ctx == NULL ||
@@ -899,13 +942,70 @@ gs_purge_control_paths(const gs_memory_t *mem, gs_path_control_t type)
}
n = control->num;
- for (i = 0; i < n; i++) {
- gs_free_object(core->memory, control->paths[i], "gs_lib_ctx(path)");
+ for (in = out = 0; in < n; in++) {
+ if (control->entry[in].flags & gs_path_control_flag_is_scratch_file) {
+ /* Don't purge scratch files! */
+ control->entry[out++] = control->entry[in];
+ } else
+ gs_free_object(core->memory, control->entry[in].path, "gs_lib_ctx(path)");
+ }
+ control->num = out;
+ if (out == 0) {
+ gs_free_object(core->memory, control->entry, "gs_lib_ctx(paths)");
+ control->entry = NULL;
+ control->max = 0;
+ }
+}
+
+void
+gs_purge_scratch_files(const gs_memory_t *mem)
+{
+ gs_path_control_set_t *control;
+ gs_path_control_t type;
+ int n, in, out;
+ gs_lib_ctx_core_t *core;
+
+ if (mem == NULL || mem->gs_lib_ctx == NULL ||
+ (core = mem->gs_lib_ctx->core) == NULL)
+ return;
+
+ for (type = gs_permit_file_reading; type <= gs_permit_file_control; type++)
+ {
+ switch(type) {
+ default:
+ case gs_permit_file_reading:
+ control = &core->permit_reading;
+ break;
+ case gs_permit_file_writing:
+ control = &core->permit_writing;
+ break;
+ case gs_permit_file_control:
+ control = &core->permit_control;
+ break;
+ }
+
+ n = control->num;
+ for (in = out = 0; in < n; in++) {
+ if ((control->entry[in].flags & gs_path_control_flag_is_scratch_file) == 0) {
+ /* Only purge scratch files! */
+ control->entry[out++] = control->entry[in];
+ } else {
+ if (type == gs_permit_file_reading) {
+ /* Call gp_unlink_impl, as we don't want gp_unlink
+ * to go looking in the lists we are currently
+ * manipulating! */
+ gp_unlink_impl(core->memory, control->entry[in].path);
+ }
+ gs_free_object(core->memory, control->entry[in].path, "gs_lib_ctx(path)");
+ }
+ }
+ control->num = out;
+ if (out == 0) {
+ gs_free_object(core->memory, control->entry, "gs_lib_ctx(paths)");
+ control->entry = NULL;
+ control->max = 0;
+ }
}
- gs_free_object(core->memory, control->paths, "gs_lib_ctx(paths)");
- control->paths = NULL;
- control->num = 0;
- control->max = 0;
}
void
@@ -971,7 +1071,7 @@ gs_remove_fs(const gs_memory_t *mem,
return;
pfs = &core->fs;
- while (pfs)
+ while (*pfs)
{
gs_fs_list_t *fs = *pfs;
if (fs->fs.open_file == rfs->open_file &&
@@ -1073,7 +1173,7 @@ gs_lib_ctx_stash_sanitized_arg(gs_lib_ctx_t *ctx, const char *arg)
core = ctx->core;
if (elide)
len = p-arg;
- else
+ else
len = strlen(arg);
if (core->arg_max == core->argc) {
@@ -1179,3 +1279,71 @@ int gs_lib_ctx_get_args(gs_lib_ctx_t *ctx, const char * const **argv)
*argv = (const char * const *)core->argv;
return core->argc;
}
+
+int gs_lib_ctx_register_callout(gs_memory_t *mem, gs_callout_fn fn, void *arg)
+{
+ gs_lib_ctx_core_t *core;
+ gs_callout_list_t *entry;
+
+ if (mem == NULL || mem->gs_lib_ctx == NULL ||
+ mem->gs_lib_ctx->core == NULL || fn == NULL)
+ return 0;
+
+ core = mem->gs_lib_ctx->core;
+ entry = (gs_callout_list_t *)gs_alloc_bytes(core->memory,
+ sizeof(*entry),
+ "gs_callout_list_t");
+ if (entry == NULL)
+ return_error(gs_error_VMerror);
+ entry->next = core->callouts;
+ entry->callout = fn;
+ entry->handle = arg;
+ core->callouts = entry;
+
+ return 0;
+}
+
+void gs_lib_ctx_deregister_callout(gs_memory_t *mem, gs_callout_fn fn, void *arg)
+{
+ gs_lib_ctx_core_t *core;
+ gs_callout_list_t **entry;
+
+ if (mem == NULL || mem->gs_lib_ctx == NULL ||
+ mem->gs_lib_ctx->core == NULL || fn == NULL)
+ return;
+
+ core = mem->gs_lib_ctx->core;
+ entry = &core->callouts;
+ while (*entry) {
+ if ((*entry)->callout == fn && (*entry)->handle == arg) {
+ gs_callout_list_t *next = (*entry)->next;
+ gs_free_object(core->memory, *entry, "gs_callout_list_t");
+ *entry = next;
+ } else {
+ entry = &(*entry)->next;
+ }
+ }
+}
+
+int gs_lib_ctx_callout(gs_memory_t *mem, const char *dev_name,
+ int id, int size, void *data)
+{
+ gs_lib_ctx_core_t *core;
+ gs_callout_list_t *entry;
+
+ if (mem == NULL || mem->gs_lib_ctx == NULL || mem->gs_lib_ctx->core == NULL)
+ return -1;
+
+ core = mem->gs_lib_ctx->core;
+ entry = core->callouts;
+ while (entry) {
+ int code = entry->callout(mem->gs_lib_ctx->top_of_system,
+ entry->handle, dev_name, id, size, data);
+ if (code >= 0)
+ return code;
+ if (code != gs_error_unknownerror)
+ return code;
+ entry = entry->next;
+ }
+ return -1;
+}
diff --git a/base/gslibctx.h b/base/gslibctx.h
index 79bc9da8..9f814b5c 100644
--- a/base/gslibctx.h
+++ b/base/gslibctx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -38,9 +38,14 @@ typedef struct gs_font_dir_s gs_font_dir;
typedef int (*client_check_file_permission_t) (gs_memory_t *mem, const char *fname, const int len, const char *permission);
typedef struct {
- unsigned int max;
- unsigned int num;
- char **paths;
+ char *path;
+ int flags;
+} gs_path_control_entry_t;
+
+typedef struct {
+ unsigned int max;
+ unsigned int num;
+ gs_path_control_entry_t *entry;
} gs_path_control_set_t;
typedef struct {
@@ -81,6 +86,14 @@ typedef struct gs_fs_list_s {
struct gs_fs_list_s *next;
} gs_fs_list_t;
+typedef int (*gs_callout_fn)(void *, void *, const char *, int, int, void *);
+
+typedef struct gs_callout_list_s {
+ struct gs_callout_list_s *next;
+ gs_callout_fn callout;
+ void *handle;
+} gs_callout_list_t;
+
typedef struct {
void *monitor;
int refs;
@@ -89,10 +102,12 @@ typedef struct {
FILE *fstdout;
FILE *fstderr;
gp_file *fstdout2; /* for redirecting %stdout and diagnostics */
- bool stdout_is_redirected; /* to stderr or fstdout2 */
- bool stdout_to_stderr;
- bool stdin_is_interactive;
- void *caller_handle; /* identifies caller of GS DLL/shared object */
+ int stdout_is_redirected; /* to stderr or fstdout2 */
+ int stdout_to_stderr;
+ int stdin_is_interactive;
+ void *default_caller_handle; /* identifies caller of GS DLL/shared object */
+ void *std_caller_handle;
+ void *poll_caller_handle;
void *custom_color_callback; /* pointer to color callback structure */
int (GSDLLCALL *stdin_fn)(void *caller_handle, char *buf, int len);
int (GSDLLCALL *stdout_fn)(void *caller_handle, const char *str, int len);
@@ -102,7 +117,7 @@ typedef struct {
/* True if we are emulating CPSI. Ideally this would be in the imager
* state, but this can't be done due to problems detecting changes in it
* for the clist based devices. */
- bool CPSI_mode;
+ int CPSI_mode;
int scanconverter;
int act_on_uel;
@@ -116,6 +131,8 @@ typedef struct {
* all builds. */
void *cal_ctx;
+ gs_callout_list_t *callouts;
+
/* Stashed args */
int arg_max;
int argc;
@@ -134,7 +151,7 @@ typedef struct gs_lib_ctx_s
*/
gs_gc_root_ptr name_table_root;
/* Define whether dictionaries expand automatically when full. */
- bool dict_auto_expand; /* ps dictionary: false level 1 true level 2 or 3 */
+ int dict_auto_expand; /* ps dictionary: false level 1 true level 2 or 3 */
/* A table of local copies of the IODevices */
struct gx_io_device_s **io_device_table;
int io_device_table_count;
@@ -143,7 +160,7 @@ typedef struct gs_lib_ctx_s
client_check_file_permission_t client_check_file_permission;
/* Define the default value of AccurateScreens that affects setscreen
and setcolorscreen. */
- bool screen_accurate_screens;
+ int screen_accurate_screens;
uint screen_min_screen_levels;
/* Accuracy vs. performance for ICC color */
uint icc_color_accuracy;
@@ -192,6 +209,12 @@ void *gs_lib_ctx_get_cms_context( const gs_memory_t *mem );
void gs_lib_ctx_set_cms_context( const gs_memory_t *mem, void *cms_context );
int gs_lib_ctx_get_act_on_uel( const gs_memory_t *mem );
+int gs_lib_ctx_register_callout(gs_memory_t *mem, gs_callout_fn, void *arg);
+void gs_lib_ctx_deregister_callout(gs_memory_t *mem, gs_callout_fn, void *arg);
+int gs_lib_ctx_callout(gs_memory_t *mem, const char *dev_name,
+ int id, int size, void *data);
+
+
#ifndef GS_THREADSAFE
/* HACK to get at non garbage collection memory pointer
*
@@ -230,9 +253,13 @@ void sjpxd_destroy(gs_memory_t *mem);
typedef enum {
gs_permit_file_reading = 0,
gs_permit_file_writing = 1,
- gs_permit_file_control = 2,
+ gs_permit_file_control = 2
} gs_path_control_t;
+enum {
+ gs_path_control_flag_is_scratch_file = 1
+};
+
int
gs_add_control_path(const gs_memory_t *mem, gs_path_control_t type, const char *path);
@@ -240,6 +267,12 @@ int
gs_add_control_path_len(const gs_memory_t *mem, gs_path_control_t type, const char *path, size_t path_len);
int
+gs_add_control_path_flags(const gs_memory_t *mem, gs_path_control_t type, const char *path, int flags);
+
+int
+gs_add_control_path_len_flags(const gs_memory_t *mem, gs_path_control_t type, const char *path, size_t path_len, int flags);
+
+int
gs_add_outputfile_control_path(gs_memory_t *mem, const char *fname);
int
@@ -254,10 +287,19 @@ gs_remove_control_path(const gs_memory_t *mem, gs_path_control_t type, const cha
int
gs_remove_control_path_len(const gs_memory_t *mem, gs_path_control_t type, const char *path, size_t path_len);
+int
+gs_remove_control_path_flags(const gs_memory_t *mem, gs_path_control_t type, const char *path, int flags);
+
+int
+gs_remove_control_path_len_flags(const gs_memory_t *mem, gs_path_control_t type, const char *path, size_t path_len, int flags);
+
void
gs_purge_control_paths(const gs_memory_t *mem, gs_path_control_t type);
void
+gs_purge_scratch_files(const gs_memory_t *mem);
+
+void
gs_activate_path_control(gs_memory_t *mem, int enable);
int
diff --git a/base/gsline.c b/base/gsline.c
index 80997be5..5107e5db 100644
--- a/base/gsline.c
+++ b/base/gsline.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsline.h b/base/gsline.h
index d76ff30a..b2fa402b 100644
--- a/base/gsline.h
+++ b/base/gsline.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gslparam.h b/base/gslparam.h
index 8cea1b93..c4245bf2 100644
--- a/base/gslparam.h
+++ b/base/gslparam.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsmalloc.c b/base/gsmalloc.c
index 971976a0..58047c9b 100644
--- a/base/gsmalloc.c
+++ b/base/gsmalloc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -152,8 +152,8 @@ heap_available()
for (n = 0; n < max_malloc_probes; n++) {
if ((probes[n] = malloc(malloc_probe_size)) == 0)
break;
- if_debug2('a', "[a]heap_available probe[%d]=0x%lx\n",
- n, (ulong) probes[n]);
+ if_debug2('a', "[a]heap_available probe[%d]="PRI_INTPTR"\n",
+ n, (intptr_t) probes[n]);
avail += malloc_probe_size;
}
while (n)
@@ -221,8 +221,8 @@ gs_heap_alloc_bytes(gs_memory_t * mem, size_t size, client_name_t cname)
gs_alloc_fill(ptr, gs_alloc_fill_alloc, size);
#ifdef DEBUG
if (gs_debug_c('a') || msg != ok_msg)
- dmlprintf6(mem, "[a+]gs_malloc(%s)(%"PRIuSIZE") = 0x%lx: %s, used=%ld, max=%ld\n",
- client_name_string(cname), size, (ulong) ptr, msg, mmem->used, mmem->max_used);
+ dmlprintf6(mem, "[a+]gs_malloc(%s)(%"PRIuSIZE") = "PRI_INTPTR": %s, used=%"PRIuSIZE", max=%"PRIuSIZE"\n",
+ client_name_string(cname), size, (intptr_t)ptr, msg, mmem->used, mmem->max_used);
#endif
return ptr;
#undef set_msg
@@ -279,9 +279,18 @@ gs_heap_resize_object(gs_memory_t * mem, void *obj, size_t new_num_elements,
return obj;
if (mmem->monitor)
gx_monitor_enter(mmem->monitor); /* Exclusive access */
+ if (new_size > mmem->limit - sizeof(gs_malloc_block_t)) {
+ /* too large to allocate; also avoids overflow. */
+ if (mmem->monitor)
+ gx_monitor_leave(mmem->monitor); /* Done with exclusive access */
+ return 0;
+ }
new_ptr = (gs_malloc_block_t *) gs_realloc(ptr, old_size, new_size);
- if (new_ptr == 0)
+ if (new_ptr == 0) {
+ if (mmem->monitor)
+ gx_monitor_leave(mmem->monitor); /* Done with exclusive access */
return 0;
+ }
if (new_ptr->prev)
new_ptr->prev->next = new_ptr;
else
@@ -316,17 +325,17 @@ gs_heap_free_object(gs_memory_t * mem, void *ptr, client_name_t cname)
gs_memory_type_ptr_t pstype;
struct_proc_finalize((*finalize));
- if_debug3m('a', mem, "[a-]gs_free(%s) 0x%lx(%"PRIuSIZE")\n",
- client_name_string(cname), (ulong) ptr,
+ if_debug3m('a', mem, "[a-]gs_free(%s) "PRI_INTPTR"(%"PRIuSIZE")\n",
+ client_name_string(cname), (intptr_t)ptr,
(ptr == 0 ? 0 : ((gs_malloc_block_t *) ptr)[-1].size));
if (ptr == 0)
return;
pstype = ((gs_malloc_block_t *) ptr)[-1].type;
finalize = pstype->finalize;
if (finalize != 0) {
- if_debug3m('u', mem, "[u]finalizing %s 0x%lx (%s)\n",
+ if_debug3m('u', mem, "[u]finalizing %s "PRI_INTPTR" (%s)\n",
struct_type_name_string(pstype),
- (ulong) ptr, client_name_string(cname));
+ (intptr_t)ptr, client_name_string(cname));
(*finalize) (mem, ptr);
}
if (mmem->monitor)
@@ -394,8 +403,8 @@ gs_heap_free_object(gs_memory_t * mem, void *ptr, client_name_t cname)
}
if (mmem->monitor)
gx_monitor_leave(mmem->monitor); /* Done with exclusive access */
- lprintf2("%s: free 0x%lx not found!\n",
- client_name_string(cname), (ulong) ptr);
+ lprintf2("%s: free "PRI_INTPTR" not found!\n",
+ client_name_string(cname), (intptr_t) ptr);
free((char *)((gs_malloc_block_t *) ptr - 1));
}
#endif
@@ -410,8 +419,8 @@ gs_heap_resize_string(gs_memory_t * mem, byte * data, size_t old_num, size_t new
client_name_t cname)
{
if (gs_heap_object_type(mem, data) != &st_bytes)
- lprintf2("%s: resizing non-string 0x%lx!\n",
- client_name_string(cname), (ulong) data);
+ lprintf2("%s: resizing non-string "PRI_INTPTR"!\n",
+ client_name_string(cname), (intptr_t)data);
return gs_heap_resize_object(mem, data, new_num, cname);
}
static void
@@ -501,8 +510,8 @@ gs_heap_free_all(gs_memory_t * mem, uint free_mask, client_name_t cname)
for (; bp != 0; bp = np) {
np = bp->next;
- if_debug3m('a', mem, "[a]gs_heap_free_all(%s) 0x%lx(%"PRIuSIZE")\n",
- client_name_string(bp->cname), (ulong) (bp + 1),
+ if_debug3m('a', mem, "[a]gs_heap_free_all(%s) "PRI_INTPTR"(%"PRIuSIZE")\n",
+ client_name_string(bp->cname), (intptr_t)(bp + 1),
bp->size);
gs_alloc_fill(bp + 1, gs_alloc_fill_free, bp->size);
free(bp);
diff --git a/base/gsmalloc.h b/base/gsmalloc.h
index 1f2f5b2b..44374c03 100644
--- a/base/gsmalloc.h
+++ b/base/gsmalloc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsmatrix.c b/base/gsmatrix.c
index 6403d0e9..6e70fa6e 100644
--- a/base/gsmatrix.c
+++ b/base/gsmatrix.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsmatrix.h b/base/gsmatrix.h
index 30088211..ba365da1 100644
--- a/base/gsmatrix.h
+++ b/base/gsmatrix.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsmchunk.c b/base/gsmchunk.c
index f890de0e..33c45cd4 100644
--- a/base/gsmchunk.c
+++ b/base/gsmchunk.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -219,7 +219,7 @@ gs_memory_chunk_wrap(gs_memory_t **wrapped, /* chunk allocator init */
cmem->defer_free_list = NULL;
#ifdef DEBUG_CHUNK_PRINT
- dmlprintf1(non_gc_target, "New chunk %p\n", cmem);
+ dmlprintf1(non_gc_target, "New chunk "PRI_INTPTR"\n", (intptr_t)cmem);
#endif
/* Init the chunk management values */
@@ -334,7 +334,7 @@ static int dump_free_loc(gs_memory_t *mem, chunk_free_node_t *node, int depth, v
else
dmlprintf(mem, "\\");
}
- dmlprintf3(mem, "%p+%x->%p\n", node, node->size, ((byte *)node)+node->size);
+ dmlprintf3(mem, PRI_INTPTR"+%x->"PRI_INTPTR"\n", (intptr_t)node, node->size, (intptr_t)((byte *)node)+node->size);
#endif
CHUNK_ASSERT(mem, *limit < (void *)node);
*limit = ((byte *)node)+node->size;
@@ -361,7 +361,7 @@ static int dump_free_size(gs_memory_t *mem, chunk_free_node_t *node, int depth,
else
dmlprintf(mem, "\\");
}
- dmlprintf3(mem, "%p+%x->%p\n", node, node->size, ((byte *)node)+node->size);
+ dmlprintf3(mem, PRI_INTPTR"+%x->"PRI_INTPTR"\n", (intptr_t)node, node->size, (intptr_t)((byte *)node)+node->size);
#endif
CHUNK_ASSERT(mem, *size < node->size || (*size == node->size && *addr < (void *)node));
*size = node->size;
@@ -380,13 +380,13 @@ gs_memory_chunk_dump_memory(const gs_memory_t *mem)
uint total = 0;
#ifdef DEBUG_CHUNK_PRINT
- dmlprintf1(cmem->target, "Chunk %p:\n", cmem);
+ dmlprintf1(cmem->target, "Chunk "PRI_INTPTR":\n", (intptr_t)cmem);
#ifdef DEBUG_CHUNK_PRINT_SLABS
{
chunk_slab_t *slab;
dmlprintf(cmem->target, "Slabs\n");
for (slab = cmem->slabs; slab != NULL; slab = slab->next)
- dmlprintf1(cmem->target, " %p\n", slab);
+ dmlprintf1(cmem->target, " "PRI_INTPTR"\n", (intptr_t)slab);
}
#endif
dmlprintf(cmem->target, "Locs:\n");
@@ -778,9 +778,11 @@ chunk_obj_alloc(gs_memory_t *mem, uint size, gs_memory_type_ptr_t type, client_n
#ifdef DEBUG_CHUNK_PRINT
#ifdef DEBUG_SEQ
- dmlprintf4(cmem->target, "Event %x: malloc(chunk=%p, size=%x, cname=%s)\n", cmem->sequence, cmem, newsize, cname);
+ dmlprintf4(cmem->target, "Event %x: malloc(chunk="PRI_INTPTR", size=%x, cname=%s)\n",
+ cmem->sequence, (intptr_t)cmem, newsize, cname);
#else
- dmlprintf3(cmem->target, "malloc(chunk=%p, size=%x, cname=%s)\n", cmem, newsize, cname);
+ dmlprintf3(cmem->target, "malloc(chunk="PRI_INTPTR", size=%x, cname=%s)\n",
+ (intptr_t)cmem, newsize, cname);
#endif
#endif
@@ -949,13 +951,15 @@ chunk_obj_alloc(gs_memory_t *mem, uint size, gs_memory_type_ptr_t type, client_n
obj->sequence = cmem->sequence;
#endif
if (gs_debug_c('A'))
- dmlprintf3(mem, "[a+]chunk_obj_alloc (%s)(%u) = 0x%lx: OK.\n",
- client_name_string(cname), size, (ulong) obj);
+ dmlprintf3(mem, "[a+]chunk_obj_alloc (%s)(%u) = "PRI_INTPTR": OK.\n",
+ client_name_string(cname), size, (intptr_t) obj);
#ifdef DEBUG_CHUNK_PRINT
#ifdef DEBUG_SEQ
- dmlprintf5(cmem->target, "Event %x: malloced(chunk=%p, addr=%p, size=%x, cname=%s)\n", obj->sequence, cmem, obj, obj->size, cname);
+ dmlprintf5(cmem->target, "Event %x: malloced(chunk="PRI_INTPTR", addr="PRI_INTPTR", size=%x, cname=%s)\n",
+ obj->sequence, (intptr_t)cmem, (intptr_t)obj, obj->size, cname);
#else
- dmlprintf4(cmem->target, "malloced(chunk=%p, addr=%p, size=%x, cname=%s)\n", cmem, obj, obj->size, cname);
+ dmlprintf4(cmem->target, "malloced(chunk="PRI_INTPTR", addr="PRI_INTPTR", size=%x, cname=%s)\n",
+ (intptr_t)cmem, (intptr_t)obj, obj->size, cname);
#endif
#endif
#ifdef DEBUG_CHUNK
@@ -1076,9 +1080,11 @@ chunk_free_object(gs_memory_t *mem, void *ptr, client_name_t cname)
#ifdef DEBUG_CHUNK_PRINT
#ifdef DEBUG_SEQ
cmem->sequence++;
- dmlprintf6(cmem->target, "Event %x: free(chunk=%p, addr=%p, size=%x, num=%x, cname=%s)\n", cmem->sequence, cmem, obj, obj->size, obj->sequence, cname);
+ dmlprintf6(cmem->target, "Event %x: free(chunk="PRI_INTPTR", addr="PRI_INTPTR", size=%x, num=%x, cname=%s)\n",
+ cmem->sequence, (intptr_t)cmem, (intptr_t)obj, obj->size, obj->sequence, cname);
#else
- dmlprintf4(cmem->target, "free(chunk=%p, addr=%p, size=%x, cname=%s)\n", cmem, obj, obj->size, cname);
+ dmlprintf4(cmem->target, "free(chunk="PRI_INTPTR", addr="PRI_INTPTR", size=%x, cname=%s)\n",
+ (intptr_t)cmem, (intptr_t)obj, obj->size, cname);
#endif
#endif
@@ -1089,8 +1095,8 @@ chunk_free_object(gs_memory_t *mem, void *ptr, client_name_t cname)
}
/* finalize may change the head_**_chunk doing free of stuff */
- if_debug3m('A', cmem->target, "[a-]chunk_free_object(%s) 0x%lx(%u)\n",
- client_name_string(cname), (ulong) ptr, obj->size);
+ if_debug3m('A', cmem->target, "[a-]chunk_free_object(%s) "PRI_INTPTR"(%u)\n",
+ client_name_string(cname), (intptr_t)ptr, obj->size);
if (SINGLE_OBJECT_CHUNK(obj->size - obj->padding)) {
gs_free_object(cmem->target, obj, "chunk_free_object(single object)");
diff --git a/base/gsmchunk.h b/base/gsmchunk.h
index 8a200422..50200e7a 100644
--- a/base/gsmchunk.h
+++ b/base/gsmchunk.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsmd5.c b/base/gsmd5.c
index ecd10ba3..db8c6ed8 100644
--- a/base/gsmd5.c
+++ b/base/gsmd5.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1999-2018 Artifex Software, Inc.
+ Copyright (C) 1999-2020 Artifex Software, Inc.
All rights reserved.
This software is provided 'as-is', without any express or implied
diff --git a/base/gsmd5.h b/base/gsmd5.h
index b159afb8..61305928 100644
--- a/base/gsmd5.h
+++ b/base/gsmd5.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1999-2018 Artifex Software, Inc.
+ Copyright (C) 1999-2020 Artifex Software, Inc.
All rights reserved.
This software is provided 'as-is', without any express or implied
diff --git a/base/gsmdebug.h b/base/gsmdebug.h
index 2b332c5a..5c9c8762 100644
--- a/base/gsmdebug.h
+++ b/base/gsmdebug.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsmemory.c b/base/gsmemory.c
index d84474b9..99a801f5 100644
--- a/base/gsmemory.c
+++ b/base/gsmemory.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -16,6 +16,7 @@
/* Generic allocator support */
#include "memory_.h"
+#include "stdint_.h"
#include "gdebug.h"
#include "gstypes.h"
#include "gsmemory.h"
@@ -106,8 +107,8 @@ gs_resize_struct_array(gs_memory_t *mem, void *obj, size_t num_elements,
return gs_alloc_struct_array(mem, num_elements, void, pstype, cname);
#ifdef DEBUG
if (gs_object_type(mem, obj) != pstype) {
- lprintf3("resize_struct_array 0x%lx, type was 0x%lx, expected 0x%lx!\n",
- (ulong)obj, (ulong)gs_object_type(mem, obj), (ulong)pstype);
+ lprintf3("resize_struct_array "PRI_INTPTR", type was "PRI_INTPTR", expected "PRI_INTPTR"!\n",
+ (intptr_t)obj, (intptr_t)gs_object_type(mem, obj), (intptr_t)pstype);
return 0;
}
#endif
@@ -241,7 +242,7 @@ rc_object_type_name(const void *vp, const rc_header *prc)
dist = (const char *)&dist - (const char *)vp;
if (dist < 10000 && dist > -10000)
return "(on stack)";
- if ((ulong)pstype < 0x10000 || (long)pstype < 0)
+ if ((uintptr_t)pstype < 0x10000 || (uintptr_t)pstype < 0)
return "(anomalous)";
}
return client_name_string(gs_struct_type_name(pstype));
@@ -251,29 +252,29 @@ rc_object_type_name(const void *vp, const rc_header *prc)
void
rc_trace_init_free(const void *vp, const rc_header *prc)
{
- dmprintf3(prc->memory, "[^]%s 0x%lx init = %ld\n",
- rc_object_type_name(vp, prc), (ulong)vp, (long)prc->ref_count);
+ dmprintf3(prc->memory, "[^]%s "PRI_INTPTR" init = %ld\n",
+ rc_object_type_name(vp, prc), (intptr_t)vp, (long)prc->ref_count);
}
void
rc_trace_free_struct(const void *vp, const rc_header *prc, client_name_t cname)
{
- dmprintf3(prc->memory, "[^]%s 0x%lx => free (%s)\n",
+ dmprintf3(prc->memory, "[^]%s "PRI_INTPTR" => free (%s)\n",
rc_object_type_name(vp, prc),
- (ulong)vp, client_name_string(cname));
+ (intptr_t)vp, client_name_string(cname));
}
void
rc_trace_increment(const void *vp, const rc_header *prc)
{
- dmprintf3(prc->memory, "[^]%s 0x%lx ++ => %ld\n",
+ dmprintf3(prc->memory, "[^]%s "PRI_INTPTR" ++ => %ld\n",
rc_object_type_name(vp, prc),
- (ulong)vp, (long)prc->ref_count);
+ (intptr_t)vp, (long)prc->ref_count);
}
void
rc_trace_adjust(const void *vp, const rc_header *prc, int delta, const char *cname)
{
- dmprintf5(prc->memory, "[^]%s 0x%lx %+d => %ld (%s)\n",
+ dmprintf5(prc->memory, "[^]%s "PRI_INTPTR" %+d => %ld (%s)\n",
rc_object_type_name(vp, prc),
- (ulong)vp, delta, (long)(prc->ref_count + delta), cname);
+ (intptr_t)vp, delta, (long)(prc->ref_count + delta), cname);
}
#endif /* DEBUG */
@@ -297,8 +298,8 @@ ENUM_PTRS_BEGIN_PROC(basic_enum_ptrs)
/* with number of elements 0 and allocation not passing 'element' */
if (size == 0) {
#ifdef DEBUG
- dmprintf2(mem, " basic_enum_ptrs: Attempt to enum 0 size structure at 0x%lx, type: %s\n",
- (ulong)vptr, pstype->sname);
+ dmprintf2(mem, " basic_enum_ptrs: Attempt to enum 0 size structure at "PRI_INTPTR", type: %s\n",
+ (intptr_t)vptr, pstype->sname);
#endif
return 0;
}
@@ -309,8 +310,8 @@ ENUM_PTRS_BEGIN_PROC(basic_enum_ptrs)
#ifdef DEBUG
/* some extra checking to make sure we aren't out of bounds */
if (ppe->offset > size - sizeof(void *)) {
- dmprintf4(mem, " basic_enum_ptrs: Attempt to enum ptr with offset=%d beyond size=%d: structure at 0x%lx, type: %s\n",
- ppe->offset, size, (ulong)vptr, pstype->sname);
+ dmprintf4(mem, " basic_enum_ptrs: Attempt to enum ptr with offset=%d beyond size=%d: structure at "PRI_INTPTR", type: %s\n",
+ ppe->offset, size, (intptr_t)vptr, pstype->sname);
return 0;
}
#endif
diff --git a/base/gsmemory.h b/base/gsmemory.h
index a5d3ad3d..375c2fb7 100644
--- a/base/gsmemory.h
+++ b/base/gsmemory.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsmemraw.h b/base/gsmemraw.h
index 0ce847e5..7782ca07 100644
--- a/base/gsmemraw.h
+++ b/base/gsmemraw.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsmemret.c b/base/gsmemret.c
index 667a0f68..505f1f40 100644
--- a/base/gsmemret.c
+++ b/base/gsmemret.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsmemret.h b/base/gsmemret.h
index e7acad08..c689bcfb 100644
--- a/base/gsmemret.h
+++ b/base/gsmemret.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsmisc.c b/base/gsmisc.c
index 35e36220..f0604ef3 100644
--- a/base/gsmisc.c
+++ b/base/gsmisc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -63,7 +63,7 @@ int outprintf(const gs_memory_t *mem, const char *fmt, ...)
va_start(args, fmt);
count = vsnprintf(buf, sizeof(buf), fmt, args);
- if (count >= sizeof(buf) || count < 0) { /* C99 || MSVC */
+ if (count < 0 || count >= sizeof(buf)) { /* MSVC || C99 */
outwrite(mem, buf, sizeof(buf) - 1);
outwrite(mem, msg_truncated, sizeof(msg_truncated) - 1);
} else {
@@ -82,7 +82,7 @@ int errprintf_nomem(const char *fmt, ...)
va_start(args, fmt);
count = vsnprintf(buf, sizeof(buf), fmt, args);
- if (count >= sizeof(buf) || count < 0) { /* C99 || MSVC */
+ if (count < 0 || count >= sizeof(buf)) { /* MSVC || C99*/
errwrite_nomem(buf, sizeof(buf) - 1);
errwrite_nomem(msg_truncated, sizeof(msg_truncated) - 1);
} else {
@@ -101,7 +101,7 @@ int errprintf(const gs_memory_t *mem, const char *fmt, ...)
va_start(args, fmt);
count = vsnprintf(buf, sizeof(buf), fmt, args);
- if (count >= sizeof(buf) || count < 0) { /* C99 || MSVC */
+ if (count < 0 || count >= sizeof(buf)) { /* MSVC || C99 */
errwrite(mem, buf, sizeof(buf) - 1);
errwrite(mem, msg_truncated, sizeof(msg_truncated) - 1);
} else {
@@ -222,15 +222,22 @@ dmprintf_file_only(const gs_memory_t *mem,const char *file)
dpfm(mem, dprintf_file_only_format, dprintf_file_tail(file));
}
#endif
+
+/* This calculation is also performed for pdfwrite to manufacture the Producer string
+ * in PDF output. The code is in ghostpdl/devices/vector/gdevpdfu.c pdf_store_default_Producer().
+ * Should we change this calculation both sets of code need to be updated.
+ */
void
printf_program_ident(const gs_memory_t *mem, const char *program_name, long revision_number)
{
if (program_name)
outprintf(mem, (revision_number ? "%s " : "%s"), program_name);
if (revision_number) {
- int fpart = revision_number % 100;
+ int major = (int)(revision_number / 1000);
+ int minor = (int)(revision_number - (major * 1000)) / 10;
+ int patch = revision_number % 10;
- outprintf(mem, "%d.%02d", (int)(revision_number / 100), fpart);
+ outprintf(mem, "%d.%02d.%d", major, minor, patch);
}
}
void
@@ -241,9 +248,11 @@ emprintf_program_ident(const gs_memory_t *mem,
if (program_name) {
epfm(mem, (revision_number ? "%s " : "%s"), program_name);
if (revision_number) {
- int fpart = revision_number % 100;
+ int major = (int)(revision_number / 1000);
+ int minor = (int)(revision_number - (major * 1000)) / 10;
+ int patch = revision_number % 10;
- epfm(mem, "%d.%02d", (int)(revision_number / 100), fpart);
+ epfm(mem, "%d.%02d.%d", major, minor, patch);
}
epfm(mem, ": ");
}
@@ -328,7 +337,7 @@ int gs_throw_imp(const char *func, const char *file, int line, int op, int code,
if (op == 3)
errprintf_nomem(" %s:%d: %s(): %s\n", file, line, func, msg);
- if (count >= sizeof(msg) || count < 0) { /* C99 || MSVC */
+ if (count < 0 || count >= sizeof(msg)) { /* MSVC || C99 */
errwrite_nomem(msg_truncated, sizeof(msg_truncated) - 1);
}
return code;
@@ -555,7 +564,7 @@ debug_dump_bytes(const gs_memory_t *mem, const byte * from, const byte * to, con
while (p != to) {
const byte *q = min(p + 16, to);
- dmprintf1(mem, "0x%lx:", (ulong) p);
+ dmprintf1(mem, PRI_INTPTR, (intptr_t)p);
while (p != q)
dmprintf1(mem, " %02x", *p++);
dmputc(mem, '\n');
@@ -609,7 +618,7 @@ debug_print_string_hex(const gs_memory_t *mem, const byte * chrs, uint len)
BEGIN\
ulong *fp_ = (ulong *)&first_arg - 2;\
for (; fp_ && (fp_[1] & 0xff000000) == 0x08000000; fp_ = (ulong *)*fp_)\
- dprintf2(" fp=0x%lx ip=0x%lx\n", (ulong)fp_, fp_[1]);\
+ dprintf2(" fp="PRI_INTPTR" ip=0x%lx\n", (intptr_t)fp_, fp_[1]);\
END
#endif
diff --git a/base/gsnamecl.c b/base/gsnamecl.c
index 6c8df106..6de40ac1 100644
--- a/base/gsnamecl.c
+++ b/base/gsnamecl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsnamecl.h b/base/gsnamecl.h
index 88343c06..d9acfb7a 100644
--- a/base/gsnamecl.h
+++ b/base/gsnamecl.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsncdummy.c b/base/gsncdummy.c
index 58654b94..352f9379 100644
--- a/base/gsncdummy.c
+++ b/base/gsncdummy.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -252,7 +252,7 @@ client_pantone_install_Separation(client_custom_color_params_t * pparam,
/*
* Get the character string and length for the component name.
*/
- pcs->params.separation.get_colorname_string(dev->memory, name,
+ pcs->params.separation.get_colorname_string(pgs, name,
&pname, &name_size);
/*
* Compare the colorant name to those in our PANTONE color list.
@@ -323,7 +323,7 @@ client_pantone_install_DeviceN(client_custom_color_params_t * pparam,
/*
* Get the character string and length for the component name.
*/
- pcs->params.device_n.get_colorname_string(dev->memory, names[i],
+ pcs->params.device_n.get_colorname_string(pgs, names[i],
&pname, &name_size);
/*
* Postscript does not include /None as a color component but it is
diff --git a/base/gsncdummy.h b/base/gsncdummy.h
index f6912b29..2b9acd59 100644
--- a/base/gsncdummy.h
+++ b/base/gsncdummy.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsnogc.c b/base/gsnogc.c
index d36588d3..717179ee 100644
--- a/base/gsnogc.c
+++ b/base/gsnogc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsnogc.h b/base/gsnogc.h
index 5f468b01..7c61bafb 100644
--- a/base/gsnogc.h
+++ b/base/gsnogc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsnotify.c b/base/gsnotify.c
index b54ccae6..f4544073 100644
--- a/base/gsnotify.c
+++ b/base/gsnotify.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsnotify.h b/base/gsnotify.h
index 548dfcd5..608a2c20 100644
--- a/base/gsnotify.h
+++ b/base/gsnotify.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsovrc.c b/base/gsovrc.c
index 3a60a865..38ad867c 100644
--- a/base/gsovrc.c
+++ b/base/gsovrc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsovrc.h b/base/gsovrc.h
index ccef5f5c..39f0e890 100644
--- a/base/gsovrc.h
+++ b/base/gsovrc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gspaint.c b/base/gspaint.c
index 13836061..a4dc31d8 100644
--- a/base/gspaint.c
+++ b/base/gspaint.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -497,7 +497,7 @@ do_stroke(gs_gstate * pgs)
}
gs_setlinewidth(pgs, new_width);
scale_dash_pattern(pgs, scale);
- gs_setflat(pgs, orig_flatness * scale);
+ gs_setflat(pgs, (double)(orig_flatness * scale));
/*
* The alpha-buffer device requires that we fill the
* entire path as a single unit.
@@ -607,8 +607,23 @@ static int do_fill_stroke(gs_gstate *pgs, int rule, int *restart)
/* It is either our first time, or the stroke was a pattern and
we are coming back from the error if restart < 1 (0 is first
time, 1 stroke is set, and we only need to finish out fill */
- if (pgs->is_fill_color)
- gs_swapcolors_quick(pgs);
+ if (pgs->is_fill_color) {
+ /* if the fill_color is a pattern, make sure the tile is locked so that */
+ /* it does not get evicted as the stroke color is loaded. */
+ if (gx_dc_is_pattern1_color(gs_currentdevicecolor_inline(pgs))) {
+ gs_id id;
+
+ if(gs_currentdevicecolor_inline(pgs)->colors.pattern.p_tile != NULL) {
+ id = gs_currentdevicecolor_inline(pgs)->colors.pattern.p_tile->id;
+ code = gx_pattern_cache_entry_set_lock(pgs, id, true);
+ } else {
+ code = 0;
+ }
+ if (code < 0)
+ return code; /* lock failed -- tile not in cache? */
+ }
+ gs_swapcolors_quick(pgs); /* switch to the stroke color */
+ }
if (*restart < 1) {
@@ -642,9 +657,14 @@ static int do_fill_stroke(gs_gstate *pgs, int rule, int *restart)
return code;
/* If this was a pattern color, make sure and lock it in the pattern_cache */
if (gx_dc_is_pattern1_color(gs_currentdevicecolor_inline(pgs))) {
- gs_id id = gs_currentdevicecolor_inline(pgs)->colors.pattern.p_tile->id;
+ gs_id id;
- code = gx_pattern_cache_entry_set_lock(pgs, id, true);
+ if(gs_currentdevicecolor_inline(pgs)->colors.pattern.p_tile != NULL) {
+ id = gs_currentdevicecolor_inline(pgs)->colors.pattern.p_tile->id;
+ code = gx_pattern_cache_entry_set_lock(pgs, id, true);
+ } else {
+ code = 0;
+ }
if (code < 0)
return code; /* lock failed -- tile not in cache? */
}
@@ -730,7 +750,7 @@ static int do_fill_stroke(gs_gstate *pgs, int rule, int *restart)
goto out;
gs_setlinewidth(pgs, new_width);
scale_dash_pattern(pgs, scale);
- gs_setflat(pgs, orig_flatness * scale);
+ gs_setflat(pgs, (double)(orig_flatness * scale));
pgs->log_op = orig_lop;
} else
acode = 0;
@@ -742,13 +762,33 @@ static int do_fill_stroke(gs_gstate *pgs, int rule, int *restart)
gs_setflat(pgs, orig_flatness);
acode = alpha_buffer_release(pgs, code >= 0);
}
+ if (pgs->is_fill_color) {
+ /* The color _should_ be the fill color, so make sure it is unlocked */
+ if (gx_dc_is_pattern1_color(gs_currentdevicecolor_inline(pgs))) {
+ gs_id id;
+
+ if(gs_currentdevicecolor_inline(pgs)->colors.pattern.p_tile != NULL) {
+ id = gs_currentdevicecolor_inline(pgs)->colors.pattern.p_tile->id;
+ code = gx_pattern_cache_entry_set_lock(pgs, id, false);
+ } else {
+ code = 0;
+ }
+ if (code < 0)
+ return code; /* lock failed -- tile not in cache? */
+ }
+ }
out:
if (gx_dc_is_pattern1_color(gs_altdevicecolor_inline(pgs))) {
- gs_id id = gs_altdevicecolor_inline(pgs)->colors.pattern.p_tile->id;
-
- rcode = gx_pattern_cache_entry_set_lock(pgs, id, false);
- if (rcode < 0)
- return rcode; /* unlock failed -- shouldn't be possible */
+ gs_id id;
+
+ if (gs_altdevicecolor_inline(pgs)->colors.pattern.p_tile != NULL) {
+ id = gs_altdevicecolor_inline(pgs)->colors.pattern.p_tile->id;
+ rcode = gx_pattern_cache_entry_set_lock(pgs, id, false);
+ if (rcode < 0)
+ return rcode; /* unlock failed -- shouldn't be possible */
+ } else {
+ code = 0;
+ }
}
if (code >= 0 && acode < 0)
code = acode;
diff --git a/base/gspaint.h b/base/gspaint.h
index c95b6b48..214c6e52 100644
--- a/base/gspaint.h
+++ b/base/gspaint.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsparam.c b/base/gsparam.c
index 80cb0b2a..a5741565 100644
--- a/base/gsparam.c
+++ b/base/gsparam.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -178,6 +178,20 @@ param_coerce_typed(gs_param_typed_value * pvalue, gs_param_type req_type,
switch (pvalue->type /* actual type */ ) {
case gs_param_type_int:
switch (req_type) {
+ case gs_param_type_i64:
+ {
+ int64_t i64 = (int64_t)pvalue->value.i;
+ pvalue->value.i64 = i64;
+ goto ok;
+ }
+ case gs_param_type_size_t:
+ {
+ size_t z = (size_t)pvalue->value.i;
+ if (pvalue->value.i < 0)
+ return gs_error_rangecheck;
+ pvalue->value.z = z;
+ goto ok;
+ }
case gs_param_type_long:
{
long l = (long)pvalue->value.i;
@@ -196,14 +210,31 @@ param_coerce_typed(gs_param_typed_value * pvalue, gs_param_type req_type,
break;
case gs_param_type_long:
switch (req_type) {
+ case gs_param_type_i64:
+ {
+ int64_t i64 = (int64_t)pvalue->value.l;
+ pvalue->value.i64 = i64;
+ goto ok;
+ }
+ case gs_param_type_size_t:
+ {
+ size_t z = (size_t)pvalue->value.l;
+ if (pvalue->value.l < 0
+#if ARCH_SIZEOF_SIZE_T < ARCH_SIZEOF_LONG
+ || pvalue->value.l != (long)z
+#endif
+ )
+ return_error(gs_error_rangecheck);
+ pvalue->value.z = z;
+ goto ok;
+ }
case gs_param_type_int:
{
- int int1;
+ int int1 = (int)pvalue->value.l;
#if ARCH_SIZEOF_INT < ARCH_SIZEOF_LONG
- if (pvalue->value.l != (int)pvalue->value.l)
+ if (pvalue->value.l != (long)int1)
return_error(gs_error_rangecheck);
#endif
- int1 = (int)pvalue->value.l;
pvalue->value.i = int1;
goto ok;
}
@@ -217,6 +248,95 @@ param_coerce_typed(gs_param_typed_value * pvalue, gs_param_type req_type,
break;
}
break;
+ case gs_param_type_i64:
+ switch (req_type) {
+ case gs_param_type_size_t:
+ {
+ size_t z = (size_t)pvalue->value.i64;
+ if (pvalue->value.i64 < 0
+#if ARCH_SIZEOF_SIZE_T < 8 /* sizeof(int64_t) */
+ || pvalue->value.i64 != (int64_t)z
+#endif
+ )
+ return_error(gs_error_rangecheck);
+ pvalue->value.z = z;
+ goto ok;
+ }
+ case gs_param_type_long:
+ {
+ long l = (long)pvalue->value.i64;
+#if ARCH_SIZEOF_LONG < 8 /* sizeof(int64_t) */
+ if (pvalue->value.i64 != (int64_t)l)
+ return_error(gs_error_rangecheck);
+#endif
+ pvalue->value.l = l;
+ goto ok;
+ }
+ case gs_param_type_int:
+ {
+ int int1 = (int)pvalue->value.l;
+#if ARCH_SIZEOF_INT < 8 /* sizeof(int64_t) */
+ if (pvalue->value.i64 != (int)int1)
+ return_error(gs_error_rangecheck);
+#endif
+ pvalue->value.i = int1;
+ goto ok;
+ }
+ case gs_param_type_float:
+ {
+ float fl = (float)pvalue->value.i64;
+ pvalue->value.f = fl;
+ goto ok;
+ }
+ default:
+ break;
+ }
+ break;
+ case gs_param_type_size_t:
+ switch (req_type) {
+ case gs_param_type_i64:
+ {
+ int64_t i64 = (int64_t)pvalue->value.z;
+ if (i64 < 0
+#if 8 /* sizeof(int64_t) */ < ARCH_SIZEOF_SIZE_T
+ /* Unlikely, but let's plan for the day when we need 128bit addressing :) */
+ || pvalue->value.z != (size_t)i64
+#endif
+ )
+ return_error(gs_error_rangecheck);
+ pvalue->value.i64 = i64;
+ goto ok;
+ }
+ case gs_param_type_long:
+ {
+ long l = (long)pvalue->value.i64;
+#if ARCH_SIZEOF_LONG < 8 /* sizeof(int64_t) */
+ if (pvalue->value.i64 != (int64_t)l)
+ return_error(gs_error_rangecheck);
+#endif
+ pvalue->value.l = l;
+ goto ok;
+ }
+ case gs_param_type_int:
+ {
+ int int1 = (int)pvalue->value.l;
+#if ARCH_SIZEOF_INT < 8 /* sizeof(int64_t) */
+ if (pvalue->value.i64 != (int)int1)
+ return_error(gs_error_rangecheck);
+#endif
+ pvalue->value.i = int1;
+ goto ok;
+ }
+ case gs_param_type_float:
+ {
+ float fl = (float)pvalue->value.i64;
+ pvalue->value.f = fl;
+ goto ok;
+ }
+ default:
+ break;
+ }
+ break;
case gs_param_type_string:
if (req_type == gs_param_type_name)
goto ok;
@@ -321,6 +441,16 @@ param_read_long(gs_param_list * plist, gs_param_name pkey, long *pvalue)
RETURN_READ_TYPED(l, gs_param_type_long);
}
int
+param_read_i64(gs_param_list * plist, gs_param_name pkey, int64_t *pvalue)
+{
+ RETURN_READ_TYPED(i64, gs_param_type_i64);
+}
+int
+param_read_size_t(gs_param_list * plist, gs_param_name pkey, size_t *pvalue)
+{
+ RETURN_READ_TYPED(z, gs_param_type_size_t);
+}
+int
param_read_float(gs_param_list * plist, gs_param_name pkey, float *pvalue)
{
RETURN_READ_TYPED(f, gs_param_type_float);
@@ -397,6 +527,16 @@ param_write_long(gs_param_list * plist, gs_param_name pkey, const long *pvalue)
RETURN_WRITE_TYPED(l, gs_param_type_long);
}
int
+param_write_i64(gs_param_list * plist, gs_param_name pkey, const int64_t *pvalue)
+{
+ RETURN_WRITE_TYPED(i64, gs_param_type_i64);
+}
+int
+param_write_size_t(gs_param_list * plist, gs_param_name pkey, const size_t *pvalue)
+{
+ RETURN_WRITE_TYPED(z, gs_param_type_size_t);
+}
+int
param_write_float(gs_param_list * plist, gs_param_name pkey,
const float *pvalue)
{
diff --git a/base/gsparam.h b/base/gsparam.h
index 0f474c26..3b0aaa21 100644
--- a/base/gsparam.h
+++ b/base/gsparam.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -20,6 +20,7 @@
# define gsparam_INCLUDED
#include "gsstype.h"
+#include "stdint_.h"
/*
* Several interfaces use parameter dictionaries to communicate sets of
@@ -47,7 +48,7 @@ typedef const char *gs_param_name;
typedef enum {
/* Scalar */
gs_param_type_null, gs_param_type_bool, gs_param_type_int,
- gs_param_type_long, gs_param_type_float,
+ gs_param_type_long, gs_param_type_size_t, gs_param_type_i64, gs_param_type_float,
/* Homogenous collection */
gs_param_type_string, gs_param_type_name,
gs_param_type_int_array, gs_param_type_float_array,
@@ -98,8 +99,8 @@ typedef gs_param_collection gs_param_array;
* Define the sizes of the various parameter value types, indexed by type.
*/
#define GS_PARAM_TYPE_SIZES(dict_size)\
- 0, sizeof(bool), sizeof(int), sizeof(long), sizeof(float),\
- sizeof(gs_param_string), sizeof(gs_param_string),\
+ 0, sizeof(bool), sizeof(int), sizeof(long), sizeof(size_t), sizeof(int64_t),\
+ sizeof(float), sizeof(gs_param_string), sizeof(gs_param_string),\
sizeof(gs_param_int_array), sizeof(gs_param_float_array),\
sizeof(gs_param_string_array), sizeof(gs_param_string_array),\
(dict_size), (dict_size), (dict_size)
@@ -108,8 +109,8 @@ typedef gs_param_collection gs_param_array;
* to by the various value types.
*/
#define GS_PARAM_TYPE_BASE_SIZES(dict_elt_size)\
- 0, sizeof(bool), sizeof(int), sizeof(long), sizeof(float),\
- 1, 1, sizeof(int), sizeof(float),\
+ 0, sizeof(bool), sizeof(int), sizeof(long), sizeof(size_t), sizeof(int64_t),\
+ sizeof(float), 1, 1, sizeof(int), sizeof(float),\
sizeof(gs_param_string), sizeof(gs_param_string),\
(dict_elt_size), (dict_elt_size), (dict_elt_size)
@@ -122,6 +123,8 @@ extern const byte gs_param_type_base_sizes[];
bool b;\
int i;\
long l;\
+ size_t z;\
+ int64_t i64;\
float f;\
gs_param_string s;\
gs_param_string n;\
@@ -190,10 +193,8 @@ typedef enum {
* union means 'beginning of enumeration'.
*/
typedef union gs_param_enumerator_s {
- int intval;
- long longval;
- void *pvoid;
- char *pchar;
+ int intval; /* Used by the ref stack param list to index a stack */
+ void *pvoid; /* Used by the C param list to walk a linked list */
} gs_param_enumerator_t;
typedef gs_param_string gs_param_key_t;
@@ -402,6 +403,10 @@ int param_read_int(gs_param_list *, gs_param_name, int *);
int param_write_int(gs_param_list *, gs_param_name, const int *);
int param_read_long(gs_param_list *, gs_param_name, long *);
int param_write_long(gs_param_list *, gs_param_name, const long *);
+int param_read_i64(gs_param_list *, gs_param_name, int64_t *);
+int param_write_i64(gs_param_list *, gs_param_name, const int64_t *);
+int param_read_size_t(gs_param_list *, gs_param_name, size_t *);
+int param_write_size_t(gs_param_list *, gs_param_name, const size_t *);
int param_read_float(gs_param_list *, gs_param_name, float *);
int param_write_float(gs_param_list *, gs_param_name, const float *);
int param_read_string(gs_param_list *, gs_param_name, gs_param_string *);
@@ -556,4 +561,20 @@ void gs_c_param_list_write_more(gs_c_param_list *); /* switch back to writing, n
void gs_c_param_list_read(gs_c_param_list *); /* switch to reading */
void gs_c_param_list_release(gs_c_param_list *);
+/* Given a string to parse (a list of key/value pairs), parse it and add
+ * what we find to the supplied param list. Note that p is corrupted
+ * by the processing. */
+int gs_param_list_add_tokens(gs_param_list *plist, char *p);
+
+/* Given a key, and a string representing a single (maybe complex) value
+ * to parse, parse it and add what we find to the supplied param list. */
+int gs_param_list_add_parsed_value(gs_param_list *plist, gs_param_name key, const char *p);
+
+/* Given a key and a pointer to some storage (value), retrieve the
+ * value corresponding to the key from the list. If the storage is
+ * non-null, store a text version of the value there. Return the number
+ * of bytes required for the text version (including terminator) in the
+ * address pointed to be len. */
+int gs_param_list_to_string(gs_param_list *plist, gs_param_name key, char *value, int *len);
+
#endif /* gsparam_INCLUDED */
diff --git a/base/gsparam2.c b/base/gsparam2.c
index 05202c77..cafd9041 100644
--- a/base/gsparam2.c
+++ b/base/gsparam2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -43,7 +43,7 @@ gs_param_list_puts(stream *dest, gs_param_list *list)
gs_param_enumerator_t key_enum;
gs_param_key_t key;
char *string_key = gs_alloc_bytes(dest->memory, MAX_PARAM_KEY + 1, "gs_param_list_puts(string_key)");
-
+
if (!string_key) {
return_error(gs_error_VMerror);
}
@@ -100,6 +100,8 @@ gs_param_list_puts(stream *dest, gs_param_list *list)
case gs_param_type_bool:
case gs_param_type_int:
case gs_param_type_long:
+ case gs_param_type_size_t:
+ case gs_param_type_i64:
case gs_param_type_float:
sput_bytes(dest, (byte *)&value.value, value_top_sizeof);
case gs_param_type_null:
@@ -207,7 +209,7 @@ gs_param_list_gets(stream *src, gs_param_list *list, gs_memory_t *mem)
{
int code = 0;
char *string_key = gs_alloc_bytes(dest->memory, MAX_PARAM_KEY + 1, "gs_param_list_gets(string_key)");
-
+
if (!string_key) {
return_error(gs_error_VMerror);
}
@@ -247,6 +249,8 @@ gs_param_list_gets(stream *src, gs_param_list *list, gs_memory_t *mem)
case gs_param_type_bool:
case gs_param_type_int:
case gs_param_type_long:
+ case gs_param_type_size_t:
+ case gs_param_type_i64:
case gs_param_type_float:
code = sget_bytes(src, (byte *)&typed.value, value_top_sizeof);
case gs_param_type_null:
diff --git a/base/gsparaml.c b/base/gsparaml.c
new file mode 100644
index 00000000..d7e5fcdb
--- /dev/null
+++ b/base/gsparaml.c
@@ -0,0 +1,1048 @@
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
+ 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.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+
+/* gsparaml.c - Handling of reading lists of params from strings */
+
+#include <stdlib.h>
+#include "gsparam.h"
+#include "gserrors.h"
+#include "string_.h"
+
+static int
+add_tokens(gs_param_list *plist, gs_param_name key, char **pp, uint *dict_count);
+
+static int
+walk_number(char **p, bool *is_integer)
+{
+ char *p1 = *p;
+ bool integer = true;
+
+ if (*p1 == '+')
+ p1++;
+ while (*p1 == ' ')
+ p1++;
+ while (*p1 == '-')
+ p1++;
+ while (*p1 == ' ')
+ p1++;
+ if (*p1 == 0 || ((*p1 < '0' || *p1 > '9') && (*p1 != '.')))
+ return -1;
+ while ((*p1 >= '0' && *p1 <= '9') || *p1 == '.') {
+ if (*p1 == '.') {
+ if (!integer) /* Can't cope with multiple .'s */
+ return -1;
+ integer = false;
+ }
+
+ p1++;
+ }
+ /* Allow for exponent form. */
+ if (*p1 == 'e' || *p1 == 'E') {
+ p1++;
+ if (*p1 == '-')
+ p1++;
+ if (*p1 < '0' || *p1 > '9')
+ return -1;
+ while (*p1 >= '0' && *p1 <= '9')
+ p1++;
+ }
+
+ *is_integer = integer;
+ *p = p1;
+
+ return 0;
+}
+
+/* Delimiter chars, as taken from pdf spec. Any of these characters
+ * ends a token. */
+static int
+ends_token(const char *p)
+{
+ return (*p == 0 ||
+ *p == 9 ||
+ *p == 10 ||
+ *p == 12 ||
+ *p == 13 ||
+ *p == 32 ||
+ *p == '/' ||
+ *p == '%' ||
+ *p == '<' || *p == '>' ||
+ *p == '[' || *p == ']' ||
+ *p == '{' || *p == '}' ||
+ *p == '(' || *p == ')');
+}
+
+/* Dictionaries are surprisingly easy, we just make a param_dict
+ * and then call the existing routine to parse the string and
+ * add tokens to the parameter list contained in the dictionary.
+ */
+static int
+process_dict(gs_memory_t *mem, gs_c_param_list *plist, gs_param_name key, char **p)
+{
+ gs_param_dict dict;
+ int code, code2;
+
+ /* We are implicitly relying on that fact that we're working to
+ * C param lists, not ref param lists here, as C param lists don't
+ * need the size up front, but ref param lists do. This makes the
+ * recursion MUCH simpler. */
+ code = param_begin_write_dict((gs_param_list *)plist, key, &dict, false);
+ if (code < 0)
+ return code;
+
+ gs_param_list_set_persistent_keys(dict.list, false);
+
+ dict.size = 0;
+ code = add_tokens(dict.list, NULL, p, &dict.size);
+ (*p) += 2;
+ code2 = param_end_write_dict((gs_param_list *)plist, key, &dict);
+ return code < 0 ? code : code2;
+}
+
+static int
+process_dict_or_hexstring(gs_memory_t *mem, gs_c_param_list *plist, gs_param_name key, char **p)
+{
+ char *p1 = *p, *src, *dest, data;
+ int i;
+ gs_param_string ps;
+
+ if (p1[1] == '<') {
+ *p += 2;
+ return process_dict(mem, plist, key, p);
+ }
+
+ dest = p1;
+ src = p1+1;
+ while (*src && *src != '>') {
+ data = 0;
+ for (i=0;i<2;i++) {
+ if (*src >= '0' && *src <= '9') {
+ data = (data << 4);
+ data += (*src - '0');
+ } else if (*src >= 'A' && *src <= 'F') {
+ data = (data << 4);
+ data += (*src - 'A' + 10);
+ } else if (*src >= 'a' && *src <= 'f') {
+ data = (data << 4);
+ data += (*src - 'a' + 10);
+ } else {
+ return -1;
+ }
+ src++;
+ }
+ *dest++ = data;
+ }
+
+ if (*src == 0)
+ return -1;
+
+ *p = src + 1;
+
+ ps.data = (const byte *)p1;
+ ps.size = dest - p1;
+ ps.persistent = false;
+ return param_write_string((gs_param_list *)plist, key, &ps);
+}
+
+/* On entry, p points to the '/'. Because we need to null terminate
+ * to cope with reading the key of key/value pairs, we move all the
+ * chars back by 1, overwriting the '/' to give us room. This avoids
+ * us relying on trailing whitespace. */
+static int
+process_name(gs_memory_t *mem, gs_c_param_list *plist, gs_param_name *key, char **p)
+{
+ char *out = *p;
+ char *in = *p + 1;
+ char *start = out;
+ gs_param_string ps;
+
+ while (!ends_token(in)) {
+ if (*in == '#') {
+ int v;
+ if (in[1] >= '0' && in[1] <= '9')
+ v = (in[1] - '0')<<4;
+ else if (in[1] >= 'a' && in[1] <= 'f')
+ v = (in[1] - 'a' + 10)<<4;
+ else if (in[1] >= 'A' && in[1] <= 'F')
+ v = (in[1] - 'a' + 10)<<4;
+ else
+ return -1;
+ if (in[2] >= '0' && in[2] <= '9')
+ v += (in[2] - '0');
+ else if (in[2] >= 'a' && in[2] <= 'f')
+ v += (in[2] - 'a' + 10);
+ else if (in[2] >= 'A' && in[2] <= 'F')
+ v += (in[2] - 'a' + 10);
+ else
+ return -1;
+ if (v == 0)
+ return -1;
+ *out++ = v;
+ in += 3;
+ continue;
+ }
+ *out++ = *in++;
+ }
+
+ /* Null terminate (in case it's the '*key = NULL' case below) */
+ *out = 0;
+ *p = in;
+
+ if (*key == NULL)
+ *key = (gs_param_name)start;
+ else {
+ ps.data = (const byte *)start;
+ ps.size = out - start;
+ ps.persistent = false;
+ param_write_name((gs_param_list *)plist, *key, &ps);
+ *key = NULL;
+ }
+ return 0;
+}
+
+static int
+process_string(gs_memory_t *mem, gs_c_param_list *plist, gs_param_name key, char **p)
+{
+ char *p1 = *p;
+ char *start = p1 + 1;
+ gs_param_string ps;
+
+ while (*p1 && *p1 != ')')
+ p1++;
+
+ if (*p1 == 0)
+ return -1;
+
+ *p = p1 + 1; /* Resume after the ')' */
+
+ ps.data = (const byte *)start;
+ ps.size = p1-start;
+ ps.persistent = false;
+ return param_write_string((gs_param_list *)plist, key, &ps);
+}
+
+/* Arrays are *way* more complicated than dicts :-(
+ * We have 4 different kinds of arrays; name, string, int and float.
+ * It seems that parameter arrays can only contain homogenous data, it
+ * all has to be of the same type. This complicates matters because we
+ * can't know in advance what the type is!
+ *
+ * So we only handle 3 types of array; int, float and string. Anything
+ * which isn't one of those either gets converted to a string or (arrays
+ * and dictionaries) throws an error.
+ *
+ * For numbers, we look at the first element, if it's an integer we make
+ * an int array, otherwise we make a float array. If we start an int array
+ * and later encounter a float, we make a new float array, copy the existing
+ * integers into it (converting to floats) and throw away the old int array.
+ *
+ * Otherwise if we encounter an object whose type doesn't match the array we
+ * created we throw an error.
+ */
+static int
+process_array(gs_memory_t *mem, gs_c_param_list *plist, gs_param_name key, char **p)
+{
+ int code = 0;
+ gs_param_type array_type = gs_param_type_null;
+ int index = 0, array_max = 0;
+ char *start = *p + 1, *p1 = start;
+ gs_param_string *parray = 0L;
+ char *array_data = 0x00;
+ gs_param_string_array string_array;
+ gs_param_int_array int_array;
+ gs_param_float_array float_array;
+
+ p1 = start;
+
+ while (*p1 != ']' && code == 0) {
+ switch (*p1) {
+ case ' ':
+ p1++;
+ break;
+
+ /* We used to parse 'false' and 'true' here, but they ended
+ * up as string params, rather that bools, thus making
+ * [ false ] and [ (false) ] parse to the be the same thing.
+ * That feels wrong, so we've removed the code until param
+ * lists actually support arrays of bools. */
+
+ case '<':
+ if (array_type != gs_param_type_null && array_type != gs_param_type_string_array) {
+ code = gs_error_typecheck;
+ break;
+ }
+ if (index == array_max) {
+ int new_max = array_max * 2;
+ if (new_max == 0)
+ new_max = 32;
+ if (array_data == NULL) {
+ array_data = (char *)gs_alloc_bytes(mem, sizeof(gs_param_string) * new_max, "param string array in param parsing");
+ } else {
+ char *new_array = (char *)gs_resize_object(mem, array_data, sizeof(gs_param_string) * new_max, "param string array in param parsing");
+ if (new_array == NULL) {
+ code = gs_error_VMerror;
+ break;
+ }
+ array_data = new_array;
+ }
+ array_max = new_max;
+ array_type = gs_param_type_string_array;
+ }
+ if (*(p1+1) == '<') {
+ code = gs_error_typecheck;
+ break;
+ /* dictionary inside an array, not supported */
+ } else {
+ char *src, *dest;
+ char data = 0;
+ int i;
+
+ parray = (gs_param_string *)array_data;
+ src = dest = ++p1;
+ parray[index].data = (const byte *)p1;
+ while (*src && *src != '>') {
+ data = 0;
+ for (i=0;i<2;i++) {
+ if (*src >= '0' && *src <= '9') {
+ data = (data << 4);
+ data += (*src - '0');
+ } else if (*src >= 'A' && *src <= 'F') {
+ data = (data << 4);
+ data += (*src - 'A' + 10);
+ } else if (*src >= 'a' && *src <= 'f') {
+ data = (data << 4);
+ data += (*src - 'a' + 10);
+ } else {
+ goto return_minus_one;
+ }
+ src++;
+ }
+ *dest++ = data;
+ }
+ parray[index].size = dest - p1;
+ parray[index++].persistent = false;
+ p1 = src;
+ }
+ break;
+
+ case '/':
+ if (array_type != gs_param_type_null && array_type != gs_param_type_name_array) {
+ code = gs_error_typecheck;
+ break;
+ }
+ if (index == array_max) {
+ int new_max = array_max * 2;
+ if (new_max == 0)
+ new_max = 32;
+ if (array_data == NULL) {
+ array_data = (char *)gs_alloc_bytes(mem, sizeof(gs_param_string) * new_max, "param string array in param parsing");
+ } else {
+ char *new_array = (char *)gs_resize_object(mem, array_data, sizeof(gs_param_string) * new_max, "param string array in param parsing");
+ if (new_array == NULL) {
+ code = gs_error_VMerror;
+ break;
+ }
+ array_data = new_array;
+ }
+ array_max = new_max;
+ array_type = gs_param_type_name_array;
+ }
+ parray = (gs_param_string *)array_data;
+ parray[index].data = (const byte *)++p1;
+ while (!ends_token(p1))
+ p1++;
+ parray[index].size = p1 - (char *)(parray[index].data);
+ if (parray[index].size == 0)
+ goto return_minus_one;
+ parray[index++].persistent = false;
+ break;
+
+ case '(':
+ if (array_type != gs_param_type_null && array_type != gs_param_type_string_array) {
+ code = gs_error_typecheck;
+ break;
+ }
+ if (index == array_max) {
+ int new_max = array_max * 2;
+ if (new_max == 0)
+ new_max = 32;
+ if (array_data == NULL) {
+ array_data = (char *)gs_alloc_bytes(mem, sizeof(gs_param_string) * new_max, "param string array in param parsing");
+ } else {
+ char *new_array = (char *)gs_resize_object(mem, array_data, sizeof(gs_param_string) * new_max, "param string array in param parsing");
+ if (new_array == NULL) {
+ code = gs_error_VMerror;
+ break;
+ }
+ array_data = new_array;
+ }
+ array_max = new_max;
+ array_type = gs_param_type_string_array;
+ }
+ parray = (gs_param_string *)array_data;
+ parray[index].data = (const byte *)p1;
+ while (*p1 && *p1 != ')')
+ p1++;
+ if (*p1 == 0)
+ goto return_minus_one;
+ parray[index].size = p1 - (char *)(parray[index].data);
+ parray[index++].persistent = false;
+ break;
+ case '[':
+ /* Nested arrays, not supported */
+ code = gs_error_typecheck;
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case '.':
+ case '+':
+ case '-':
+ if (array_type == gs_param_type_string_array) {
+ code = gs_error_typecheck;
+ break;
+ } else {
+ bool integer;
+ const char *start = p1;
+ char c;
+ float *floats;
+ int *ints, i;
+
+ code = walk_number(&p1, &integer);
+ if (code < 0)
+ break;
+
+ if (array_type == gs_param_type_int_array && !integer) {
+ ints = (int *)array_data;
+ floats = (float *)gs_alloc_bytes(mem, sizeof(float) * array_max, "param string array in param parsing");
+ if (floats == NULL){
+ code = gs_error_VMerror;
+ break;
+ }
+ array_type = gs_param_type_float_array;
+ for (i=0;i<index;i++){
+ floats[i] = (float)(ints[i]);
+ }
+ gs_free_object(mem, ints, "param string array in param parsing");
+ array_data = (char *)floats;
+ }
+ if (index == array_max) {
+ union { float f; int i; } size_me;
+ int new_max = array_max * 2;
+ if (new_max == 0) {
+ new_max = 32;
+ array_type = integer ? gs_param_type_int_array : gs_param_type_float_array;
+ }
+ if (array_data == NULL) {
+ array_data = (char *)gs_alloc_bytes(mem, sizeof(size_me) * new_max, "param string array in param parsing");
+ } else {
+ char *new_array = (char *)gs_resize_object(mem, array_data, sizeof(size_me) * new_max, "param string array in param parsing");
+ if (new_array == NULL) {
+ code = gs_error_VMerror;
+ break;
+ }
+ array_data = new_array;
+ }
+ array_max = new_max;
+ }
+ c = *p1;
+ *p1 = 0;
+ if (array_type == gs_param_type_int_array) {
+ ints = (int *)array_data;
+ ints[index++] = (int)atol(start);
+ } else {
+ floats = (float *)array_data;
+ floats[index++] = (float)atof(start);
+ }
+ *p1 = c;
+ }
+ break;
+ default:
+ code = gs_error_typecheck;
+ break;
+ }
+ }
+ if (0) {
+return_minus_one:
+ code = -1;
+ }
+
+ /* Now we have to deal with adding the array to the parm list, there are
+ * (of course!) different calls for each array type....
+ */
+ if (code >= 0)
+ {
+ *p = p1 + 1;
+ switch(array_type) {
+ case gs_param_type_string_array:
+ string_array.data = (const gs_param_string *)array_data;
+ string_array.persistent = 0;
+ string_array.size = index;
+ code = param_write_string_array((gs_param_list *)plist, key, &string_array);
+ break;
+ case gs_param_type_name_array:
+ string_array.data = (const gs_param_string *)array_data;
+ string_array.persistent = 0;
+ string_array.size = index;
+ code = param_write_name_array((gs_param_list *)plist, key, &string_array);
+ break;
+ case gs_param_type_int_array:
+ int_array.data = (const int *)array_data;
+ int_array.persistent = 0;
+ int_array.size = index;
+ code = param_write_int_array((gs_param_list *)plist, key, &int_array);
+ break;
+ case gs_param_type_float_array:
+ float_array.data = (const float *)array_data;
+ float_array.persistent = 0;
+ float_array.size = index;
+ code = param_write_float_array((gs_param_list *)plist, key, &float_array);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ /* And now we can throw away the array data, we copied it to the param list. */
+ gs_free_object(mem, array_data, "param string array in param parsing");
+
+ return code;
+}
+
+/* We rely on the fact that we can overwrite, then restore *end here. */
+static int
+process_number(gs_memory_t *mem, gs_c_param_list *plist, gs_param_name key, char **p)
+{
+ bool integer;
+ const char *start = *p;
+ char c;
+ int code = walk_number(p, &integer);
+
+ if (code < 0)
+ return code;
+
+ /* Hacky. Null terminate so that atof/atol don't overrun. This is
+ * safe because at worst p points to the null terminator byte, and
+ * we can safely overwrite end for a moment. Ick. */
+ c = **p;
+ **p = 0;
+ if (!integer) {
+ float f = (float)atof(start);
+ code = param_write_float((gs_param_list *)plist, key, (float *)&f);
+ } else {
+ /* FIXME: Should probably really be int64_t here rather than int? */
+ long i = atol(start);
+ code = param_write_long((gs_param_list *)plist, key, &i);
+ }
+ **p = c;
+
+ return code;
+}
+
+static int
+add_tokens(gs_param_list *plist, gs_param_name key, char **pp, uint *dict_count)
+{
+ char *p = *pp;
+ int code = 0;
+ /* If single == true, then we are looking for a single value,
+ * otherwise it's a list of key/value pairs */
+ int single = (key != NULL);
+ /* If single_done, then we've read our single value. Any non
+ * whitespace we read is an error. */
+ int single_done = 0;
+ bool f = false, t = true;
+
+ while (*p) {
+ switch (*p) {
+ case ' ':
+ p++;
+ break;
+ case 'f':
+ if (single_done || key == NULL)
+ return -1;
+ if (strncmp(p, "false", 5) != 0)
+ return -1;
+ if (!ends_token(p+5))
+ return -1;
+ code = param_write_bool((gs_param_list *)plist, key, &f);
+ if (code >= 0 && dict_count != NULL)
+ (*dict_count)++;
+ p += 5;
+ single_done = single;
+ key = NULL;
+ break;
+ case 't':
+ if (single_done || key == NULL)
+ return -1;
+ if (strncmp(p, "true", 4) != 0)
+ return -1;
+ if (!ends_token(p+4))
+ return -1;
+ code = param_write_bool((gs_param_list *)plist, key, &t);
+ if (code >= 0 && dict_count != NULL)
+ (*dict_count)++;
+ p += 4;
+ single_done = single;
+ key = NULL;
+ break;
+ case '<':
+ if (single_done || key == NULL)
+ return -1;
+ code = process_dict_or_hexstring(plist->memory, (gs_c_param_list *)plist, key, &p);
+ if (code >= 0 && dict_count != NULL)
+ (*dict_count)++;
+ single_done = single;
+ key = NULL;
+ break;
+ case '/':
+ {
+ int have_key = (key != NULL);
+ if (single_done)
+ return -1;
+ code = process_name(plist->memory, (gs_c_param_list *)plist, &key, &p);
+ if (code >= 0 && have_key && dict_count != NULL)
+ (*dict_count)++;
+ if (have_key) {
+ single_done = single;
+ key = NULL;
+ }
+ break;
+ }
+ case '(':
+ if (single_done || key == NULL)
+ return -1;
+ code = process_string(plist->memory, (gs_c_param_list *)plist, key, &p);
+ if (code >= 0 && dict_count != NULL)
+ (*dict_count)++;
+ single_done = single;
+ key = NULL;
+ break;
+ case '[':
+ if (single_done || key == NULL)
+ return -1;
+ code = process_array(plist->memory, (gs_c_param_list *)plist, key, &p);
+ if (code >= 0 && dict_count != NULL)
+ (*dict_count)++;
+ single_done = single;
+ key = NULL;
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case '.':
+ if (single_done || key == NULL)
+ return -1;
+ code = process_number(plist->memory, (gs_c_param_list *)plist, key, &p);
+ if (code >= 0 && dict_count != NULL)
+ (*dict_count)++;
+ single_done = single;
+ key = NULL;
+ break;
+ case '>':
+ if (dict_count != NULL && p[1] == '>') {
+ if (key != NULL)
+ return -1;
+ *pp = p;
+ return 0;
+ }
+ return -1;
+ default:
+ return -1;
+ break;
+ }
+ if (code < 0)
+ return code;
+ }
+
+ return 0;
+}
+
+/* Given a string to parse (a list of key/value pairs), parse it and add
+ * what we find to the supplied param list.
+ */
+int gs_param_list_add_tokens(gs_param_list *plist, char *p)
+{
+ char *r = p;
+ return add_tokens(plist, NULL, &r, NULL);
+}
+
+/* Given a key, and a string representing a single (maybe complex) value
+ * to parse, parse it and add what we find to the supplied param list.
+ */
+int gs_param_list_add_parsed_value(gs_param_list *plist, gs_param_name key, const char *p)
+{
+ size_t len;
+ char *q, *r;
+ int code;
+
+ /* Treat NULL as the empty string. */
+ if (p == NULL)
+ return 0;
+
+ len = strlen(p) + 1;
+ q = (char *)gs_alloc_bytes(plist->memory, len, "gs_param_list_add_parsed_value");
+ if (q == NULL)
+ return_error(gs_error_VMerror);
+ memcpy(q, p, len);
+
+ r = q;
+ code = add_tokens(plist, key, &r, NULL);
+
+ gs_free_object(plist->memory, q, "gs_param_list_add_parsed_value");
+
+ return code;
+}
+
+typedef struct {
+ char *value;
+ int *len;
+ char last;
+} outstate;
+
+static void
+out_string(outstate *out, const char *str)
+{
+ int slen = str ? (int)strlen(str) : 0;
+
+ if (slen == 0)
+ return;
+
+ if (out->last != 0 && out->last != ')' && out->last != '>' &&
+ out->last != '[' && out->last != ']' && out->last != '}' &&
+ *str != '(' && *str != ')' && *str != '<' && *str != '>' &&
+ *str != '[' && *str != ']' && *str != '{' && *str != '}' &&
+ *str != '/') {
+ /* We need to insert some whitespace */
+ *out->len += 1;
+ if (out->value != NULL) {
+ *out->value++ = ' ';
+ *out->value = 0;
+ }
+ }
+
+ *out->len += slen;
+ out->last = str[slen-1];
+ if (out->value != NULL) {
+ memcpy(out->value, str, slen);
+ out->value += slen;
+ *out->value = 0;
+ }
+}
+
+static void
+string_to_string(const char *data, int len, outstate *out)
+{
+ int i;
+ char text[4];
+ const char *d = data;
+
+ /* Check to see if we have any awkward chars */
+ for (i = len; i != 0; i--) {
+ if (*d < 32 || *d >= 127 || *d == ')')
+ break;
+ d++;
+ }
+
+ /* No awkward chars, do it the easy way. */
+ if (i == 0) {
+ d = data;
+ out_string(out, "(");
+ out->last = 0;
+ text[1] = 0;
+ for (i = len; i != 0; i--) {
+ text[0] = *d++;
+ out->last = 0;
+ out_string(out, text);
+ }
+ out->last = 0;
+ out_string(out, ")");
+ return;
+ }
+
+ /* Output as hexstring */
+ out_string(out, "<");
+ text[2] = 0;
+ for (i = 0; i < len; i++) {
+ text[0] = "0123456789ABCDEF"[(*data >> 4) & 15];
+ text[1] = "0123456789ABCDEF"[(*data++) & 15];
+ out->last = 0;
+ out_string(out, text);
+ }
+ out_string(out, ">");
+}
+
+static void
+name_to_string(const char *data, int len, outstate *out)
+{
+ int i;
+ char text[4];
+
+ out_string(out, "/");
+ text[3] = 0;
+ for (i = 0; i < len; i++) {
+ char c = *data++;
+ if (c > 32 && c < 127 && c != '/' && c != '#' &&
+ c != '<' && c != '>' &&
+ c != '[' && c != ']' &&
+ c != '(' && c != ')' &&
+ c != '{' && c != '}') {
+ text[0] = c;
+ text[1] = 0;
+ } else {
+ text[0] = '#';
+ text[1] = "0123456789ABCDEF"[(c >> 4) & 15];
+ text[2] = "0123456789ABCDEF"[c & 15];
+ }
+ out->last = 0;
+ out_string(out, text);
+ }
+}
+
+static void
+int_array_to_string(gs_param_int_array ia, outstate *out)
+{
+ int i;
+ char text[32];
+
+ out_string(out, "[");
+ for (i = 0; i < ia.size; i++) {
+ gs_sprintf(text, "%d", ia.data[i]);
+ out_string(out, text);
+ }
+ out_string(out, "]");
+}
+
+static void
+print_float(char *text, float f)
+{
+ /* We attempt to tidy up %f's somewhat unpredictable output
+ * here, so rather than printing 0.10000000 we print 0.1 */
+ char *p = text;
+ int frac = 0;
+ gs_sprintf(text, "%f", f);
+ /* Find the terminator, or 'e' to spot exponent mode. */
+ while (*p && *p != 'e' && *p != 'E') {
+ if (*p == '.')
+ frac = 1;
+ p++;
+ }
+ /* If we've hit the terminator, and passed a '.' at some point
+ * we know we potentially have a tail to tidy up. */
+ if (*p == 0 && frac) {
+ p--;
+ /* Clear a trail of 0's. */
+ while (*p == '0')
+ *p-- = 0;
+ /* If we cleared the entire fractional part, remove the . */
+ if (*p == '.') {
+ /* Allow for -.0000 => -0 rather than - */
+ if (p == text || p[-1] < '0' || p[-1] > '9')
+ *p = '0', p[1] = 0;
+ else
+ p[0] = 0;
+ }
+ }
+}
+
+static void
+float_array_to_string(gs_param_float_array fa, outstate *out)
+{
+ int i;
+ char text[32];
+
+ out_string(out, "[");
+ for (i = 0; i < fa.size; i++) {
+ print_float(text, fa.data[i]);
+ out_string(out, text);
+ }
+ out_string(out, "]");
+}
+
+static void
+string_array_to_string(gs_param_string_array sa, outstate *out)
+{
+ int i;
+
+ out_string(out, "[");
+ for (i = 0; i < sa.size; i++) {
+ string_to_string((const char *)sa.data[i].data, sa.data[i].size, out);
+ }
+ out_string(out, "]");
+}
+
+static void
+name_array_to_string(gs_param_string_array na, outstate *out)
+{
+ int i;
+
+ out_string(out, "[");
+ for (i = 0; i < na.size; i++) {
+ name_to_string((const char *)na.data[i].data, na.data[i].size, out);
+ }
+ out_string(out, "]");
+}
+
+static int to_string(gs_param_list *plist, gs_param_name key, outstate *out);
+
+static int
+out_dict(gs_param_collection *dict, outstate *out)
+{
+ gs_param_list *plist = dict->list;
+ gs_param_enumerator_t enumerator;
+ gs_param_key_t key;
+ int code;
+
+ out_string(out, "<<");
+
+ param_init_enumerator(&enumerator);
+ while ((code = param_get_next_key(plist, &enumerator, &key)) == 0) {
+ char string_key[256]; /* big enough for any reasonable key */
+
+ if (key.size > sizeof(string_key) - 1) {
+ code = gs_note_error(gs_error_rangecheck);
+ break;
+ }
+ memcpy(string_key, key.data, key.size);
+ string_key[key.size] = 0;
+ name_to_string((char *)key.data, key.size, out);
+ code = to_string(plist, string_key, out);
+ if (code < 0)
+ break;
+ }
+
+ out_string(out, ">>");
+ if (code == 1)
+ code = 0;
+
+ return code;
+}
+
+static int
+to_string(gs_param_list *plist, gs_param_name key, outstate *out)
+{
+ int code = 0;
+ gs_param_typed_value pvalue;
+
+ pvalue.type = gs_param_type_any;
+ code = param_read_typed(plist, key, &pvalue);
+ if (code < 0)
+ return code;
+ if (code > 0)
+ return_error(gs_error_undefined);
+ switch (pvalue.type) {
+ case gs_param_type_null:
+ out_string(out, "null");
+ break;
+ case gs_param_type_bool:
+ if (pvalue.value.b)
+ out_string(out, "true");
+ else
+ out_string(out, "false");
+ break;
+ case gs_param_type_int:
+ {
+ char text[32];
+ gs_sprintf(text, "%d", pvalue.value.i);
+ out_string(out, text);
+ break;
+ }
+ case gs_param_type_i64:
+ {
+ char text[32];
+ gs_sprintf(text, "%"PRId64, pvalue.value.i64);
+ out_string(out, text);
+ break;
+ }
+ case gs_param_type_long:
+ {
+ char text[32];
+ gs_sprintf(text, "%ld", pvalue.value.l);
+ out_string(out, text);
+ break;
+ }
+ case gs_param_type_size_t:
+ {
+ char text[32];
+ gs_sprintf(text, "%"PRIdSIZE, pvalue.value.z);
+ out_string(out, text);
+ break;
+ }
+ case gs_param_type_float:
+ {
+ char text[32];
+ print_float(text, pvalue.value.f);
+ out_string(out, text);
+ break;
+ }
+ case gs_param_type_dict:
+ code = out_dict(&pvalue.value.d, out);
+ break;
+ case gs_param_type_dict_int_keys:
+ return -1;
+ case gs_param_type_array:
+ return -1;
+ case gs_param_type_string:
+ string_to_string((char *)pvalue.value.s.data, pvalue.value.s.size, out);
+ break;
+ case gs_param_type_name:
+ name_to_string((char *)pvalue.value.n.data, pvalue.value.n.size, out);
+ break;
+ case gs_param_type_int_array:
+ int_array_to_string(pvalue.value.ia, out);
+ break;
+ case gs_param_type_float_array:
+ float_array_to_string(pvalue.value.fa, out);
+ break;
+ case gs_param_type_string_array:
+ string_array_to_string(pvalue.value.sa, out);
+ break;
+ case gs_param_type_name_array:
+ name_array_to_string(pvalue.value.na, out);
+ break;
+ default:
+ return -1;
+ }
+
+ return code;
+}
+
+int gs_param_list_to_string(gs_param_list *plist, gs_param_name key, char *value, int *len)
+{
+ outstate out;
+
+ out.value = value;
+ out.len = len;
+ out.last = 0;
+ *len = 1; /* Always space for the terminator. */
+ if (value)
+ *value = 0;
+ return to_string(plist, key, &out);
+}
diff --git a/base/gsparams.c b/base/gsparams.c
index 4e5adab3..b7c06251 100644
--- a/base/gsparams.c
+++ b/base/gsparams.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -141,6 +141,8 @@ gs_param_list_serialize(
case gs_param_type_bool:
case gs_param_type_int:
case gs_param_type_long:
+ case gs_param_type_size_t:
+ case gs_param_type_i64:
case gs_param_type_float:
wb_put_bytes((byte *) & value.value, value_top_sizeof, &write_buf);
break;
@@ -259,6 +261,8 @@ gs_param_list_unserialize(
case gs_param_type_bool:
case gs_param_type_int:
case gs_param_type_long:
+ case gs_param_type_size_t:
+ case gs_param_type_i64:
case gs_param_type_float:
break;
diff --git a/base/gsparams.h b/base/gsparams.h
index d08c0b45..676e5743 100644
--- a/base/gsparams.h
+++ b/base/gsparams.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsparamx.c b/base/gsparamx.c
index 9be57e76..266da47f 100644
--- a/base/gsparamx.c
+++ b/base/gsparamx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsparamx.h b/base/gsparamx.h
index 59cc2730..f73cc18c 100644
--- a/base/gsparamx.h
+++ b/base/gsparamx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gspath.c b/base/gspath.c
index 2080d2c4..02d4c54b 100644
--- a/base/gspath.c
+++ b/base/gspath.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gspath.h b/base/gspath.h
index 1a868f0c..0d1ac9e8 100644
--- a/base/gspath.h
+++ b/base/gspath.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gspath1.c b/base/gspath1.c
index c4a4812f..96d19d5d 100644
--- a/base/gspath1.c
+++ b/base/gspath1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gspath2.h b/base/gspath2.h
index bb7c2bec..b0cf8bb3 100644
--- a/base/gspath2.h
+++ b/base/gspath2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gspcolor.c b/base/gspcolor.c
index e96331b1..7efa2900 100644
--- a/base/gspcolor.c
+++ b/base/gspcolor.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -77,7 +77,6 @@ gs_pattern_common_init(gs_pattern_template_t * ppat,
ppat->type = type;
ppat->PatternType = type->PatternType;
uid_set_invalid(&ppat->uid);
- ppat->client_data = 0; /* for GC */
}
/* Generic makepattern */
@@ -117,6 +116,8 @@ gs_make_pattern_common(gs_client_color *pcc,
gs_concat(saved, pmat);
code = gs_newpath(saved);
pinst->saved = saved;
+ pinst->client_data = NULL; /* for GC */
+ pinst->notify_free = NULL; /* No custom free calllback initially */
pcc->pattern = pinst;
pcc->pattern->pattern_id = gs_next_ids(mem, 1);
return code;
@@ -129,6 +130,9 @@ rc_free_pattern_instance(gs_memory_t * mem, void *pinst_void,
{
gs_pattern_instance_t *pinst = pinst_void;
+ if (pinst->notify_free != NULL)
+ (*pinst->notify_free) ((gs_memory_t *)mem, pinst);
+
gs_gstate_free(pinst->saved);
rc_free_struct_only(mem, pinst_void, cname);
}
diff --git a/base/gspcolor.h b/base/gspcolor.h
index d813217c..5673fae8 100644
--- a/base/gspcolor.h
+++ b/base/gspcolor.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -53,8 +53,7 @@ typedef struct gs_pattern_type_s gs_pattern_type_t;
#define gs_pattern_template_common\
const gs_pattern_type_t *type;\
int PatternType; /* copied from the type structure */\
- gs_uid uid;\
- void *client_data /* additional data for rendering */
+ gs_uid uid
typedef struct gs_pattern_template_s {
gs_pattern_template_common;
@@ -63,17 +62,21 @@ typedef struct gs_pattern_template_s {
/* The descriptor is public for subclassing. */
extern_st(st_pattern_template);
#define public_st_pattern_template() /* in gspcolor.c */\
- gs_public_st_ptrs2(st_pattern_template, gs_pattern_template_t,\
+ gs_public_st_ptrs1(st_pattern_template, gs_pattern_template_t,\
"gs_pattern_template_t", pattern_template_enum_ptrs,\
- pattern_template_reloc_ptrs, uid.xvalues, client_data)
+ pattern_template_reloc_ptrs, uid.xvalues)
#define st_pattern_template_max_ptrs 2
+typedef void (*gs_pinst_free_proc_t) (gs_memory_t * mem, void *pinst);
+
/* Definition of Pattern instances. */
#define gs_pattern_instance_common\
rc_header rc;\
/* Following are set by makepattern */\
const gs_pattern_type_t *type; /* from template */\
gs_gstate *saved;\
+ void *client_data; /* additional data for rendering */\
+ gs_pinst_free_proc_t notify_free;\
gs_id pattern_id
struct gs_pattern_instance_s {
gs_pattern_instance_common;
@@ -82,9 +85,9 @@ struct gs_pattern_instance_s {
/* The following is public for subclassing. */
extern_st(st_pattern_instance);
#define public_st_pattern_instance() /* in gspcolor.c */\
- gs_public_st_ptrs1(st_pattern_instance, gs_pattern_instance_t,\
+ gs_public_st_ptrs2(st_pattern_instance, gs_pattern_instance_t,\
"gs_pattern_instance_t", pattern_instance_enum_ptrs,\
- pattern_instance_reloc_ptrs, saved)
+ pattern_instance_reloc_ptrs, saved, client_data)
#define st_pattern_instance_max_ptrs 1
/* ---------------- Procedures ---------------- */
diff --git a/base/gspenum.h b/base/gspenum.h
index 18811173..b021acd8 100644
--- a/base/gspenum.h
+++ b/base/gspenum.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gspmdrv.c b/base/gspmdrv.c
index 73a8bd0d..78281b17 100644
--- a/base/gspmdrv.c
+++ b/base/gspmdrv.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gspmdrv.h b/base/gspmdrv.h
index 41bbe1bb..e0c20c6e 100644
--- a/base/gspmdrv.h
+++ b/base/gspmdrv.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gspmdrv.rc b/base/gspmdrv.rc
index 9215e460..de6eae11 100644
--- a/base/gspmdrv.rc
+++ b/base/gspmdrv.rc
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -27,7 +27,7 @@ BEGIN
ICON ID_GSPMDRV, ID_GSPMDRV, 8, 56, 20, 16, WS_GROUP
LTEXT "Ghostscript Presentation Manager Driver", -1, 34, 64, 210, 8
LTEXT GSPMDRV_VERSION, -1, 34, 56, 210, 8
- LTEXT "Copyright (C) 1992, 1993, 2001-2018 Artifex Software Inc.", -1, 34, 48, 210, 8
+ LTEXT "Copyright (C) 1992, 1993, 2001-2020 Artifex Software Inc.", -1, 34, 48, 210, 8
LTEXT "All rights reserved", -1, 34, 40, 210, 8
PUSHBUTTON "OK", DID_OK, 105, 8, 40, 14
END
diff --git a/base/gsptype1.c b/base/gsptype1.c
index 7d4714f4..92b1f278 100644
--- a/base/gsptype1.c
+++ b/base/gsptype1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -718,10 +718,14 @@ gs_pattern1_set_color(const gs_client_color * pcc, gs_gstate * pgs)
pcs = pcs->base_space;
return pcs->type->set_overprint(pcs, pgs);
} else {
- gs_overprint_params_t params;
+ gs_overprint_params_t params = {0};
params.retain_any_comps = false;
params.effective_opm = pgs->color[0].effective_opm = 0;
+ params.op_state = OP_STATE_NONE;
+ params.is_fill_color = false;
+ params.idle = false;
+
return gs_gstate_update_overprint(pgs, &params);
}
}
@@ -766,6 +770,15 @@ typedef struct pixmap_info_s {
void (*free_proc)(gs_memory_t *, void *, client_name_t);
} pixmap_info;
+void *
+gs_get_pattern_client_data(const gs_client_color * pcc)
+{
+ const gs_pattern_instance_t *pinst = pcc->pattern;
+
+ return (pinst == 0 || pinst->type != &gs_pattern1_type ? 0 :
+ (void *)pinst->client_data);
+}
+
gs_private_st_suffix_add1(st_pixmap_info,
pixmap_info,
"pixmap info. struct",
@@ -778,26 +791,16 @@ gs_private_st_suffix_add1(st_pixmap_info,
#define st_pixmap_info_max_ptrs (1 + st_tile_bitmap_max_ptrs)
/*
- * Free routine for pattern instances created from pixmaps. This overwrites
- * the free procedure originally stored in the pattern instance, and stores
- * the pointer to that procedure in the pixmap_info structure. This procedure
- * will call the original procedure, then free the pixmap_info structure.
+ * Free routine for pattern instances created from pixmaps.
*
* Note that this routine does NOT release the data in the original pixmap;
* that remains the responsibility of the client.
*/
-static void
-free_pixmap_pattern(
- gs_memory_t * pmem,
- void * pvpinst,
- client_name_t cname
-)
+static void pixmap_free_notify (gs_memory_t * mem, void *vpinst)
{
- gs_pattern1_instance_t *pinst = (gs_pattern1_instance_t *)pvpinst;
- pixmap_info *ppmap = pinst->templat.client_data;
+ gs_pattern1_instance_t *pinst = (gs_pattern1_instance_t *)vpinst;
- ppmap->free_proc(pmem, pvpinst, cname);
- gs_free_object(pmem, ppmap, cname);
+ gs_free_object(mem, pinst->client_data, "pixmap_free_notify");
}
/*
@@ -808,10 +811,10 @@ static int bitmap_paint(gs_image_enum * pen, gs_data_image_t * pim,
static int
mask_PaintProc(const gs_client_color * pcolor, gs_gstate * pgs)
{
- const pixmap_info *ppmap = gs_getpattern(pcolor)->client_data;
+ int code;
+ const pixmap_info *ppmap = (pixmap_info *)gs_get_pattern_client_data(pcolor);
const gs_depth_bitmap *pbitmap = &(ppmap->bitmap);
- gs_image_enum *pen =
- gs_image_enum_alloc(gs_gstate_memory(pgs), "mask_PaintProc");
+ gs_image_enum *pen = gs_image_enum_alloc(gs_gstate_memory(pgs), "mask_PaintProc");
gs_image1_t mask;
if (pen == 0)
@@ -820,12 +823,14 @@ mask_PaintProc(const gs_client_color * pcolor, gs_gstate * pgs)
mask.Width = pbitmap->size.x;
mask.Height = pbitmap->size.y;
gs_image_init(pen, &mask, false, false, pgs);
- return bitmap_paint(pen, (gs_data_image_t *) & mask, pbitmap, pgs);
+ code = bitmap_paint(pen, (gs_data_image_t *) & mask, pbitmap, pgs);
+ gs_free_object(gs_gstate_memory(pgs), pen, "mask_PaintProc");
+ return code;
}
static int
image_PaintProc(const gs_client_color * pcolor, gs_gstate * pgs)
{
- const pixmap_info *ppmap = gs_getpattern(pcolor)->client_data;
+ const pixmap_info *ppmap = gs_get_pattern_client_data(pcolor);
const gs_depth_bitmap *pbitmap = &(ppmap->bitmap);
gs_image_enum *pen =
gs_image_enum_alloc(gs_gstate_memory(pgs), "image_PaintProc");
@@ -896,6 +901,7 @@ image_PaintProc(const gs_client_color * pcolor, gs_gstate * pgs)
(gs_data_image_t *)&image,
pgs )) >= 0 &&
(code = bitmap_paint(pen, (gs_data_image_t *) & image, pbitmap, pgs)) >= 0) {
+ gs_free_object(gs_gstate_memory(pgs), pen, "image_PaintProc");
return gs_grestore(pgs);
}
/* Failed above, need to undo the gsave */
@@ -922,7 +928,7 @@ bitmap_paint(gs_image_enum * pen, gs_data_image_t * pim,
else
for (n = pim->Height; n > 0 && code >= 0; dp += raster, --n)
code = gs_image_next(pen, dp, nbytes, &used);
- code1 = gs_image_cleanup_and_free_enum(pen, pgs);
+ code1 = gs_image_cleanup(pen, pgs);
if (code >= 0 && code1 < 0)
code = code1;
return code;
@@ -939,7 +945,7 @@ int pixmap_high_level_pattern(gs_gstate * pgs)
gs_color_space *pcs;
gs_pattern1_instance_t *pinst =
(gs_pattern1_instance_t *)gs_currentcolor(pgs)->pattern;
- const pixmap_info *ppmap = ppat->client_data;
+ const pixmap_info *ppmap = (const pixmap_info *)gs_get_pattern_client_data((const gs_client_color *)&pdc->ccolor);
code = gx_pattern_cache_add_dummy_entry(pgs, pinst, pgs->device->color_info.depth);
if (code < 0)
@@ -1132,7 +1138,6 @@ gs_makepixmappattern(
pat.XStep = (float)pbitmap->size.x;
pat.YStep = (float)pbitmap->size.y;
pat.PaintProc = (mask ? pixmap_remap_mask_pattern : pixmap_remap_image_pattern);
- pat.client_data = ppmap;
/* set the ctm to be the identity */
gs_currentmatrix(pgs, &smat);
@@ -1158,9 +1163,8 @@ gs_makepixmappattern(
if (!mask && (white_index >= (1 << pbitmap->pix_depth)))
pinst->uses_mask = false;
- /* overwrite the free procedure for the pattern instance */
- ppmap->free_proc = pinst->rc.free;
- pinst->rc.free = free_pixmap_pattern;
+ pinst->client_data = ppmap;
+ pinst->notify_free = pixmap_free_notify;
/*
* Since the PaintProcs don't reference the saved color space or
@@ -1645,7 +1649,7 @@ typedef struct gx_dc_serialized_tile_s {
} gx_dc_serialized_tile_t;
enum {
- TILE_IS_LOCKED = 0x80000000,
+ TILE_IS_LOCKED = (int)0x80000000,
TILE_HAS_OVERLAP = 0x40000000,
TILE_IS_SIMPLE = 0x20000000,
TILE_USES_TRANSP = 0x10000000,
@@ -1664,9 +1668,9 @@ gx_dc_pattern_write_raster(gx_color_tile *ptile, int64_t offset, byte *data,
int left = *psize;
int64_t offset1 = offset;
- size_b = sizeof(gx_strip_bitmap) +
+ size_b = (int)sizeof(gx_strip_bitmap) +
ptile->tbits.size.y * ptile->tbits.raster * ptile->tbits.num_planes;
- size_c = ptile->tmask.data ? sizeof(gx_strip_bitmap) + ptile->tmask.size.y * ptile->tmask.raster : 0;
+ size_c = ptile->tmask.data ? (int)sizeof(gx_strip_bitmap) + ptile->tmask.size.y * ptile->tmask.raster : 0;
if (data == NULL) {
*psize = sizeof(gx_dc_serialized_tile_t) + size_b + size_c;
return 0;
@@ -2117,8 +2121,22 @@ gx_dc_pattern_read(
/* the following works for raster or clist patterns */
cache_space_needed = buf.size_b + buf.size_c;
}
+
+ /* Free up any unlocked patterns if needed */
gx_pattern_cache_ensure_space((gs_gstate *)pgs, cache_space_needed);
+ /* If the pattern tile is already in the cache, make sure it isn't locked */
+ /* The lock will be reset below, but the read logic needs to finish loading the pattern. */
+ ptile = &(pgs->pattern_cache->tiles[buf.id % pgs->pattern_cache->num_tiles]);
+ if (ptile->id != gs_no_id && ptile->is_locked) {
+ /* we shouldn't have miltiple tiles locked, but check if OK before unlocking */
+ if (ptile->id != buf.id)
+ return_error(gs_error_unregistered); /* can't unlock some other tile in this slot */
+ code = gx_pattern_cache_entry_set_lock((gs_gstate *)pgs, buf.id, false); /* make sure not locked */
+ if (code < 0)
+ return code; /* can't happen since we call ensure_space above, but Coverity doesn't know that */
+ }
+ /* get_entry will free the tile in the cache slot if it isn't empty */
code = gx_pattern_cache_get_entry((gs_gstate *)pgs, /* Break 'const'. */
buf.id, &ptile);
if (code < 0)
diff --git a/base/gsptype1.h b/base/gsptype1.h
index 46126d43..f1602d36 100644
--- a/base/gsptype1.h
+++ b/base/gsptype1.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -82,6 +82,7 @@ void gs_pattern1_init(gs_pattern1_template_t *);
int gs_makepattern(gs_client_color *, const gs_client_pattern *,
const gs_matrix *, gs_gstate *, gs_memory_t *);
const gs_client_pattern *gs_getpattern(const gs_client_color *);
+void *gs_get_pattern_client_data(const gs_client_color *);
/* Check device color for Pattern Type 1. */
bool gx_dc_is_pattern1_color(const gx_device_color *pdevc);
diff --git a/base/gsptype2.c b/base/gsptype2.c
index 6573dee9..1181fccc 100644
--- a/base/gsptype2.c
+++ b/base/gsptype2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsptype2.h b/base/gsptype2.h
index 040ffcf0..fb8ae014 100644
--- a/base/gsptype2.h
+++ b/base/gsptype2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsrect.h b/base/gsrect.h
index 365f2bdb..5aa9bd0e 100644
--- a/base/gsrect.h
+++ b/base/gsrect.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsrefct.h b/base/gsrefct.h
index a9c7f029..a88c19a4 100644
--- a/base/gsrefct.h
+++ b/base/gsrefct.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -151,7 +151,7 @@ rc_free_proc(rc_free_struct_only);
# define rc_check_(vp)\
BEGIN\
if (gs_debug_c('?') && (vp)->rc.ref_count < 0)\
- lprintf2("0x%lx has ref_count of %ld!\n", (ulong)(vp),\
+ lprintf2(PRI_INTPTR" has ref_count of %ld!\n", (intptr_t)(vp),\
(vp)->rc.ref_count);\
END
#else
diff --git a/base/gsromfs0.c b/base/gsromfs0.c
index ad9d6d0d..fc30e3bc 100644
--- a/base/gsromfs0.c
+++ b/base/gsromfs0.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsrop.c b/base/gsrop.c
index b810c433..f78ae09c 100644
--- a/base/gsrop.c
+++ b/base/gsrop.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsrop.h b/base/gsrop.h
index 300a6069..2cbf5201 100644
--- a/base/gsrop.h
+++ b/base/gsrop.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsroprun.c b/base/gsroprun.c
index 445dd55f..3b65cddb 100644
--- a/base/gsroprun.c
+++ b/base/gsroprun.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -104,7 +104,7 @@ static void record(int rop)
#define TEMPLATE_NAME invert_rop_run1
#define SPECIFIC_ROP 0x55
#define SPECIFIC_CODE(O,D,S,T) do { O = ~D; } while (0)
-#define MM_SETUP() __m128i mm_constant_ones = _mm_cmpeq_epi32(mm_constant_ones, mm_constant_ones);
+#define MM_SETUP() static __m128i mm_constant_zeros; __m128i mm_constant_ones = _mm_cmpeq_epi32(mm_constant_zeros, mm_constant_zeros);
#define MM_SPECIFIC_CODE(O,D,S,T) do { _mm_storeu_si128(O,_mm_xor_si128(_mm_loadu_si128(D),mm_constant_ones)); } while (0 == 1)
#define S_CONST
#define T_CONST
@@ -153,7 +153,7 @@ static void invert_rop_run1(rop_run_op *op, byte *d, int len)
#define TEMPLATE_NAME invert_rop_run8
#define SPECIFIC_ROP 0x55
#define SPECIFIC_CODE(O,D,S,T) do { O = ~D; } while (0)
-#define MM_SETUP() __m128i mm_constant_ones = _mm_cmpeq_epi32(mm_constant_ones, mm_constant_ones);
+#define MM_SETUP() static __m128i mm_constant_zeros; __m128i mm_constant_ones = _mm_cmpeq_epi32(mm_constant_zeros, mm_constant_zeros);
#define MM_SPECIFIC_CODE(O,D,S,T) do { _mm_storeu_si128(O,_mm_xor_si128(_mm_loadu_si128(D),mm_constant_ones)); } while (0 == 1)
#define S_CONST
#define T_CONST
diff --git a/base/gsroprun1.h b/base/gsroprun1.h
index 251a2076..e44b77ad 100644
--- a/base/gsroprun1.h
+++ b/base/gsroprun1.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsroprun24.h b/base/gsroprun24.h
index 8baddb89..0afd02d8 100644
--- a/base/gsroprun24.h
+++ b/base/gsroprun24.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsroprun8.h b/base/gsroprun8.h
index f579903e..fdc1e5e2 100644
--- a/base/gsroprun8.h
+++ b/base/gsroprun8.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsropt.h b/base/gsropt.h
index d99c587b..65c6da87 100644
--- a/base/gsropt.h
+++ b/base/gsropt.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsroptab.c b/base/gsroptab.c
index 03091709..d768dd04 100644
--- a/base/gsroptab.c
+++ b/base/gsroptab.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsserial.c b/base/gsserial.c
index 6900e678..4eda39d1 100644
--- a/base/gsserial.c
+++ b/base/gsserial.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsserial.h b/base/gsserial.h
index a07120df..c30407b1 100644
--- a/base/gsserial.h
+++ b/base/gsserial.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsshade.c b/base/gsshade.c
index e6d036f5..50c72216 100644
--- a/base/gsshade.c
+++ b/base/gsshade.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsshade.h b/base/gsshade.h
index 8027cef5..55d7a46b 100644
--- a/base/gsshade.h
+++ b/base/gsshade.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gssprintf.h b/base/gssprintf.h
index cfd2e333..e71fa434 100644
--- a/base/gssprintf.h
+++ b/base/gssprintf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsstate.c b/base/gsstate.c
index e48192ce..898b879e 100644
--- a/base/gsstate.c
+++ b/base/gsstate.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -22,7 +22,6 @@
#include "gsutil.h" /* for gs_next_ids */
#include "gzstate.h"
#include "gxcspace.h" /* here for gscolor2.h */
-#include "gsalpha.h"
#include "gscolor2.h"
#include "gscoord.h" /* for gs_initmatrix */
#include "gscie.h"
@@ -37,8 +36,10 @@
#include "gzcpath.h"
#include "gsovrc.h"
#include "gxcolor2.h"
+#include "gscolor3.h" /* for gs_smoothness() */
#include "gxpcolor.h"
#include "gsicc_manage.h"
+#include "gxdevsop.h"
/* Forward references */
static gs_gstate *gstate_alloc(gs_memory_t *, client_name_t,
@@ -232,7 +233,6 @@ gs_gstate_alloc(gs_memory_t * mem)
code = gs_nulldevice(pgs);
if (code < 0)
goto fail;
- gs_setalpha(pgs, 1.0);
gs_setfillconstantalpha(pgs, 1.0);
gs_setstrokeconstantalpha(pgs, 1.0);
gs_setalphaisshape(pgs, false);
@@ -319,8 +319,8 @@ gs_gsave(gs_gstate * pgs)
if (pgs->show_gstate == pgs)
pgs->show_gstate = pnew->show_gstate = pnew;
pgs->level++;
- if_debug2m('g', pgs->memory, "[g]gsave -> 0x%lx, level = %d\n",
- (ulong) pnew, pgs->level);
+ if_debug2m('g', pgs->memory, "[g]gsave -> "PRI_INTPTR", level = %d\n",
+ (intptr_t)pnew, pgs->level);
return 0;
}
@@ -378,8 +378,8 @@ gs_grestore_only(gs_gstate * pgs)
void *pdata = pgs->client_data;
void *sdata;
- if_debug2m('g', pgs->memory, "[g]grestore 0x%lx, level was %d\n",
- (ulong) saved, pgs->level);
+ if_debug2m('g', pgs->memory, "[g]grestore "PRI_INTPTR", level was %d\n",
+ (intptr_t)saved, pgs->level);
if (!saved)
return 1;
sdata = saved->client_data;
@@ -593,8 +593,11 @@ gs_gstate_update_overprint(gs_gstate * pgs, const gs_overprint_params_t * pparam
pgs->memory,
NULL);
if (code >= 0 || code == gs_error_handled){
- if (ovptdev != dev)
+ if (ovptdev != dev) {
gx_set_device_only(pgs, ovptdev);
+ /* Get rid of extra reference */
+ rc_decrement(ovptdev, "gs_gstate_update_overprint(ovptdev)");
+ }
code = 0;
}
}
@@ -635,11 +638,36 @@ gs_do_set_overprint(gs_gstate * pgs)
else {
gx_device* dev = pgs->device;
cmm_dev_profile_t* dev_profile;
+ gs_color_space_index pcs_index = gs_color_space_get_index(pcs);
dev_proc(dev, get_profile)(dev, &dev_profile);
- if (!dev_profile->sim_overprint || dev_profile->device_profile[0]->data_cs != gsCMYK)
+ if (!dev_profile->sim_overprint)
return code;
+ /* Transparency device that supports spots and where we have
+ sep or devicen colors needs special consideration if the device
+ is in a additive blend mode. This could
+ be written more compactly, but it would be unreadable. */
+ if (dev_proc(dev, dev_spec_op)(dev, gxdso_pdf14_sep_device, NULL, 0) &&
+ (dev->color_info.polarity != GX_CINFO_POLARITY_SUBTRACTIVE) &&
+ (pcs_index == gs_color_space_index_DeviceN ||
+ pcs_index == gs_color_space_index_Separation)) {
+ if (pcs_index == gs_color_space_index_Separation) {
+ if (!(pcs->params.separation.color_type == SEP_MIX ||
+ pcs->params.separation.color_type == SEP_ENUM)) {
+ /* Sep color is not a spot color. We can't do OP and trans */
+ return code;
+ }
+ }
+ if (pcs_index == gs_color_space_index_DeviceN) {
+ if (pcs->params.device_n.color_type != SEP_PURE_SPOT) {
+ /* DeviceN has process colors We can't do OP and trans. */
+ return code;
+ }
+ }
+
+ }
+
/* The spaces that do not allow opm (e.g. ones that are not ICC or DeviceCMYK)
will blow away any true setting later. But we have to be prepared
in case this is a CMYK ICC space for example. Hence we set effective mode
@@ -915,7 +943,46 @@ gs_initgraphics(gs_gstate * pgs)
}
pgs->in_cachedevice = 0;
+ code = gs_settextspacing(pgs, (double)0.0);
+ if (code < 0)
+ goto exit;
+ code = gs_settextleading(pgs, (double)0.0);
+ if (code < 0)
+ goto exit;
+
+ gs_settextrenderingmode(pgs, 0);
+
+ code = gs_setwordspacing(pgs, (double)0.0);
+ if (code < 0)
+ goto exit;
+ code = gs_settexthscaling(pgs, (double)100.0);
+ if (code < 0)
+ goto exit;
+
+ gs_setaccuratecurves(pgs, true);
+
+ code = gs_setstrokeconstantalpha(pgs, 1.0);
+ if (code < 0)
+ goto exit;
+ code = gs_setfillconstantalpha(pgs, 1.0);
+ if (code < 0)
+ goto exit;
+ code = gs_setalphaisshape(pgs, 0);
+ if (code < 0)
+ goto exit;
+ code = gs_setblendmode(pgs, BLEND_MODE_Compatible);
+ if (code < 0)
+ goto exit;
+ code = gs_settextknockout(pgs, true);
+ if (code < 0)
+ goto exit;
+ code = gs_setsmoothness(pgs, 0.02); /* Match gs code */
+ if (code < 0)
+ goto exit;
+
return 0;
+exit:
+ return code;
}
/* setfilladjust */
@@ -980,6 +1047,13 @@ gs_currenttextspacing(const gs_gstate *pgs)
int
gs_settextspacing(gs_gstate *pgs, double Tc)
{
+ int code = 0;
+ gs_fixed_point dxy;
+
+ code = gs_distance_transform2fixed(&pgs->ctm, Tc, 1, &dxy);
+ if (code < 0)
+ return code;
+
pgs->textspacing = (float)Tc;
return 0;
}
@@ -1279,7 +1353,7 @@ gstate_clone(gs_gstate * pfrom, gs_memory_t * mem, client_name_t cname,
return pgs;
fail:
if (pdata != NULL)
- (*pfrom->client_procs.free) (pdata, mem);
+ (*pfrom->client_procs.free) (pdata, mem, pgs);
memset(pgs->color, 0, 2*sizeof(gs_gstate_color));
gs_free_object(mem, pgs->line_params.dash.pattern, cname);
GSTATE_ASSIGN_PARTS(pgs, &parts);
@@ -1333,15 +1407,15 @@ gstate_free_contents(gs_gstate * pgs)
gx_cpath_free(pgs->view_clip, cname);
pgs->view_clip = NULL;
}
+ if (pgs->client_data != 0)
+ (*pgs->client_procs.free) (pgs->client_data, mem, pgs);
+ pgs->client_data = 0;
gs_swapcolors_quick(pgs);
cs_adjust_counts_icc(pgs, -1);
gs_swapcolors_quick(pgs);
cs_adjust_counts_icc(pgs, -1);
pgs->color[0].color_space = 0;
pgs->color[1].color_space = 0;
- if (pgs->client_data != 0)
- (*pgs->client_procs.free) (pgs->client_data, mem);
- pgs->client_data = 0;
gs_free_object(mem, pgs->line_params.dash.pattern, cname);
pgs->line_params.dash.pattern = 0;
gstate_free_parts(pgs, mem, cname); /* this also clears pointers to freed elements */
diff --git a/base/gsstate.h b/base/gsstate.h
index bf843074..4a4fe260 100644
--- a/base/gsstate.h
+++ b/base/gsstate.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsstrl.h b/base/gsstrl.h
index 8a5141aa..4b745e22 100644
--- a/base/gsstrl.h
+++ b/base/gsstrl.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsstrtok.h b/base/gsstrtok.h
index a49b84c0..8dded3d3 100644
--- a/base/gsstrtok.h
+++ b/base/gsstrtok.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsstruct.h b/base/gsstruct.h
index 3ef66410..a517a62d 100644
--- a/base/gsstruct.h
+++ b/base/gsstruct.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -146,8 +146,8 @@ struct gs_gc_root_s {
/* Print a root debugging message. */
#define if_debug_root(c, mem, msg, rp)\
- if_debug4m(c, mem, "%s 0x%lx: 0x%lx -> 0x%lx\n",\
- msg, (ulong)(rp), (ulong)(rp)->p, (ulong)*(rp)->p)
+ if_debug4m(c, mem, "%s "PRI_INTPTR": "PRI_INTPTR" -> "PRI_INTPTR"\n",\
+ msg, (intptr_t)(rp), (intptr_t)(rp)->p, (intptr_t)*(rp)->p)
/*
* We don't want to tie the allocator to using a single garbage collector,
diff --git a/base/gsstype.h b/base/gsstype.h
index 4642db17..c3548fdd 100644
--- a/base/gsstype.h
+++ b/base/gsstype.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gstext.c b/base/gstext.c
index c1fea18f..bb258d39 100644
--- a/base/gstext.c
+++ b/base/gstext.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -340,7 +340,9 @@ gs_text_begin(gs_gstate * pgs, const gs_text_params_t * text,
cmm_dev_profile_t* dev_profile;
dev_proc(dev, get_profile)(dev, &dev_profile);
- if (dev_profile->sim_overprint && dev_profile->device_profile[0]->data_cs == gsCMYK) {
+ if (dev_profile->sim_overprint &&
+ (dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]->data_cs == gsCMYK ||
+ dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]->data_cs == gsNCHANNEL)) {
if (pgs->text_rendering_mode == 0) {
op_params.op_state = OP_STATE_FILL;
gs_gstate_update_overprint(pgs, &op_params);
diff --git a/base/gstext.h b/base/gstext.h
index 4bf50a4a..a3317d0a 100644
--- a/base/gstext.h
+++ b/base/gstext.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gstiffio.c b/base/gstiffio.c
index 6828a615..5482d783 100644
--- a/base/gstiffio.c
+++ b/base/gstiffio.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -34,11 +34,12 @@
#define TIFF_PRINT_BUF_LENGTH 1024
static const char tifs_msg_truncated[] = "\n*** Previous line has been truncated.\n";
-/* place to hold the data for our libtiff i/o hooks */
+/* place to hold the data for our libtiff i/o hooks
+ */
typedef struct tifs_io_private_t
{
gp_file *f;
- gx_device_printer *pdev;
+ gs_memory_t *memory;
} tifs_io_private;
/* libtiff i/o hooks */
@@ -104,12 +105,13 @@ static int
gs_tifsCloseProc(thandle_t fd)
{
tifs_io_private *tiffio = (tifs_io_private *)fd;
- gx_device_printer *pdev = tiffio->pdev;
- int code = gp_fclose(tiffio->f);
-
- gs_free(pdev->memory, tiffio, sizeof(tifs_io_private), 1, "gs_tifsCloseProc");
- return code;
+ /* We don't close tiffio->f as this will be closed later by the
+ * device. */
+
+ gs_free(tiffio->memory, tiffio, sizeof(tifs_io_private), 1, "gs_tifsCloseProc");
+
+ return 0;
}
static uint64_t
@@ -122,12 +124,12 @@ gs_tifsSizeProc(thandle_t fd)
if (curpos < 0) {
return(0);
}
-
+
if (gp_fseek(tiffio->f, (gs_offset_t)0, SEEK_END) < 0) {
return(0);
}
length = (uint64_t)gp_ftell(tiffio->f);
-
+
if (gp_fseek(tiffio->f, curpos, SEEK_SET) < 0) {
return(0);
}
@@ -152,13 +154,13 @@ tiff_from_filep(gx_device_printer *dev, const char *name, gp_file *filep, int b
mode[modelen++] = '8';
mode[modelen] = (char)0;
-
+
tiffio = (tifs_io_private *)gs_malloc(dev->memory, sizeof(tifs_io_private), 1, "tiff_from_filep");
if (!tiffio) {
return NULL;
}
tiffio->f = filep;
- tiffio->pdev = dev;
+ tiffio->memory = dev->memory;
t = TIFFClientOpen(name, mode,
(thandle_t) tiffio, (TIFFReadWriteProc)gs_tifsReadProc,
@@ -173,16 +175,15 @@ static void
gs_tifsWarningHandlerEx(thandle_t client_data, const char* module, const char* fmt, va_list ap)
{
tifs_io_private *tiffio = (tifs_io_private *)client_data;
- gx_device_printer *pdev = tiffio->pdev;
int count;
char buf[TIFF_PRINT_BUF_LENGTH];
count = vsnprintf(buf, sizeof(buf), fmt, ap);
- if (count >= sizeof(buf) || count < 0) { /* C99 || MSVC */
- dmlprintf1(pdev->memory, "%s", buf);
- dmlprintf1(pdev->memory, "%s\n", tifs_msg_truncated);
+ if (count < 0 || count >= sizeof(buf)) { /* MSVC || C99 */
+ dmlprintf1(tiffio->memory, "%s", buf);
+ dmlprintf1(tiffio->memory, "%s\n", tifs_msg_truncated);
} else {
- dmlprintf1(pdev->memory, "%s\n", buf);
+ dmlprintf1(tiffio->memory, "%s\n", buf);
}
}
@@ -190,22 +191,21 @@ static void
gs_tifsErrorHandlerEx(thandle_t client_data, const char* module, const char* fmt, va_list ap)
{
tifs_io_private *tiffio = (tifs_io_private *)client_data;
- gx_device_printer *pdev = tiffio->pdev;
const char *max_size_error = "Maximum TIFF file size exceeded";
int count;
char buf[TIFF_PRINT_BUF_LENGTH];
count = vsnprintf(buf, sizeof(buf), fmt, ap);
- if (count >= sizeof(buf) || count < 0) { /* C99 || MSVC */
- dmlprintf1(pdev->memory, "%s\n", buf);
- dmlprintf1(pdev->memory, "%s", tifs_msg_truncated);
+ if (count < 0 || count >= sizeof(buf) ) { /* MSVC || C99 */
+ dmlprintf1(tiffio->memory, "%s\n", buf);
+ dmlprintf1(tiffio->memory, "%s", tifs_msg_truncated);
} else {
- dmlprintf1(pdev->memory, "%s\n", buf);
+ dmlprintf1(tiffio->memory, "%s\n", buf);
}
#if (TIFFLIB_VERSION >= 20111221)
if (!strncmp(fmt, max_size_error, strlen(max_size_error))) {
- dmlprintf(pdev->memory, "Use -dUseBigTIFF(=true) for BigTIFF output\n");
+ dmlprintf(tiffio->memory, "Use -dUseBigTIFF(=true) for BigTIFF output\n");
}
#endif
}
@@ -242,7 +242,7 @@ TIFFOpen(const char* name, const char* mode)
{
(void)name;
(void)mode;
-
+
return(NULL);
}
diff --git a/base/gstiffio.h b/base/gstiffio.h
index df40fe58..d71ec81e 100644
--- a/base/gstiffio.h
+++ b/base/gstiffio.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gstparam.h b/base/gstparam.h
index e8aa4fb3..44093bc9 100644
--- a/base/gstparam.h
+++ b/base/gstparam.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -72,12 +72,16 @@ typedef struct gs_transparency_group_params_s {
const gs_color_space *ColorSpace;
bool Isolated;
bool Knockout;
+ float group_shape;
+ float group_opacity;
bool image_with_SMask;
int text_group;
+ bool shade_group;
+ bool page_group;
bool idle;
uint mask_id;
int group_color_numcomps;
- gs_transparency_color_t group_color;
+ gs_transparency_color_t group_color_type;
int64_t icc_hashcode; /* Needed when we are doing clist reading */
cmm_profile_t *iccprofile; /* The profile */
} gs_transparency_group_params_t;
@@ -115,7 +119,7 @@ typedef struct gs_transparency_mask_params_s {
typedef struct gx_transparency_mask_params_s {
gs_transparency_mask_subtype_t subtype;
int group_color_numcomps;
- gs_transparency_color_t group_color;
+ gs_transparency_color_t group_color_type;
int Background_components;
int Matte_components;
float Background[GS_CLIENT_COLOR_MAX_COMPONENTS];
diff --git a/base/gstrans.c b/base/gstrans.c
index 8c4fca30..cb3f2ce6 100644
--- a/base/gstrans.c
+++ b/base/gstrans.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -40,7 +40,7 @@ gs_setblendmode(gs_gstate *pgs, gs_blend_mode_t mode)
if (gs_debug_c('v')) {
static const char *const bm_names[] = { GS_BLEND_MODE_NAMES };
- dmlprintf1(pgs->memory, "[v](0x%lx)blend_mode = ", (long)pgs);
+ dmlprintf1(pgs->memory, "[v]("PRI_INTPTR")blend_mode = ", (intptr_t)pgs);
if (mode >= 0 && mode < countof(bm_names))
dmprintf1(pgs->memory, "%s\n", bm_names[mode]);
else
@@ -65,38 +65,10 @@ gs_currentblendmode(const gs_gstate *pgs)
}
int
-gs_setopacityalpha(gs_gstate *pgs, double alpha)
-{
- if_debug2m('v', pgs->memory, "[v](0x%lx)opacity.alpha = %g\n", (ulong)pgs, alpha);
- pgs->opacity.alpha = (alpha < 0.0 ? 0.0 : alpha > 1.0 ? 1.0 : alpha);
- return 0;
-}
-
-float
-gs_currentopacityalpha(const gs_gstate *pgs)
-{
- return pgs->opacity.alpha;
-}
-
-int
-gs_setshapealpha(gs_gstate *pgs, double alpha)
-{
- if_debug2m('v', pgs->memory, "[v](0x%lx)shape.alpha = %g\n", (ulong)pgs, alpha);
- pgs->shape.alpha = (alpha < 0.0 ? 0.0 : alpha > 1.0 ? 1.0 : alpha);
- return 0;
-}
-
-float
-gs_currentshapealpha(const gs_gstate *pgs)
-{
- return pgs->shape.alpha;
-}
-
-int
gs_settextknockout(gs_gstate *pgs, bool knockout)
{
- if_debug2m('v', pgs->memory, "[v](0x%lx)text_knockout = %s\n",
- (ulong)pgs, (knockout ? "true" : "false"));
+ if_debug2m('v', pgs->memory, "[v]("PRI_INTPTR")text_knockout = %s\n",
+ (intptr_t)pgs, (knockout ? "true" : "false"));
pgs->text_knockout = knockout;
return 0;
}
@@ -193,15 +165,19 @@ gs_gstate_update_pdf14trans(gs_gstate * pgs, gs_pdf14trans_params_t * pparams)
}
void
-gs_trans_group_params_init(gs_transparency_group_params_t *ptgp)
+gs_trans_group_params_init(gs_transparency_group_params_t *ptgp, float opacity)
{
ptgp->ColorSpace = NULL; /* bogus, but can't do better */
ptgp->Isolated = false;
ptgp->Knockout = false;
+ ptgp->page_group = false;
ptgp->text_group = PDF14_TEXTGROUP_NO_BT;
ptgp->image_with_SMask = false;
ptgp->mask_id = 0;
ptgp->iccprofile = NULL;
+ ptgp->group_opacity = opacity;
+ ptgp->group_shape = 1.0;
+ ptgp->shade_group = false;
}
int
@@ -235,11 +211,14 @@ gs_begin_transparency_group(gs_gstate *pgs,
params.pdf14_op = group_type;
params.Isolated = ptgp->Isolated;
params.Knockout = ptgp->Knockout;
+ if (group_type == PDF14_BEGIN_TRANS_PAGE_GROUP)
+ params.page_group = true;
params.image_with_SMask = ptgp->image_with_SMask;
- params.opacity = pgs->opacity;
- params.shape = pgs->shape;
+ params.opacity = ptgp->group_opacity;
+ params.shape = ptgp->group_shape;
params.blend_mode = pgs->blend_mode;
params.text_group = ptgp->text_group;
+ params.shade_group = ptgp->shade_group;
/* This function is called during the c-list writer side.
Store some information so that we know what the color space is
so that we can adjust according later during the clist reader.
@@ -264,11 +243,14 @@ gs_begin_transparency_group(gs_gstate *pgs,
target device (process color model). Here we just want
to set it as a unknown type for clist writing, as we will take care
of using the parent group color space later during clist reading.
- */
-
+ Also, if the group was not isolated we MUST use the parent group
+ color space regardless of what the group color space is specified to be.
+ Note that the page group should always be isolated */
+ if (group_type == PDF14_BEGIN_TRANS_PAGE_GROUP)
+ params.Isolated = true;
if (ptgp->ColorSpace == NULL || params.Isolated != true) {
- params.group_color = UNKNOWN;
+ params.group_color_type = UNKNOWN;
params.group_color_numcomps = 0;
} else {
/* The /CS parameter was present. Use what was set. Currently
@@ -283,7 +265,7 @@ gs_begin_transparency_group(gs_gstate *pgs,
/* Blending space is ICC based. If we are doing c-list rendering
we will need to write this color space into the clist.
*/
- params.group_color = ICC;
+ params.group_color_type = ICC;
params.group_color_numcomps =
blend_color_space->cmm_icc_profile_data->num_comps;
/* Get the ICC profile */
@@ -306,12 +288,12 @@ gs_begin_transparency_group(gs_gstate *pgs,
/* We can end up here if we are in a deviceN color space and
we have a sep output device */
profile = NULL;
- params.group_color = DEVICEN;
+ params.group_color_type = DEVICEN;
params.group_color_numcomps = cs_num_components(blend_color_space);
break;
}
if (profile != NULL) {
- params.group_color = ICC;
+ params.group_color_type = ICC;
params.group_color_numcomps = profile->num_comps;
params.iccprofile = profile;
params.icc_hash = profile->hashcode;
@@ -323,16 +305,16 @@ gs_begin_transparency_group(gs_gstate *pgs,
static const char *const cs_names[] = {
GS_COLOR_SPACE_TYPE_NAMES
};
- dmlprintf6(pgs->memory, "[v](0x%lx)begin_transparency_group [%g %g %g %g] Num_grp_clr_comp = %d\n",
- (ulong)pgs, pbbox->p.x, pbbox->p.y, pbbox->q.x, pbbox->q.y,params.group_color_numcomps);
+ dmlprintf6(pgs->memory, "[v]("PRI_INTPTR")begin_transparency_group [%g %g %g %g] Num_grp_clr_comp = %d\n",
+ (intptr_t)pgs, pbbox->p.x, pbbox->p.y, pbbox->q.x, pbbox->q.y,params.group_color_numcomps);
if (ptgp->ColorSpace)
dmprintf1(pgs->memory, " CS = %s",
cs_names[(int)gs_color_space_get_index(ptgp->ColorSpace)]);
else
dmputs(pgs->memory, " (no CS)");
- dmprintf3(pgs->memory, " Isolated = %d Knockout = %d text_group = %d\n",
- ptgp->Isolated, ptgp->Knockout, ptgp->text_group);
+ dmprintf4(pgs->memory, " Isolated = %d Knockout = %d text_group = %d page_group = %d\n",
+ ptgp->Isolated, ptgp->Knockout, ptgp->text_group, ptgp->page_group);
}
#endif
params.bbox = *pbbox;
@@ -351,18 +333,21 @@ gx_begin_transparency_group(gs_gstate * pgs, gx_device * pdev,
return_error(gs_error_rangecheck);
tgp.Isolated = pparams->Isolated;
tgp.Knockout = pparams->Knockout;
+ tgp.page_group = pparams->page_group;
tgp.idle = pparams->idle;
tgp.mask_id = pparams->mask_id;
tgp.text_group = pparams->text_group;
+ tgp.shade_group = pparams->shade_group;
/* Needed so that we do proper blending */
- tgp.group_color = pparams->group_color;
+ tgp.group_color_type = pparams->group_color_type;
tgp.group_color_numcomps = pparams->group_color_numcomps;
tgp.iccprofile = pparams->iccprofile;
tgp.icc_hashcode = pparams->icc_hash;
- pgs->opacity.alpha = pparams->opacity.alpha;
- pgs->shape.alpha = pparams->shape.alpha;
+ tgp.group_opacity = pparams->opacity;
+ tgp.group_shape = pparams->shape;
+
pgs->blend_mode = pparams->blend_mode;
bbox = pparams->bbox;
#ifdef DEBUG
@@ -370,18 +355,20 @@ gx_begin_transparency_group(gs_gstate * pgs, gx_device * pdev,
static const char *const cs_names[] = {
GS_COLOR_SPACE_TYPE_NAMES
};
- dmlprintf6(pdev->memory, "[v](0x%lx)gx_begin_transparency_group [%g %g %g %g] Num_grp_clr_comp = %d\n",
- (ulong)pgs, bbox.p.x, bbox.p.y, bbox.q.x, bbox.q.y,
- pparams->group_color_numcomps);
+ dmlprintf6(pdev->memory, "[v]("PRI_INTPTR")gx_begin_transparency_group [%g %g %g %g] Num_grp_clr_comp = %d\n",
+ (intptr_t)pgs, bbox.p.x, bbox.p.y, bbox.q.x, bbox.q.y,
+ pparams->group_color_numcomps);
+ dmlprintf2(pdev->memory, " opacity = %g shape = %g\n", pparams->opacity, pparams->shape);
if (tgp.ColorSpace)
dmprintf1(pdev->memory, " CS = %s",
cs_names[(int)gs_color_space_get_index(tgp.ColorSpace)]);
else
dmputs(pdev->memory, " (no CS)");
- dmprintf2(pdev->memory, " Isolated = %d Knockout = %d\n",
- tgp.Isolated, tgp.Knockout);
+ dmprintf3(pdev->memory, " Isolated = %d Knockout = %d page_group = %d\n",
+ tgp.Isolated, tgp.Knockout, tgp.page_group);
if (tgp.iccprofile)
dmprintf(pdev->memory, " Have ICC Profile for blending\n");
+
}
#endif
return (*dev_proc(pdev, begin_transparency_group)) (pdev, &tgp, &bbox, pgs,
@@ -601,9 +588,9 @@ gs_begin_transparency_mask(gs_gstate * pgs,
return_error(gs_error_VMerror);
blend_color_space->cmm_icc_profile_data = pgs->icc_manager->default_gray;
gsicc_adjust_profile_rc(blend_color_space->cmm_icc_profile_data, 1, "gs_begin_transparency_mask");
- if_debug9m('v', pgs->memory, "[v](0x%lx)gs_begin_transparency_mask [%g %g %g %g]\n\
- subtype = %d Background_components = %d, Matte_components = %d, %s\n",
- (ulong)pgs, pbbox->p.x, pbbox->p.y, pbbox->q.x, pbbox->q.y,
+ if_debug9m('v', pgs->memory, "[v]("PRI_INTPTR")gs_begin_transparency_mask [%g %g %g %g]\n"
+ " subtype = %d Background_components = %d, Matte_components = %d, %s\n",
+ (intptr_t)pgs, pbbox->p.x, pbbox->p.y, pbbox->q.x, pbbox->q.y,
(int)ptmp->subtype, ptmp->Background_components,
ptmp->Matte_components,
(ptmp->TransferFunction == mask_transfer_identity ? "no TR" :
@@ -637,7 +624,7 @@ gs_begin_transparency_mask(gs_gstate * pgs,
if ( blend_color_space->cmm_icc_profile_data != NULL ) {
/* Blending space is ICC based. If we are doing c-list rendering we will
need to write this color space into the clist. */
- params.group_color = ICC;
+ params.group_color_type = ICC;
params.group_color_numcomps =
blend_color_space->cmm_icc_profile_data->num_comps;
/* Get the ICC profile */
@@ -647,7 +634,7 @@ gs_begin_transparency_mask(gs_gstate * pgs,
params.iccprofile = blend_color_space->cmm_icc_profile_data;
params.icc_hash = blend_color_space->cmm_icc_profile_data->hashcode;
} else {
- params.group_color = GRAY_SCALE;
+ params.group_color_type = GRAY_SCALE;
params.group_color_numcomps = 1; /* Need to check */
}
/* Explicitly decrement the profile data since blend_color_space may not
@@ -669,7 +656,7 @@ gx_begin_transparency_mask(gs_gstate * pgs, gx_device * pdev,
const int l = sizeof(pparams->Background[0]) * pparams->Background_components;
const int m = sizeof(pparams->Matte[0]) * pparams->Matte_components;
- tmp.group_color = pparams->group_color;
+ tmp.group_color_type = pparams->group_color_type;
tmp.subtype = pparams->subtype;
tmp.group_color_numcomps = pparams->group_color_numcomps;
tmp.Background_components = pparams->Background_components;
@@ -682,7 +669,7 @@ gx_begin_transparency_mask(gs_gstate * pgs, gx_device * pdev,
tmp.replacing = pparams->replacing;
tmp.mask_id = pparams->mask_id;
- if (tmp.group_color == ICC ) {
+ if (tmp.group_color_type == ICC ) {
/* Do I need to ref count here? */
tmp.iccprofile = pparams->iccprofile;
tmp.icc_hashcode = pparams->icc_hash;
@@ -692,9 +679,9 @@ gx_begin_transparency_mask(gs_gstate * pgs, gx_device * pdev,
}
memcpy(tmp.transfer_fn, pparams->transfer_fn, size_of(tmp.transfer_fn));
if_debug10m('v', pgs->memory,
- "[v](0x%lx)gx_begin_transparency_mask [%g %g %g %g]\n"
+ "[v]("PRI_INTPTR")gx_begin_transparency_mask [%g %g %g %g]\n"
" subtype = %d Background_components = %d Matte_components = %d Num_grp_clr_comp = %d %s\n",
- (ulong)pgs, pparams->bbox.p.x, pparams->bbox.p.y,
+ (intptr_t)pgs, pparams->bbox.p.x, pparams->bbox.p.y,
pparams->bbox.q.x, pparams->bbox.q.y,
(int)tmp.subtype, tmp.Background_components, tmp.Matte_components,
tmp.group_color_numcomps,
@@ -729,7 +716,7 @@ gs_end_transparency_mask(gs_gstate *pgs,
if_debug1m('v', pgs->memory,
"[v]xstate_changed set true, gstate level is %d\n", pgs->level);
if_debug2m('v', pgs->memory,
- "[v](0x%lx)gs_end_transparency_mask(%d)\n", (ulong)pgs,
+ "[v]("PRI_INTPTR")gs_end_transparency_mask(%d)\n", (intptr_t)pgs,
(int)csel);
params.pdf14_op = PDF14_END_TRANS_MASK; /* Other parameters not used */
params.csel = csel;
@@ -747,7 +734,7 @@ gx_end_transparency_mask(gs_gstate * pgs, gx_device * pdev,
const gs_pdf14trans_params_t * pparams)
{
if_debug2m('v', pgs->memory,
- "[v](0x%lx)gx_end_transparency_mask(%d)\n", (ulong)pgs,
+ "[v]("PRI_INTPTR")gx_end_transparency_mask(%d)\n", (intptr_t)pgs,
(int)pparams->csel);
return (*dev_proc(pdev, end_transparency_mask)) (pdev, pgs);
}
@@ -846,7 +833,7 @@ gs_abort_pdf14trans_device(gs_gstate * pgs)
int
gx_abort_trans_device(gs_gstate * pgs, gx_device * pdev)
{
- if_debug1m('v', pgs->memory, "[v](0x%lx)gx_abort_trans_device\n", (ulong)pgs);
+ if_debug1m('v', pgs->memory, "[v]("PRI_INTPTR")gx_abort_trans_device\n", (intptr_t)pgs);
return (*dev_proc(pdev, discard_transparency_layer)) (pdev, pgs);
}
diff --git a/base/gstrans.h b/base/gstrans.h
index 3dc72983..a441bbef 100644
--- a/base/gstrans.h
+++ b/base/gstrans.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -69,8 +69,7 @@ typedef enum {
/* Bit definitions for serializing PDF 1.4 parameters */
#define PDF14_SET_BLEND_MODE (1 << 0)
#define PDF14_SET_TEXT_KNOCKOUT (1 << 1)
-#define PDF14_SET_SHAPE_ALPHA (1 << 2)
-#define PDF14_SET_OPACITY_ALPHA (1 << 3)
+#define PDF14_SET_AIS (1 << 2)
#define PDF14_SET_OVERPRINT (1 << 4)
#define PDF14_SET_FILLCONSTANTALPHA (1 << 6)
#define PDF14_SET_STROKECONSTANTALPHA (1 << 7)
@@ -88,10 +87,6 @@ typedef enum {
PDF14_TEXTGROUP_MISSING_ET /* We pushed a group already and then had another BT occur */
} pdf14_text_group_state;
-typedef struct gs_transparency_source_s {
- float alpha; /* constant alpha */
-} gs_transparency_source_t;
-
struct gs_pdf14trans_params_s {
/* The type of trasnparency operation */
pdf14_compositor_operations pdf14_op;
@@ -124,8 +119,11 @@ struct gs_pdf14trans_params_s {
gs_blend_mode_t blend_mode;
bool text_knockout;
int text_group;
- gs_transparency_source_t opacity;
- gs_transparency_source_t shape;
+ bool page_group;
+ bool ais;
+ bool shade_group;
+ float opacity;
+ float shape;
float fillconstantalpha;
float strokeconstantalpha;
bool mask_is_image;
@@ -138,7 +136,7 @@ struct gs_pdf14trans_params_s {
bool idle; /* For clist reader.*/
uint mask_id; /* For clist reader.*/
int group_color_numcomps;
- gs_transparency_color_t group_color;
+ gs_transparency_color_t group_color_type;
int64_t icc_hash;
cmm_profile_t *iccprofile; /* The profile */
bool crop_blend_params; /* This is used when the blend params are updated
@@ -160,10 +158,6 @@ typedef struct gs_pdf14trans_s {
/* Access transparency-related graphics state elements. */
int gs_setblendmode(gs_gstate *, gs_blend_mode_t);
gs_blend_mode_t gs_currentblendmode(const gs_gstate *);
-int gs_setopacityalpha(gs_gstate *, double);
-float gs_currentopacityalpha(const gs_gstate *);
-int gs_setshapealpha(gs_gstate *, double);
-float gs_currentshapealpha(const gs_gstate *);
int gs_settextknockout(gs_gstate *, bool);
bool gs_currenttextknockout(const gs_gstate *);
@@ -177,7 +171,7 @@ int gs_pop_pdf14trans_device(gs_gstate * pgs, bool is_pattern);
int gs_abort_pdf14trans_device(gs_gstate * pgs);
-void gs_trans_group_params_init(gs_transparency_group_params_t *ptgp);
+void gs_trans_group_params_init(gs_transparency_group_params_t *ptgp, float opacity);
int gs_update_trans_marking_params(gs_gstate * pgs);
diff --git a/base/gstrap.c b/base/gstrap.c
index a98534c3..7ae01e32 100644
--- a/base/gstrap.c
+++ b/base/gstrap.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gstrap.h b/base/gstrap.h
index 68010171..9a29fe74 100644
--- a/base/gstrap.h
+++ b/base/gstrap.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gstype1.c b/base/gstype1.c
index f45b7b1e..a8508623 100644
--- a/base/gstype1.c
+++ b/base/gstype1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -218,9 +218,9 @@ gs_type1_interpret(gs_type1_state * pcis, const gs_glyph_data_t *pgd,
{char1_command_names};
if (c1names[c] == 0)
- dmlprintf2(pfont->memory, "[1]0x%lx: %02x??\n", (ulong) (cip - 1), c);
+ dmlprintf2(pfont->memory, "[1]"PRI_INTPTR": %02x??\n", (intptr_t)(cip - 1), c);
else
- dmlprintf3(pfont->memory, "[1]0x%lx: %02x %s\n", (ulong) (cip - 1), c,
+ dmlprintf3(pfont->memory, "[1]"PRI_INTPTR": %02x %s\n", (intptr_t)(cip - 1), c,
c1names[c]);
}
#endif
@@ -400,11 +400,11 @@ rsbw: /* Give the caller the opportunity to intervene. */
{char1_extended_command_names};
if (ce1names[c] == 0)
- dmlprintf2(pfont->memory, "[1]0x%lx: %02x??\n",
- (ulong) (cip - 1), c);
+ dmlprintf2(pfont->memory, "[1]"PRI_INTPTR": %02x??\n",
+ (intptr_t)(cip - 1), c);
else
- dmlprintf3(pfont->memory, "[1]0x%lx: %02x %s\n",
- (ulong) (cip - 1), c, ce1names[c]);
+ dmlprintf3(pfont->memory, "[1]"PRI_INTPTR": %02x %s\n",
+ (intptr_t)(cip - 1), c, ce1names[c]);
}
#endif
switch ((char1_extended_command) c) {
diff --git a/base/gstype1.h b/base/gstype1.h
index e171d9fc..e88be5cc 100644
--- a/base/gstype1.h
+++ b/base/gstype1.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gstype2.c b/base/gstype2.c
index c8b1b7b1..870e13dd 100644
--- a/base/gstype2.c
+++ b/base/gstype2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -219,11 +219,11 @@ gs_type2_interpret(gs_type1_state * pcis, const gs_glyph_data_t *pgd,
{char2_command_names};
if (c2names[c] == 0)
- dmlprintf2(pfont->memory, "[1]0x%lx: %02x??\n",
- (ulong) (cip - 1), c);
+ dmlprintf2(pfont->memory, "[1]"PRI_INTPTR": %02x??\n",
+ (intptr_t)(cip - 1), c);
else
- dmlprintf3(pfont->memory, "[1]0x%lx: %02x %s\n",
- (ulong) (cip - 1), c, c2names[c]);
+ dmlprintf3(pfont->memory, "[1]"PRI_INTPTR": %02x %s\n",
+ (intptr_t)(cip - 1), c, c2names[c]);
}
#endif
switch ((char_command) c) {
@@ -593,11 +593,11 @@ gs_type2_interpret(gs_type1_state * pcis, const gs_glyph_data_t *pgd,
{char2_extended_command_names};
if (ce2names[c] == 0)
- dmlprintf2(pfont->memory, "[1]0x%lx: %02x??\n",
- (ulong) (cip - 1), c);
+ dmlprintf2(pfont->memory, "[1]"PRI_INTPTR": %02x??\n",
+ (intptr_t)(cip - 1), c);
else
- dmlprintf3(pfont->memory, "[1]0x%lx: %02x %s\n",
- (ulong) (cip - 1), c, ce2names[c]);
+ dmlprintf3(pfont->memory, "[1]"PRI_INTPTR": %02x %s\n",
+ (intptr_t)(cip - 1), c, ce2names[c]);
}
#endif
switch ((char2_extended_command) c) {
diff --git a/base/gstype42.c b/base/gstype42.c
index 3b8761de..55889201 100644
--- a/base/gstype42.c
+++ b/base/gstype42.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -270,8 +270,8 @@ gs_type42_font_init(gs_font_type42 * pfont, int subfontID)
}
}
loca_size >>= pfont->data.indexToLocFormat + 1;
- pfont->data.numGlyphs = (loca_size == 0 ? 0 : loca_size - 1);
- if (pfont->data.numGlyphs > pfont->data.trueNumGlyphs) {
+ pfont->data.numGlyphs = loca_size - 1;
+ if (pfont->data.numGlyphs > (int)pfont->data.trueNumGlyphs) {
/* pfont->key_name.chars is ASCIIZ due to copy_font_name. */
char buf[gs_font_name_max + 2];
@@ -353,16 +353,24 @@ gs_type42_font_init(gs_font_type42 * pfont, int subfontID)
/* Since 'loca' is usually sorted, first try the simple linear scan to */
/* avoid the need to perform the more expensive process. */
glyph_start = get_glyph_offset(pfont, 0);
- for (i = 1; i < loca_size; i++) {
- glyph_offset = get_glyph_offset(pfont, i);
- glyph_length = glyph_offset - glyph_start;
- if (glyph_length > 0x80000000)
- break;
- if (glyph_offset > glyph_size)
- break;
- /* out of order loca */
- pfont->data.len_glyphs[i - 1] = glyph_length;
- glyph_start = glyph_offset;
+ if (loca_size > 1) {
+ for (i = 1; i < loca_size; i++) {
+ glyph_offset = get_glyph_offset(pfont, i);
+ glyph_length = glyph_offset - glyph_start;
+ if (glyph_length > 0x80000000)
+ break;
+ if (glyph_offset > glyph_size)
+ break;
+ /* out of order loca */
+ pfont->data.len_glyphs[i - 1] = glyph_length;
+ glyph_start = glyph_offset;
+ }
+ }
+ else {
+ /* This is purely so broken fonts don't cause an uninitialized
+ memory access later on.
+ */
+ pfont->data.len_glyphs[0] = 0;
}
if (i < loca_size) {
/*
diff --git a/base/gstypes.h b/base/gstypes.h
index d25c9597..cd163b9d 100644
--- a/base/gstypes.h
+++ b/base/gstypes.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsuid.h b/base/gsuid.h
index e807791d..1f0632c7 100644
--- a/base/gsuid.h
+++ b/base/gsuid.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsutil.c b/base/gsutil.c
index 8d9c8679..3b7870f1 100644
--- a/base/gsutil.c
+++ b/base/gsutil.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsutil.h b/base/gsutil.h
index f538a752..e3269311 100644
--- a/base/gsutil.h
+++ b/base/gsutil.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gswin.rc b/base/gswin.rc
index a8977bc7..5ba2d341 100644
--- a/base/gswin.rc
+++ b/base/gswin.rc
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gsxfont.h b/base/gsxfont.h
index 97309e85..ef45a1a3 100644
--- a/base/gsxfont.h
+++ b/base/gsxfont.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gx.h b/base/gx.h
index ce9eb5b8..60a411aa 100644
--- a/base/gx.h
+++ b/base/gx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxacpath.c b/base/gxacpath.c
index ebed0eb6..fe9184ad 100644
--- a/base/gxacpath.c
+++ b/base/gxacpath.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -338,9 +338,9 @@ accum_close(gx_device * dev)
(adev->list.count <= 1 ? &adev->list.single : adev->list.head);
dmlprintf6(dev->memory,
- "[q]list at 0x%lx, count=%d, head=0x%lx, tail=0x%lx, xrange=(%d,%d):\n",
- (ulong) & adev->list, adev->list.count,
- (ulong) adev->list.head, (ulong) adev->list.tail,
+ "[q]list at "PRI_INTPTR", count=%d, head="PRI_INTPTR", tail="PRI_INTPTR", xrange=(%d,%d):\n",
+ (intptr_t)&adev->list, adev->list.count,
+ (intptr_t)adev->list.head, (intptr_t)adev->list.tail,
adev->list.xmin, adev->list.xmax);
while (rp != 0) {
clip_rect_print('q', " ", rp);
@@ -348,7 +348,7 @@ accum_close(gx_device * dev)
}
}
if (!clip_list_validate(&adev->list)) {
- mlprintf1(dev->memory, "[q]Bad clip list 0x%lx!\n", (ulong) & adev->list);
+ mlprintf1(dev->memory, "[q]Bad clip list "PRI_INTPTR"!\n", (intptr_t)&adev->list);
return_error(gs_error_Fatal);
}
#endif
@@ -431,9 +431,8 @@ accum_alloc_rect(gx_device_cpath_accum * adev)
#define ACCUM_ALLOC(s, ar, px, py, qx, qy)\
if (++(adev->list.count) == 1)\
ar = &adev->list.single;\
- else if ((ar = accum_alloc_rect(adev)) == 0)\
- return_error(gs_error_VMerror);\
- ACCUM_SET(s, ar, px, py, qx, qy)
+ ar = accum_alloc_rect(adev);\
+ if (ar) ACCUM_SET(s, ar, px, py, qx, qy)
#define ACCUM_SET(s, ar, px, py, qx, qy)\
(ar)->xmin = px, (ar)->ymin = py, (ar)->xmax = qx, (ar)->ymax = qy;\
clip_rect_print('Q', s, ar)
@@ -537,6 +536,7 @@ top:
return 0;
}
ACCUM_ALLOC("app.y", nr, x, y, xe, ye);
+ if (!nr) return_error(gs_error_VMerror);
ACCUM_ADD_LAST(nr);
return 0;
} else if (y == rptr->ymin && ye == rptr->ymax && x >= rptr->xmin) {
@@ -546,10 +546,12 @@ top:
return 0;
}
ACCUM_ALLOC("app.x", nr, x, y, xe, ye);
+ if (!nr) return_error(gs_error_VMerror);
ACCUM_ADD_LAST(nr);
return 0;
}
ACCUM_ALLOC("accum", nr, x, y, xe, ye);
+ if (!nr) return_error(gs_error_VMerror);
/* Previously we used to always search back from the tail here. Now we
* base our search on the previous insertion point, in the hopes that
* locality of reference will save us time. */
@@ -579,6 +581,10 @@ top:
}
/* Split off the top part of the new rectangle. */
ACCUM_ALLOC("a.top", ar, x, ymax, xe, ye);
+ if (!ar) {
+ if (nr != &adev->list.single) ACCUM_FREE("free", nr);
+ return_error(gs_error_VMerror);
+ }
ACCUM_ADD_AFTER(ar, rptr);
ye = nr->ymax = ymax;
clip_rect_print('Q', " ymax", nr);
@@ -592,6 +598,10 @@ top:
while (rsplit->ymax == ymax) {
ACCUM_ALLOC("s.top", ar, rsplit->xmin, ye, rsplit->xmax, ymax);
+ if (!ar) {
+ if (nr != &adev->list.single) ACCUM_FREE("free", nr);
+ return_error(gs_error_VMerror);
+ }
ACCUM_ADD_AFTER(ar, rptr);
rsplit->ymax = ye;
rsplit = rsplit->prev;
@@ -606,6 +616,10 @@ top:
rbot = rbot->prev;
for (rsplit = rbot;;) {
ACCUM_ALLOC("s.bot", ar, rsplit->xmin, ymin, rsplit->xmax, y);
+ if (!ar) {
+ if (nr != &adev->list.single) ACCUM_FREE("free", nr);
+ return_error(gs_error_VMerror);
+ }
ACCUM_ADD_BEFORE(ar, rbot);
rsplit->ymin = y;
if (rsplit == rptr)
diff --git a/base/gxalloc.h b/base/gxalloc.h
index e81c2988..dd164756 100644
--- a/base/gxalloc.h
+++ b/base/gxalloc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -220,8 +220,8 @@ extern_st(st_clump);
}\
}\
if ( pre != end )\
- { lprintf2("Clump parsing error, 0x%lx != 0x%lx\n",\
- (ulong)pre, (ulong)end);\
+ { lprintf2("Clump parsing error, "PRI_INTPTR" != "PRI_INTPTR"\n",\
+ (intptr_t)pre, (intptr_t)end);\
/*gs_abort((const gs_memory_t *)NULL);*/ \
}\
}
@@ -276,15 +276,15 @@ void alloc_free_clump(clump_t *, gs_ref_memory_t *);
/* Unfortunately, the ANSI C preprocessor doesn't allow us to */
/* define the list of variables being printed as a macro. */
#define dprintf_clump_format\
- "%s 0x%lx (0x%lx..0x%lx, 0x%lx..0x%lx..0x%lx)\n"
+ "%s "PRI_INTPTR" ("PRI_INTPTR".."PRI_INTPTR", "PRI_INTPTR".."PRI_INTPTR".."PRI_INTPTR")\n"
#define dmprintf_clump(mem, msg, cp)\
dmprintf7(mem, dprintf_clump_format,\
- msg, (ulong)(cp), (ulong)(cp)->cbase, (ulong)(cp)->cbot,\
- (ulong)(cp)->ctop, (ulong)(cp)->climit, (ulong)(cp)->cend)
+ msg, (intptr_t)(cp), (intptr_t)(cp)->cbase, (intptr_t)(cp)->cbot,\
+ (intptr_t)(cp)->ctop, (intptr_t)(cp)->climit, (intptr_t)(cp)->cend)
#define if_debug_clump(c, mem, msg, cp)\
if_debug7m(c, mem,dprintf_clump_format,\
- msg, (ulong)(cp), (ulong)(cp)->cbase, (ulong)(cp)->cbot,\
- (ulong)(cp)->ctop, (ulong)(cp)->climit, (ulong)(cp)->cend)
+ msg, (intptr_t)(cp), (intptr_t)(cp)->cbase, (intptr_t)(cp)->cbot,\
+ (intptr_t)(cp)->ctop, (intptr_t)(cp)->climit, (intptr_t)(cp)->cend)
/* ================ Allocator state ================ */
diff --git a/base/gxalpha.h b/base/gxalpha.h
index daa03c26..de14cd89 100644
--- a/base/gxalpha.h
+++ b/base/gxalpha.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxarith.h b/base/gxarith.h
index a2678ae1..3d4c7d9a 100644
--- a/base/gxarith.h
+++ b/base/gxarith.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxband.h b/base/gxband.h
index de45d2fb..1af69cbf 100644
--- a/base/gxband.h
+++ b/base/gxband.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxbcache.c b/base/gxbcache.c
index f62d0c8e..adcd9b46 100644
--- a/base/gxbcache.c
+++ b/base/gxbcache.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -16,6 +16,7 @@
/* Bitmap cache implementation */
#include "memory_.h"
+#include "stdint_.h"
#include "gx.h"
#include "gsmdebug.h"
#include "gxbcache.h"
@@ -85,16 +86,16 @@ gx_bits_cache_alloc(gx_bits_cache * bc, ulong lsize, gx_cached_bits_head ** pcbh
return -1;
}
fsize += cbh_next->size;
- if_debug2('K', "[K]merging free bits 0x%lx(%u)\n",
- (ulong) cbh_next, cbh_next->size);
+ if_debug2('K', "[K]merging free bits "PRI_INTPTR"(%u)\n",
+ (intptr_t)cbh_next, cbh_next->size);
cbh_next = (gx_cached_bits_head *) ((byte *) cbh + fsize);
}
if (fsize > ssize) { /* fsize >= ssize1 */
cbh_next = (gx_cached_bits_head *) ((byte *) cbh + ssize);
cbh_next->size = fsize - ssize;
cb_head_set_free(cbh_next);
- if_debug2('K', "[K]shortening bits 0x%lx by %u (initial)\n",
- (ulong) cbh, fsize - ssize);
+ if_debug2('K', "[K]shortening bits "PRI_INTPTR" by %u (initial)\n",
+ (intptr_t)cbh, fsize - ssize);
}
gs_alloc_fill(cbh, gs_alloc_fill_block, ssize);
cbh->size = ssize;
diff --git a/base/gxbcache.h b/base/gxbcache.h
index 69d29fe2..be601b69 100644
--- a/base/gxbcache.h
+++ b/base/gxbcache.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxbitfmt.h b/base/gxbitfmt.h
index 7ae8fb88..8cdc0bc0 100644
--- a/base/gxbitfmt.h
+++ b/base/gxbitfmt.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxbitmap.h b/base/gxbitmap.h
index 12025d34..9f18a94b 100644
--- a/base/gxbitmap.h
+++ b/base/gxbitmap.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxbitops.h b/base/gxbitops.h
index c3abe386..8b1e9074 100644
--- a/base/gxbitops.h
+++ b/base/gxbitops.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxblend.c b/base/gxblend.c
index 8e806888..41059483 100644
--- a/base/gxblend.c
+++ b/base/gxblend.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -670,69 +670,110 @@ art_blend_luminosity_cmyk_16(int n_chan, uint16_t *gs_restrict dst, const uint16
dst[i] = src[i];
}
+
+/*
+
+Some notes on saturation blendmode:
+
+To test the results of deep color rendering, we ran a psdcmyk vs
+psdcmyk16 comparison. This showed differences on page 17 of the
+Altona_technical_v20_x4.pdf file in one patch. Simplifying the
+file shows that the saturation blend mode is showing significant
+differences between 8 and 16 bit rendering.
+
+Saturation blend mode is defined to not make any changes if we
+are writing over a pure grey color (as there is no 'hue' for
+it to saturate). You'd expect that the blending function would be
+continuous (i.e. that a small peturbation of the background color
+should only produce a small peturbation in the output), but this
+is NOT the case around pure greys.
+
+The example in the tested file, shows that psdcmyk is called with
+7a, 7a, 7a, which therefore leaves the background unchanged. For
+psdcmyk16, it's called with 7a01 7a03 7a01, which therefore does
+NOT leave the background unchanged. Testing by changing the 8 bit
+inputs to 7b 7a 7b (a small peturbation), gives output of 99 64 99
+(a large change).
+
+So, actually, the results given seem reasonable in that case.
+
+As a further indication that saturation blend mode results are
+'unstable' for 'near greys', the same patch in acrobat renders
+slightly blue, where the 16bit rendering in gs renders slightly
+pink. This can be explained by a small peturbation in the input
+color, which itself can be explained by small differences in the
+color profiles used.
+
+*/
+
void
art_blend_saturation_rgb_8(int n_chan, byte *gs_restrict dst, const byte *gs_restrict backdrop,
const byte *gs_restrict src)
{
- int rb = backdrop[0], gb = backdrop[1], bb = backdrop[2];
+ int32_t rb = backdrop[0], gb = backdrop[1], bb = backdrop[2];
int rs = src[0], gs = src[1], bs = src[2];
- int minb, maxb;
- int mins, maxs;
- int y;
+ int mins, maxs, minb, maxb;
+ int satCs, lumCb, lumC, d;
int scale;
- int r, g, b;
- minb = rb < gb ? rb : gb;
- minb = minb < bb ? minb : bb;
- maxb = rb > gb ? rb : gb;
- maxb = maxb > bb ? maxb : bb;
- if (minb == maxb) {
- /* backdrop has zero saturation, avoid divide by 0 */
+ if (rb == gb && gb == bb) {
+ /* backdrop has zero saturation, no change. */
dst[0] = gb;
dst[1] = gb;
dst[2] = gb;
return;
}
+ /* Lum(Cb) */
+ lumCb = (rb * 77 + gb * 151 + bb * 28 + 0x80) >> 8;
+
mins = rs < gs ? rs : gs;
+ maxs = rs < gs ? gs : rs;
mins = mins < bs ? mins : bs;
- maxs = rs > gs ? rs : gs;
- maxs = maxs > bs ? maxs : bs;
-
- scale = ((maxs - mins) << 16) / (maxb - minb);
- y = (rb * 77 + gb * 151 + bb * 28 + 0x80) >> 8;
- r = y + ((((rb - y) * scale) + 0x8000) >> 16);
- g = y + ((((gb - y) * scale) + 0x8000) >> 16);
- b = y + ((((bb - y) * scale) + 0x8000) >> 16);
+ maxs = maxs < bs ? bs : maxs;
- if ((r | g | b) & 0x100) {
- int scalemin, scalemax;
- int min, max;
-
- min = r < g ? r : g;
- min = min < b ? min : b;
- max = r > g ? r : g;
- max = max > b ? max : b;
-
- if (min < 0)
- scalemin = (y << 16) / (y - min);
- else
- scalemin = 0x10000;
+ /* Sat(Cs) = maxs - mins */
+ satCs = maxs - mins;
- if (max > 255)
- scalemax = ((255 - y) << 16) / (max - y);
- else
- scalemax = 0x10000;
-
- scale = scalemin < scalemax ? scalemin : scalemax;
- r = y + (((r - y) * scale + 0x8000) >> 16);
- g = y + (((g - y) * scale + 0x8000) >> 16);
- b = y + (((b - y) * scale + 0x8000) >> 16);
+ /* C = {rb, bb, gb} = SetSat(Cb, Sat(Cs)) */
+ minb = rb < gb ? rb : gb;
+ maxb = rb < gb ? gb : rb;
+ minb = minb < bb ? minb : bb;
+ maxb = maxb < bb ? bb : maxb;
+ scale = (satCs<<8) / (maxb - minb);
+ rb = ((rb - minb) * scale + 0x80)>>8;
+ gb = ((gb - minb) * scale + 0x80)>>8;
+ bb = ((bb - minb) * scale + 0x80)>>8;
+ /* Leaves us with Cmin = 0, Cmax = s, and Cmid all as per the spec. */
+
+ /* SetLum(SetSat(Cb, Sat(Cs)), Lum(Cb)) */
+ /* lumC = Lum(C) */
+ lumC = (rb * 77 + gb * 151 + bb * 28 + 0x80) >> 8;
+ d = lumCb - lumC;
+ /* ClipColor(C) */
+ /* We know that Cmin = 0, Cmax = satCs. Therefore, given we are about
+ * to add 'd' back on to reset the luminance, we'll have overflow
+ * problems if d < 0 or d+satCs > 255. We further know that as
+ * 0 <= satCs <= 255, so only one of those can be true a time. */
+ if (d < 0) {
+ scale = (lumCb<<8) / lumC;
+ goto correct_overflow;
+ } else if (d + satCs > 255) {
+ scale = ((255 - lumCb)<<8) / (satCs - lumC);
+correct_overflow:
+ rb = lumCb + (((rb - lumC) * scale + 0x80)>>8);
+ gb = lumCb + (((gb - lumC) * scale + 0x80)>>8);
+ bb = lumCb + (((bb - lumC) * scale + 0x80)>>8);
+ } else {
+ /* C += d */
+ rb += d;
+ gb += d;
+ bb += d;
}
- dst[0] = r;
- dst[1] = g;
- dst[2] = b;
+ dst[0] = rb;
+ dst[1] = gb;
+ dst[2] = bb;
}
void
@@ -741,67 +782,70 @@ art_blend_saturation_rgb_16(int n_chan, uint16_t *gs_restrict dst, const uint16_
{
int rb = backdrop[0], gb = backdrop[1], bb = backdrop[2];
int rs = src[0], gs = src[1], bs = src[2];
- int minb, maxb;
- int mins, maxs;
- int y;
- int64_t scale;
- int64_t r, g, b;
+ int mins, maxs, minb, maxb;
+ int satCs, lumCb, lumC, d;
+ uint64_t scale;
- minb = rb < gb ? rb : gb;
- minb = minb < bb ? minb : bb;
- maxb = rb > gb ? rb : gb;
- maxb = maxb > bb ? maxb : bb;
- if (minb == maxb) {
- /* backdrop has zero saturation, avoid divide by 0 */
+ if (rb == gb && gb == bb) {
+ /* backdrop has zero saturation, no change. */
dst[0] = gb;
dst[1] = gb;
dst[2] = gb;
return;
}
+ /* Lum(Cb) */
+ lumCb = (rb * 77 + gb * 151 + bb * 28 + 0x80) >> 8;
+
mins = rs < gs ? rs : gs;
+ maxs = rs < gs ? gs : rs;
mins = mins < bs ? mins : bs;
- maxs = rs > gs ? rs : gs;
- maxs = maxs > bs ? maxs : bs;
-
- /* -65535 <= maxs - mins <= 65535 i.e. 17 bits */
- /* -65535 <= maxb - minb <= 65535 i.e. 17 bits */
- /* worst case, maxb - minb == +/- 1, so scale would be 33 bits. */
- scale = (((int64_t)(maxs - mins)) << 16) / (maxb - minb);
- /* 0 <= y <= 65535 */
- y = (rb * 77 + gb * 151 + bb * 28 + 0x80) >> 8;
- r = y + ((((rb - y) * scale) + 0x8000) >> 16);
- g = y + ((((gb - y) * scale) + 0x8000) >> 16);
- b = y + ((((bb - y) * scale) + 0x8000) >> 16);
-
- if ((r | g | b) & (int64_t)~0xffff) {
- int64_t scalemin, scalemax;
- int64_t min, max;
-
- min = r < g ? r : g;
- min = min < b ? min : b;
- max = r > g ? r : g;
- max = max > b ? max : b;
+ maxs = maxs < bs ? bs : maxs;
- if (min < 0)
- scalemin = (((int64_t)y) << 16) / (y - min);
- else
- scalemin = 0x10000;
+ /* Sat(Cs) = maxs - mins */
+ satCs = maxs - mins;
- if (max > 65535)
- scalemax = (((int64_t)(65535 - y)) << 16) / (max - y);
- else
- scalemax = 0x10000;
-
- scale = scalemin < scalemax ? scalemin : scalemax;
- r = y + (((r - y) * scale + 0x8000) >> 16);
- g = y + (((g - y) * scale + 0x8000) >> 16);
- b = y + (((b - y) * scale + 0x8000) >> 16);
+ /* SetSat(Cb, Sat(Cs)) */
+ minb = rb < gb ? rb : gb;
+ maxb = rb < gb ? gb : rb;
+ minb = minb < bb ? minb : bb;
+ maxb = maxb < bb ? bb : maxb;
+ /* 0 <= maxb - minb <= 65535 */
+ /* 0 <= satCs <= 65535 */
+ scale = ((unsigned int)(satCs<<16)) / (maxb - minb);
+ rb = ((rb - minb) * scale + 0x8000)>>16;
+ gb = ((gb - minb) * scale + 0x8000)>>16;
+ bb = ((bb - minb) * scale + 0x8000)>>16;
+ /* Leaves us with Cmin = 0, Cmax = s, and Cmid all as per the spec. */
+
+ /* SetLum(SetSat(Cb, Sat(Cs)), Lum(Cb)) */
+ /* lumC = Lum(C) */
+ lumC = (rb * 77 + gb * 151 + bb * 28 + 0x80) >> 8;
+ d = lumCb - lumC;
+ /* ClipColor(C) */
+ /* We know that Cmin = 0, Cmax = satCs. Therefore, given we are about
+ * to add 'd' back on to reset the luminance, we'll have overflow
+ * problems if d < 0 or d+satCs > 65535. We further know that as
+ * 0 <= satCs <= 65535, so only one of those can be true a time. */
+ if (d < 0) {
+ scale = ((unsigned int)(lumCb<<16)) / (unsigned int)lumC;
+ goto correct_overflow;
+ } else if (d + satCs > 65535) {
+ scale = ((unsigned int)((65535 - lumCb)<<16)) / (unsigned int)(satCs - lumC);
+correct_overflow:
+ rb = lumCb + (((rb - lumC) * scale + 0x8000)>>16);
+ gb = lumCb + (((gb - lumC) * scale + 0x8000)>>16);
+ bb = lumCb + (((bb - lumC) * scale + 0x8000)>>16);
+ } else {
+ /* C += d */
+ rb += d;
+ gb += d;
+ bb += d;
}
- dst[0] = r;
- dst[1] = g;
- dst[2] = b;
+ dst[0] = rb;
+ dst[1] = gb;
+ dst[2] = bb;
}
void
@@ -1544,7 +1588,7 @@ art_pdf_union_8(byte alpha1, byte alpha2)
static byte*
art_pdf_knockout_composite_pixel_alpha_8(byte *gs_restrict backdrop, byte tos_shape,
byte *gs_restrict dst, byte *gs_restrict src, int n_chan,
- gs_blend_mode_t blend_mode,
+ gs_blend_mode_t blend_mode,
const pdf14_nonseparable_blending_procs_t * pblend_procs,
pdf14_device *p14dev)
{
@@ -2858,7 +2902,7 @@ template_compose_group(byte *gs_restrict tos_ptr, bool tos_isolated,
int first_blend_spot = n_chan;
bool has_mask2 = has_mask;
byte *gs_restrict dst;
- byte global_shape = (byte)(255 * pdev->shape + 0.5);
+ byte group_shape = (byte)(255 * pdev->shape + 0.5);
if (!nos_knockout && num_spots > 0 && !blend_valid_for_spot(blend_mode)) {
first_blend_spot = first_spot;
@@ -3010,7 +3054,7 @@ template_compose_group(byte *gs_restrict tos_ptr, bool tos_isolated,
if (nos_shape_offset && pix_alpha != 0) {
nos_ptr[nos_shape_offset] =
art_pdf_union_mul_8(nos_ptr[nos_shape_offset],
- has_alpha ? tos_ptr[tos_shape_offset] : global_shape,
+ has_alpha ? tos_ptr[tos_shape_offset] : group_shape,
shape);
}
if (dst)
@@ -3611,7 +3655,7 @@ template_compose_group16(uint16_t *gs_restrict tos_ptr, bool tos_isolated,
int first_blend_spot = n_chan;
bool has_mask2 = has_mask;
uint16_t *gs_restrict dst;
- uint16_t global_shape = (uint16_t)(65535 * pdev->shape + 0.5);
+ uint16_t group_shape = (uint16_t)(65535 * pdev->shape + 0.5);
if (!nos_knockout && num_spots > 0 && !blend_valid_for_spot(blend_mode)) {
first_blend_spot = first_spot;
@@ -3775,7 +3819,7 @@ template_compose_group16(uint16_t *gs_restrict tos_ptr, bool tos_isolated,
if (nos_shape_offset && pix_alpha != 0) {
nos_ptr[nos_shape_offset] =
art_pdf_union_mul_16(nos_ptr[nos_shape_offset],
- has_alpha ? GET16_2NATIVE(tos_is_be, tos_ptr[tos_shape_offset]) : global_shape,
+ has_alpha ? GET16_2NATIVE(tos_is_be, tos_ptr[tos_shape_offset]) : group_shape,
shape);
}
if (dst)
@@ -5086,6 +5130,17 @@ do_mark_fill_rectangle(gx_device * dev, int x, int y, int w, int h,
int first_blend_spot = num_comp;
pdf14_mark_fill_rect_fn fn;
+ /* This is a fix to handle the odd case where overprint is active
+ but drawn comps is zero due to the colorants that are present
+ in the sep or devicen color space. For example, if the color
+ fill was cyan in a sep color space but we are drawing in a
+ RGB blend space. In this case the drawn comps is 0 and we should
+ not be using compatible overprint mode here. */
+ if (drawn_comps == 0 && blend_mode == BLEND_MODE_CompatibleOverprint &&
+ buf->group_color_info->isadditive) {
+ blend_mode = BLEND_MODE_Normal;
+ }
+
if (num_spots > 0 && !blend_valid_for_spot(blend_mode))
first_blend_spot = num_comp - num_spots;
if (blend_mode == BLEND_MODE_Normal)
@@ -5706,6 +5761,17 @@ do_mark_fill_rectangle16(gx_device * dev, int x, int y, int w, int h,
int first_blend_spot = num_comp;
pdf14_mark_fill_rect16_fn fn;
+ /* This is a fix to handle the odd case where overprint is active
+ but drawn comps is zero due to the colorants that are present
+ in the sep or devicen color space. For example, if the color
+ fill was cyan in a sep color space but we are drawing in a
+ RGB blend space. In this case the drawn comps is 0 and we should
+ not be using compatible overprint mode here. */
+ if (drawn_comps == 0 && blend_mode == BLEND_MODE_CompatibleOverprint &&
+ buf->group_color_info->isadditive) {
+ blend_mode = BLEND_MODE_Normal;
+ }
+
if (num_spots > 0 && !blend_valid_for_spot(blend_mode))
first_blend_spot = num_comp - num_spots;
if (blend_mode == BLEND_MODE_Normal)
diff --git a/base/gxblend.h b/base/gxblend.h
index 05d96132..0ac93877 100644
--- a/base/gxblend.h
+++ b/base/gxblend.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -392,10 +392,6 @@ void gx_blend_image_buffer16(byte *buf_ptr, int width, int height,
int rowstride, int planestride, int num_comp, uint16_t bg);
void gx_blend_image_buffer8to16(const byte *buf_ptr, unsigned short *buf_ptr_out,
int width, int height, int rowstride, int planestride, int num_comp, byte bg);
-int gx_put_blended_image_cmykspot(gx_device *target, byte *buf_ptr,
- int planestride, int rowstride,
- int x0, int y0, int width, int height, int num_comp, uint16_t bg,
- bool has_tags, gs_int_rect rect, gs_separations *pseparations, bool deep);
int gx_put_blended_image_custom(gx_device *target, byte *buf_ptr,
int planestride, int rowstride,
int x0, int y0, int width, int height, int num_comp, uint16_t bg, bool deep);
diff --git a/base/gxblend1.c b/base/gxblend1.c
index f439c0ac..6d42a094 100644
--- a/base/gxblend1.c
+++ b/base/gxblend1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -346,7 +346,7 @@ pdf14_preserve_backdrop(pdf14_buf *buf, pdf14_buf *tos, bool from_backdrop
y0 > buf->rect.p.y || y1 < buf->rect.q.y) {
/* FIXME: There is potential for more optimisation here,
* but I don't know how often we hit this case. */
- memset(buf_plane, 0, n_planes * buf->planestride);
+ memset(buf_plane, 0, (size_t)n_planes * buf->planestride);
} else if (n_planes > tos->n_chan) {
/* The next planes are alpha_g, shape, tags. We need to clear
* alpha_g and shape, but don't need to clear the tag plane
@@ -355,7 +355,8 @@ pdf14_preserve_backdrop(pdf14_buf *buf, pdf14_buf *tos, bool from_backdrop
if (!from_backdrop && n_planes > tag_plane_num)
n_planes = tag_plane_num;
if (n_planes > tos->n_chan)
- memset(buf->data + tos->n_chan * buf->planestride, 0, (n_planes - tos->n_chan) * buf->planestride);
+ memset(buf->data + (size_t)tos->n_chan * buf->planestride, 0,
+ (size_t)(n_planes - tos->n_chan) * buf->planestride);
}
buf_plane += (y0 - buf->rect.p.y) * buf->rowstride +
((x0 - buf->rect.p.x)<<deep);
@@ -867,14 +868,14 @@ gx_blend_image_buffer16(byte *buf_ptr_, int width, int height, int rowstride,
buf_ptr[position + planestride * comp_num] = bebg;
}
} else if (a == 0xffff) {
- /* Convert from native -> big endian */
- /* FIXME: Are compilers smart enough to spot that this is
- * a no-op on big endian hosts? */
+#if ARCH_IS_BIG_ENDIAN
+#else
for (comp_num = 0; comp_num < num_comp; comp_num++) {
comp = buf_ptr[position + planestride * comp_num];
((byte *)&buf_ptr[position + planestride * comp_num])[0] = comp>>8;
((byte *)&buf_ptr[position + planestride * comp_num])[1] = comp;
}
+#endif
} else {
a ^= 0xffff;
a += a>>15; /* a is now 0 to 0x10000 */
@@ -935,262 +936,6 @@ gx_blend_image_buffer8to16(const byte *buf_ptr_in, unsigned short *buf_ptr_out,
}
int
-gx_put_blended_image_cmykspot(gx_device *target, byte *buf_ptr, int planestride_in,
- int rowstride_in, int x0, int y0, int width, int height,
- int num_comp, uint16_t bg, bool has_tags, gs_int_rect rect,
- gs_separations * pseparations, bool deep)
-{
- int code = 0;
- int x, y, tmp, comp_num, output_comp_num;
- gx_color_index color;
- gx_color_value cv[GX_DEVICE_COLOR_MAX_COMPONENTS];
- gx_color_value comp;
- int input_map[GX_DEVICE_COLOR_MAX_COMPONENTS];
- int output_map[GX_DEVICE_COLOR_MAX_COMPONENTS];
- int num_known_comp = 0;
- int output_num_comp = target->color_info.num_components;
- int num_sep = pseparations->num_separations++;
- int num_rows_left;
- int i;
- gx_drawing_color pdcolor;
- gs_fixed_rect rect_fixed;
- int bits_per_comp = ((target->color_info.depth - has_tags*8) /
- target->color_info.num_components);
- bool expand = (!deep && bits_per_comp > 8);
- int planestride = planestride_in;
- int rowstride = rowstride_in;
- byte *buf16_ptr = NULL;
-
- /*
- * The process color model for the PDF 1.4 compositor device is CMYK plus
- * spot colors. The target device may have only some of these colorants due
- * to the SeparationOrder device parameter. Thus we need to determine the
- * mapping between the PDF 1.4 compositor and the target device. Note:
- * There should not be a spot colorant in the PDF 1.4 device that is not
- * present in the target device.
- */
- /* Check if target processes CMYK colorants. */
- for (comp_num = 0; comp_num < 4; comp_num++) {
- const char * pcomp_name = (const char *)DeviceCMYKComponents[comp_num];
-
- output_comp_num = dev_proc(target, get_color_comp_index)
- (target, pcomp_name, strlen(pcomp_name), NO_COMP_NAME_TYPE);
- if (output_comp_num >=0 &&
- output_comp_num < GX_DEVICE_COLOR_MAX_COMPONENTS) {
- output_map[num_known_comp] = output_comp_num;
- input_map[num_known_comp++] = comp_num;
- }
- }
- /* Check if target processes our spot colorants. */
- for (comp_num = 0; comp_num < num_sep; comp_num++) {
- output_comp_num = dev_proc(target, get_color_comp_index)
- (target, (const char *)(pseparations->names[comp_num].data),
- pseparations->names[comp_num].size, NO_COMP_NAME_TYPE);
- if (output_comp_num >= 0 &&
- output_comp_num < GX_DEVICE_COLOR_MAX_COMPONENTS) {
- output_map[num_known_comp] = output_comp_num;
- input_map[num_known_comp++] = comp_num + 4;
- }
- }
-
- {
- /* See if the target device can handle the data in its current
- form with the alpha component */
- int alpha_offset = num_comp;
- int tag_offset = has_tags ? num_comp + 1 : 0;
- const byte *buf_ptrs[GS_CLIENT_COLOR_MAX_COMPONENTS];
-
- for (i = 0; i < num_comp; i++)
- buf_ptrs[i] = buf_ptr + i * planestride;
- code = dev_proc(target, put_image) (target, target, buf_ptrs, num_comp,
- rect.p.x, rect.p.y, width, height,
- rowstride,
- num_comp, tag_offset);
- if (code == 0) {
- /* Device could not handle the alpha data. Go ahead and
- preblend now. Note that if we do this, and we end up in the
- default below, we only need to repack in chunky not blend. Add
- in conversion to 16 bits if the target device is planar and
- a 16 bit device. */
-#if RAW_DUMP
- /* Dump before and after the blend to make sure we are doing that ok */
- dump_raw_buffer(target->memory, height, width, num_comp + 1, planestride, rowstride,
- "pre_final_blend", buf_ptr, deep);
- global_index++;
-#endif
- if (expand) {
- buf16_ptr = gs_alloc_bytes(target->memory,
- planestride * num_comp * 2, "gx_put_blended_image_cmykspot");
- gx_blend_image_buffer8to16(buf_ptr, (unsigned short*)buf16_ptr, width, height,
- rowstride, planestride, num_comp, bg>>8);
- planestride = planestride_in * 2;
- rowstride = rowstride_in * 2;
- for (i = 0; i < num_comp; i++)
- buf_ptrs[i] = buf16_ptr + i * planestride;
- } else {
- if (deep) {
- gx_blend_image_buffer16(buf_ptr, width, height, rowstride,
- planestride, num_comp, bg);
- } else {
- gx_blend_image_buffer(buf_ptr, width, height, rowstride,
- planestride, num_comp, bg>>8);
- }
-#if RAW_DUMP
- /* Dump before and after the blend to make sure we are doing that ok */
- dump_raw_buffer_be(target->memory, height, width, num_comp, planestride, rowstride,
- "post_final_blend", buf_ptr, deep);
- global_index++;
- /* clist_band_count++; */
-#endif
- }
- /* Try again now */
- alpha_offset = 0;
- code = dev_proc(target, put_image) (target, target, buf_ptrs, num_comp,
- rect.p.x, rect.p.y, width, height,
- rowstride, alpha_offset, tag_offset);
- if (code > 0) {
- /* We processed some or all of the rows. Continue until we are done */
- num_rows_left = height - code;
- while (num_rows_left > 0) {
- code = dev_proc(target, put_image) (target, target, buf_ptrs, num_comp,
- rect.p.x, rect.p.y + code, width,
- num_rows_left, rowstride,
- alpha_offset, tag_offset);
- if (code < 0) {
- if (buf16_ptr != NULL)
- gs_free_object(target->memory, buf16_ptr, "gx_put_blended_image_cmykspot");
- return code;
- }
- num_rows_left = num_rows_left - code;
- }
- }
- if (buf16_ptr != NULL)
- gs_free_object(target->memory, buf16_ptr, "gx_put_blended_image_cmykspot");
- return 0;
- }
- }
-
- if (buf16_ptr != NULL)
- gs_free_object(target->memory, buf16_ptr, "gx_put_blended_image_cmykspot");
- planestride = planestride_in;
- rowstride = rowstride_in;
-
- /* Clear all output colorants first */
- for (comp_num = 0; comp_num < output_num_comp; comp_num++)
- cv[comp_num] = 0;
-
- /* Send pixel data to the target device. */
- if (deep) {
- /* NOTE: buf_ptr points to big endian data */
- for (y = 0; y < height; y++) {
- for (x = 0; x < width; x++) {
-
- /* composite CMYKA, etc. pixel with over solid background */
-#define GET16_BE2NATIVE(v) \
- ((((byte *)&(v))[0]<<8) | (((byte *)&(v))[1]))
- uint16_t a = GET16_BE2NATIVE(buf_ptr[x + planestride * num_comp]);
-
- if (a == 0) {
- for (comp_num = 0; comp_num < num_known_comp; comp_num++) {
- cv[output_map[comp_num]] = bg;
- }
- } else if (a == 0xffff) {
- for (comp_num = 0; comp_num < num_known_comp; comp_num++) {
- comp = GET16_BE2NATIVE(buf_ptr[x + planestride * input_map[comp_num]]);
- cv[output_map[comp_num]] = comp;
- }
- } else {
- /* a ^= 0xff; */ /* No inversion here! Bug 689895 */
- for (comp_num = 0; comp_num < num_known_comp; comp_num++) {
- comp = GET16_BE2NATIVE(buf_ptr[x + planestride * input_map[comp_num]]);
- tmp = ((comp - bg) * a) + 0x8000;
- comp += (tmp + (tmp >> 16))>>16;
- cv[output_map[comp_num]] = comp;
- }
- }
-
- /* If we have spot colors we need to encode and fill as a high level
- color if the device supports it which should always be the case
- if we are in this procedure */
- if (dev_proc(target, dev_spec_op)(target, gxdso_supports_devn, NULL, 0)) {
- for (i = 0; i < output_num_comp; i++) {
- pdcolor.colors.devn.values[i] = cv[i];
- }
- pdcolor.type = gx_dc_type_devn;
- rect_fixed.p.x = int2fixed(x + x0);
- rect_fixed.p.y = int2fixed(y + y0);
- rect_fixed.q.x = int2fixed(x + x0 + 1);
- rect_fixed.q.y = int2fixed(y + y0 + 1);
- code = dev_proc(target, fill_rectangle_hl_color)(target, &rect_fixed,
- NULL, &pdcolor, NULL);
- } else {
- /* encode as a color index */
- color = dev_proc(target, encode_color)(target, cv);
- code = dev_proc(target, fill_rectangle)(target, x + x0, y + y0, 1, 1, color);
- }
- if (code < 0)
- return code;
- }
-
- buf_ptr += rowstride;
- }
- } else {
- bg >>= 8;
- for (y = 0; y < height; y++) {
- for (x = 0; x < width; x++) {
-
- /* composite CMYKA, etc. pixel with over solid background */
- byte a = buf_ptr[x + planestride * num_comp];
-
- if ((a + 1) & 0xfe) {
- /* a ^= 0xff; */ /* No inversion here! Bug 689895 */
- for (comp_num = 0; comp_num < num_known_comp; comp_num++) {
- comp = buf_ptr[x + planestride * input_map[comp_num]];
- tmp = ((comp - bg) * a) + 0x80;
- comp += tmp + (tmp >> 8);
- cv[output_map[comp_num]] = comp;
- }
- } else if (a == 0) {
- for (comp_num = 0; comp_num < num_known_comp; comp_num++) {
- cv[output_map[comp_num]] = bg;
- }
- } else {
- for (comp_num = 0; comp_num < num_known_comp; comp_num++) {
- comp = buf_ptr[x + planestride * input_map[comp_num]];
- cv[output_map[comp_num]] = (comp << 8) + comp;
- }
- }
-
- /* If we have spot colors we need to encode and fill as a high level
- color if the device supports it which should always be the case
- if we are in this procedure */
- if (dev_proc(target, dev_spec_op)(target, gxdso_supports_devn, NULL, 0)) {
- for (i = 0; i < output_num_comp; i++) {
- pdcolor.colors.devn.values[i] = cv[i];
- }
- pdcolor.type = gx_dc_type_devn;
- rect_fixed.p.x = int2fixed(x + x0);
- rect_fixed.p.y = int2fixed(y + y0);
- rect_fixed.q.x = int2fixed(x + x0 + 1);
- rect_fixed.q.y = int2fixed(y + y0 + 1);
- code = dev_proc(target, fill_rectangle_hl_color)(target, &rect_fixed,
- NULL, &pdcolor, NULL);
- } else {
- /* encode as a color index */
- color = dev_proc(target, encode_color)(target, cv);
- code = dev_proc(target, fill_rectangle)(target, x + x0, y + y0, 1, 1, color);
- }
- if (code < 0)
- return code;
- }
-
- buf_ptr += rowstride;
- }
- }
- return code;
-}
-
-int
gx_put_blended_image_custom(gx_device *target, byte *buf_ptr_,
int planestride, int rowstride,
int x0, int y0, int width, int height,
@@ -1275,4 +1020,4 @@ gx_put_blended_image_custom(gx_device *target, byte *buf_ptr_,
}
}
return code;
-}
+} \ No newline at end of file
diff --git a/base/gxccache.c b/base/gxccache.c
index 3190cebe..e4f4364c 100644
--- a/base/gxccache.c
+++ b/base/gxccache.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -120,11 +120,11 @@ gx_lookup_fm_pair(gs_font * pfont, const gs_matrix *char_tm,
if (pair->font == 0) {
pair->font = pfont;
- if_debug2m('k', pfont->memory, "[k]updating pair 0x%lx with font 0x%lx\n",
- (ulong) pair, (ulong) pfont);
+ if_debug2m('k', pfont->memory, "[k]updating pair "PRI_INTPTR" with font "PRI_INTPTR"\n",
+ (intptr_t)pair, (intptr_t)pfont);
} else {
- if_debug2m('k', pfont->memory, "[k]found pair 0x%lx: font=0x%lx\n",
- (ulong) pair, (ulong) pair->font);
+ if_debug2m('k', pfont->memory, "[k]found pair "PRI_INTPTR": font="PRI_INTPTR"\n",
+ (intptr_t)pair, (intptr_t)pair->font);
}
code = gx_touch_fm_pair(dir, pair);
if (code < 0)
@@ -158,8 +158,8 @@ gx_lookup_cached_char(const gs_font * pfont, const cached_fm_pair * pair,
cc->wmode == wmode && cc_depth(cc) == depth
) {
if_debug4m('K', pfont->memory,
- "[K]found 0x%lx (depth=%d) for glyph=0x%lx, wmode=%d\n",
- (ulong) cc, cc_depth(cc), (ulong) glyph, wmode);
+ "[K]found "PRI_INTPTR" (depth=%d) for glyph=0x%lx, wmode=%d\n",
+ (intptr_t)cc, cc_depth(cc), (ulong)glyph, wmode);
return cc;
}
chi++;
@@ -211,7 +211,8 @@ gx_image_cached_char(register gs_show_enum * penum, register cached_char * cc)
"[K]bits");
else
dmputs(penum->memory, "[K]no bits\n");
- dmlprintf3(penum->memory, "[K]copying 0x%lx, offset=(%g,%g)\n", (ulong) cc,
+ dmlprintf3(penum->memory, "[K]copying "PRI_INTPTR", offset=(%g,%g)\n",
+ (intptr_t) cc,
fixed2float(-cc->offset.x),
fixed2float(-cc->offset.y));
dmlprintf6(penum->memory, " at (%g,%g)+(%d,%d)->(%d,%d)\n",
@@ -256,8 +257,8 @@ gx_image_cached_char(register gs_show_enum * penum, register cached_char * cc)
imaging_dev, cx, cy,
pdevc->colors.pure, 0);
if_debug8m('K', penum->memory,
- "[K]render_char display: xfont=0x%lx, glyph=0x%lx\n\tdev=0x%lx(%s) x,y=%d,%d, color=0x%lx => %d\n",
- (ulong) xf, (ulong) xg, (ulong) imaging_dev,
+ "[K]render_char display: xfont="PRI_INTPTR", glyph=0x%lx\n\tdev="PRI_INTPTR"(%s) x,y=%d,%d, color=0x%lx => %d\n",
+ (intptr_t)xf, (ulong)xg, (intptr_t)imaging_dev,
imaging_dev->dname, cx, cy,
(ulong) pdevc->colors.pure, code);
if (code == 0)
@@ -274,8 +275,8 @@ gx_image_cached_char(register gs_show_enum * penum, register cached_char * cc)
(gx_device *) & mdev, cx - x, cy - y,
(gx_color_index) 1, 1);
if_debug7m('K', penum->memory,
- "[K]render_char to bits: xfont=0x%lx, glyph=0x%lx\n\tdev=0x%lx(%s) x,y=%d,%d => %d\n",
- (ulong) xf, (ulong) xg, (ulong) & mdev,
+ "[K]render_char to bits: xfont="PRI_INTPTR", glyph=0x%lx\n\tdev="PRI_INTPTR"(%s) x,y=%d,%d => %d\n",
+ (intptr_t)xf, (ulong) xg, (intptr_t)&mdev,
mdev.dname, cx - x, cy - y, code);
if (code != 0)
return_check_interrupt(penum->memory, 1);
@@ -410,7 +411,7 @@ compress_alpha_bits(const cached_char * cc, gs_memory_t * mem)
uint sskip = sraster - ((width * depth + 7) >> 3);
uint draster = bitmap_raster(width);
uint dskip = draster - ((width + 7) >> 3);
- byte *mask = gs_alloc_bytes(mem, draster * height,
+ byte *mask = gs_alloc_bytes(mem, (size_t)draster * height,
"compress_alpha_bits");
const byte *sptr = data;
byte *dptr = mask;
diff --git a/base/gxccman.c b/base/gxccman.c
index fc4e11e4..b2d84305 100644
--- a/base/gxccman.c
+++ b/base/gxccman.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -363,10 +363,10 @@ gx_add_fm_pair(register gs_font_dir * dir, gs_font * font, const gs_uid * puid,
}
pair->memory = 0;
if_debug8m('k', dir->memory,
- "[k]adding pair 0x%lx: font=0x%lx [%g %g %g %g] UID %ld, 0x%lx\n",
- (ulong) pair, (ulong) font,
+ "[k]adding pair "PRI_INTPTR": font="PRI_INTPTR" [%g %g %g %g] UID %ld, "PRI_INTPTR"\n",
+ (intptr_t)pair, (intptr_t)font,
pair->mxx, pair->mxy, pair->myx, pair->myy,
- (long)pair->UID.id, (ulong) pair->UID.xvalues);
+ (long)pair->UID.id, (intptr_t) pair->UID.xvalues);
*ppair = pair;
return 0;
}
@@ -412,7 +412,7 @@ gs_clean_fm_pair_attributes(gs_font_dir * dir, cached_fm_pair * pair)
void
gs_clean_fm_pair(gs_font_dir * dir, cached_fm_pair * pair)
{
- if_debug1m('k', dir->memory, "[k]cleaning pair 0x%lx\n", (ulong) pair);
+ if_debug1m('k', dir->memory, "[k]cleaning pair "PRI_INTPTR"\n", (intptr_t) pair);
pair->font = NULL;
gs_clean_fm_pair_attributes(dir, pair);
}
@@ -420,8 +420,8 @@ gs_clean_fm_pair(gs_font_dir * dir, cached_fm_pair * pair)
int
gs_purge_fm_pair(gs_font_dir * dir, cached_fm_pair * pair, int xfont_only)
{
- if_debug2m('k', dir->memory, "[k]purging pair 0x%lx%s\n",
- (ulong) pair, (xfont_only ? " (xfont only)" : ""));
+ if_debug2m('k', dir->memory, "[k]purging pair "PRI_INTPTR"%s\n",
+ (intptr_t)pair, (xfont_only ? " (xfont only)" : ""));
if (pair->xfont != 0) {
(*pair->xfont->common.procs->release) (pair->xfont,
pair->memory);
@@ -589,8 +589,8 @@ gx_alloc_char_bits(gs_font_dir * dir, gx_device_memory * dev,
*pcc = cc;
if (cc == 0)
return 0;
- if_debug4m('k', dev->memory, "[k]adding char 0x%lx:%u(%u,%u)\n",
- (ulong) cc, (uint) icdsize, iwidth, iheight);
+ if_debug4m('k', dev->memory, "[k]adding char "PRI_INTPTR":%u(%u,%u)\n",
+ (intptr_t)cc, (uint)icdsize, iwidth, iheight);
/* Fill in the entry. */
@@ -658,8 +658,8 @@ gx_free_cached_char(gs_font_dir * dir, cached_char * cc)
dir->ccache.cnext = (byte *) cc - cck->data;
if (cc->linked)
cc_pair(cc)->num_chars--;
- if_debug2m('k', dir->memory, "[k]freeing char 0x%lx, pair=0x%lx\n",
- (ulong) cc, (ulong) cc_pair(cc));
+ if_debug2m('k', dir->memory, "[k]freeing char "PRI_INTPTR", pair="PRI_INTPTR"\n",
+ (intptr_t)cc, (intptr_t)cc_pair(cc));
gx_bits_cache_free((gx_bits_cache *) & dir->ccache, &cc->head, cck);
}
@@ -669,8 +669,8 @@ gx_add_cached_char(gs_font_dir * dir, gx_device_memory * dev,
cached_char * cc, cached_fm_pair * pair, const gs_log2_scale_point * pscale)
{
if_debug5m('k', dev->memory,
- "[k]chaining char 0x%lx: pair=0x%lx, glyph=0x%lx, wmode=%d, depth=%d\n",
- (ulong) cc, (ulong) pair, (ulong) cc->code,
+ "[k]chaining char "PRI_INTPTR": pair="PRI_INTPTR", glyph=0x%lx, wmode=%d, depth=%d\n",
+ (intptr_t)cc, (intptr_t)pair, (ulong)cc->code,
cc->wmode, cc_depth(cc));
if (dev != NULL) {
static const gs_log2_scale_point no_scale =
@@ -834,8 +834,8 @@ gx_add_char_bits(gs_font_dir * dir, cached_char * cc,
if (diff >= sizeof(cached_char_head)) {
shorten_cached_char(dir, cc, diff);
- if_debug2m('K', dir->memory, "[K]shortening char 0x%lx by %u (adding)\n",
- (ulong) cc, diff);
+ if_debug2m('K', dir->memory, "[K]shortening char "PRI_INTPTR" by %u (adding)\n",
+ (intptr_t)cc, diff);
}
}
@@ -860,8 +860,8 @@ gs_purge_font_from_char_caches_forced(gs_font * font, bool force)
pair = dir->fmcache.mdata;
count = dir->fmcache.mmax;
font->is_cached = false; /* Prevent redundant execution. */
- if_debug1m('k', font->memory, "[k]purging font 0x%lx\n",
- (ulong) font);
+ if_debug1m('k', font->memory, "[k]purging font "PRI_INTPTR"\n",
+ (intptr_t)font);
for (; count--; pair++) {
if (pair->font == font) {
if (!force && uid_is_valid(&pair->UID)) { /* Keep the entry. */
@@ -1064,6 +1064,6 @@ shorten_cached_char(gs_font_dir * dir, cached_char * cc, uint diff)
{
gx_bits_cache_shorten((gx_bits_cache *) & dir->ccache, &cc->head,
diff, cc->chunk);
- if_debug2m('K', dir->memory, "[K]shortening creates free block 0x%lx(%u)\n",
- (ulong) ((byte *) cc + cc->head.size), diff);
+ if_debug2m('K', dir->memory, "[K]shortening creates free block "PRI_INTPTR"(%u)\n",
+ (intptr_t)((byte *) cc + cc->head.size), diff);
}
diff --git a/base/gxcdevn.h b/base/gxcdevn.h
index 3f49334a..62ecb8db 100644
--- a/base/gxcdevn.h
+++ b/base/gxcdevn.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxchar.c b/base/gxchar.c
index 0c86e983..7d6259d9 100644
--- a/base/gxchar.c
+++ b/base/gxchar.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxchar.h b/base/gxchar.h
index 8200d8ef..04ff7deb 100644
--- a/base/gxchar.h
+++ b/base/gxchar.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxchrout.c b/base/gxchrout.c
index 4ced9fac..87fcd43c 100644
--- a/base/gxchrout.c
+++ b/base/gxchrout.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxchrout.h b/base/gxchrout.h
index 3e68ea22..8bbb3524 100644
--- a/base/gxchrout.h
+++ b/base/gxchrout.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxcht.c b/base/gxcht.c
index 21a963d9..e4b47ce4 100644
--- a/base/gxcht.c
+++ b/base/gxcht.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxcid.h b/base/gxcid.h
index f4c39911..c172b72c 100644
--- a/base/gxcid.h
+++ b/base/gxcid.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxcie.h b/base/gxcie.h
index bf9ac651..860bf292 100644
--- a/base/gxcie.h
+++ b/base/gxcie.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxcindex.h b/base/gxcindex.h
index af766cb2..5e0d2761 100644
--- a/base/gxcindex.h
+++ b/base/gxcindex.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclbits.c b/base/gxclbits.c
index 0d2b46fa..519cdacb 100644
--- a/base/gxclbits.c
+++ b/base/gxclbits.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -82,7 +82,7 @@ go_process(stream_state * st, stream_cursor_read *pr, stream_cursor_write *pw, b
return -1;
return 0;
}
-static byte zeros[1<<align_bitmap_mod];
+static byte zeros[1<<align_bitmap_mod] = { 0, };
static int
cmd_compress_bitmap(stream_state * st, const byte * data, uint width_bits,
uint raster, uint height, stream_cursor_write * pw)
@@ -110,7 +110,6 @@ cmd_compress_bitmap(stream_state * st, const byte * data, uint width_bits,
byte b = r.ptr[1] & mask;
r2.limit = &b;
r2.ptr = r2.limit-1;
-
status = go_process(st, &r2, pw, false);
if (status)
break;
diff --git a/base/gxcldev.h b/base/gxcldev.h
index 19d19bc1..00dca1c8 100644
--- a/base/gxcldev.h
+++ b/base/gxcldev.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclfile.c b/base/gxclfile.c
index 841009a0..4476ef5c 100644
--- a/base/gxclfile.c
+++ b/base/gxclfile.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclimag.c b/base/gxclimag.c
index 83f0ccef..9747c899 100644
--- a/base/gxclimag.c
+++ b/base/gxclimag.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -1096,8 +1096,8 @@ clist_image_plane_data(gx_image_enum_common_t * info,
pie->color_map_is_known = true;
if (code >= 0) {
uint want_known = ctm_known | clip_path_known |
- op_bm_tk_known | opacity_alpha_known |
- shape_alpha_known | alpha_known |
+ op_bm_tk_known | ais_known |
+ fill_alpha_known | stroke_alpha_known | fill_adjust_known |
(pie->color_space.id == gs_no_id ? 0 :
color_space_known);
@@ -1110,6 +1110,8 @@ clist_image_plane_data(gx_image_enum_common_t * info,
if (code < 0)
return code;
if (pie->uses_color) {
+ gs_int_point color_phase;
+
/* We want to write the color taking into account the entire image so */
/* we set re.rect_nbands from pie->ymin and pie->ymax so that we will */
/* make the decision to write 'all_bands' the same for the whole image */
@@ -1121,6 +1123,14 @@ clist_image_plane_data(gx_image_enum_common_t * info,
&re, devn_not_tile_fill);
if (code < 0)
return code;
+ /* see if phase informaiton must be inserted in the command list */
+ /* if so, go ahead and do it for all_bands */
+ if ( pie->dcolor.type->get_phase(&pie->dcolor, &color_phase) &&
+ (color_phase.x != re.pcls->tile_phase.x ||
+ color_phase.y != re.pcls->tile_phase.y ) &&
+ (code = cmd_set_tile_phase_generic(cdev, re.pcls,
+ color_phase.x, color_phase.y, true)) < 0 )
+ return code;
}
if (entire_box.p.x != 0 || entire_box.p.y != 0 ||
entire_box.q.x != pie->image.Width ||
@@ -1828,10 +1838,10 @@ clist_image_unknowns(gx_device *dev, const clist_image_enum *pie)
uint unknown = 0;
/*
- * Determine if the CTM, color space, and clipping region (and, for
- * masked images or images with CombineWithColor, the current color)
- * are unknown. Set the device state in anticipation of the values
- * becoming known.
+ * Determine if the CTM, color space, fill_adjust and clipping region,
+ * (and, for masked images or images with CombineWithColor, the current
+ * color) are unknown. Set the device state in anticipation of the
+ * values becoming known.
*/
if (cdev->gs_gstate.ctm.xx != pgs->ctm.xx ||
cdev->gs_gstate.ctm.xy != pgs->ctm.xy ||
@@ -1846,14 +1856,18 @@ clist_image_unknowns(gx_device *dev, const clist_image_enum *pie)
if (pie->color_space.id == gs_no_id) { /* masked image */
cdev->color_space.space = 0; /* for GC */
} else { /* not masked */
- if (cdev->color_space.id == pie->color_space.id) {
- /* The color space pointer might not be valid: update it. */
- cdev->color_space.space = pie->color_space.space;
- } else {
+ if (cdev->color_space.id != pie->color_space.id ||
+ cdev->color_space.space != pie->color_space.space) {
unknown |= color_space_known;
+ cdev->color_space.space = pie->color_space.space;
cdev->color_space = pie->color_space;
}
}
+ if (cdev->gs_gstate.fill_adjust.x != pgs->fill_adjust.x ||
+ cdev->gs_gstate.fill_adjust.y != pgs->fill_adjust.y) {
+ unknown |= fill_adjust_known;
+ cdev->gs_gstate.fill_adjust = pgs->fill_adjust;
+ }
if (cmd_check_clip_path(cdev, pie->pcpath))
unknown |= clip_path_known;
/*
@@ -1874,17 +1888,17 @@ clist_image_unknowns(gx_device *dev, const clist_image_enum *pie)
cdev->gs_gstate.text_knockout = pgs->text_knockout;
cdev->gs_gstate.renderingintent = pgs->renderingintent;
}
- if (cdev->gs_gstate.opacity.alpha != pgs->opacity.alpha) {
- unknown |= opacity_alpha_known;
- cdev->gs_gstate.opacity.alpha = pgs->opacity.alpha;
+ if (cdev->gs_gstate.alphaisshape != pgs->alphaisshape) {
+ unknown |= ais_known;
+ cdev->gs_gstate.alphaisshape = pgs->alphaisshape;
}
- if (cdev->gs_gstate.shape.alpha != pgs->shape.alpha) {
- unknown |= shape_alpha_known;
- cdev->gs_gstate.shape.alpha = pgs->shape.alpha;
+ if (cdev->gs_gstate.strokeconstantalpha != pgs->strokeconstantalpha) {
+ unknown |= stroke_alpha_known;
+ cdev->gs_gstate.strokeconstantalpha = pgs->strokeconstantalpha;
}
- if (cdev->gs_gstate.alpha != pgs->alpha) {
- unknown |= alpha_known;
- cdev->gs_gstate.alpha = pgs->alpha;
+ if (cdev->gs_gstate.fillconstantalpha != pgs->fillconstantalpha) {
+ unknown |= fill_alpha_known;
+ cdev->gs_gstate.fillconstantalpha = pgs->fillconstantalpha;
}
return unknown;
}
diff --git a/base/gxclio.h b/base/gxclio.h
index d26deb18..9e2e28f9 100644
--- a/base/gxclio.h
+++ b/base/gxclio.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclip.c b/base/gxclip.c
index b0924307..f566e09f 100644
--- a/base/gxclip.c
+++ b/base/gxclip.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclip.h b/base/gxclip.h
index c052200c..70640afc 100644
--- a/base/gxclip.h
+++ b/base/gxclip.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclip2.c b/base/gxclip2.c
index 187f7d06..1b4d1558 100644
--- a/base/gxclip2.c
+++ b/base/gxclip2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -230,7 +230,7 @@ tile_clip_copy_mono(gx_device * dev,
/* Copy a tile slice to the memory device buffer. */
memcpy(cdev->buffer.bytes,
cdev->tiles.data + cy * cdev->tiles.raster,
- cdev->tiles.raster * ny);
+ (size_t)cdev->tiles.raster * ny);
/* Intersect the tile with the source data. */
/* mcolor0 and mcolor1 invert the data if needed. */
/* This call can't fail. */
diff --git a/base/gxclip2.h b/base/gxclip2.h
index 94da29cd..20ebf024 100644
--- a/base/gxclip2.h
+++ b/base/gxclip2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclipm.c b/base/gxclipm.c
index 0a98eb06..ec02ba9a 100644
--- a/base/gxclipm.c
+++ b/base/gxclipm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -241,7 +241,7 @@ mask_clip_copy_mono(gx_device * dev,
/* Copy a tile slice to the memory device buffer. */
memcpy(cdev->buffer.bytes,
cdev->tiles.data + cy * cdev->tiles.raster,
- cdev->tiles.raster * ny);
+ (size_t)cdev->tiles.raster * ny);
/* Intersect the tile with the source data. */
/* mcolor0 and mcolor1 invert the data if needed. */
/* This call can't fail. */
diff --git a/base/gxclipm.h b/base/gxclipm.h
index dd7886d9..dcae2baf 100644
--- a/base/gxclipm.h
+++ b/base/gxclipm.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclipsr.h b/base/gxclipsr.h
index 419a0dc1..20e57011 100644
--- a/base/gxclipsr.h
+++ b/base/gxclipsr.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclist.c b/base/gxclist.c
index c5e8fead..9df5f7c9 100644
--- a/base/gxclist.c
+++ b/base/gxclist.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -342,6 +342,23 @@ clist_init_bands(gx_device * dev, gx_device_memory *bdev, uint data_size,
return 0;
}
+/* Minimum BufferSpace needed when writing the clist */
+/* This is an exported function because it is used to set up render threads */
+size_t
+clist_minimum_buffer(int nbands) {
+
+ /* Leave enough room after states for commands that write a reasonable
+ * amount of data. The cmd_largest_size and the data_bits_size should be
+ * enough to buffer command operands. The data_bits_size is the level
+ * at which commands should expect to split data across buffers. If this
+ * extra space is a little large, it doesn't really hurt.
+ */
+ return (nbands * (ulong) sizeof(gx_clist_state) +
+ sizeof(cmd_prefix) +
+ cmd_largest_size +
+ data_bits_size);
+}
+
/*
* Initialize the allocation for the band states, which are used only
* when writing. Requires: nbands. Sets: states, cbuf, cend.
@@ -353,14 +370,9 @@ clist_init_states(gx_device * dev, byte * init_data, uint data_size)
&((gx_device_clist *)dev)->writer;
ulong state_size = cdev->nbands * (ulong) sizeof(gx_clist_state);
/* Align to the natural boundary for ARM processors, bug 689600 */
- long alignment = (-(long)init_data) & (sizeof(init_data) - 1);
+ intptr_t alignment = (-(intptr_t)init_data) & (sizeof(init_data) - 1);
- /*
- * The +100 in the next line is bogus, but we don't know what the
- * real check should be. We're effectively assuring that at least 100
- * bytes will be available to buffer command operands.
- */
- if (state_size + sizeof(cmd_prefix) + cmd_largest_size + 100 + alignment > data_size)
+ if (clist_minimum_buffer(cdev->nbands) > data_size)
return_error(gs_error_rangecheck);
/* The end buffer position is not affected by alignment */
cdev->cend = init_data + data_size;
@@ -483,6 +495,7 @@ clist_init_data(gx_device * dev, byte * init_data, uint data_size)
if (gdev_mem_bits_size(&bdev, band_width, band_height, &cdev->page_line_ptrs_offset) < 0)
return_error(gs_error_VMerror);
}
+ cdev->pdf14_trans_group_level = -1; /* to prevent any initial op except PUSH_DEVICE */
cdev->ins_count = 0;
code = clist_init_tile_cache(dev, data, bits_size);
if (code < 0) {
@@ -1224,8 +1237,8 @@ clist_writer_push_no_cropping(gx_device_clist_writer *cdev)
if (buf == NULL)
return_error(gs_error_VMerror);
- if_debug4m('v', cdev->memory, "[v]push cropping[%d], min=%d, max=%d, buf=%p\n",
- cdev->cropping_level, cdev->cropping_min, cdev->cropping_max, buf);
+ if_debug4m('v', cdev->memory, "[v]push cropping[%d], min=%d, max=%d, buf="PRI_INTPTR"\n",
+ cdev->cropping_level, cdev->cropping_min, cdev->cropping_max, (intptr_t)buf);
buf->next = cdev->cropping_stack;
cdev->cropping_stack = buf;
buf->cropping_min = cdev->cropping_min;
@@ -1261,8 +1274,8 @@ clist_writer_pop_cropping(gx_device_clist_writer *cdev)
cdev->temp_mask_id = buf->temp_mask_id;
cdev->cropping_stack = buf->next;
cdev->cropping_level--;
- if_debug4m('v', cdev->memory, "[v]pop cropping[%d] min=%d, max=%d, buf=%p\n",
- cdev->cropping_level, cdev->cropping_min, cdev->cropping_max, buf);
+ if_debug4m('v', cdev->memory, "[v]pop cropping[%d] min=%d, max=%d, buf="PRI_INTPTR"\n",
+ cdev->cropping_level, cdev->cropping_min, cdev->cropping_max, (intptr_t)buf);
gs_free_object(cdev->memory, buf, "clist_writer_transparency_pop");
return 0;
}
@@ -1333,12 +1346,11 @@ clist_put_data(const gx_device_clist *cdev, int select, int64_t offset, const by
}
gx_device_clist *
-clist_make_accum_device(gx_device *target, const char *dname, void *base, int space,
+clist_make_accum_device(gs_memory_t *mem, gx_device *target, const char *dname, void *base, int space,
gx_device_buf_procs_t *buf_procs, gx_band_params_t *band_params,
bool use_memory_clist, bool uses_transparency,
gs_pattern1_instance_t *pinst)
{
- gs_memory_t *mem = target->memory;
gx_device_clist *cdev = gs_alloc_struct(mem, gx_device_clist,
&st_device_clist, "clist_make_accum_device");
gx_device_clist_writer *cwdev = (gx_device_clist_writer *)cdev;
@@ -1396,7 +1408,7 @@ clist_make_accum_device(gx_device *target, const char *dname, void *base, int sp
/* Fields left zeroed :
int max_fill_band;
- int is_printer;
+ dev_proc_dev_spec_op(orig_spec_op);
float MediaSize[2];
float ImagingBBox[4];
bool ImagingBBox_set;
@@ -1413,3 +1425,25 @@ clist_make_accum_device(gx_device *target, const char *dname, void *base, int sp
*/
return cdev;
}
+
+/* GC information */
+#define DEVICE_MUTATED_TO_CLIST(pdev) \
+ (((gx_device_clist_mutatable *)(pdev))->buffer_space != 0)
+
+static
+ENUM_PTRS_WITH(device_clist_mutatable_enum_ptrs, gx_device_clist_mutatable *pdev)
+ if (DEVICE_MUTATED_TO_CLIST(pdev))
+ ENUM_PREFIX(st_device_clist, 0);
+ else
+ ENUM_PREFIX(st_device_forward, 0);
+ break;
+ENUM_PTRS_END
+static
+RELOC_PTRS_WITH(device_clist_mutatable_reloc_ptrs, gx_device_clist_mutatable *pdev)
+{
+ if (DEVICE_MUTATED_TO_CLIST(pdev))
+ RELOC_PREFIX(st_device_clist);
+ else
+ RELOC_PREFIX(st_device_forward);
+} RELOC_PTRS_END
+public_st_device_clist_mutatable();
diff --git a/base/gxclist.h b/base/gxclist.h
index e1e7ff1b..cdb0136f 100644
--- a/base/gxclist.h
+++ b/base/gxclist.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -182,7 +182,7 @@ typedef struct gx_clist_state_s gx_clist_state;
uint data_size; /* size of buffer */\
gx_band_params_t band_params; /* band buffering parameters */\
bool do_not_open_or_close_bandfiles; /* if true, do not open/close bandfiles */\
- int is_printer; /* if true, then clist is based on a prn device */\
+ dev_proc_dev_spec_op((*orig_spec_op)); /* Original dev spec op handler */\
/* Following are used for both writing and reading. */\
gx_bits_cache_chunk *cache_chunk; /* the only chunk of bits */\
gx_bits_cache bits;\
@@ -329,6 +329,7 @@ struct gx_device_clist_writer_s {
/* above set when not at page level with no SMask or when */
/* the page level BM, shape or opacity alpha needs tranaparency */
int pdf14_trans_group_level;/* 0 when at page level group -- push increments, pop decrements */
+ /* -1 when PUSH_DEVICE not yet performed to prevent spurious ops */
int pdf14_smask_level; /* 0 when at SMask None -- push increments, pop decrements */
bool page_pdf14_needed; /* save page level pdf14_needed state */
@@ -477,7 +478,7 @@ void clist_update_trans_bbox(gx_device_clist_writer *dev, gs_int_rect *bbox);
/* Make a clist device for accumulating. Used for pattern-clist as well as */
/* for pdf14 pages that are too large to be done in page mode. */
gx_device_clist *
-clist_make_accum_device(gx_device *target, const char *dname, void *base, int space,
+clist_make_accum_device(gs_memory_t *mem, gx_device *target, const char *dname, void *base, int space,
gx_device_buf_procs_t *buf_procs, gx_band_params_t *band_params,
bool use_memory_clist, bool uses_transparency,
gs_pattern1_instance_t *pinst);
@@ -547,6 +548,11 @@ clist_enable_multi_thread_render(gx_device *dev);
void
clist_teardown_render_threads(gx_device *dev);
+/* Minimum BufferSpace needed when writing the clist */
+/* This is an exported function because it is used to set up render threads */
+/* and in clist_init_states to make sure the buffer is large enough */
+size_t clist_minimum_buffer(int nbands);
+
#ifdef DEBUG
#define clist_debug_rect clist_debug_rect_imp
void clist_debug_rect_imp(int x, int y, int width, int height);
@@ -609,4 +615,50 @@ void clist_debug_set_ctm_imp(const gs_matrix *m);
crop_copy_y(dev, data, data_x, raster, id, y, h);\
END
+/* Devices that are expected to be able to 'mutate' into being clist
+ * devices have to be constructed in a particular way. They have to
+ * have to have the "header" be padded out to a given size (so the clist
+ * fields can all fit in at the top), and then the device specific
+ * fields can follow this.
+ * These fields should follow gx_device_common. */
+#define gx_device_clist_mutatable_common\
+ byte skip[max(sizeof(gx_device_memory), sizeof(gx_device_clist)) -\
+ sizeof(gx_device) + sizeof(double) /* padding */];\
+ long buffer_space; /* amount of space for clist buffer, */\
+ /* 0 means not using clist */\
+ byte *buf; /* buffer for rendering */\
+ gs_memory_t *buffer_memory; /* allocator for command list */\
+ gs_memory_t *bandlist_memory; /* allocator for bandlist files */\
+ uint clist_disable_mask; /* mask of clist options to disable */\
+ gx_device_procs orig_procs /* original (std_)procs */
+
+
+#define GX_CLIST_MUTATABLE_DEVICE_DEFAULTS \
+ { 0 }, /* skip */\
+ 0, /* buffer_space */\
+ NULL, /* buf */\
+ 0, /* buffer_memory */\
+ 0, /* bandlist_memory */\
+ 0, /* clist_disable_mask */\
+ { NULL } /* orig_procs */
+
+typedef struct {
+ gx_device_common;
+ gx_device_clist_mutatable_common;
+} gx_device_clist_mutatable;
+
+extern_st(st_device_clist_mutatable);
+#define public_st_device_clist_mutatable() /* in gxclist.c */\
+ gs_public_st_complex_only(st_device_clist_mutatable,\
+ gx_device_clist_mutatable, "gx_device_clist_mutatable", 0, \
+ device_clist_mutatable_enum_ptrs, device_clist_mutatable_reloc_ptrs,\
+ gx_device_finalize)
+#define st_device_clist_mutatable_max_ptrs\
+ (st_device_clist_mutable_max_ptrs)
+
+/* A useful check to determine if a device that can be mutated to be a
+ * clist has undergone such a mutation. */
+#define CLIST_MUTATABLE_HAS_MUTATED(pdev) \
+ (((gx_device_clist_mutatable *)(pdev))->buffer_space != 0)
+
#endif /* gxclist_INCLUDED */
diff --git a/base/gxcllzw.c b/base/gxcllzw.c
index 9308ca27..333d49d4 100644
--- a/base/gxcllzw.c
+++ b/base/gxcllzw.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclmem.c b/base/gxclmem.c
index acd695c8..e4791152 100644
--- a/base/gxclmem.c
+++ b/base/gxclmem.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -491,8 +491,8 @@ memfile_fclose(clist_file_ptr cf, const char *fname, bool delete)
if (f->openlist != NULL || ((f->base_memfile != NULL) && f->base_memfile->is_open)) {
/* TODO: do the cleanup rather than just giving an error */
emprintf1(f->memory,
- "Attempt to delete a memfile still open for read: %p\n",
- f);
+ "Attempt to delete a memfile still open for read: "PRI_INTPTR"\n",
+ (intptr_t)f);
return_error(gs_error_invalidfileaccess);
} else {
/* Free the memory used by this memfile */
@@ -1058,8 +1058,8 @@ memfile_rewind(clist_file_ptr cf, bool discard_data, const char *ignore_fname)
if (f->openlist != NULL || f->base_memfile != NULL) {
/* TODO: Move the data so it is still connected to other open files */
emprintf1(f->memory,
- "memfile_rewind(%p) with discard_data=true failed: ",
- f);
+ "memfile_rewind("PRI_INTPTR") with discard_data=true failed: ",
+ (intptr_t)f);
f->error_code = gs_note_error(gs_error_ioerror);
return f->error_code;
}
diff --git a/base/gxclmem.h b/base/gxclmem.h
index 3eac6036..18fc9511 100644
--- a/base/gxclmem.h
+++ b/base/gxclmem.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclpage.c b/base/gxclpage.c
index cf989e24..63573269 100644
--- a/base/gxclpage.c
+++ b/base/gxclpage.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclpage.h b/base/gxclpage.h
index f419778b..eaf8573c 100644
--- a/base/gxclpage.h
+++ b/base/gxclpage.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclpath.c b/base/gxclpath.c
index 9a57932e..c97379b9 100644
--- a/base/gxclpath.c
+++ b/base/gxclpath.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -369,8 +369,8 @@ cmd_check_clip_path(gx_device_clist_writer * cldev, const gx_clip_path * pcpath)
* or stroking.
*/
#define FILL_KNOWN\
- (cj_ac_sa_known | flatness_known | op_bm_tk_known | opacity_alpha_known |\
- shape_alpha_known | fill_adjust_known | alpha_known | clip_path_known)
+ (cj_ac_sa_known | flatness_known | op_bm_tk_known | ais_known |\
+ fill_alpha_known | fill_adjust_known | stroke_alpha_known | clip_path_known)
static void
cmd_check_fill_known(gx_device_clist_writer* cdev, const gs_gstate* pgs,
double flatness, const gs_fixed_point* padjust,
@@ -409,13 +409,17 @@ cmd_check_fill_known(gx_device_clist_writer* cdev, const gs_gstate* pgs,
state_update(stroke_overprint);
state_update(renderingintent);
}
- if (state_neq(opacity.alpha)) {
- *punknown |= opacity_alpha_known;
- state_update(opacity.alpha);
+ if (state_neq(alphaisshape)) {
+ *punknown |= ais_known;
+ state_update(alphaisshape);
}
- if (state_neq(shape.alpha)) {
- *punknown |= shape_alpha_known;
- state_update(shape.alpha);
+ if (state_neq(strokeconstantalpha)) {
+ *punknown |= stroke_alpha_known;
+ state_update(strokeconstantalpha);
+ }
+ if (cdev->gs_gstate.fillconstantalpha != pgs->fillconstantalpha) {
+ *punknown |= fill_alpha_known;
+ state_update(fillconstantalpha);
}
if (cdev->gs_gstate.fill_adjust.x != padjust->x ||
cdev->gs_gstate.fill_adjust.y != padjust->y
@@ -423,10 +427,6 @@ cmd_check_fill_known(gx_device_clist_writer* cdev, const gs_gstate* pgs,
*punknown |= fill_adjust_known;
cdev->gs_gstate.fill_adjust = *padjust;
}
- if (cdev->gs_gstate.alpha != pgs->alpha) {
- *punknown |= alpha_known;
- state_update(alpha);
- }
if (cmd_check_clip_path(cdev, pcpath))
*punknown |= clip_path_known;
}
@@ -486,9 +486,9 @@ cmd_write_unknown(gx_device_clist_writer * cldev, gx_clist_state * pcls,
sizeof(float) + /* line width */
sizeof(float) + /* miter limit */
3 + /* bm_tk, op, and rend intent */
- sizeof(float) * 2 + /* opacity/shape alpha */
- sizeof(cldev->gs_gstate.alpha)
- ];
+ sizeof(cldev->gs_gstate.alphaisshape) +
+ sizeof(float) * 2 /* ca CA */
+ ];
byte *bp = buf;
if (unknown & cap_join_known) {
*bp++ = (cldev->gs_gstate.line_params.start_cap << 3) +
@@ -528,18 +528,18 @@ cmd_write_unknown(gx_device_clist_writer * cldev, gx_clist_state * pcls,
cldev->gs_gstate.overprint;
*bp++ = cldev->gs_gstate.renderingintent;
}
- if (unknown & opacity_alpha_known) {
- memcpy(bp, &cldev->gs_gstate.opacity.alpha, sizeof(float));
- bp += sizeof(float);
+ if (unknown & ais_known) {
+ memcpy(bp, &cldev->gs_gstate.alphaisshape,
+ sizeof(cldev->gs_gstate.alphaisshape));
+ bp += sizeof(cldev->gs_gstate.alphaisshape);
}
- if (unknown & shape_alpha_known) {
- memcpy(bp, &cldev->gs_gstate.shape.alpha, sizeof(float));
+ if (unknown & stroke_alpha_known) {
+ memcpy(bp, &cldev->gs_gstate.strokeconstantalpha, sizeof(float));
bp += sizeof(float);
}
- if (unknown & alpha_known) {
- memcpy(bp, &cldev->gs_gstate.alpha,
- sizeof(cldev->gs_gstate.alpha));
- bp += sizeof(cldev->gs_gstate.alpha);
+ if (unknown & fill_alpha_known) {
+ memcpy(bp, &cldev->gs_gstate.fillconstantalpha, sizeof(float));
+ bp += sizeof(float);
}
code = set_cmd_put_op(&dp, cldev, pcls, cmd_opv_set_misc2,
1 + cmd_sizew(misc2_unknown) + (bp - buf));
@@ -904,7 +904,7 @@ clist_fill_stroke_path(gx_device * pdev, const gs_gstate * pgs,
if (pdevc_stroke == NULL || pdevc_fill == NULL)
return_error(gs_error_unknownerror); /* shouldn't happen */
- if ((cdev->disable_mask & (clist_disable_fill_path || clist_disable_stroke_path)) ||
+ if ((cdev->disable_mask & (clist_disable_fill_path | clist_disable_stroke_path)) ||
gs_debug_c(',')
) {
/* Disable path-based banding. */
diff --git a/base/gxclpath.h b/base/gxclpath.h
index 19e008c2..962c5704 100644
--- a/base/gxclpath.h
+++ b/base/gxclpath.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -37,9 +37,9 @@
/* segment_notes must fit in the first byte (i.e. be less than 1<<7). */
#define segment_notes_known (1<<6) /* not used in pcls->known */
/* (flags beyond this point require an extra byte) */
-#define opacity_alpha_known (1<<7)
-#define shape_alpha_known (1<<8)
-#define alpha_known (1<<9)
+#define ais_known (1<<7)
+#define stroke_alpha_known (1<<8)
+#define fill_alpha_known (1<<9)
#define misc2_all_known ((1<<10)-1)
/* End of misc2 flags. */
/* The following bits don't get passed in misc2, so are only limited by sizeof uint */
diff --git a/base/gxclrast.c b/base/gxclrast.c
index 61982fff..60c0ef77 100644
--- a/base/gxclrast.c
+++ b/base/gxclrast.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -510,8 +510,8 @@ clist_playback_band(clist_playback_action playback_action,
} clip_save;
bool in_clip = false;
gs_gstate gs_gstate;
- gx_device_color fill_color;
- gx_device_color stroke_color;
+ gx_device_color fill_color = { 0 };
+ gx_device_color stroke_color = { 0 };
float dash_pattern[cmd_max_dash];
gx_fill_params fill_params;
gx_stroke_params stroke_params;
@@ -612,6 +612,8 @@ in: /* Initialize for a new page. */
memset(&gs_gstate, 0, sizeof(gs_gstate));
GS_STATE_INIT_VALUES_CLIST((&gs_gstate));
code = gs_gstate_initialize(&gs_gstate, mem);
+ if (code < 0)
+ goto out;
gs_gstate.device = tdev;
gs_gstate.view_clip = NULL; /* Avoid issues in pdf14 fill stroke */
gs_gstate.clip_path = &clip_path;
@@ -620,11 +622,39 @@ in: /* Initialize for a new page. */
code = gs_note_error(gs_error_VMerror);
goto out;
}
- pcs->type->install_cspace(pcs, &gs_gstate);
- gs_gstate.color[0].color_space = pcs;
- rc_increment_cs(pcs);
+ code = pcs->type->install_cspace(pcs, &gs_gstate);
+ if (code < 0)
+ goto out;
+ gs_gstate.color[0].color_space = pcs; /* we already have one ref */
gs_gstate.color[1].color_space = pcs;
- rc_increment_cs(pcs);
+ rc_increment_cs(pcs); /* increment for second ref */
+ /* Initialize client color and device color */
+ gs_gstate.color[0].ccolor =
+ gs_alloc_struct(mem, gs_client_color, &st_client_color, "clist_playback_band");
+ gs_gstate.color[1].ccolor =
+ gs_alloc_struct(mem, gs_client_color, &st_client_color, "clist_playback_band");
+ gs_gstate.color[0].dev_color =
+ gs_alloc_struct(mem, gx_device_color, &st_device_color, "clist_playback_band");
+ gs_gstate.color[1].dev_color =
+ gs_alloc_struct(mem, gx_device_color, &st_device_color, "clist_playback_band");
+ if (gs_gstate.color[0].ccolor == 0 || gs_gstate.color[0].dev_color == 0 ||
+ gs_gstate.color[1].ccolor == 0 || gs_gstate.color[1].dev_color == 0
+ ) {
+ gs_free_object(mem, gs_gstate.color[1].ccolor, "clist_playback_band");
+ gs_free_object(mem, gs_gstate.color[0].dev_color, "clist_playback_band");
+ gs_free_object(mem, gs_gstate.color[1].dev_color, "clist_playback_band");
+ return_error(gs_error_VMerror);
+ }
+ gs_gstate.color[0].color_space->pclient_color_space_data =
+ pcs->pclient_color_space_data;
+ cs_full_init_color(gs_gstate.color[0].ccolor, pcs);
+ gx_unset_dev_color(&gs_gstate);
+
+ gs_gstate.color[1].color_space->pclient_color_space_data =
+ pcs->pclient_color_space_data;
+ cs_full_init_color(gs_gstate.color[1].ccolor, pcs);
+ gx_unset_dev_color(&gs_gstate);
+
/* Remove the ICC link cache and replace with the device link cache
so that we share the cache across bands */
rc_decrement(gs_gstate.icc_link_cache,"clist_playback_band");
@@ -1993,18 +2023,22 @@ idata: data_size = 0;
/* if the color is a pattern, it may have had the "is_locked" flag set */
/* clear those now (see do_fill_stroke). */
if (gx_dc_is_pattern1_color(&stroke_color)) {
- gs_id id = stroke_color.colors.pattern.p_tile->id;
+ if (stroke_color.colors.pattern.p_tile != NULL) {
+ gs_id id = stroke_color.colors.pattern.p_tile->id;
- code = gx_pattern_cache_entry_set_lock(&gs_gstate, id, false);
- if (code < 0)
- return code; /* unlock failed -- should not happen */
+ code = gx_pattern_cache_entry_set_lock(&gs_gstate, id, false);
+ if (code < 0)
+ return code; /* unlock failed -- should not happen */
+ }
}
if (gx_dc_is_pattern1_color(&fill_color)) {
- gs_id id = fill_color.colors.pattern.p_tile->id;
+ if (fill_color.colors.pattern.p_tile != NULL) {
+ gs_id id = fill_color.colors.pattern.p_tile->id;
- code = gx_pattern_cache_entry_set_lock(&gs_gstate, id, false);
- if (code < 0)
- return code; /* unlock failed -- should not happen */
+ code = gx_pattern_cache_entry_set_lock(&gs_gstate, id, false);
+ if (code < 0)
+ return code; /* unlock failed -- should not happen */
+ }
}
break;
case cmd_opv_stroke:
@@ -2353,6 +2387,14 @@ idata: data_size = 0;
gx_pattern_cache_free(gs_gstate.pattern_cache);
gs_gstate.pattern_cache = NULL;
}
+ /* Free the client color and device colors allocated upon entry */
+ gs_free_object(mem, gs_gstate.color[0].ccolor, "clist_playback_band");
+ gs_free_object(mem, gs_gstate.color[1].ccolor, "clist_playback_band");
+ gs_free_object(mem, gs_gstate.color[0].dev_color, "clist_playback_band");
+ gs_free_object(mem, gs_gstate.color[1].dev_color, "clist_playback_band");
+ gs_gstate.color[0].ccolor = gs_gstate.color[1].ccolor = NULL;
+ gs_gstate.color[0].dev_color = gs_gstate.color[1].dev_color = NULL;
+
/* The imager state release will decrement the icc link cache. To avoid
race conditions lock the cache */
gx_monitor_enter(cdev->icc_cache_cl->lock);
@@ -2379,6 +2421,9 @@ idata: data_size = 0;
if (code < 0) {
if (pfs.dev != NULL)
term_patch_fill_state(&pfs);
+ rc_decrement(gs_gstate.color[0].color_space, "clist_playback_band");
+ rc_decrement(gs_gstate.color[1].color_space, "clist_playback_band");
+ gs_free_object(mem, cbuf_storage, "clist_playback_band(cbuf_storage)");
gx_cpath_free(&clip_path, "clist_playback_band");
if (pcpath != &clip_path)
gx_cpath_free(pcpath, "clist_playback_band");
@@ -2391,7 +2436,8 @@ idata: data_size = 0;
goto in;
if (pfs.dev != NULL)
term_patch_fill_state(&pfs);
- gs_free_object(mem, pcs, "clist_playback_band(pcs)");
+ rc_decrement(gs_gstate.color[0].color_space, "clist_playback_band");
+ rc_decrement(gs_gstate.color[1].color_space, "clist_playback_band");
gs_free_object(mem, cbuf_storage, "clist_playback_band(cbuf_storage)");
gx_cpath_free(&clip_path, "clist_playback_band");
if (pcpath != &clip_path)
@@ -2749,17 +2795,17 @@ read_set_misc2(command_buf_t *pcb, gs_gstate *pgs, segment_notes *pnotes)
*pnotes = (segment_notes)(cb & 0x3f);
if_debug1m('L', pgs->memory, " notes=%d\n", *pnotes);
}
- if (mask & opacity_alpha_known) {
- cmd_get_value(pgs->opacity.alpha, cbp);
- if_debug1m('L', pgs->memory, " opacity.alpha=%g\n", pgs->opacity.alpha);
+ if (mask & ais_known) {
+ cmd_get_value(pgs->alphaisshape, cbp);
+ if_debug1m('L', pgs->memory, " alphaisshape=%d\n", pgs->alphaisshape);
}
- if (mask & shape_alpha_known) {
- cmd_get_value(pgs->shape.alpha, cbp);
- if_debug1m('L', pgs->memory, " shape.alpha=%g\n", pgs->shape.alpha);
+ if (mask & stroke_alpha_known) {
+ cmd_get_value(pgs->strokeconstantalpha, cbp);
+ if_debug1m('L', pgs->memory, " strokeconstantalpha=%g\n", pgs->strokeconstantalpha);
}
- if (mask & alpha_known) {
- cmd_get_value(pgs->alpha, cbp);
- if_debug1m('L', pgs->memory, " alpha=%u\n", pgs->alpha);
+ if (mask & fill_alpha_known) {
+ cmd_get_value(pgs->fillconstantalpha, cbp);
+ if_debug1m('L', pgs->memory, " fillconstantalpha=%u\n", (uint)(pgs->fillconstantalpha));
}
pcb->ptr = cbp;
return 0;
diff --git a/base/gxclread.c b/base/gxclread.c
index 66545002..f2ebf6b5 100644
--- a/base/gxclread.c
+++ b/base/gxclread.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -197,9 +197,9 @@ rb:
}
# endif
if_debug5m('l', ss->local_memory,
- "[l]reading for bands (%d,%d) at bfile %ld, cfile %ld, length %u\n",
+ "[l]reading for bands (%d,%d) at bfile %"PRId64", cfile %"PRId64", length %u\n",
bmin, bmax,
- (long)(io_procs->ftell(bfile) - sizeof(ss->b_this)), (long)pos, left);
+ (io_procs->ftell(bfile) - sizeof(ss->b_this)), (int64_t)pos, left);
}
}
pw->ptr = q;
@@ -808,7 +808,7 @@ clist_render_rectangle(gx_device_clist *cldev, const gs_int_rect *prect,
* a gx_saved_page with non-zero cfile or bfile.
*/
bdev->band_offset_x = 0;
- bdev->band_offset_y = band_first * band_height;
+ bdev->band_offset_y = band_first * (long)band_height;
pinfo = &(crdev->page_info);
} else {
const gx_placed_page *ppage = &ppages[i];
diff --git a/base/gxclrect.c b/base/gxclrect.c
index 00f01ba2..6f71b61a 100644
--- a/base/gxclrect.c
+++ b/base/gxclrect.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -599,7 +599,8 @@ clist_dev_spec_op(gx_device *pdev, int dev_spec_op, void *data, int size)
return 1;
if (dev_spec_op == gxdso_pattern_shfill_doesnt_need_path)
return 1;
- if (dev_spec_op == gxdso_supports_devn) {
+ if (dev_spec_op == gxdso_supports_devn
+ || dev_spec_op == gxdso_skip_icc_component_validation) {
cmm_dev_profile_t *dev_profile;
int code;
code = dev_proc(cdev, get_profile)((gx_device*) cdev, &dev_profile);
@@ -623,8 +624,8 @@ clist_dev_spec_op(gx_device *pdev, int dev_spec_op, void *data, int size)
return cwdev->op_fill_active || cwdev->op_stroke_active;
}
/* forward to the appropriate super class */
- if (cdev->is_printer)
- return gdev_prn_forwarding_dev_spec_op(pdev, dev_spec_op, data, size);
+ if (cdev->orig_spec_op)
+ return cdev->orig_spec_op(pdev, dev_spec_op, data, size);
if (dev_proc(cdev, open_device) == pattern_clist_open_device)
return pattern_accum_dev_spec_op(pdev, dev_spec_op, data, size);
return gx_default_dev_spec_op(pdev, dev_spec_op, data, size);
@@ -985,7 +986,7 @@ clist_copy_planes(gx_device * dev,
}
/* 0x100 fudge is arbitrary, but the BufferSpace is large w.r.t. cbuf size so it doesn't matter */
- if ((cdev->cend - cdev->cnext) < 0x100 + (re.height * bytes_row * (long)cdev->color_info.num_components))
+ if ((cdev->cend - cdev->cnext) < 0x100 + ((long)cdev->color_info.num_components * re.height * bytes_row))
cmd_write_buffer(cdev, cmd_opv_end_run); /* Insure that all planes fit in the bufferspace */
rect.x = rx, rect.y = re.y;
diff --git a/base/gxclthrd.c b/base/gxclthrd.c
index 6792673c..64b6f530 100644
--- a/base/gxclthrd.c
+++ b/base/gxclthrd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -64,7 +64,7 @@ setup_device_and_mem_for_thread(gs_memory_t *chunk_base_mem, gx_device *dev, boo
gs_c_param_list paramlist;
gs_devn_params *pclist_devn_params;
gx_device_buf_space_t buf_space;
- ulong state_size;
+ size_t min_buffer_space;
/* Every thread will have a 'chunk allocator' to reduce the interaction
@@ -114,8 +114,9 @@ setup_device_and_mem_for_thread(gs_memory_t *chunk_base_mem, gx_device *dev, boo
* a profile with the 'special' name "OI_PROFILE" and throw an error.
*/
if (!gscms_is_threadsafe() || (dev->icc_struct != NULL &&
- ((dev->icc_struct->device_profile[0] != NULL &&
- strncmp(dev->icc_struct->device_profile[0]->name, OI_PROFILE, strlen(OI_PROFILE)) == 0)
+ ((dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE] != NULL &&
+ strncmp(dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE]->name,
+ OI_PROFILE, strlen(OI_PROFILE)) == 0)
|| (dev->icc_struct->proof_profile != NULL &&
strncmp(dev->icc_struct->proof_profile->name, OI_PROFILE, strlen(OI_PROFILE)) == 0)))) {
ndev->icc_struct = gsicc_new_device_profile_array(ndev->memory);
@@ -125,8 +126,8 @@ setup_device_and_mem_for_thread(gs_memory_t *chunk_base_mem, gx_device *dev, boo
code);
goto out_cleanup;
}
- if ((code = gsicc_clone_profile(dev->icc_struct->device_profile[0],
- &(ndev->icc_struct->device_profile[0]), ndev->memory)) < 0) {
+ if ((code = gsicc_clone_profile(dev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ &(ndev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE]), ndev->memory)) < 0) {
emprintf1(dev->memory,
"Error setting up device profile, code=%d. Rendering threads not started.\n",
code);
@@ -176,10 +177,10 @@ setup_device_and_mem_for_thread(gs_memory_t *chunk_base_mem, gx_device *dev, boo
ndev->icc_struct->supports_devn = cdev->icc_struct->supports_devn;
ncdev->page_uses_transparency = cdev->page_uses_transparency;
if_debug3m(gs_debug_flag_icc, cdev->memory,
- "[icc] MT clist device = 0x%p profile = 0x%p handle = 0x%p\n",
- ncdev,
- ncdev->icc_struct->device_profile[0],
- ncdev->icc_struct->device_profile[0]->profile_handle);
+ "[icc] MT clist device = "PRI_INTPTR" profile = "PRI_INTPTR" handle = "PRI_INTPTR"\n",
+ (intptr_t)ncdev,
+ (intptr_t)ncdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ (intptr_t)ncdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE]->profile_handle);
/* If the device is_planar, then set the flag in the new_device and the procs */
if ((ncdev->is_planar = cdev->is_planar))
gdev_prn_set_procs_planar(ndev);
@@ -192,11 +193,12 @@ setup_device_and_mem_for_thread(gs_memory_t *chunk_base_mem, gx_device *dev, boo
ncdev->space_params.banding_type = BandingAlways;
code = npdev->printer_procs.buf_procs.size_buf_device
(&buf_space, (gx_device *)ncdev, NULL, ncdev->space_params.band.BandHeight, false);
- /* The 100 is bogus, we are just matching what is in clist_init_states */
- state_size = cdev->nbands * (ulong) sizeof(gx_clist_state) + sizeof(cmd_prefix) + cmd_largest_size + 100;
+ min_buffer_space = clist_minimum_buffer(cdev->nbands);
ncdev->space_params.band.BandBufferSpace = buf_space.bits + buf_space.line_ptrs;
- if (state_size > ncdev->space_params.band.BandBufferSpace)
- ncdev->space_params.band.BandBufferSpace = state_size;
+ /* Check if the BandBufferSpace is large enough to allow us for clist writing */
+ /* to prevent an error from gdev_prn_allocate_memory which checks that. */
+ if (min_buffer_space > ncdev->space_params.band.BandBufferSpace)
+ ncdev->space_params.band.BandBufferSpace = min_buffer_space;
ncdev->space_params.band.tile_cache_size = cdev->page_info.tile_cache_size; /* must be the same */
ncdev->space_params.band.BandBufferSpace += cdev->page_info.tile_cache_size;
diff --git a/base/gxclthrd.h b/base/gxclthrd.h
index be185871..bc83c9bc 100644
--- a/base/gxclthrd.h
+++ b/base/gxclthrd.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxclutil.c b/base/gxclutil.c
index 942ac69f..a66b37b6 100644
--- a/base/gxclutil.c
+++ b/base/gxclutil.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -180,8 +180,8 @@ cmd_write_band(gx_device_clist_writer * cldev, int band_min, int band_max,
cb.band_min = band_min;
cb.band_max = band_max;
cb.pos = cldev->page_info.io_procs->ftell(cfile);
- if_debug3m('l', cldev->memory, "[l]writing for bands (%d,%d) at %ld\n",
- band_min, band_max, (long)cb.pos);
+ if_debug3m('l', cldev->memory, "[l]writing for bands (%d,%d) at %"PRId64"\n",
+ band_min, band_max, cb.pos);
cldev->page_info.io_procs->fwrite_chars(&cb, sizeof(cb), bfile);
if (cp != 0) {
pcl->tail->next = 0; /* terminate the list */
@@ -191,12 +191,12 @@ cmd_write_band(gx_device_clist_writer * cldev, int band_min, int band_max,
(const byte *)cp >= cldev->cend ||
cp->size > cldev->cend - (const byte *)cp
) {
- mlprintf1(cldev->memory, "cmd_write_band error at 0x%lx\n", (ulong) cp);
+ mlprintf1(cldev->memory, "cmd_write_band error at "PRI_INTPTR"\n", (intptr_t) cp);
return_error(gs_error_Fatal);
}
#endif
- if_debug2m('L', cldev->memory, "[L]Wrote cmd id=%ld at %ld\n",
- cp->id, (long)cldev->page_info.io_procs->ftell(cfile));
+ if_debug2m('L', cldev->memory, "[L]Wrote cmd id=%ld at %"PRId64"\n",
+ cp->id, cldev->page_info.io_procs->ftell(cfile));
cldev->page_info.io_procs->fwrite_chars(cp + 1, cp->size, cfile);
}
pcl->head = pcl->tail = 0;
@@ -236,14 +236,14 @@ cmd_write_pseudo_band(gx_device_clist_writer * cldev, unsigned char *pbuf, int d
cb.band_max = band;
cb.pos = cldev->page_info.io_procs->ftell(cfile);
- if_debug2m('l', cldev->memory, "[l]writing pseudo band %d cb pos %ld\n",
- band, (long)cb.pos);
+ if_debug2m('l', cldev->memory, "[l]writing pseudo band %d cb pos %"PRId64"\n",
+ band, cb.pos);
cldev->page_info.io_procs->fwrite_chars(&cb, sizeof(cb), bfile);
/* Now store the information in the cfile */
- if_debug2m('l', cldev->memory, "[l]writing %d bytes into cfile at %ld\n",
- data_size, (long)cldev->page_info.io_procs->ftell(cfile));
+ if_debug2m('l', cldev->memory, "[l]writing %d bytes into cfile at %"PRId64"\n",
+ data_size, cldev->page_info.io_procs->ftell(cfile));
cldev->page_info.io_procs->fwrite_chars(pbuf, data_size, cfile);
@@ -311,6 +311,8 @@ cmd_put_list_op(gx_device_clist_writer * cldev, cmd_list * pcl, uint size)
if ((cldev->error_code =
cmd_write_buffer(cldev, cmd_opv_end_run)) != 0 ||
(size + cmd_headroom > cldev->cend - cldev->cnext)) {
+ if (cldev->error_code == 0)
+ cldev->error_code = gs_error_VMerror;
return 0;
}
else
@@ -321,7 +323,7 @@ cmd_put_list_op(gx_device_clist_writer * cldev, cmd_list * pcl, uint size)
cmd_count_add1(stats_cmd.same_band);
#ifdef DEBUG
if (pcl->tail->size > dp - (byte *) (pcl->tail + 1)) {
- lprintf1("cmd_put_list_op error at 0x%lx\n", (ulong) pcl->tail);
+ lprintf1("cmd_put_list_op error at "PRI_INTPTR"\n", (intptr_t)pcl->tail);
}
#endif
if_debug2m('L', cldev->memory, ", to id=%ld , offset=%ld",
@@ -340,8 +342,8 @@ cmd_put_list_op(gx_device_clist_writer * cldev, cmd_list * pcl, uint size)
if (pcl->tail < pcl->head ||
pcl->tail->size > dp - (byte *) (pcl->tail + 1)
) {
- lprintf1("cmd_put_list_op error at 0x%lx\n",
- (ulong) pcl->tail);
+ lprintf1("cmd_put_list_op error at "PRI_INTPTR"\n",
+ (intptr_t)pcl->tail);
}
#endif
pcl->tail->next = cp;
diff --git a/base/gxclzlib.c b/base/gxclzlib.c
index a2a772a8..d823f092 100644
--- a/base/gxclzlib.c
+++ b/base/gxclzlib.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxcmap.c b/base/gxcmap.c
index 68d3a0bf..7e92621d 100644
--- a/base/gxcmap.c
+++ b/base/gxcmap.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -617,7 +617,7 @@ gs_color_select_t select)
int i = pcs->type->num_components(pcs);
cmm_dev_profile_t *dev_profile = NULL;
gs_color_space_index type = gs_color_space_get_index(pcs);
- int num_src_comps = 1;
+ uchar num_src_comps = 1;
/* Define the rendering intents. */
rendering_params.black_point_comp = pgs->blackptcomp;
@@ -683,13 +683,14 @@ gs_color_select_t select)
return false;
/* Check if the profile is DeviceN (NCLR) */
- if (dev_profile->device_profile[0]->data_cs == gsNCHANNEL) {
+ if (dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]->data_cs == gsNCHANNEL) {
if (dev_profile->spotnames == NULL)
return false;
if (!dev_profile->spotnames->equiv_cmyk_set) {
/* Note that if the improper NCLR profile is used, then the
composite preview will be wrong. */
- code = gsicc_set_devicen_equiv_colors(dev, pgs, dev_profile->device_profile[0]);
+ code = gsicc_set_devicen_equiv_colors(dev, pgs,
+ dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]);
if (code < 0)
return false;
dev_profile->spotnames->equiv_cmyk_set = true;
@@ -769,13 +770,7 @@ gx_remap_concrete_DGray(const gs_color_space * pcs, const frac * pconc,
gx_device * dev, gs_color_select_t select,
const cmm_dev_profile_t *dev_profile)
{
- if (pgs->alpha == gx_max_color_value)
- (*pgs->cmap_procs->map_gray)
- (pconc[0], pdc, pgs, dev, select);
- else
- (*pgs->cmap_procs->map_rgb_alpha)
- (pconc[0], pconc[0], pconc[0], cv2frac(pgs->alpha),
- pdc, pgs, dev, select);
+ (*pgs->cmap_procs->map_gray)(pconc[0], pdc, pgs, dev, select);
return 0;
}
int
@@ -808,12 +803,8 @@ gx_remap_DeviceGray(const gs_client_color * pc, const gs_color_space * pcs,
/* Save original color space and color info into dev color */
pdc->ccolor.paint.values[0] = pc->paint.values[0];
pdc->ccolor_valid = true;
- if (pgs->alpha == gx_max_color_value)
- (*pgs->cmap_procs->map_gray)
- (fgray, pdc, pgs, dev, select);
- else
- (*pgs->cmap_procs->map_rgb_alpha)
- (fgray, fgray, fgray, cv2frac(pgs->alpha), pdc, pgs, dev, select);
+
+ (*pgs->cmap_procs->map_gray)(fgray, pdc, pgs, dev, select);
return 0;
}
@@ -833,13 +824,8 @@ gx_remap_concrete_DRGB(const gs_color_space * pcs, const frac * pconc,
gx_device * dev, gs_color_select_t select,
const cmm_dev_profile_t *dev_profile)
{
- if (pgs->alpha == gx_max_color_value)
- gx_remap_concrete_rgb(pconc[0], pconc[1], pconc[2],
- pdc, pgs, dev, select);
- else
- gx_remap_concrete_rgb_alpha(pconc[0], pconc[1], pconc[2],
- cv2frac(pgs->alpha),
- pdc, pgs, dev, select);
+
+ gx_remap_concrete_rgb(pconc[0], pconc[1], pconc[2], pdc, pgs, dev, select);
return 0;
}
int
@@ -855,12 +841,8 @@ gx_remap_DeviceRGB(const gs_client_color * pc, const gs_color_space * pcs,
pdc->ccolor.paint.values[1] = pc->paint.values[1];
pdc->ccolor.paint.values[2] = pc->paint.values[2];
pdc->ccolor_valid = true;
- if (pgs->alpha == gx_max_color_value)
- gx_remap_concrete_rgb(fred, fgreen, fblue,
- pdc, pgs, dev, select);
- else
- gx_remap_concrete_rgb_alpha(fred, fgreen, fblue, cv2frac(pgs->alpha),
- pdc, pgs, dev, select);
+
+ gx_remap_concrete_rgb(fred, fgreen, fblue, pdc, pgs, dev, select);
return 0;
}
@@ -1419,7 +1401,7 @@ cmap_separation_halftoned(frac all, gx_device_color * pdc,
const gs_gstate * pgs, gx_device * dev, gs_color_select_t select,
const gs_color_space *pcs)
{
- uchar i, ncomps = dev->color_info.num_components;
+ uint i, ncomps = dev->color_info.num_components;
bool additive = dev->color_info.polarity == GX_CINFO_POLARITY_ADDITIVE;
frac comp_value = all;
frac cm_comps[GX_DEVICE_COLOR_MAX_COMPONENTS];
@@ -1474,7 +1456,7 @@ static void
cmap_separation_direct(frac all, gx_device_color * pdc, const gs_gstate * pgs,
gx_device * dev, gs_color_select_t select, const gs_color_space *pcs)
{
- uchar i, ncomps = dev->color_info.num_components;
+ uint i, ncomps = dev->color_info.num_components;
bool additive = dev->color_info.polarity == GX_CINFO_POLARITY_ADDITIVE;
frac comp_value = all;
frac cm_comps[GX_DEVICE_COLOR_MAX_COMPONENTS];
@@ -1887,7 +1869,7 @@ gx_default_8bit_map_gray_color(gx_device * dev, const gx_color_value cv[])
{
gx_color_index color = gx_color_value_to_byte(cv[0]);
- return (color == gx_no_color_index ? color ^ 1 : color);
+ return color;
}
int
@@ -2002,7 +1984,11 @@ cmyk_8bit_map_cmyk_color(gx_device * dev, const gx_color_value cv[])
((uint)gx_color_value_to_byte(cv[1]) << 16) +
((uint)gx_color_value_to_byte(cv[0]) << 24);
+#if ARCH_SIZEOF_GX_COLOR_INDEX > 4
+ return color;
+#else
return (color == gx_no_color_index ? color ^ 1 : color);
+#endif
}
gx_color_index
diff --git a/base/gxcmap.h b/base/gxcmap.h
index bbb903c5..fd3e9793 100644
--- a/base/gxcmap.h
+++ b/base/gxcmap.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxcolor2.h b/base/gxcolor2.h
index 6a209d94..bb9376eb 100644
--- a/base/gxcolor2.h
+++ b/base/gxcolor2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxcomp.h b/base/gxcomp.h
index eaa86ec5..2c741095 100644
--- a/base/gxcomp.h
+++ b/base/gxcomp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxcoord.h b/base/gxcoord.h
index aa3e05c1..b8633928 100644
--- a/base/gxcoord.h
+++ b/base/gxcoord.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxcpath.c b/base/gxcpath.c
index 4c3d3478..c9fde9d4 100644
--- a/base/gxcpath.c
+++ b/base/gxcpath.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -172,8 +172,8 @@ gx_cpath_init_contained_shared(gx_clip_path * pcpath,
{
if (shared) {
if (shared->path.segments == &shared->path.local_segments) {
- lprintf1("Attempt to share (local) segments of clip path 0x%lx!\n",
- (ulong) shared);
+ lprintf1("Attempt to share (local) segments of clip path "PRI_INTPTR"!\n",
+ (intptr_t)shared);
return_error(gs_error_Fatal);
}
*pcpath = *shared;
@@ -230,8 +230,8 @@ gx_cpath_init_local_shared_nested(gx_clip_path * pcpath,
if (shared) {
if ((shared->path.segments == &shared->path.local_segments) &&
!safely_nested) {
- lprintf1("Attempt to share (local) segments of clip path 0x%lx!\n",
- (ulong) shared);
+ lprintf1("Attempt to share (local) segments of clip path "PRI_INTPTR"!\n",
+ (intptr_t)shared);
return_error(gs_error_Fatal);
}
pcpath->path = shared->path;
@@ -403,8 +403,10 @@ gx_cpath_path_list_new(gs_memory_t *mem, gx_clip_path *pcpath, int rule,
rc_init_free(pcplist, mem, 1, rc_free_cpath_path_list);
if (pcpath!=NULL && !pcpath->path_valid) {
code = gx_path_init_contained_shared(&pcplist->path, NULL, mem, cname);
- if (code < 0)
+ if (code < 0) {
+ gs_free_object(mem, pcplist, "gx_cpath_path_list_new");
return code;
+ }
code = gx_cpath_to_path(pcpath, &pcplist->path);
} else {
gx_path_init_local(&pcplist->path, mem);
@@ -1120,7 +1122,11 @@ gx_cpath_copy(const gx_clip_path * from, gx_clip_path * pcpath)
pcpath->cached = NULL;
l->single = from->rect_list->list.single;
for (r = from->rect_list->list.head; r != NULL; r = r->next) {
- s = gs_alloc_struct(from->rect_list->rc.memory, gx_clip_rect, &st_clip_rect, "gx_cpath_copy");
+ if (pcpath->rect_list->rc.memory == NULL)
+ s = gs_alloc_struct(from->rect_list->rc.memory, gx_clip_rect, &st_clip_rect, "gx_cpath_copy");
+ else
+ s = gs_alloc_struct(pcpath->rect_list->rc.memory, gx_clip_rect, &st_clip_rect, "gx_cpath_copy");
+
if (s == NULL)
return_error(gs_error_VMerror);
*s = *r;
diff --git a/base/gxcpath.h b/base/gxcpath.h
index 66ca6066..9d1fdace 100644
--- a/base/gxcpath.h
+++ b/base/gxcpath.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -115,7 +115,7 @@ void gx_make_clip_device_in_heap(gx_device_clip * dev, const gx_clip_path *pcpat
gs_memory_t *mem);
#define clip_rect_print(ch, str, ar)\
- if_debug7(ch, "[%c]%s 0x%lx: (%d,%d),(%d,%d)\n", ch, str, (ulong)ar,\
+ if_debug7(ch, "[%c]%s "PRI_INTPTR": (%d,%d),(%d,%d)\n", ch, str, (intptr_t)ar,\
(ar)->xmin, (ar)->ymin, (ar)->xmax, (ar)->ymax)
/* Exported by gxcpath.c for gxacpath.c */
diff --git a/base/gxcspace.h b/base/gxcspace.h
index 1c2ad175..3218019c 100644
--- a/base/gxcspace.h
+++ b/base/gxcspace.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxctable.c b/base/gxctable.c
index c1144d11..4662d090 100644
--- a/base/gxctable.c
+++ b/base/gxctable.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxctable.h b/base/gxctable.h
index 3b1d8a61..a2fc8cad 100644
--- a/base/gxctable.h
+++ b/base/gxctable.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxcvalue.h b/base/gxcvalue.h
index dadd7c84..92efa325 100644
--- a/base/gxcvalue.h
+++ b/base/gxcvalue.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdcconv.c b/base/gxdcconv.c
index 0b31ea7e..c492ec0b 100644
--- a/base/gxdcconv.c
+++ b/base/gxdcconv.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdcconv.h b/base/gxdcconv.h
index a1864182..68803375 100644
--- a/base/gxdcconv.h
+++ b/base/gxdcconv.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdcolor.c b/base/gxdcolor.c
index fe9f58d1..b4178871 100644
--- a/base/gxdcolor.c
+++ b/base/gxdcolor.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdcolor.h b/base/gxdcolor.h
index 01d06c2f..9e979b32 100644
--- a/base/gxdcolor.h
+++ b/base/gxdcolor.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdda.h b/base/gxdda.h
index 0ef10f31..ab577342 100644
--- a/base/gxdda.h
+++ b/base/gxdda.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdevbuf.h b/base/gxdevbuf.h
index 959d8459..8f5fd0a7 100644
--- a/base/gxdevbuf.h
+++ b/base/gxdevbuf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdevcli.h b/base/gxdevcli.h
index 30d0eda0..0bdf3c02 100644
--- a/base/gxdevcli.h
+++ b/base/gxdevcli.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -675,13 +675,12 @@ typedef struct gx_device_cached_colors_s {
* Define the parameters controlling banding.
*/
/* if you make any additions/changes to this structure you need to make
- the appropriate additions/changes to the compare_gdev_prn_space_params()
- function in gdevprn.c */
+ the appropriate additions/changes to gdev_space_params_cmp() */
typedef struct gx_band_params_s {
int BandWidth; /* (optional) band width in pixels */
int BandHeight; /* (optional) */
- long BandBufferSpace; /* (optional) */
- long tile_cache_size; /* (optional) */
+ size_t BandBufferSpace; /* (optional) */
+ size_t tile_cache_size; /* (optional) */
} gx_band_params_t;
#define BAND_PARAMS_INITIAL_VALUES 0, 0, 0, 0
@@ -693,16 +692,20 @@ typedef enum {
} gdev_banding_type;
/* if you make any additions/changes to this structure you need to make
- the appropriate additions/changes to the compare_gdev_prn_space_params()
- function in gdevprn.c */
+ the appropriate additions/changes to the gdev_space_params_cmp() */
typedef struct gdev_space_params_s {
- long MaxBitmap; /* max size of non-buffered bitmap */
- long BufferSpace; /* space to use for buffer */
+ size_t MaxBitmap; /* max size of non-buffered bitmap */
+ size_t BufferSpace; /* space to use for buffer */
gx_band_params_t band; /* see gxband.h */
bool params_are_read_only; /* true if put_params may not modify this struct */
gdev_banding_type banding_type; /* used to force banding or bitmap */
} gdev_space_params;
+/* Returns 0 for a match, non-zero otherwise. Like memcmp, but allowing
+ * for uninitialised padding. */
+int gdev_space_params_cmp(const gdev_space_params sp1,
+ const gdev_space_params sp2);
+
typedef struct gdev_pagelist_s {
rc_header rc;
char *Pages;
@@ -767,7 +770,7 @@ typedef struct gdev_pagelist_s {
long band_offset_y; /* for rendering that is phase sensitive (old wtsimdi) */\
bool BLS_force_memory;\
gx_stroked_gradient_recognizer_t sgr;\
- int MaxPatternBitmap; /* Threshold for switching to pattern_clist mode */\
+ size_t MaxPatternBitmap; /* Threshold for switching to pattern_clist mode */\
bool page_uses_transparency; /* PDF 1.4 transparency is used. */\
gdev_space_params space_params;\
cmm_dev_profile_t *icc_struct; /* object dependent profiles */\
@@ -1982,4 +1985,7 @@ void gx_device_dump(gx_device *dev, const char *text);
/* Compare color information structures */
bool gx_color_info_equal(const gx_device_color_info *p1, const gx_device_color_info *p2);
+/* Perform a callout to registered handlers from the device. */
+int gx_callout(gx_device *dev, int id, int size, void *data);
+
#endif /* gxdevcli_INCLUDED */
diff --git a/base/gxdevice.h b/base/gxdevice.h
index c7fd7454..e53f0b90 100644
--- a/base/gxdevice.h
+++ b/base/gxdevice.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdevmem.h b/base/gxdevmem.h
index 68646290..a5e2c6db 100644
--- a/base/gxdevmem.h
+++ b/base/gxdevmem.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -258,6 +258,9 @@ int gs_make_mem_device_with_copydevice(gx_device_memory ** mdev,
* scan lines. Banding devices use this (see gxclread.c).
*/
int gdev_mem_open_scan_lines(gx_device_memory *mdev, int setup_height);
+int gdev_mem_open_scan_lines_interleaved(gx_device_memory *mdev,
+ int setup_height,
+ int interleaved);
/*
* Initialize the line pointers of a memory device. base and/or line_ptrs
@@ -275,6 +278,11 @@ int gdev_mem_open_scan_lines(gx_device_memory *mdev, int setup_height);
int gdev_mem_set_line_ptrs(gx_device_memory *mdev,
byte *base, int raster, byte **line_ptrs,
int setup_height);
+int
+gdev_mem_set_line_ptrs_interleaved(gx_device_memory *mdev,
+ byte *base, int raster,
+ byte **line_ptrs, int setup_height,
+ int interleaved);
/* Define whether a monobit memory device is inverted (black=1). */
void gdev_mem_mono_set_inverted(gx_device_memory * mdev, bool black_is_1);
diff --git a/base/gxdevndi.c b/base/gxdevndi.c
index 85d2aa67..407226d0 100644
--- a/base/gxdevndi.c
+++ b/base/gxdevndi.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdevrop.h b/base/gxdevrop.h
index a98a2fd6..93049fa1 100644
--- a/base/gxdevrop.h
+++ b/base/gxdevrop.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdevsop.h b/base/gxdevsop.h
index 27ea0cb6..f41a780a 100644
--- a/base/gxdevsop.h
+++ b/base/gxdevsop.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -372,6 +372,29 @@ enum {
/* Private dso used to check that a printer device properly forwards to the default */
gxdso_debug_printer_check,
#endif
+ /* gxdso_supports_alpha:
+ * data = NULL
+ * size = 0
+ * Returns 1 if the rendering device supports alpha,
+ * 0 otherwise.
+ */
+ gxdso_supports_alpha,
+ /* gxdso_reopen_after_init:
+ * data = NULL
+ * size = 0
+ * Returns 1 if the device should be closed/reopened after gs
+ * finishes initialisation (e.g. to give it a chance to fetch
+ * configuration from registered callout handlers),
+ * 0 otherwise.
+ */
+ gxdso_reopen_after_init,
+
+ /* Normally, when we set a device ICC profile, we validate that the number
+ * of components against the number of components the device supports. But
+ * in certain cases, we don't want to do that (DeviceN devices and nullpage,
+ * for example).
+ */
+ gxdso_skip_icc_component_validation,
/* Add new gxdso_ keys above this. */
gxdso_pattern__LAST
};
diff --git a/base/gxdht.h b/base/gxdht.h
index 92c839b5..8bb51c2c 100644
--- a/base/gxdht.h
+++ b/base/gxdht.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdhtres.h b/base/gxdhtres.h
index f7f44267..97734514 100644
--- a/base/gxdhtres.h
+++ b/base/gxdhtres.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdhtserial.c b/base/gxdhtserial.c
index 4246ca50..63cab5a3 100644
--- a/base/gxdhtserial.c
+++ b/base/gxdhtserial.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdhtserial.h b/base/gxdhtserial.h
index 3d636ba3..987fb1ec 100644
--- a/base/gxdhtserial.h
+++ b/base/gxdhtserial.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdither.h b/base/gxdither.h
index 97d59c59..e6e27cd1 100644
--- a/base/gxdither.h
+++ b/base/gxdither.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxdownscale.c b/base/gxdownscale.c
index 8721d1db..1a348da5 100644
--- a/base/gxdownscale.c
+++ b/base/gxdownscale.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -32,6 +32,11 @@ void gx_ht_threshold_row_bit_sub(byte *contone, byte *threshold_strip,
int dithered_stride, int width, int num_rows,
int offset_bits);
+struct gx_downscale_liner_s {
+ int (*get_line)(gx_downscale_liner *, void *, int);
+ void (*drop)(gx_downscale_liner *, gs_memory_t *);
+};
+
enum
{
MAX_ETS_PLANES = 8
@@ -918,7 +923,8 @@ static void down_core4_ht(gx_downscaler_t *ds,
else if ((31 & (intptr_t)in_buffer) == 0)
downscaled_data = in_buffer; /* Already aligned! Yay! */
else
- memcpy(downscaled_data, in_buffer, nc*ds->width); /* Copy to align */
+ memcpy(downscaled_data, in_buffer,
+ (size_t)nc*ds->width); /* Copy to align */
/* Do the halftone */
for (i = 0; i < nc; i++)
@@ -1688,7 +1694,7 @@ static void down_core32(gx_downscaler_t *ds,
}
}
-static void decode_factor(int factor, int *up, int *down)
+void gx_downscaler_decode_factor(int factor, int *up, int *down)
{
if (factor == 32)
*down = 3, *up = 2;
@@ -1703,7 +1709,7 @@ gx_downscaler_scale(int width, int factor)
{
int up, down;
- decode_factor(factor, &up, &down);
+ gx_downscaler_decode_factor(factor, &up, &down);
return (width*up)/down;
}
@@ -1711,7 +1717,7 @@ int gx_downscaler_adjust_bandheight(int factor, int band_height)
{
int up, down;
- decode_factor(factor, &up, &down);
+ gx_downscaler_decode_factor(factor, &up, &down);
return (band_height/down)*down;
}
@@ -1720,47 +1726,67 @@ gx_downscaler_scale_rounded(int width, int factor)
{
int up, down;
- decode_factor(factor, &up, &down);
+ gx_downscaler_decode_factor(factor, &up, &down);
return (width*up + down-1)/down;
}
+typedef struct {
+ gx_downscale_liner base;
+ ClapTrap *claptrap;
+ int y;
+ int width;
+ int height;
+ int num_comps;
+ gs_get_bits_params_t *params;
+ gx_downscale_liner *chain;
+} liner_claptrap_planar;
+
+static int
+claptrap_planar_line(gx_downscale_liner *liner_, void *buffer, int row)
+{
+ liner_claptrap_planar *liner = (liner_claptrap_planar *)liner_;
+ gs_get_bits_params_t *params = (gs_get_bits_params_t *)buffer;
+
+ liner->params = params;
+ return ClapTrap_GetLinePlanar(liner->claptrap, params->data);
+}
+
+static void
+claptrap_planar_drop(gx_downscale_liner *liner_, gs_memory_t *mem)
+{
+ liner_claptrap_planar *liner = (liner_claptrap_planar *)liner_;
+ gx_downscale_liner *next;
+
+ if (!liner)
+ return;
+ ClapTrap_Fin(mem, liner->claptrap);
+ next = liner->chain;
+ gs_free_object(mem, liner, "liner_claptrap_planar");
+ if (next)
+ next->drop(next, mem);
+}
+
static int get_planar_line_for_trap(void *arg, unsigned char *buf)
{
- gx_downscaler_t *ds = (gx_downscaler_t *)arg;
- gs_int_rect rect;
- gs_get_bits_params_t params; /* params (if trapping) */
- int nc = ds->num_planes;
+ liner_claptrap_planar *ct = (liner_claptrap_planar *)arg;
+ gs_get_bits_params_t params;
+ int nc = ct->num_comps;
int i, code;
unsigned char *buf2;
- rect.p.x = 0;
- rect.p.y = ds->claptrap_y++;
- rect.q.x = ds->dev->width;
- rect.q.y = rect.p.y+1;
- /* Allow for devices (like psdcmyk) that make several passes through
- * the image. */
- if (ds->claptrap_y == ds->dev->height)
- ds->claptrap_y = 0;
-
- params = *ds->claptrap_params;
+ params = *ct->params;
buf2 = buf;
for (i = 0; i < nc; i++)
{
params.data[i] = buf2;
- buf2 += ds->width;
+ buf2 += ct->width;
}
- code = (*dev_proc(ds->dev, get_bits_rectangle))(ds->dev, &rect, &params, NULL);
- if (code < 0)
- return code;
-
- /* Now cope with the fact we might have been returned pointers */
- for (i = 0; i < nc; i++)
- {
- if (params.data[i] != buf)
- memcpy(buf, params.data[i], ds->width);
- buf += ds->width;
- }
+ code = ct->chain->get_line(ct->chain, &params, ct->y++);
+ /* Allow for devices (like psdcmyk) that make several passes through
+ * the image. */
+ if (ct->y == ct->height)
+ ct->y = 0;
return code;
}
@@ -1945,49 +1971,202 @@ static int init_ht(gx_downscaler_t *ds, int num_planes, gx_downscale_core *downs
int gx_downscaler_init_planar(gx_downscaler_t *ds,
gx_device *dev,
- gs_get_bits_params_t *params,
- int num_comps,
- int factor,
- int mfs,
int src_bpc,
- int dst_bpc)
+ int dst_bpc,
+ int num_comps,
+ const gx_downscaler_params *params,
+ const gs_get_bits_params_t *gb_params)
+{
+ return gx_downscaler_init_planar_cm(ds, dev, src_bpc, dst_bpc,
+ num_comps, params, gb_params,
+ NULL, NULL, num_comps);
+}
+
+typedef struct {
+ gx_downscale_liner base;
+ gx_device *dev;
+} liner_getbits_chunky;
+
+static int
+getbits_chunky_line(gx_downscale_liner *liner_, void *buffer, int row)
+{
+ liner_getbits_chunky *liner = (liner_getbits_chunky *)liner_;
+
+ return (*dev_proc(liner->dev, get_bits))(liner->dev, row, buffer, NULL);
+}
+
+static void
+getbits_chunky_drop(gx_downscale_liner *liner_, gs_memory_t *mem)
+{
+ liner_getbits_chunky *liner = (liner_getbits_chunky *)liner_;
+
+ gs_free_object(mem, liner, "liner_getbits_chunky");
+}
+
+typedef struct {
+ gx_downscale_liner base;
+ gx_device *dev;
+ int raster;
+ int num_comps;
+} liner_getbits_planar;
+
+static int
+getbits_planar_line(gx_downscale_liner *liner_, void *output, int row)
+{
+ liner_getbits_planar *liner = (liner_getbits_planar *)liner_;
+ gs_get_bits_params_t *params = (gs_get_bits_params_t *)output;
+ gs_get_bits_params_t params2;
+ gs_int_rect rect;
+ int i, code, n;
+
+ rect.p.x = 0;
+ rect.p.y = row;
+ rect.q.x = liner->dev->width;
+ rect.q.y = row+1;
+
+ n = liner->dev->width;
+ if (liner->dev->color_info.depth > liner->dev->color_info.num_components * 8 + 8)
+ n *= 2;
+
+ params2 = *params;
+
+ code = (*dev_proc(liner->dev, get_bits_rectangle))(liner->dev, &rect, &params2, NULL);
+
+ /* get_bits_rectangle doesn't like doing planar copies, only return
+ * pointers. This is a problem for us, so fudge it here. */
+ for (i = 0; i < liner->num_comps; i++)
+ if (params->data[i] != params2.data[1])
+ memcpy(params->data[i], params2.data[i], n);
+
+ return code;
+}
+
+static void
+getbits_planar_drop(gx_downscale_liner *liner_, gs_memory_t *mem)
+{
+ liner_getbits_planar *liner = (liner_getbits_planar *)liner_;
+
+ gs_free_object(mem, liner, "liner_getbits_planar");
+}
+
+typedef struct {
+ gx_downscale_liner base;
+ ClapTrap *claptrap;
+ int y;
+ int height;
+ gx_downscale_liner *chain;
+} liner_claptrap;
+
+static int
+claptrap_line(gx_downscale_liner *liner_, void *buffer, int row)
{
- return gx_downscaler_init_planar_trapped_cm(ds, dev, params, num_comps,
- factor, mfs, src_bpc, dst_bpc, 0, 0, NULL, NULL, NULL, num_comps);
+ liner_claptrap *liner = (liner_claptrap *)liner_;
+
+ return ClapTrap_GetLine(liner->claptrap, buffer);
}
-int gx_downscaler_init_planar_trapped(gx_downscaler_t *ds,
- gx_device *dev,
- gs_get_bits_params_t *params,
- int num_comps,
- int factor,
- int mfs,
- int src_bpc,
- int dst_bpc,
- int trap_w,
- int trap_h,
- const int *comp_order)
-{
- return gx_downscaler_init_planar_trapped_cm(ds, dev, params, num_comps,
- factor, mfs, src_bpc, dst_bpc,
- trap_w, trap_h, comp_order,
- NULL, NULL, num_comps);
+static void
+claptrap_drop(gx_downscale_liner *liner_, gs_memory_t *mem)
+{
+ liner_claptrap *liner = (liner_claptrap *)liner_;
+ gx_downscale_liner *next;
+
+ if (!liner)
+ return;
+ ClapTrap_Fin(mem, liner->claptrap);
+ next = liner->chain;
+ gs_free_object(mem, liner, "liner_claptrap");
+ if (next)
+ next->drop(next, mem);
+}
+
+#ifdef WITH_CAL
+typedef struct {
+ gx_downscale_liner base;
+ cal_deskewer *deskewer;
+ cal_deskewer_bander *bander;
+ int height;
+ int get_row;
+ int got_row;
+ gx_downscale_liner *chain;
+} liner_skew;
+
+static int
+skew_line(gx_downscale_liner *liner_, void *buffer, int row)
+{
+ liner_skew *liner = (liner_skew *)liner_;
+ int code;
+
+ if (row < liner->got_row)
+ liner->get_row = 0;
+
+ liner->got_row = row;
+
+ while (1) {
+ code = cal_deskewer_band_pull(liner->bander, buffer);
+ if (code == 1)
+ return 0; /* We got a line! */
+
+ code = liner->chain->get_line(liner->chain,
+ buffer,
+ liner->get_row++);
+ if (code < 0)
+ return code;
+ code = cal_deskewer_band_push(liner->bander,
+ buffer);
+ if (code < 0)
+ return code;
+ }
+}
+
+static void
+skew_drop(gx_downscale_liner *liner_, gs_memory_t *mem)
+{
+ liner_skew *liner = (liner_skew *)liner_;
+ gx_downscale_liner *next;
+
+ if (!liner)
+ return;
+ cal_deskewer_band_end(liner->bander, mem);
+ cal_deskewer_fin(liner->deskewer, mem);
+ next = liner->chain;
+ gs_free_object(mem, liner, "liner_skew");
+ if (next)
+ next->drop(next, mem);
+}
+#endif
+
+#define alloc_liner(mem, type, get, drop, res) \
+ do_alloc_liner(mem, sizeof(type), #type, get, drop,\
+ (gx_downscale_liner **)res)
+
+static int
+do_alloc_liner(gs_memory_t *mem, size_t size, const char *type,
+ int (*get_line)(gx_downscale_liner *, void *, int),
+ void (*drop)(gx_downscale_liner *, gs_memory_t *),
+ gx_downscale_liner **res)
+{
+ gx_downscale_liner *liner;
+
+ liner = (gx_downscale_liner *)gs_alloc_bytes(mem, size, type);
+ *res = liner;
+ if (liner == NULL)
+ return_error(gs_error_VMerror);
+ liner->get_line = get_line;
+ liner->drop = drop;
+ return 0;
}
-int gx_downscaler_init_planar_trapped_cm(gx_downscaler_t *ds,
- gx_device *dev,
- gs_get_bits_params_t *params,
- int num_comps,
- int factor,
- int mfs,
- int src_bpc,
- int dst_bpc,
- int trap_w,
- int trap_h,
- const int *comp_order,
- gx_downscale_cm_fn *apply_cm,
- void *apply_cm_arg,
- int post_cm_num_comps)
+int gx_downscaler_init_planar_cm(gx_downscaler_t *ds,
+ gx_device *dev,
+ int src_bpc,
+ int dst_bpc,
+ int num_comps,
+ const gx_downscaler_params *params,
+ const gs_get_bits_params_t *gb_params,
+ gx_downscale_cm_fn *apply_cm,
+ void *apply_cm_arg,
+ int post_cm_num_comps)
{
int span = bitmap_raster(dev->width * src_bpc);
int post_span = bitmap_raster(dev->width * src_bpc);
@@ -1996,8 +2175,10 @@ int gx_downscaler_init_planar_trapped_cm(gx_downscaler_t *ds,
gx_downscale_core *core;
int i;
int upfactor, downfactor;
+ int factor = params->downscale_factor;
+ int mfs = params->min_feature_size;
- decode_factor(factor, &upfactor, &downfactor);
+ gx_downscaler_decode_factor(factor, &upfactor, &downfactor);
/* width = scaled width */
width = (dev->width*upfactor)/downfactor;
@@ -2018,8 +2199,9 @@ int gx_downscaler_init_planar_trapped_cm(gx_downscaler_t *ds,
if (apply_cm) {
for (i = 0; i < post_cm_num_comps; i++) {
- ds->post_cm[i] = gs_alloc_bytes(dev->memory, post_span * downfactor,
- "gx_downscaler(planar_data)");
+ ds->post_cm[i] = gs_alloc_bytes(dev->memory,
+ (size_t)post_span * downfactor,
+ "gx_downscaler(planar_data)");
if (ds->post_cm[i] == NULL) {
code = gs_note_error(gs_error_VMerror);
goto cleanup;
@@ -2027,33 +2209,74 @@ int gx_downscaler_init_planar_trapped_cm(gx_downscaler_t *ds,
}
}
- code = check_trapping(dev->memory, trap_w, trap_h, num_comps, comp_order);
+ /* The primary line source for planar comes always from
+ * get_bits_rectangle. */
+ {
+ liner_getbits_planar *gb_liner;
+
+ code = alloc_liner(dev->memory,
+ liner_getbits_planar,
+ getbits_planar_line,
+ getbits_planar_drop,
+ &gb_liner);
+ if (code < 0)
+ goto cleanup;
+ gb_liner->dev = dev;
+ gb_liner->num_comps = num_comps;
+ ds->liner = &gb_liner->base;
+ }
+
+ code = check_trapping(dev->memory, params->trap_w, params->trap_h,
+ num_comps, params->trap_order);
if (code < 0)
return code;
- if (trap_w > 0 || trap_h > 0) {
- ds->claptrap = ClapTrap_Init(dev->memory, width, dev->height, num_comps, comp_order, trap_w, trap_h, get_planar_line_for_trap, ds);
- if (ds->claptrap == NULL) {
+ if (params->trap_w > 0 || params->trap_h > 0) {
+ liner_claptrap_planar *ct_liner;
+
+ code = alloc_liner(dev->memory,
+ liner_claptrap_planar,
+ claptrap_planar_line,
+ claptrap_planar_drop,
+ &ct_liner);
+ if (code < 0)
+ goto cleanup;
+ ct_liner->chain = ds->liner;
+ ct_liner->y = 0;
+ ct_liner->height = dev->height;
+ ct_liner->num_comps = ds->num_comps;
+ ct_liner->width = dev->width;
+ ds->liner = &ct_liner->base;
+ ct_liner->claptrap = ClapTrap_Init(dev->memory,
+ dev->width,
+ dev->height,
+ num_comps,
+ params->trap_order,
+ params->trap_w,
+ params->trap_h,
+ get_planar_line_for_trap,
+ ct_liner);
+ if (ct_liner->claptrap == NULL) {
emprintf(dev->memory, "Trapping initialisation failed");
code = gs_note_error(gs_error_VMerror);
goto cleanup;
}
}
- else
- ds->claptrap = NULL;
- memcpy(&ds->params, params, sizeof(*params));
+ memcpy(&ds->params, gb_params, sizeof(*gb_params));
ds->params.raster = span;
for (i = 0; i < num_comps; i++) {
- ds->pre_cm[i] = gs_alloc_bytes(dev->memory, span * downfactor,
- "gx_downscaler(planar_data)");
+ ds->pre_cm[i] = gs_alloc_bytes(dev->memory,
+ (size_t)span * downfactor,
+ "gx_downscaler(planar_data)");
if (ds->pre_cm[i] == NULL) {
code = gs_note_error(gs_error_VMerror);
goto cleanup;
}
}
if (upfactor > 1) {
- ds->scaled_data = gs_alloc_bytes(dev->memory, ds->scaled_span * upfactor * num_comps,
+ ds->scaled_data = gs_alloc_bytes(dev->memory,
+ (size_t)ds->scaled_span * upfactor * num_comps,
"gx_downscaler(scaled_data)");
if (ds->scaled_data == NULL) {
code = gs_note_error(gs_error_VMerror);
@@ -2097,23 +2320,23 @@ int gx_downscaler_init_planar_trapped_cm(gx_downscaler_t *ds,
if (mfs > 1) {
ds->mfs_data = (byte *)gs_alloc_bytes(dev->memory,
- (width+1) * num_comps,
+ (size_t)(width+1) * num_comps,
"gx_downscaler(mfs)");
if (ds->mfs_data == NULL) {
code = gs_note_error(gs_error_VMerror);
goto cleanup;
}
- memset(ds->mfs_data, 0, (width+1) * num_comps);
+ memset(ds->mfs_data, 0, (size_t)num_comps * (width+1));
}
if (dst_bpc == 1) {
ds->errors = (int *)gs_alloc_bytes(dev->memory,
- num_comps*(width+3)*sizeof(int),
+ (size_t)num_comps*(width+3)*sizeof(int),
"gx_downscaler(errors)");
if (ds->errors == NULL) {
code = gs_note_error(gs_error_VMerror);
goto cleanup;
}
- memset(ds->errors, 0, num_comps * (width+3) * sizeof(int));
+ memset(ds->errors, 0, (size_t)num_comps * (width+3) * sizeof(int));
}
return 0;
@@ -2125,189 +2348,53 @@ int gx_downscaler_init_planar_trapped_cm(gx_downscaler_t *ds,
static int get_line_for_trap(void *arg, unsigned char *buf)
{
- gx_downscaler_t *ds = (gx_downscaler_t *)arg;
+ liner_claptrap *ct = (liner_claptrap *)arg;
/* Allow for devices (like psdcmyk) that make several passes through
- * the image. */
- if (ds->claptrap_y == ds->dev->height)
- ds->claptrap_y = 0;
+ * the image. This is a bit crap cos it assumes that we will pass
+ * through strictly from top to bottom (possibly repeatedly). */
+ if (ct->y == ct->height)
+ ct->y = 0;
- return (*dev_proc(ds->dev, get_bits))(ds->dev, ds->claptrap_y++, buf, NULL);
+ return ct->chain->get_line(ct->chain, buf, ct->y++);
}
-int gx_downscaler_init(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width)
-{
- return gx_downscaler_init_trapped_cm_ets(ds, dev, src_bpc, dst_bpc, num_comps,
- factor, mfs, adjust_width_proc, adjust_width, 0, 0, NULL, NULL, NULL, 0, 0);
-}
-
-
-int gx_downscaler_init_ets(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- int ets)
+int gx_downscaler_init(gx_downscaler_t *ds,
+ gx_device *dev,
+ int src_bpc,
+ int dst_bpc,
+ int num_comps,
+ const gx_downscaler_params *params,
+ int (*adjust_width_proc)(int, int),
+ int adjust_width)
{
- return gx_downscaler_init_trapped_cm_ets(ds, dev, src_bpc, dst_bpc, num_comps,
- factor, mfs, adjust_width_proc, adjust_width, 0, 0, NULL, NULL, NULL, 0, ets);
-}
-
-int gx_downscaler_init_trapped(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- int trap_w,
- int trap_h,
- const int *comp_order)
-{
- return gx_downscaler_init_trapped_cm_ets(ds, dev, src_bpc, dst_bpc,
- num_comps, factor, mfs,
- adjust_width_proc, adjust_width,
- trap_w, trap_h, comp_order,
- NULL, NULL, 0, 0);
-}
-
-int gx_downscaler_init_trapped_ets(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- int trap_w,
- int trap_h,
- const int *comp_order,
- int ets)
-{
- return gx_downscaler_init_trapped_cm_ets(ds, dev, src_bpc, dst_bpc,
- num_comps, factor, mfs,
- adjust_width_proc, adjust_width,
- trap_w, trap_h, comp_order,
- NULL, NULL, 0, ets);
-}
-int gx_downscaler_init_cm(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- gx_downscale_cm_fn *apply_cm,
- void *apply_cm_arg,
- int post_cm_num_comps)
-{
- return gx_downscaler_init_trapped_cm_ets(ds, dev, src_bpc, dst_bpc,
- num_comps, factor, mfs,
- adjust_width_proc, adjust_width,
- 0, 0, NULL,
- apply_cm, apply_cm_arg, post_cm_num_comps, 0);
-}
-
-int gx_downscaler_init_cm_ets(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- gx_downscale_cm_fn *apply_cm,
- void *apply_cm_arg,
- int post_cm_num_comps,
- int ets)
-{
- return gx_downscaler_init_trapped_cm_ets(ds, dev, src_bpc, dst_bpc,
- num_comps, factor, mfs,
- adjust_width_proc, adjust_width,
- 0, 0, NULL,
- apply_cm, apply_cm_arg, post_cm_num_comps, ets);
-}
-
-int gx_downscaler_init_trapped_cm(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- int trap_w,
- int trap_h,
- const int *comp_order,
- gx_downscale_cm_fn *apply_cm,
- void *apply_cm_arg,
- int post_cm_num_comps)
-{
- return gx_downscaler_init_trapped_cm_ets(ds, dev, src_bpc, dst_bpc,
- num_comps, factor, mfs,
- adjust_width_proc, adjust_width,
- trap_w, trap_h, comp_order,
- apply_cm, apply_cm_arg, post_cm_num_comps,
- 0);
+ return gx_downscaler_init_cm(ds, dev, src_bpc, dst_bpc, num_comps,
+ params, adjust_width_proc, adjust_width,
+ NULL, NULL, 0);
}
static gx_downscaler_ht_t bogus_ets_halftone;
-int gx_downscaler_init_trapped_cm_ets(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- int trap_w,
- int trap_h,
- const int *comp_order,
- gx_downscale_cm_fn *apply_cm,
- void *apply_cm_arg,
- int post_cm_num_comps,
- int ets)
-{
- return gx_downscaler_init_trapped_cm_halftone(ds,
- dev,
- src_bpc,
- dst_bpc,
- num_comps,
- factor,
- mfs,
- adjust_width_proc,
- adjust_width,
- trap_w,
- trap_h,
- comp_order,
- apply_cm,
- apply_cm_arg,
- post_cm_num_comps,
- ets ? &bogus_ets_halftone : NULL);
+int gx_downscaler_init_cm(gx_downscaler_t *ds,
+ gx_device *dev,
+ int src_bpc,
+ int dst_bpc,
+ int num_comps,
+ const gx_downscaler_params *params,
+ int (*adjust_width_proc)(int, int),
+ int adjust_width,
+ gx_downscale_cm_fn *apply_cm,
+ void *apply_cm_arg,
+ int post_cm_num_comps)
+{
+ return gx_downscaler_init_cm_halftone(ds, dev, src_bpc, dst_bpc,
+ num_comps, params,
+ adjust_width_proc, adjust_width,
+ apply_cm, apply_cm_arg,
+ post_cm_num_comps,
+ params->ets ? &bogus_ets_halftone : NULL);
}
-
static gx_downscale_core *
select_8_to_8_core(int nc, int factor)
{
@@ -2332,23 +2419,25 @@ select_8_to_8_core(int nc, int factor)
return NULL;
}
+#ifdef WITH_CAL
+static unsigned char bg0[GX_DEVICE_COLOR_MAX_COMPONENTS] = {0};
+static unsigned char bg1[GX_DEVICE_COLOR_MAX_COMPONENTS] = {
+ 0xFF, 0xFF, 0xFF, 0xFF };
+#endif
+
int
-gx_downscaler_init_trapped_cm_halftone(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- int trap_w,
- int trap_h,
- const int *comp_order,
- gx_downscale_cm_fn *apply_cm,
- void *apply_cm_arg,
- int post_cm_num_comps,
- gx_downscaler_ht_t *ht)
+gx_downscaler_init_cm_halftone(gx_downscaler_t *ds,
+ gx_device *dev,
+ int src_bpc,
+ int dst_bpc,
+ int num_comps,
+ const gx_downscaler_params *params,
+ int (*adjust_width_proc)(int, int),
+ int adjust_width,
+ gx_downscale_cm_fn *apply_cm,
+ void *apply_cm_arg,
+ int post_cm_num_comps,
+ gx_downscaler_ht_t *ht)
{
int size;
int post_size;
@@ -2356,16 +2445,18 @@ gx_downscaler_init_trapped_cm_halftone(gx_downscaler_t *ds,
int width;
int awidth;
int pad_white;
- int code;
+ int code = 0;
gx_downscale_core *core;
int upfactor;
int downfactor;
int nc;
+ int factor = params->downscale_factor;
+ int mfs = params->min_feature_size;
size = gdev_mem_bytes_per_scan_line((gx_device *)dev);
post_size = bitmap_raster(dev->width * src_bpc * post_cm_num_comps);
- decode_factor(factor, &upfactor, &downfactor);
+ gx_downscaler_decode_factor(factor, &upfactor, &downfactor);
/* width = scaled width */
width = (dev->width * upfactor)/downfactor;
@@ -2393,20 +2484,140 @@ gx_downscaler_init_trapped_cm_halftone(gx_downscaler_t *ds,
ds->ht = ht;
ds->dst_bpc = dst_bpc;
ds->num_comps = num_comps;
+ ds->do_skew_detection = params->do_skew_detection;
+
+ /* The primary line source comes always from getbits. */
+ {
+ liner_getbits_chunky *gb_liner;
- code = check_trapping(dev->memory, trap_w, trap_h, num_comps, comp_order);
+ code = alloc_liner(dev->memory,
+ liner_getbits_chunky,
+ getbits_chunky_line,
+ getbits_chunky_drop,
+ &gb_liner);
+ if (code < 0)
+ goto cleanup;
+ gb_liner->dev = dev;
+ ds->liner = &gb_liner->base;
+ }
+
+#ifdef WITH_CAL
+ if (ds->do_skew_detection) {
+ /* Do a skew detection pass */
+ int j;
+ int w = ds->dev->width;
+ int h = ds->dev->height;
+ int n = ds->dev->color_info.num_components;
+ cal_skew *skew;
+ byte *buffer = gs_alloc_bytes(ds->dev->memory, w*n, "skew_row");
+ if (buffer == NULL)
+ return_error(gs_error_VMerror);
+ skew = cal_skew_init(ds->dev->memory->gs_lib_ctx->core->cal_ctx,
+ ds->dev->memory,
+ w, h);
+ if (skew == NULL)
+ code = gs_error_VMerror;
+ for (j = 0; code >= 0 && j < h; j++) {
+ code = ds->liner->get_line(ds->liner, buffer, j);
+ /* Craply turn that into "greyscale" */
+ if (n > 1) {
+ int i, k;
+ const byte *src = buffer;
+ byte *dst = buffer;
+ for (i = w; i > 0; i--) {
+ int v = 0;
+ for (k = n; k > 0; k--)
+ v += *src++;
+ *dst++ = (v+(n>>1))/n;
+ }
+ }
+ code = cal_skew_process(skew, ds->dev->memory, buffer);
+ }
+ if (code >= 0)
+ ds->skew_angle = cal_skew_detect(skew, ds->dev->memory);
+ gs_free_object(ds->dev->memory, buffer, "skew_row");
+ cal_skew_fin(skew, ds->dev->memory);
+ if (code < 0)
+ goto cleanup;
+
+ if (ds->skew_angle != 0) {
+ liner_skew *sk_liner;
+ unsigned int dw, dh;
+
+ code = alloc_liner(dev->memory,
+ liner_skew,
+ skew_line,
+ skew_drop,
+ &sk_liner);
+ if (code < 0)
+ goto cleanup;
+ sk_liner->chain = ds->liner;
+ sk_liner->get_row = 0;
+ sk_liner->got_row = 0;
+ sk_liner->height = dev->height;
+ ds->liner = &sk_liner->base;
+ sk_liner->deskewer = cal_deskewer_init(
+ ds->dev->memory->gs_lib_ctx->core->cal_ctx,
+ ds->dev->memory,
+ ds->dev->width, ds->dev->height,
+ &dw,
+ &dh,
+ ds->skew_angle,
+ 1, /* Keep the page size constant */
+ 1.0, 1.0, 1.0, 1.0,
+ (ds->num_comps <= 3 ? bg1 : bg0),
+ ds->num_comps);
+ if (sk_liner->deskewer == NULL) {
+ emprintf(dev->memory, "Deskewer initialisation failed");
+ code = gs_note_error(gs_error_VMerror);
+ goto cleanup;
+ }
+ sk_liner->bander = cal_deskewer_band_begin(sk_liner->deskewer,
+ ds->dev->memory,
+ 0, 0);
+ if (sk_liner->bander == NULL) {
+ emprintf(dev->memory, "Deskewer initialisation(2) failed");
+ code = gs_note_error(gs_error_VMerror);
+ goto cleanup;
+ }
+ }
+ }
+#endif
+
+ code = check_trapping(dev->memory, params->trap_w, params->trap_h,
+ num_comps, params->trap_order);
if (code < 0)
return code;
- if (trap_w > 0 || trap_h > 0) {
- ds->claptrap = ClapTrap_Init(dev->memory, width, dev->height, num_comps, comp_order, trap_w, trap_h, get_line_for_trap, ds);
- if (ds->claptrap == NULL) {
+ if (params->trap_w > 0 || params->trap_h > 0) {
+ liner_claptrap *ct_liner;
+
+ code = alloc_liner(dev->memory,
+ liner_claptrap,
+ claptrap_line,
+ claptrap_drop,
+ &ct_liner);
+ if (code < 0)
+ goto cleanup;
+ ct_liner->chain = ds->liner;
+ ct_liner->y = 0;
+ ct_liner->height = dev->height;
+ ds->liner = &ct_liner->base;
+ ct_liner->claptrap = ClapTrap_Init(dev->memory,
+ width,
+ dev->height,
+ num_comps,
+ params->trap_order,
+ params->trap_w,
+ params->trap_h,
+ get_line_for_trap,
+ ct_liner);
+ if (ct_liner->claptrap == NULL) {
emprintf(dev->memory, "Trapping initialisation failed");
code = gs_note_error(gs_error_VMerror);
goto cleanup;
}
- } else
- ds->claptrap = NULL;
+ }
/* Choose an appropriate core. Try to honour our early_cm
* choice, and fallback to late cm if we can't. */
@@ -2488,7 +2699,7 @@ gx_downscaler_init_trapped_cm_halftone(gx_downscaler_t *ds,
if (apply_cm) {
ds->post_cm[0] = gs_alloc_bytes(dev->memory,
- post_size * downfactor,
+ (size_t)post_size * downfactor,
"gx_downscaler(data)");
if (ds->post_cm[0] == NULL) {
code = gs_note_error(gs_error_VMerror);
@@ -2498,8 +2709,8 @@ gx_downscaler_init_trapped_cm_halftone(gx_downscaler_t *ds,
if (core != NULL || apply_cm) {
ds->pre_cm[0] = gs_alloc_bytes(dev->memory,
- span * downfactor,
- "gx_downscaler(data)");
+ (size_t)span * downfactor,
+ "gx_downscaler(data)");
if (ds->pre_cm[0] == NULL) {
code = gs_note_error(gs_error_VMerror);
goto cleanup;
@@ -2508,23 +2719,23 @@ gx_downscaler_init_trapped_cm_halftone(gx_downscaler_t *ds,
if (core != NULL) {
if (mfs > 1) {
ds->mfs_data = (byte *)gs_alloc_bytes(dev->memory,
- (awidth+1)*nc,
+ (size_t)(awidth+1)*nc,
"gx_downscaler(mfs)");
if (ds->mfs_data == NULL) {
code = gs_note_error(gs_error_VMerror);
goto cleanup;
}
- memset(ds->mfs_data, 0, (awidth+1)*nc);
+ memset(ds->mfs_data, 0, (size_t)nc*(awidth+1));
}
if (dst_bpc == 1) {
ds->errors = (int *)gs_alloc_bytes(dev->memory,
- nc*(awidth+3)*sizeof(int),
+ (size_t)nc*(awidth+3)*sizeof(int),
"gx_downscaler(errors)");
if (ds->errors == NULL) {
code = gs_note_error(gs_error_VMerror);
goto cleanup;
}
- memset(ds->errors, 0, nc * (awidth+3) * sizeof(int));
+ memset(ds->errors, 0, (size_t)nc * (awidth+3) * sizeof(int));
}
}
@@ -2538,11 +2749,17 @@ gx_downscaler_init_trapped_cm_halftone(gx_downscaler_t *ds,
void gx_downscaler_fin(gx_downscaler_t *ds)
{
int plane;
+
+ if (ds->dev == NULL)
+ return;
+
for (plane=0; plane < GS_CLIENT_COLOR_MAX_COMPONENTS; plane++) {
gs_free_object(ds->dev->memory, ds->pre_cm[plane],
"gx_downscaler(planar_data)");
gs_free_object(ds->dev->memory, ds->post_cm[plane],
"gx_downscaler(planar_data)");
+ ds->pre_cm[plane] = NULL;
+ ds->post_cm[plane] = NULL;
}
ds->num_planes = 0;
@@ -2556,11 +2773,13 @@ void gx_downscaler_fin(gx_downscaler_t *ds)
ds->htrow = NULL;
ds->htrow_alloc = NULL;
- if (ds->claptrap)
- ClapTrap_Fin(ds->dev->memory, ds->claptrap);
+ if (ds->liner)
+ ds->liner->drop(ds->liner, ds->dev->memory);
+ ds->liner = NULL;
if (ds->ets_config)
ets_destroy(ds->dev->memory, ds->ets_config);
+ ds->ets_config = NULL;
}
/* Chunky case */
@@ -2573,14 +2792,13 @@ int gx_downscaler_getbits(gx_downscaler_t *ds,
byte *data_ptr;
int upfactor, downfactor;
- decode_factor(ds->factor, &upfactor, &downfactor);
+ gx_downscaler_decode_factor(ds->factor, &upfactor, &downfactor);
/* Check for the simple case */
if (ds->down_core == NULL) {
- if (ds->claptrap)
- code = ClapTrap_GetLine(ds->claptrap, ds->apply_cm ? ds->pre_cm[0] : out_data);
- else
- code = (*dev_proc(ds->dev, get_bits))(ds->dev, row, ds->apply_cm ? ds->pre_cm[0] : out_data, NULL);
+ code = ds->liner->get_line(ds->liner,
+ ds->apply_cm ? ds->pre_cm[0] : out_data,
+ row);
if (code < 0)
return code;
if (ds->apply_cm) {
@@ -2594,23 +2812,13 @@ int gx_downscaler_getbits(gx_downscaler_t *ds,
y = row * downfactor;
y_end = y + downfactor;
data_ptr = ds->pre_cm[0];
- if (ds->claptrap) {
- do {
- code = ClapTrap_GetLine(ds->claptrap, data_ptr);
- if (code < 0)
- return code;
- data_ptr += ds->span;
- y++;
- } while (y < y_end);
- } else {
- do {
- code = (*dev_proc(ds->dev, get_bits))(ds->dev, y, data_ptr, NULL);
- if (code < 0)
- return code;
- data_ptr += ds->span;
- y++;
- } while (y < y_end);
- }
+ do {
+ code = ds->liner->get_line(ds->liner, data_ptr, y);
+ if (code < 0)
+ return code;
+ data_ptr += ds->span;
+ y++;
+ } while (y < y_end);
if (ds->apply_cm) {
if (ds->early_cm) {
@@ -2636,7 +2844,7 @@ int gx_downscaler_get_bits_rectangle(gx_downscaler_t *ds,
gs_get_bits_params_t *params,
int row)
{
- int code;
+ int code = 0;
gs_int_rect rect;
int plane;
int factor = ds->factor;
@@ -2644,9 +2852,13 @@ int gx_downscaler_get_bits_rectangle(gx_downscaler_t *ds,
int upfactor, downfactor;
int subrow;
int copy = (ds->dev->width * ds->src_bpc + 7)>>3;
- int i, j;
+ int i, j, n;
- decode_factor(factor, &upfactor, &downfactor);
+ n = ds->dev->width;
+ if (ds->dev->color_info.depth > ds->dev->color_info.num_components*8+8)
+ n *= 2;
+
+ gx_downscaler_decode_factor(factor, &upfactor, &downfactor);
subrow = row % upfactor;
if (subrow) {
@@ -2662,7 +2874,7 @@ int gx_downscaler_get_bits_rectangle(gx_downscaler_t *ds,
rect.q.y = ((row/upfactor) + 1) * downfactor;
/* Check for the simple case */
- if (ds->down_core == NULL && ds->claptrap == NULL) {
+ if (ds->down_core == NULL) {
gs_get_bits_params_t saved;
if (ds->apply_cm) {
/* Always do the request giving our own workspace,
@@ -2672,7 +2884,7 @@ int gx_downscaler_get_bits_rectangle(gx_downscaler_t *ds,
params->data[i] = ds->pre_cm[i];
params->options |= GB_RETURN_POINTER;
}
- code = (*dev_proc(ds->dev, get_bits_rectangle))(ds->dev, &rect, params, NULL);
+ code = ds->liner->get_line(ds->liner, params, row);
if (code < 0)
return code;
if (ds->apply_cm) {
@@ -2697,46 +2909,37 @@ int gx_downscaler_get_bits_rectangle(gx_downscaler_t *ds,
for (i = 0; i < ds->num_planes; i++)
params2.data[i] = ds->pre_cm[i];
- /* Get downfactor rows worth of data */
- if (ds->claptrap)
- code = gs_error_rangecheck; /* Always work a line at a time with claptrap */
- else
- code = (*dev_proc(ds->dev, get_bits_rectangle))(ds->dev, &rect, &params2, NULL);
- if (code == gs_error_rangecheck) {
- /* At the bottom of a band, the get_bits_rectangle call can fail to be
- * able to return us enough lines of data at the same time. We therefore
- * drop back to reading them one at a time, and copying them into our
- * own buffer. */
- for (i = 0; i < downfactor; i++) {
- rect.q.y = rect.p.y+1;
- if (rect.q.y > ds->dev->height)
- break;
- memcpy(&params2, &ds->params, sizeof(params2));
- for (j = 0; j < ds->num_planes; j++)
- params2.data[j] = ds->pre_cm[j] + i * ds->span;
- if (ds->claptrap) {
- ds->claptrap_params = &params2;
- code = ClapTrap_GetLinePlanar(ds->claptrap, &params2.data[0]);
- } else {
- /* We always want a copy */
- params2.options &= ~GB_RETURN_POINTER;
- params2.options |= GB_RETURN_COPY;
- code = (*dev_proc(ds->dev, get_bits_rectangle))(ds->dev, &rect, &params2, NULL);
- }
- if (code < 0)
- break;
- rect.p.y++;
+ /* Get downfactor rows worth of data - we always work a line at a
+ * time now. */
+ for (i = 0; i < downfactor; i++) {
+ rect.q.y = rect.p.y+1;
+ if (rect.q.y > ds->dev->height)
+ break;
+ memcpy(&params2, &ds->params, sizeof(params2));
+ for (j = 0; j < ds->num_planes; j++)
+ params2.data[j] = ds->pre_cm[j] + i * ds->span;
+ code = ds->liner->get_line(ds->liner, &params2, rect.p.y);
+ if (code < 0)
+ break;
+ for (j = 0; j < ds->num_planes; j++) {
+ byte *tgt = ds->pre_cm[j] + i * ds->span;
+ if (params2.data[j] != tgt)
+ memcpy(tgt, params2.data[j], n);
}
- if (i == 0)
- return code;
- /* If we still haven't got enough, we've hit the end of the page; just
- * duplicate the last line we did get. */
- for (;i < downfactor; i++)
- for (j = 0; j < ds->num_planes; j++)
- memcpy(ds->pre_cm[j] + i*ds->span, ds->pre_cm[j] + (i-1)*ds->span, copy);
+ rect.p.y++;
}
+ if (i == 0)
+ return code;
if (code < 0)
return code;
+ /* If we still haven't got enough, we've hit the end of the page; just
+ * duplicate the last line we did get. */
+ for (; i < downfactor; i++)
+ for (j = 0; j < ds->num_planes; j++)
+ memcpy(ds->pre_cm[j] + i*ds->span, ds->pre_cm[j] + (i-1)*ds->span, copy);
+
+ for (j = 0; j < ds->num_planes; j++)
+ params2.data[j] = ds->pre_cm[j];
if (ds->early_cm && ds->apply_cm) {
code = ds->apply_cm(ds->apply_cm_arg, ds->params.data, ds->post_cm, ds->dev->width, downfactor, params->raster);
@@ -2878,7 +3081,7 @@ static int downscaler_process_fn(void *arg_, gx_device *dev, gx_device *bdev, co
}
/* Pass on to further processing */
- if (code >= 0 && arg->orig_options && arg->orig_options->process_fn) {
+ if (arg->orig_options && arg->orig_options->process_fn) {
out_rect.p.y = rect->p.y*arg->upfactor/arg->downfactor;
out_rect.q.y += out_rect.p.y;
code = arg->orig_options->process_fn(arg->orig_options->arg, dev,
@@ -2925,7 +3128,7 @@ int gx_downscaler_process_page(gx_device *dev,
gx_downscale_core *core;
arg.orig_options = options;
- decode_factor(factor, &arg.upfactor, &arg.downfactor);
+ gx_downscaler_decode_factor(factor, &arg.upfactor, &arg.downfactor);
arg.ds.dev = dev;
arg.ds.width = (dev->width * arg.upfactor + arg.downfactor-1)/arg.downfactor;
arg.ds.awidth = arg.ds.width;
@@ -2981,7 +3184,7 @@ int gx_downscaler_read_params(gs_param_list *plist,
int features)
{
int code;
- int downscale, mfs, ets;
+ int downscale, mfs, ets, deskew;
int trap_w, trap_h;
const char *param_name;
gs_param_int_array trap_order;
@@ -3004,6 +3207,22 @@ int gx_downscaler_read_params(gs_param_list *plist,
return code;
}
+ switch (code = param_read_int(plist,
+ (param_name = "Deskew"),
+ &deskew)) {
+ case 1:
+ break;
+ case 0:
+ if (deskew >= 0) {
+ params->do_skew_detection = deskew;
+ break;
+ }
+ code = gs_error_rangecheck;
+ default:
+ param_signal_error(plist, param_name, code);
+ return code;
+ }
+
if (features & GX_DOWNSCALER_PARAMS_MFS)
{
switch (code = param_read_int(plist, (param_name = "MinFeatureSize"), &mfs)) {
@@ -3136,6 +3355,8 @@ int gx_downscaler_write_params(gs_param_list *plist,
if ((code = param_write_int(plist, "DownScaleFactor", &params->downscale_factor)) < 0)
ecode = code;
+ if ((code = param_write_int(plist, "Deskew", &params->do_skew_detection)) < 0)
+ ecode = code;
if (features & GX_DOWNSCALER_PARAMS_MFS)
{
if ((code = param_write_int(plist, "MinFeatureSize", &params->min_feature_size)) < 0)
@@ -3167,9 +3388,9 @@ void *ets_malloc(void *malloc_arg, int size)
void *ets_calloc(void *malloc_arg, int count, int size)
{
- void *p = ets_malloc(malloc_arg, count * size);
+ void *p = ets_malloc(malloc_arg, (size_t)count * size);
if (p)
- memset(p, 0, count * size);
+ memset(p, 0, (size_t)count * size);
return p;
}
diff --git a/base/gxdownscale.h b/base/gxdownscale.h
index d237a648..c9db668e 100644
--- a/base/gxdownscale.h
+++ b/base/gxdownscale.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -69,6 +69,8 @@ typedef void (gx_downscale_core)(gx_downscaler_t *ds,
int plane,
int span);
+typedef struct gx_downscale_liner_s gx_downscale_liner;
+
struct gx_downscaler_s {
gx_device *dev; /* Device */
int width; /* Width (pixels) */
@@ -87,9 +89,7 @@ struct gx_downscaler_s {
int num_comps; /* Number of components as rendered */
int num_planes; /* Number of planes if planar, 0 otherwise */
- ClapTrap *claptrap; /* ClapTrap pointer (if trapping) */
- int claptrap_y; /* y pointer (if trapping) */
- gs_get_bits_params_t *claptrap_params; /* params (if trapping) */
+ gx_downscale_liner *liner; /* Source for line data */
int early_cm;
gx_downscale_cm_fn *apply_cm;
@@ -107,8 +107,26 @@ struct gx_downscaler_s {
byte *htrow_alloc;
byte *inbuf;
byte *inbuf_alloc;
+
+ int do_skew_detection;
+ int skew_detected;
+ double skew_angle;
};
+/* The following structure is used to hold the configuration
+ * parameters for the downscaler.
+ */
+typedef struct gx_downscaler_params_s
+{
+ int downscale_factor;
+ int min_feature_size;
+ int trap_w;
+ int trap_h;
+ int trap_order[GS_CLIENT_COLOR_MAX_COMPONENTS];
+ int ets;
+ int do_skew_detection;
+} gx_downscaler_params;
+
/* To use the downscaler:
*
* + define a gx_downscaler_t on the stack.
@@ -118,7 +136,7 @@ struct gx_downscaler_s {
* gx_downscaler_get_bits_rectangle (for planar mode)
* + finalise with gx_downscaler_fin
*/
-
+
/* For chunky mode, currently only:
* src_bpc == 8 && dst_bpc == 1 && num_comps == 1
* src_bpc == 8 && dst_bpc == 8 && num_comps == 1
@@ -131,179 +149,59 @@ struct gx_downscaler_s {
* src_bpp == 16 && dst_bpp == 16
* are supported.
*/
-int gx_downscaler_init(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width);
-
-int gx_downscaler_init_ets(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- int ets);
-
-int gx_downscaler_init_trapped(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- int trap_w,
- int trap_h,
- const int *comp_order);
-
-int gx_downscaler_init_trapped_ets(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- int trap_w,
- int trap_h,
- const int *comp_order,
- int ets);
-
-int gx_downscaler_init_cm(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- gx_downscale_cm_fn *apply_cm,
- void *apply_cm_arg,
- int post_cm_num_comps);
-
-int gx_downscaler_init_cm_ets(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- gx_downscale_cm_fn *apply_cm,
- void *apply_cm_arg,
- int post_cm_num_comps,
- int ets);
-
-int gx_downscaler_init_trapped_cm(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- int trap_w,
- int trap_h,
- const int *comp_order,
- gx_downscale_cm_fn *apply_cm,
- void *apply_cm_arg,
- int post_cm_num_comps);
-
-int gx_downscaler_init_trapped_cm_ets(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- int trap_w,
- int trap_h,
- const int *comp_order,
- gx_downscale_cm_fn *apply_cm,
- void *apply_cm_arg,
- int post_cm_num_comps,
- int ets);
-
-int gx_downscaler_init_trapped_cm_halftone(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- int trap_w,
- int trap_h,
- const int *comp_order,
- gx_downscale_cm_fn *apply_cm,
- void *apply_cm_arg,
- int post_cm_num_comps,
- gx_downscaler_ht_t *ht);
+int gx_downscaler_init(gx_downscaler_t *ds,
+ gx_device *dev,
+ int src_bpc,
+ int dst_bpc,
+ int num_comps,
+ const gx_downscaler_params *params,
+ int (*adjust_width_proc)(int, int),
+ int adjust_width);
+
+int gx_downscaler_init_cm(gx_downscaler_t *ds,
+ gx_device *dev,
+ int src_bpc,
+ int dst_bpc,
+ int num_comps,
+ const gx_downscaler_params *params,
+ int (*adjust_width_proc)(int, int),
+ int adjust_width,
+ gx_downscale_cm_fn *apply_cm,
+ void *apply_cm_arg,
+ int post_cm_num_comps);
+
+int gx_downscaler_init_cm_halftone(gx_downscaler_t *ds,
+ gx_device *dev,
+ int src_bpc,
+ int dst_bpc,
+ int num_comps,
+ const gx_downscaler_params *params,
+ int (*adjust_width_proc)(int, int),
+ int adjust_width,
+ gx_downscale_cm_fn *apply_cm,
+ void *apply_cm_arg,
+ int post_cm_num_comps,
+ gx_downscaler_ht_t *ht);
int gx_downscaler_init_planar(gx_downscaler_t *ds,
gx_device *dev,
- gs_get_bits_params_t *params,
- int num_comps,
- int factor,
- int mfs,
int src_bpc,
- int dst_bpc);
-
-int gx_downscaler_init_planar_trapped(gx_downscaler_t *ds,
- gx_device *dev,
- gs_get_bits_params_t *params,
- int num_comps,
- int factor,
- int mfs,
- int src_bpc,
- int dst_bpc,
- int trap_w,
- int trap_h,
- const int *comp_order);
+ int dst_bpc,
+ int num_comps,
+ const gx_downscaler_params *params,
+ const gs_get_bits_params_t *gb_params);
int gx_downscaler_init_planar_cm(gx_downscaler_t *ds,
gx_device *dev,
- gs_get_bits_params_t *params,
- int num_comps,
- int factor,
- int mfs,
int src_bpc,
int dst_bpc,
+ int num_comps,
+ const gx_downscaler_params *params,
+ const gs_get_bits_params_t *gb_params,
gx_downscale_cm_fn *apply_cm,
void *apply_cm_arg,
int post_cm_num_comps);
-int gx_downscaler_init_planar_trapped_cm(gx_downscaler_t *ds,
- gx_device *dev,
- gs_get_bits_params_t *params,
- int num_comps,
- int factor,
- int mfs,
- int src_bpc,
- int dst_bpc,
- int trap_w,
- int trap_h,
- const int *comp_order,
- gx_downscale_cm_fn *apply_cm,
- void *apply_cm_arg,
- int post_cm_num_comps);
-
int gx_downscaler_getbits(gx_downscaler_t *ds,
byte *out_data,
int row);
@@ -316,6 +214,8 @@ int gx_downscaler_get_bits_rectangle(gx_downscaler_t *ds,
* fin several times) */
void gx_downscaler_fin(gx_downscaler_t *ds);
+void gx_downscaler_decode_factor(int factor, int *up, int *down);
+
int
gx_downscaler_scale(int width, int factor);
@@ -331,21 +231,8 @@ int gx_downscaler_process_page(gx_device *dev,
gx_process_page_options_t *options,
int factor);
-/* The following structure is used to hold the configuration
- * parameters for the downscaler.
- */
-typedef struct gx_downscaler_params_s
-{
- int downscale_factor;
- int min_feature_size;
- int trap_w;
- int trap_h;
- int trap_order[GS_CLIENT_COLOR_MAX_COMPONENTS];
- int ets;
-} gx_downscaler_params;
-
#define GX_DOWNSCALER_PARAMS_DEFAULTS \
-{ 1, 0, 0, 0, { 3, 1, 0, 2 } }
+{ 1, 0, 0, 0, { 3, 1, 0, 2 }, 0, 0 }
enum {
GX_DOWNSCALER_PARAMS_MFS = 1,
diff --git a/base/gxdtfill.h b/base/gxdtfill.h
index 5c1d3da6..7ee73003 100644
--- a/base/gxdtfill.h
+++ b/base/gxdtfill.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfapi.c b/base/gxfapi.c
index 8c072599..e6bc445d 100644
--- a/base/gxfapi.c
+++ b/base/gxfapi.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -809,7 +809,7 @@ fapi_image_uncached_glyph(gs_font *pfont, gs_gstate *pgs, gs_show_enum *penum,
* compression ratios) we therefore set such bytes to zero. It would
* be nicer if this was fixed in future.
*/
- r = gs_alloc_bytes(penum->memory, dstr * rast->height,
+ r = gs_alloc_bytes(penum->memory, (size_t)dstr * rast->height,
"fapi_finish_render_aux");
if (!r) {
return_error(gs_error_VMerror);
@@ -1687,12 +1687,12 @@ gs_fapi_do_char(gs_font *pfont, gs_gstate *pgs, gs_text_enum_t *penum, char *fon
if (bCID) {
code =
- I->ff.fapi_set_cache(penum, pbfont, &enc_char_name_string, index,
+ I->ff.fapi_set_cache(penum, pbfont, &enc_char_name_string, index + GS_MIN_CID_GLYPH,
sbw + 2, &char_bbox, sbwp, &imagenow);
}
else {
code =
- I->ff.fapi_set_cache(penum, pbfont, &enc_char_name_string, -1,
+ I->ff.fapi_set_cache(penum, pbfont, &enc_char_name_string, index,
sbw + 2, &char_bbox, sbwp, &imagenow);
}
diff --git a/base/gxfapi.h b/base/gxfapi.h
index 687cd3e6..a1a747b6 100644
--- a/base/gxfapi.h
+++ b/base/gxfapi.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -179,42 +179,44 @@ struct gs_fapi_font_s
const void *char_data;
int char_data_len;
float embolden;
- unsigned short (*get_word) (gs_fapi_font *ff,
- gs_fapi_font_feature var_id, int index);
- unsigned long (*get_long) (gs_fapi_font *ff, gs_fapi_font_feature var_id,
- int index);
- float (*get_float) (gs_fapi_font *ff, gs_fapi_font_feature var_id,
- int index);
- int (*get_name) (gs_fapi_font *ff, gs_fapi_font_feature var_id,
- int index, char *buffer, int len);
- int (*get_proc) (gs_fapi_font *ff, gs_fapi_font_feature var_id,
- int index, char *Buffer);
- unsigned short (*get_gsubr) (gs_fapi_font *ff, int index, byte *buf,
- ushort buf_length);
- unsigned short (*get_subr) (gs_fapi_font *ff, int index, byte *buf,
- ushort buf_length);
- unsigned short (*get_raw_subr) (gs_fapi_font *ff, int index, byte *buf,
- ushort buf_length);
- int (*get_glyph) (gs_fapi_font *ff, int char_code, byte *buf,
- ushort buf_length);
- unsigned short (*serialize_tt_font) (gs_fapi_font *ff, void *buf,
- int buf_size);
- unsigned short (*get_charstring) (gs_fapi_font *ff, int index,
- byte *buf, ushort buf_length);
- unsigned short (*get_charstring_name) (gs_fapi_font *ff, int index,
- byte *buf, ushort buf_length);
- int (*get_glyphdirectory_data) (gs_fapi_font *ff, int char_code,
- const byte **ptr);
+
+ int (*get_word) (gs_fapi_font *ff, gs_fapi_font_feature var_id, int index, unsigned short *ret);
+
+ int (*get_long) (gs_fapi_font *ff, gs_fapi_font_feature var_id, int index, unsigned long *ret);
+
+ int (*get_float) (gs_fapi_font *ff, gs_fapi_font_feature var_id, int index, float *ret);
+
+ int (*get_name) (gs_fapi_font *ff, gs_fapi_font_feature var_id, int index, char *buffer, int len);
+
+ int (*get_proc) (gs_fapi_font *ff, gs_fapi_font_feature var_id, int index, char *Buffer);
+
+ int (*get_gsubr) (gs_fapi_font *ff, int index, byte *buf, int buf_length);
+
+ int (*get_subr) (gs_fapi_font *ff, int index, byte *buf, int buf_length);
+
+ int (*get_raw_subr) (gs_fapi_font *ff, int index, byte *buf, int buf_length);
+
+ int (*get_glyph) (gs_fapi_font *ff, gs_glyph char_code, byte *buf, int buf_length);
+
+ int (*serialize_tt_font) (gs_fapi_font *ff, void *buf, int buf_size);
+
+ int (*get_charstring) (gs_fapi_font *ff, int index, byte *buf, ushort buf_length);
+
+ int (*get_charstring_name) (gs_fapi_font *ff, int index, byte *buf, ushort buf_length);
+
+ int (*get_glyphdirectory_data) (gs_fapi_font *ff, int char_code, const byte **ptr);
+
int (*get_glyphname_or_cid) (gs_text_enum_t *penum, gs_font_base *pbfont,
gs_string *charstring, gs_string *name,
- int ccode, gs_string *enc_char_name,
+ gs_glyph ccode, gs_string *enc_char_name,
char *font_file_path, gs_fapi_char_ref *cr,
bool bCID);
- int (*fapi_get_metrics) (gs_fapi_font *ff, gs_string *char_name,
- int cid, double *m, bool vertical);
+
+ int (*fapi_get_metrics) (gs_fapi_font *ff, gs_string *char_name, gs_glyph cid, double *m, bool vertical);
+
int (*fapi_set_cache) (gs_text_enum_t *penum,
const gs_font_base *pbfont,
- const gs_string *char_name, int cid,
+ const gs_string *char_name, gs_glyph cid,
const double pwidth[2], const gs_rect *pbbox,
const double Metrics2_sbw_default[4],
bool *imagenow);
diff --git a/base/gxfapiu.c b/base/gxfapiu.c
index a15ce006..125b47f5 100644
--- a/base/gxfapiu.c
+++ b/base/gxfapiu.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfapiu.h b/base/gxfapiu.h
index 10ea80c0..16117c29 100644
--- a/base/gxfapiu.h
+++ b/base/gxfapiu.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfarith.h b/base/gxfarith.h
index c1d312d2..7a3aefc3 100644
--- a/base/gxfarith.h
+++ b/base/gxfarith.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfcache.h b/base/gxfcache.h
index 9409ed00..b265f2f3 100644
--- a/base/gxfcache.h
+++ b/base/gxfcache.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfcid.h b/base/gxfcid.h
index ee8b61ec..5b42e3dc 100644
--- a/base/gxfcid.h
+++ b/base/gxfcid.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfcmap.h b/base/gxfcmap.h
index 880d59f5..29c2b7a7 100644
--- a/base/gxfcmap.h
+++ b/base/gxfcmap.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfcmap1.h b/base/gxfcmap1.h
index fe528ab7..496a97c3 100644
--- a/base/gxfcmap1.h
+++ b/base/gxfcmap1.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfill.c b/base/gxfill.c
index 68bcdafc..bde98416 100644
--- a/base/gxfill.c
+++ b/base/gxfill.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -155,15 +155,15 @@ gs_private_st_simple(st_active_line, active_line, "active_line");
static void
print_active_line(const gs_memory_t *mem, const char *label, const active_line * alp)
{
- dmlprintf5(mem, "[f]%s 0x%lx(%d): x_current=%f x_next=%f\n",
- label, (ulong) alp, alp->direction,
+ dmlprintf5(mem, "[f]%s "PRI_INTPTR"(%d): x_current=%f x_next=%f\n",
+ label, (intptr_t)alp, alp->direction,
fixed2float(alp->x_current), fixed2float(alp->x_next));
- dmlprintf5(mem, " start=(%f,%f) pt_end=0x%lx(%f,%f)\n",
+ dmlprintf5(mem, " start=(%f,%f) pt_end="PRI_INTPTR"(%f,%f)\n",
fixed2float(alp->start.x), fixed2float(alp->start.y),
- (ulong) alp->pseg,
+ (intptr_t)alp->pseg,
fixed2float(alp->end.x), fixed2float(alp->end.y));
- dmlprintf2(mem, " prev=0x%lx next=0x%lx\n",
- (ulong) alp->prev, (ulong) alp->next);
+ dmlprintf2(mem, " prev="PRI_INTPTR" next="PRI_INTPTR"\n",
+ (intptr_t)alp->prev, (intptr_t)alp->next);
}
static void
print_line_list(const gs_memory_t *mem, const active_line * flp)
@@ -173,8 +173,8 @@ print_line_list(const gs_memory_t *mem, const active_line * flp)
for (lp = flp; lp != 0; lp = lp->next) {
fixed xc = lp->x_current, xn = lp->x_next;
- dmlprintf3(mem, "[f]0x%lx(%d): x_current/next=%g",
- (ulong) lp, lp->direction,
+ dmlprintf3(mem, "[f]"PRI_INTPTR"(%d): x_current/next=%g",
+ (intptr_t)lp, lp->direction,
fixed2float(xc));
if (xn != xc)
dmprintf1(mem, "/%g", fixed2float(xn));
@@ -1337,7 +1337,7 @@ remove_al(const line_list *ll, active_line *alp)
alp->prev->next = nlp;
if (nlp)
nlp->prev = alp->prev;
- if_debug1m('F', ll->memory, "[F]drop 0x%lx\n", (ulong) alp);
+ if_debug1m('F', ll->memory, "[F]drop "PRI_INTPTR"\n", (intptr_t)alp);
}
/*
@@ -1616,8 +1616,8 @@ resort_x_line(active_line * alp)
if (next)
next->prev = prev;
while (x_order(prev, alp) > 0) {
- if_debug2('F', "[F]swap 0x%lx,0x%lx\n",
- (ulong) alp, (ulong) prev);
+ if_debug2('F', "[F]swap "PRI_INTPTR","PRI_INTPTR"\n",
+ (intptr_t)alp, (intptr_t)prev);
next = prev, prev = prev->prev;
}
alp->next = next;
@@ -2153,8 +2153,8 @@ range_alloc(coord_range_list_t *pcrl)
static void
range_delete(coord_range_list_t *pcrl, coord_range_t *pcr)
{
- if_debug3('Q', "[Qr]delete 0x%lx: [%d,%d)\n", (ulong)pcr, pcr->rmin,
- pcr->rmax);
+ if_debug3('Q', "[Qr]delete "PRI_INTPTR": [%d,%d)\n",
+ (intptr_t)pcr, pcr->rmin, pcr->rmax);
pcr->prev->next = pcr->next;
pcr->next->prev = pcr->prev;
pcr->next = pcrl->freed;
@@ -2274,13 +2274,13 @@ range_list_add(coord_range_list_t *pcrl, coord_value_t rmin, coord_value_t rmax)
* abut if the adjacent range is the special min or max range.
*/
if (rmin < pcr->rmin) {
- if_debug3('Q', "[Qr]update 0x%lx => [%d,%d)\n", (ulong)pcr, rmin,
- pcr->rmax);
+ if_debug3('Q', "[Qr]update "PRI_INTPTR" => [%d,%d)\n",
+ (intptr_t)pcr, rmin, pcr->rmax);
pcr->rmin = rmin;
}
if (rmax > pcr->rmax) {
- if_debug3('Q', "[Qr]update 0x%lx => [%d,%d)\n", (ulong)pcr, pcr->rmin,
- rmax);
+ if_debug3('Q', "[Qr]update "PRI_INTPTR" => [%d,%d)\n",
+ (intptr_t)pcr, pcr->rmin, rmax);
pcr->rmax = rmax;
}
pcrl->current = pcr->next;
@@ -2292,7 +2292,7 @@ range_list_add(coord_range_list_t *pcrl, coord_value_t rmin, coord_value_t rmax)
if (prev == 0)
return_error(gs_error_VMerror);
- if_debug3('Q', "[Qr]insert 0x%lx: [%d,%d)\n", (ulong)prev, rmin, rmax);
+ if_debug3('Q', "[Qr]insert "PRI_INTPTR": [%d,%d)\n", (intptr_t)prev, rmin, rmax);
prev->rmin = rmin, prev->rmax = rmax;
(prev->prev = pcr->prev)->next = prev;
prev->next = pcr;
diff --git a/base/gxfill.h b/base/gxfill.h
index 17fa0a88..4ca95cd3 100644
--- a/base/gxfill.h
+++ b/base/gxfill.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfillsl.h b/base/gxfillsl.h
index 0714c040..c479d01b 100644
--- a/base/gxfillsl.h
+++ b/base/gxfillsl.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -151,8 +151,8 @@ TEMPLATE_spot_into_scanlines (line_list *ll, fixed band_mask)
) {
int x0 = pcr->rmin, x1 = pcr->rmax;
- if_debug4m('Q', ll->memory, "[Qr]draw 0x%lx: [%d,%d),%d\n", (ulong)pcr,
- x0, x1, y0);
+ if_debug4m('Q', ll->memory, "[Qr]draw "PRI_INTPTR": [%d,%d),%d\n",
+ (intptr_t)pcr, x0, x1, y0);
code = LOOP_FILL_RECTANGLE_DIRECT(&fo, x0, y0, x1 - x0, 1);
if_debug3m('F', ll->memory, "[F]drawing [%d:%d),%d\n", x0, x1, y0);
if (code < 0)
diff --git a/base/gxfilltr.h b/base/gxfilltr.h
index 0b5dd33b..0ac779bf 100644
--- a/base/gxfilltr.h
+++ b/base/gxfilltr.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfillts.h b/base/gxfillts.h
index 3e40b0a0..e693415b 100644
--- a/base/gxfillts.h
+++ b/base/gxfillts.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfixed.h b/base/gxfixed.h
index e164cd04..2049df03 100644
--- a/base/gxfixed.h
+++ b/base/gxfixed.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfmap.h b/base/gxfmap.h
index d1588fbb..32d21955 100644
--- a/base/gxfmap.h
+++ b/base/gxfmap.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfont.h b/base/gxfont.h
index 53edcdeb..c277e0c1 100644
--- a/base/gxfont.h
+++ b/base/gxfont.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfont0.h b/base/gxfont0.h
index dd6f3d0f..bd72fbd1 100644
--- a/base/gxfont0.h
+++ b/base/gxfont0.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfont0c.h b/base/gxfont0c.h
index e16b2ed4..f436e6b4 100644
--- a/base/gxfont0c.h
+++ b/base/gxfont0c.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfont1.h b/base/gxfont1.h
index 8ba6f131..51a4ecf1 100644
--- a/base/gxfont1.h
+++ b/base/gxfont1.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfont42.h b/base/gxfont42.h
index a7cf09da..5cacf809 100644
--- a/base/gxfont42.h
+++ b/base/gxfont42.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -96,7 +96,7 @@ struct gs_type42_data_s {
* the definition and/or by changing the name of the data member, we add
* another member trueNumGlyphs to hold the value from maxp.
*/
- uint numGlyphs; /* from size of loca */
+ int numGlyphs; /* from size of loca */
uint trueNumGlyphs; /* from maxp */
uint maxPoints; /* from maxp (used by pdfwrite) */
uint maxContours; /* from maxp (used by pdfwrite) */
diff --git a/base/gxfrac.h b/base/gxfrac.h
index 620d9eb1..4af9cecc 100644
--- a/base/gxfrac.h
+++ b/base/gxfrac.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxftype.h b/base/gxftype.h
index 4a01b8f7..10d73275 100644
--- a/base/gxftype.h
+++ b/base/gxftype.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxfunc.h b/base/gxfunc.h
index 5e16a899..eea2e8d9 100644
--- a/base/gxfunc.h
+++ b/base/gxfunc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxgetbit.h b/base/gxgetbit.h
index b8228ee1..54b13d1a 100644
--- a/base/gxgetbit.h
+++ b/base/gxgetbit.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxgstate.h b/base/gxgstate.h
index e6dd92f7..2ab96a3f 100644
--- a/base/gxgstate.h
+++ b/base/gxgstate.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -240,9 +240,7 @@ struct gs_gstate_s {
gs_point subpath_start;
bool clamp_coordinates;
gs_logical_operation_t log_op;
- gx_color_value alpha;
gs_blend_mode_t blend_mode;
- gs_transparency_source_t opacity, shape;
gs_xstate_trans_flags_t trans_flags;
gs_id soft_mask_id;
bool text_knockout;
@@ -325,9 +323,9 @@ struct gs_gstate_s {
0, 0, { gx_line_params_initial }, 0,\
{ (float)(scale), 0.0, 0.0, (float)(-(scale)), 0.0, 0.0 },\
false, {0, 0}, {0, 0}, false, \
- lop_default, gx_max_color_value, BLEND_MODE_Compatible,\
-{ 1.0 }, { 1.0 }, {0, 0}, 0, 0/*false*/, 0, 0/*false*/, 0, 0/*false*/, 0, 0/*false*/, 1.0, \
- { fixed_half, fixed_half }, 0/*false*/, 1/*true*/, 0/*false*/, 1.0,\
+ lop_default, BLEND_MODE_Compatible,\
+ {0, 0}, 0, 1/*true*/, 0, 0/*false*/, 0, 0/*false*/, 0, 0/*false*/, 1.0, \
+ { fixed_half, fixed_half }, 0/*false*/, 1/*true*/, 0/*false*/, (float)0.02,\
1, 1/* bpt true */, 0, 0, 0, INIT_CUSTOM_COLOR_PTR /* 'Custom color' callback pointer */ \
gx_default_get_cmap_procs
@@ -344,10 +342,7 @@ struct gs_gstate_s {
s->subpath_start = __state_init.subpath_start; \
s->clamp_coordinates = __state_init.clamp_coordinates; \
s->log_op = __state_init.log_op; \
- s->alpha = __state_init.alpha; \
s->blend_mode = __state_init.blend_mode; \
- s->opacity = __state_init.opacity; \
- s->shape = __state_init.shape; \
s->trans_flags = __state_init.trans_flags; \
s->soft_mask_id = __state_init.soft_mask_id; \
s->text_knockout = __state_init.text_knockout; \
@@ -371,6 +366,14 @@ struct gs_gstate_s {
s->get_cmap_procs = __state_init.get_cmap_procs; \
s->show_gstate = NULL; \
s->is_fill_color = 1; \
+ s->strokeconstantalpha = 1.0; \
+ s->fillconstantalpha = 1.0; \
+ s->alphaisshape = 0; \
+ s->texthscaling = 100.0; \
+ s->textspacing = 0.0; \
+ s->textleading = 0.0; \
+ s->wordspacing = 0.0; \
+ s->textrise = 0.0; \
} while (0)
struct_proc_finalize(gs_gstate_finalize);
@@ -417,10 +420,6 @@ struct_proc_finalize(gs_gstate_finalize);
/* gs_gstate_initial. */
int gs_gstate_initialize(gs_gstate * pgs, gs_memory_t * mem);
-/* Make a temporary copy of a gs_gstate. Note that this does not */
-/* do all the necessary reference counting, etc. */
-gs_gstate * gs_gstate_copy_temp(const gs_gstate * pgs, gs_memory_t * mem);
-
/* Increment reference counts to note that a graphics state has been copied. */
void gs_gstate_copied(gs_gstate * pgs);
diff --git a/base/gxhintn.c b/base/gxhintn.c
index dc28c00d..30847bcb 100644
--- a/base/gxhintn.c
+++ b/base/gxhintn.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -648,11 +648,11 @@ static void t1_hinter__make_zone(t1_hinter * self, t1_zone *zone, float * blues,
static bool t1_hinter__realloc_array(gs_memory_t *mem, void **a, void *a0, int *max_count, int elem_size, int enhancement, const char *cname)
{
- void *aa = gs_alloc_bytes(mem, (*max_count + enhancement * 2) * elem_size, cname);
+ void *aa = gs_alloc_bytes(mem, (size_t)(*max_count + enhancement * 2) * elem_size, cname);
if (aa == NULL)
return true;
- memcpy(aa, *a, *max_count * elem_size);
+ memcpy(aa, *a, (size_t)*max_count * elem_size);
if (*a != a0)
gs_free_object(mem, *a, cname);
*a = aa;
diff --git a/base/gxhintn.h b/base/gxhintn.h
index 9b889992..115c7582 100644
--- a/base/gxhintn.h
+++ b/base/gxhintn.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxhintn1.c b/base/gxhintn1.c
index e6c8ea14..ad579893 100644
--- a/base/gxhintn1.c
+++ b/base/gxhintn1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxhldevc.c b/base/gxhldevc.c
index 806aada4..9060590e 100644
--- a/base/gxhldevc.c
+++ b/base/gxhldevc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxhldevc.h b/base/gxhldevc.h
index 4c50be2a..60b275c0 100644
--- a/base/gxhldevc.h
+++ b/base/gxhldevc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxht.c b/base/gxht.c
index be8f1a0e..77ea765a 100644
--- a/base/gxht.c
+++ b/base/gxht.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -752,8 +752,8 @@ render_ht(gx_ht_tile * pbt, int level /* [1..num_bits-1] */ ,
byte *data = pbt->tiles.data;
int code;
- if_debug7('H', "[H]Halftone cache slot 0x%lx: old=%d, new=%d, w=%d(%d), h=%d(%d):\n",
- (ulong) data, pbt->level, level,
+ if_debug7('H', "[H]Halftone cache slot "PRI_INTPTR": old=%d, new=%d, w=%d(%d), h=%d(%d):\n",
+ (intptr_t)data, pbt->level, level,
pbt->tiles.size.x, porder->width,
pbt->tiles.size.y, porder->num_bits / porder->width);
#ifdef DEBUG
diff --git a/base/gxht.h b/base/gxht.h
index 55464b98..f2b33f0d 100644
--- a/base/gxht.h
+++ b/base/gxht.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -164,7 +164,7 @@ extern_st(st_ht_component_element);
typedef struct gs_multiple_halftone_s {
gs_halftone_component *components;
uint num_comp;
- int (*get_colorname_string)(const gs_memory_t *mem, gs_separation_name colorname_index,
+ int (*get_colorname_string)(gs_gstate *pgs, gs_separation_name colorname_index,
unsigned char **ppstr, unsigned int *pname_size);
} gs_multiple_halftone;
diff --git a/base/gxht_thresh.c b/base/gxht_thresh.c
index 0b6e5a8e..eb4d6edb 100644
--- a/base/gxht_thresh.c
+++ b/base/gxht_thresh.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -718,7 +718,7 @@ gxht_thresh_image_init(gx_image_enum *penum)
penum->ht_buffer =
gs_alloc_bytes(penum->memory,
- penum->ht_stride * max_height * spp_out,
+ (size_t)penum->ht_stride * max_height * spp_out,
"gxht_thresh");
penum->ht_plane_height = penum->ht_stride * max_height;
/* We want to have 128 bit alignement for our contone and
@@ -744,7 +744,7 @@ gxht_thresh_image_init(gx_image_enum *penum)
penum->line = gs_alloc_bytes(penum->memory, penum->line_size * spp_out,
"gxht_thresh");
penum->thresh_buffer = gs_alloc_bytes(penum->memory,
- penum->line_size * max_height,
+ (size_t)penum->line_size * max_height,
"gxht_thresh");
if (penum->line == NULL || penum->thresh_buffer == NULL ||
penum->ht_buffer == NULL) {
diff --git a/base/gxht_thresh.h b/base/gxht_thresh.h
index dba1b02d..3ac7eab9 100644
--- a/base/gxht_thresh.h
+++ b/base/gxht_thresh.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxhtbit.c b/base/gxhtbit.c
index 339f669b..6cb6fdcb 100644
--- a/base/gxhtbit.c
+++ b/base/gxhtbit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -94,7 +94,7 @@ construct_ht_order_short(gx_ht_order *porder, const byte *thresholds)
phtr->elt_size == sizeof(ushort) &&
!memcmp(phtr->levels, levels, num_levels * sizeof(*levels)) &&
!memcmp(phtr->bit_data, porder->bit_data,
- size * phtr->elt_size)
+ (size_t)size * phtr->elt_size)
) {
/*
* This is a predefined halftone. Free the levels and
diff --git a/base/gxhttile.h b/base/gxhttile.h
index 661a99d4..6558784a 100644
--- a/base/gxhttile.h
+++ b/base/gxhttile.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxhttype.h b/base/gxhttype.h
index ab3a09a4..d6605aeb 100644
--- a/base/gxhttype.h
+++ b/base/gxhttype.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxi12bit.c b/base/gxi12bit.c
index 0cb70fee..fdf56fb1 100644
--- a/base/gxi12bit.c
+++ b/base/gxi12bit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -412,14 +412,14 @@ image_render_frac(gx_image_enum * penum, const byte * buffer, int data_x,
f:
if (sizeof(pdevc_next->colors.binary.color[0]) <= sizeof(ulong))
if_debug7m('B', penum->memory,
- "[B]0x%x,0x%x,0x%x,0x%x -> 0x%lx,0x%lx,0x%lx\n",
+ "[B]0x%x,0x%x,0x%x,0x%x -> 0x%lx,0x%lx," PRI_INTPTR "\n",
next.v[0], next.v[1], next.v[2], next.v[3],
(ulong)pdevc_next->colors.binary.color[0],
(ulong)pdevc_next->colors.binary.color[1],
- (ulong)pdevc_next->type);
+ (intptr_t)pdevc_next->type);
else
if_debug9m('B', penum->memory,
- "[B]0x%x,0x%x,0x%x,0x%x -> 0x%08lx%08lx,0x%08lx%08lx,0x%lx\n",
+ "[B]0x%x,0x%x,0x%x,0x%x -> 0x%08lx%08lx,0x%08lx%08lx," PRI_INTPTR "\n",
next.v[0], next.v[1], next.v[2], next.v[3],
(ulong)(pdevc_next->colors.binary.color[0] >>
8 * (sizeof(pdevc_next->colors.binary.color[0]) - sizeof(ulong))),
@@ -427,7 +427,7 @@ f:
(ulong)(pdevc_next->colors.binary.color[1] >>
8 * (sizeof(pdevc_next->colors.binary.color[1]) - sizeof(ulong))),
(ulong)pdevc_next->colors.binary.color[1],
- (ulong)pdevc_next->type);
+ (intptr_t)pdevc_next->type);
/* NB: sizeof gx_color_index is 4 or 8 bytes! */
/* Even though the supplied colors don't match, */
diff --git a/base/gxi16bit.c b/base/gxi16bit.c
index 8e229dce..7d2f7da3 100644
--- a/base/gxi16bit.c
+++ b/base/gxi16bit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxiclass.h b/base/gxiclass.h
index 730d08be..89721ae9 100644
--- a/base/gxiclass.h
+++ b/base/gxiclass.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxicolor.c b/base/gxicolor.c
index 3bee9814..58ead88a 100644
--- a/base/gxicolor.c
+++ b/base/gxicolor.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -698,7 +698,7 @@ image_render_color_thresh(gx_image_enum *penum_orig, const byte *buffer, int dat
penum->ht_offset_bits)) & 15;
for (k = 0; k < spp_out; k ++) {
offset_contone[k] = (- (((long)(penum->line)) +
- contone_stride * k +
+ (long)contone_stride * k +
penum->ht_offset_bits)) & 15;
}
data_length = dest_width;
@@ -724,7 +724,7 @@ image_render_color_thresh(gx_image_enum *penum_orig, const byte *buffer, int dat
offset_threshold = (-(long)(penum->thresh_buffer)) & 15;
for (k = 0; k < spp_out; k ++) {
offset_contone[k] = (- ((long)(penum->line) +
- contone_stride * k)) & 15;
+ (long)contone_stride * k)) & 15;
}
/* In the landscaped case, we want to accumulate multiple columns
of data before sending to the device. We want to have a full
@@ -1222,14 +1222,14 @@ mapped: if (mcode < 0)
goto fill;
if (sizeof(pdevc_next->colors.binary.color[0]) <= sizeof(ulong))
if_debug7m('B', penum->memory,
- "[B]0x%x,0x%x,0x%x,0x%x -> 0x%lx,0x%lx,0x%lx\n",
+ "[B]0x%x,0x%x,0x%x,0x%x -> 0x%lx,0x%lx," PRI_INTPTR "\n",
next.v[0], next.v[1], next.v[2], next.v[3],
(ulong)pdevc_next->colors.binary.color[0],
(ulong)pdevc_next->colors.binary.color[1],
- (ulong) pdevc_next->type);
+ (intptr_t)pdevc_next->type);
else
if_debug9m('B', penum->memory,
- "[B]0x%x,0x%x,0x%x,0x%x -> 0x%08lx%08lx,0x%08lx%08lx,0x%lx\n",
+ "[B]0x%x,0x%x,0x%x,0x%x -> 0x%08lx%08lx,0x%08lx%08lx," PRI_INTPTR "\n",
next.v[0], next.v[1], next.v[2], next.v[3],
(ulong)(pdevc_next->colors.binary.color[0] >>
8 * (sizeof(pdevc_next->colors.binary.color[0]) - sizeof(ulong))),
@@ -1237,7 +1237,7 @@ mapped: if (mcode < 0)
(ulong)(pdevc_next->colors.binary.color[1] >>
8 * (sizeof(pdevc_next->colors.binary.color[1]) - sizeof(ulong))),
(ulong)pdevc_next->colors.binary.color[1],
- (ulong) pdevc_next->type);
+ (intptr_t)pdevc_next->type);
/* NB: printf above fails to account for sizeof gx_color_index 4 or 8 bytes */
if (posture != image_skewed && dev_color_eq(*pdevc, *pdevc_next))
goto set;
diff --git a/base/gxidata.c b/base/gxidata.c
index f29fca27..857d314d 100644
--- a/base/gxidata.c
+++ b/base/gxidata.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -74,7 +74,7 @@ gx_image1_plane_data(gx_image_enum_common_t * info,
int px;
for (px = 0; px < num_planes; ++px)
- offsets[px] = planes[px].raster * penum->used.y;
+ offsets[px] = (size_t)planes[px].raster * penum->used.y;
penum->used.y = 0;
} else
memset(offsets, 0, num_planes * sizeof(offsets[0]));
diff --git a/base/gxifast.c b/base/gxifast.c
index aa8012ac..97188230 100644
--- a/base/gxifast.c
+++ b/base/gxifast.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gximag3x.c b/base/gximag3x.c
index 7a5f2c37..1c39b487 100644
--- a/base/gximag3x.c
+++ b/base/gximag3x.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gximag3x.h b/base/gximag3x.h
index 59fc345a..989c80a9 100644
--- a/base/gximag3x.h
+++ b/base/gximag3x.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gximage.c b/base/gximage.c
index 9df48630..74456b47 100644
--- a/base/gximage.c
+++ b/base/gximage.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gximage.h b/base/gximage.h
index 7de46962..ae492d29 100644
--- a/base/gximage.h
+++ b/base/gximage.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gximage1.c b/base/gximage1.c
index 87d1e3e0..a008fb54 100644
--- a/base/gximage1.c
+++ b/base/gximage1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gximage3.c b/base/gximage3.c
index 37693578..522c71ff 100644
--- a/base/gximage3.c
+++ b/base/gximage3.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gximage3.h b/base/gximage3.h
index 8a992cb4..dac31c3b 100644
--- a/base/gximage3.h
+++ b/base/gximage3.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gximage4.c b/base/gximage4.c
index 3107f68e..4bd9ddb2 100644
--- a/base/gximage4.c
+++ b/base/gximage4.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gximask.c b/base/gximask.c
index f61bd1bd..d1c155b7 100644
--- a/base/gximask.c
+++ b/base/gximask.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gximask.h b/base/gximask.h
index 5219a600..58807e64 100644
--- a/base/gximask.h
+++ b/base/gximask.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gximdecode.c b/base/gximdecode.c
index 9d42b2fb..b41de6a0 100644
--- a/base/gximdecode.c
+++ b/base/gximdecode.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2014-2018 Artifex Software, Inc.
+/* Copyright (C) 2014-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gximdecode.h b/base/gximdecode.h
index 8829de49..2a21d973 100644
--- a/base/gximdecode.h
+++ b/base/gximdecode.h
@@ -16,6 +16,9 @@ CA 94945, U.S.A., +1(415)492-9861, for further information.
/* Prototypes for decoding and unpacking image data. Used for color
monitoring in clist and for creating TIFF files for xpswrite device */
+#ifndef gximdecode_h_INCLUDED
+#define gximdecode_h_INCLUDED
+
#include "gx.h"
#include "gxfixed.h"
#include "gximage.h"
@@ -40,3 +43,5 @@ void get_unpack_proc(gx_image_enum_common_t *pie, image_decode_t *imd,
void get_map(image_decode_t *imd, gs_image_format_t format, const float *decode);
void applymap16(sample_map map[], const void *psrc, int spp, void *pdes, void *bufend);
void applymap8(sample_map map[], const void *psrc, int spp, void *pdes, void *bufend);
+
+#endif
diff --git a/base/gximono.c b/base/gximono.c
index ee2c69b4..77fa700e 100644
--- a/base/gximono.c
+++ b/base/gximono.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -140,7 +140,7 @@ halftone_init(gx_image_enum *penum)
penum->pgs->dev_ht->components[k].corder.threshold_inverted,
penum->pgs->dev_ht->components[k].corder.width,
penum->pgs->dev_ht->components[k].corder.full_height,
- -penum->pgs->screen_phase[k].x,
+ penum->pgs->screen_phase[k].x,
-penum->pgs->screen_phase[k].y,
penum->pgs->dev_ht->components[k].corder.threshold) < 0)
goto fail;
@@ -1072,7 +1072,7 @@ image_render_mono_ht(gx_image_enum * penum_orig, const byte * buffer, int data_x
penum->ht_offset_bits)) & 15;
for (k = 0; k < spp_out; k ++) {
offset_contone[k] = (- (((long)(penum->line)) +
- contone_stride * k +
+ (long)contone_stride * k +
penum->ht_offset_bits)) & 15;
}
data_length = dest_width;
@@ -1098,7 +1098,7 @@ image_render_mono_ht(gx_image_enum * penum_orig, const byte * buffer, int data_x
offset_threshold = (-(long)(penum->thresh_buffer)) & 15;
for (k = 0; k < spp_out; k ++) {
offset_contone[k] = (- ((long)(penum->line) +
- contone_stride * k)) & 15;
+ (long)contone_stride * k)) & 15;
}
/* In the landscaped case, we want to accumulate multiple columns
of data before sending to the device. We want to have a full
diff --git a/base/gxiodev.h b/base/gxiodev.h
index fa9065f6..704ab9ac 100644
--- a/base/gxiodev.h
+++ b/base/gxiodev.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -205,4 +205,11 @@ gs_iodev_init(gs_memory_t * mem);
void
gs_iodev_finit(gs_memory_t * mem);
+/* Backdoor into romfs for reading file length.
+ * Required because C++ and C seem to differ on sizeof(stat).
+ */
+int
+romfs_file_len(gs_memory_t * mem, const char *name);
+
+
#endif /* gxiodev_INCLUDED */
diff --git a/base/gxiparam.h b/base/gxiparam.h
index 00007ec2..8d6083fb 100644
--- a/base/gxiparam.h
+++ b/base/gxiparam.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxipixel.c b/base/gxipixel.c
index 9aad6c8a..c6057577 100644
--- a/base/gxipixel.c
+++ b/base/gxipixel.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -1215,7 +1215,7 @@ image_init_color_cache(gx_image_enum * penum, int bps, int spp)
to decode first. Then we can apply CM. Create a temp buffer in
the source space and then transform it with one call */
temp_buffer = (byte*) gs_alloc_bytes(penum->memory,
- num_entries * num_src_comp,
+ (size_t)num_entries * num_src_comp,
"image_init_color_cache");
if (need_decode) {
if (is_indexed) {
diff --git a/base/gxiscale.c b/base/gxiscale.c
index 3eec2f7d..83427431 100644
--- a/base/gxiscale.c
+++ b/base/gxiscale.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -499,7 +499,7 @@ gs_image_class_0_interpolate(gx_image_enum * penum, irender_proc_t *render_fn)
iss.BitsPerComponentIn = sizeof(frac) * 8;
iss.MaxValueIn = frac_1;
}
- in_size = round_up(iss.WidthIn * iss.spp_decode * sizeof(frac),
+ in_size = round_up(iss.WidthIn * iss.spp_decode * (int)sizeof(frac),
align_bitmap_mod);
/* Size to allocate space to store the input as frac type */
}
@@ -1079,12 +1079,13 @@ get_color_handler(gx_image_enum *penum, int spp_decode,
/* If we are in a non device space then work from the pcs not from the
concrete space also handle index case, where base case was device type */
/* We'll have done the interpolation in the base space, not the indexed
- * space, so allow for that here. */
+ * space, so allow for that here. Also avoid problems with separation
+ * color spaces with check for presence of ICC profile */
if (is_index_space)
pcs = pcs->base_space;
- if (dev_profile->usefastcolor &&
+ if (dev_profile->usefastcolor && pcs->cmm_icc_profile_data != NULL &&
gsicc_is_default_profile(pcs->cmm_icc_profile_data) &&
- dev_profile->device_profile[0]->num_comps == spp_decode) {
+ dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]->num_comps == spp_decode) {
const gs_color_space * pconcs = cs_concrete_space(pcs, pgs);
if (pconcs && pconcs == pcs) {
*pconc = pconcs;
@@ -2159,7 +2160,7 @@ image_render_interpolate_icc(gx_image_enum * penum, const byte * buffer,
/* Get the buffers set up. */
p_cm_buff =
(byte *) gs_alloc_bytes(pgs->memory,
- num_bytes_decode * width_in * spp_cm,
+ (size_t)num_bytes_decode * width_in * spp_cm,
"image_render_interpolate_icc");
/* Set up the buffer descriptors. We keep the bytes the same */
gsicc_init_buffer(&input_buff_desc, spp_decode, num_bytes_decode,
@@ -2183,6 +2184,9 @@ image_render_interpolate_icc(gx_image_enum * penum, const byte * buffer,
p_cm_buff = (byte *) gs_alloc_bytes(pgs->memory,
sizeof(unsigned short) * width * spp_cm,
"image_render_interpolate_icc");
+ if (!p_cm_buff) {
+ return gs_error_VMerror;
+ }
/* Set up the buffer descriptors. */
gsicc_init_buffer(&input_buff_desc, spp_decode, 2,
false, false, false, 0, width * spp_decode,
@@ -2645,7 +2649,7 @@ image_render_interpolate_landscape_icc(gx_image_enum * penum,
/* Get the buffers set up. */
p_cm_buff =
(byte *) gs_alloc_bytes(pgs->memory,
- num_bytes_decode * width_in * spp_cm,
+ (size_t)num_bytes_decode * width_in * spp_cm,
"image_render_interpolate_icc");
/* Set up the buffer descriptors. We keep the bytes the same */
gsicc_init_buffer(&input_buff_desc, spp_decode, num_bytes_decode,
diff --git a/base/gxline.h b/base/gxline.h
index 6c6a7be2..1571e585 100644
--- a/base/gxline.h
+++ b/base/gxline.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxlum.h b/base/gxlum.h
index 9b9669ea..38f3940d 100644
--- a/base/gxlum.h
+++ b/base/gxlum.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxmatrix.h b/base/gxmatrix.h
index 5dd92cbe..3a987694 100644
--- a/base/gxmatrix.h
+++ b/base/gxmatrix.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxmclip.c b/base/gxmclip.c
index dcefa823..7e991416 100644
--- a/base/gxmclip.c
+++ b/base/gxmclip.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxmclip.h b/base/gxmclip.h
index 27b778bb..926a72e3 100644
--- a/base/gxmclip.h
+++ b/base/gxmclip.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxobj.h b/base/gxobj.h
index 6505f825..376bab4f 100644
--- a/base/gxobj.h
+++ b/base/gxobj.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxoprect.c b/base/gxoprect.c
index 14562363..b04d9032 100644
--- a/base/gxoprect.c
+++ b/base/gxoprect.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxoprect.h b/base/gxoprect.h
index e7dd4c51..6a8d77df 100644
--- a/base/gxoprect.h
+++ b/base/gxoprect.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxp1fill.c b/base/gxp1fill.c
index 61eae3fc..80180972 100644
--- a/base/gxp1fill.c
+++ b/base/gxp1fill.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxp1impl.h b/base/gxp1impl.h
index 07b3714a..303319b4 100644
--- a/base/gxp1impl.h
+++ b/base/gxp1impl.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxpaint.c b/base/gxpaint.c
index 19e56b43..f570334e 100644
--- a/base/gxpaint.c
+++ b/base/gxpaint.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxpaint.h b/base/gxpaint.h
index 558e3978..2dee3a66 100644
--- a/base/gxpaint.h
+++ b/base/gxpaint.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxpath.c b/base/gxpath.c
index 7b2e6d34..ffdea761 100644
--- a/base/gxpath.c
+++ b/base/gxpath.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -137,8 +137,8 @@ gx_path_init_contained_shared(gx_path * ppath, const gx_path * shared,
{
if (shared) {
if (shared->segments == &shared->local_segments) {
- lprintf1("Attempt to share (local) segments of path 0x%lx!\n",
- (ulong) shared);
+ lprintf1("Attempt to share (local) segments of path "PRI_INTPTR"!\n",
+ (intptr_t)shared);
return_error(gs_error_Fatal);
}
*ppath = *shared;
@@ -172,8 +172,8 @@ gx_path_alloc_shared(const gx_path * shared, gs_memory_t * mem,
ppath->procs = &default_path_procs;
if (shared) {
if (shared->segments == &shared->local_segments) {
- lprintf1("Attempt to share (local) segments of path 0x%lx!\n",
- (ulong) shared);
+ lprintf1("Attempt to share (local) segments of path "PRI_INTPTR"!\n",
+ (intptr_t)shared);
gs_free_object(mem, ppath, cname);
return 0;
}
@@ -203,8 +203,8 @@ gx_path_init_local_shared(gx_path * ppath, const gx_path * shared,
{
if (shared) {
if (shared->segments == &shared->local_segments) {
- lprintf1("Attempt to share (local) segments of path 0x%lx!\n",
- (ulong) shared);
+ lprintf1("Attempt to share (local) segments of path "PRI_INTPTR"!\n",
+ (intptr_t)shared);
return_error(gs_error_Fatal);
}
*ppath = *shared;
@@ -323,6 +323,7 @@ gx_path_assign_preserve(gx_path * ppto, gx_path * ppfrom)
int
gx_path_assign_free(gx_path * ppto, gx_path * ppfrom)
{
+ int code = 0;
/*
* Detect the special case where both paths have non-shared local
* segments, since we can avoid allocating new segments in this case.
@@ -349,13 +350,10 @@ gx_path_assign_free(gx_path * ppto, gx_path * ppfrom)
#undef tosegs
} else {
/* In all other cases, just do assign + free. */
- int code = gx_path_assign_preserve(ppto, ppfrom);
-
- if (code < 0)
- return code;
+ code = gx_path_assign_preserve(ppto, ppfrom);
}
gx_path_free(ppfrom, "gx_path_assign_free");
- return 0;
+ return code;
}
/*
@@ -991,7 +989,7 @@ path_alloc_copy(gx_path * ppath)
void
gx_dump_path(const gx_path * ppath, const char *tag)
{
- dmlprintf2(ppath->memory, "[P]Path 0x%lx %s:\n", (ulong) ppath, tag);
+ dmlprintf2(ppath->memory, "[P]Path "PRI_INTPTR" %s:\n", (intptr_t)ppath, tag);
gx_path_print(ppath);
}
@@ -1006,15 +1004,15 @@ gx_path_print(const gx_path * ppath)
ppath->state_flags, ppath->subpath_count, ppath->curve_count,
fixed2float(ppath->position.x),
fixed2float(ppath->position.y));
- dmlprintf5(ppath->memory," %% box=(%f,%f),(%f,%f) last=0x%lx\n",
+ dmlprintf5(ppath->memory," %% box=(%f,%f),(%f,%f) last="PRI_INTPTR"\n",
fixed2float(ppath->bbox.p.x), fixed2float(ppath->bbox.p.y),
fixed2float(ppath->bbox.q.x), fixed2float(ppath->bbox.q.y),
- (ulong) ppath->box_last);
+ (intptr_t)ppath->box_last);
dmlprintf4(ppath->memory,
- " %% segments=0x%lx (refct=%ld, first=0x%lx, current=0x%lx)\n",
- (ulong) ppath->segments, (long)ppath->segments->rc.ref_count,
- (ulong) ppath->segments->contents.subpath_first,
- (ulong) ppath->segments->contents.subpath_current);
+ " %% segments="PRI_INTPTR" (refct=%ld, first="PRI_INTPTR", current="PRI_INTPTR")\n",
+ (intptr_t)ppath->segments, (long)ppath->segments->rc.ref_count,
+ (intptr_t)ppath->segments->contents.subpath_first,
+ (intptr_t)ppath->segments->contents.subpath_current);
while (pseg) {
dmlputs(ppath->memory,"");
gx_print_segment(ppath->memory, pseg);
@@ -1028,14 +1026,14 @@ gx_print_segment(const gs_memory_t *mem, const segment * pseg)
double py = fixed2float(pseg->pt.y);
char out[80];
- gs_sprintf(out, "0x%lx<0x%lx,0x%lx>:%u",
- (ulong) pseg, (ulong) pseg->prev, (ulong) pseg->next, pseg->notes);
+ gs_sprintf(out, PRI_INTPTR "<"PRI_INTPTR","PRI_INTPTR">:%u",
+ (intptr_t)pseg, (intptr_t)pseg->prev, (intptr_t)pseg->next, pseg->notes);
switch (pseg->type) {
case s_start:{
const subpath *const psub = (const subpath *)pseg;
- dmprintf5(mem, " %1.4f %1.4f moveto\t%% %s #curves=%d last=0x%lx\n",
- px, py, out, psub->curve_count, (ulong) psub->last);
+ dmprintf5(mem, " %1.4f %1.4f moveto\t%% %s #curves=%d last="PRI_INTPTR"\n",
+ px, py, out, psub->curve_count, (intptr_t)psub->last);
break;
}
case s_curve:{
@@ -1066,13 +1064,13 @@ gx_print_segment(const gs_memory_t *mem, const segment * pseg)
const line_close_segment *const plc =
(const line_close_segment *)pseg;
- dmprintf4(mem, " closepath\t%% %s %1.4f %1.4f 0x%lx\n",
- out, px, py, (ulong) (plc->sub));
+ dmprintf4(mem, " closepath\t%% %s %1.4f %1.4f "PRI_INTPTR"\n",
+ out, px, py, (intptr_t)(plc->sub));
break;
}
default:
- dmprintf4(mem, " %1.4f %1.4f <type 0x%x>\t%% %s\n",
- px, py, pseg->type, out);
+ dmprintf4(mem, " %1.4f %1.4f <type "PRI_INTPTR">\t%% %s\n",
+ px, py, (intptr_t)pseg->type, out);
}
}
diff --git a/base/gxpath.h b/base/gxpath.h
index 3c8d4124..01a04240 100644
--- a/base/gxpath.h
+++ b/base/gxpath.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxpath2.c b/base/gxpath2.c
index ed795ca5..d1bbe236 100644
--- a/base/gxpath2.c
+++ b/base/gxpath2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxpcache.h b/base/gxpcache.h
index e619e3ef..8b37771e 100644
--- a/base/gxpcache.h
+++ b/base/gxpcache.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -35,8 +35,8 @@ struct gx_pattern_cache_s {
uint num_tiles;
uint tiles_used;
uint next; /* round-robin index */
- ulong bits_used;
- ulong max_bits;
+ size_t bits_used;
+ size_t max_bits;
void (*free_all) (gx_pattern_cache *);
};
diff --git a/base/gxpcmap.c b/base/gxpcmap.c
index ebd1de22..356ec0f9 100644
--- a/base/gxpcmap.c
+++ b/base/gxpcmap.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -216,27 +216,25 @@ static dev_proc_destroy_buf_device(dummy_destroy_buf_device)
/* Attempt to determine the size of a pattern (the approximate amount that will */
/* be needed in the pattern cache). If we end up using the clist, this is only */
/* a guess -- we use the tile size which will _probably_ be too large. */
-static int
+static size_t
gx_pattern_size_estimate(gs_pattern1_instance_t *pinst, bool has_tags)
{
gx_device *tdev = pinst->saved->device;
int depth = (pinst->templat.PaintType == 2 ? 1 : tdev->color_info.depth);
- int64_t raster;
- int64_t size;
+ size_t raster;
+ size_t size;
if (pinst->size.x == 0 || pinst->size.y == 0)
return 0;
if (pinst->templat.uses_transparency) {
/* if the device has tags, add in an extra tag byte for the pdf14 compositor */
- raster = ((int64_t)pinst->size.x * ((depth/8) + 1 + (has_tags ? 1 : 0)));
+ raster = ((size_t)pinst->size.x * ((depth/8) + 1 + (has_tags ? 1 : 0)));
} else {
- raster = ((int64_t)pinst->size.x * depth + 7) / 8;
+ raster = ((size_t)pinst->size.x * depth + 7) / 8;
}
- size = raster > max_int / pinst->size.y ? (max_int & ~0xFFFF) : raster * pinst->size.y;
- if (size > (int64_t)max_int)
- size = (max_int & ~0xFFFF);
- return (int)size;
+ size = raster > max_size_t / pinst->size.y ? (max_size_t - 0xFFFF) : raster * pinst->size.y;
+ return size;
}
static void gx_pattern_accum_finalize_cw(gx_device * dev)
@@ -262,10 +260,10 @@ gx_pattern_accum_alloc(gs_memory_t * mem, gs_memory_t * storage_memory,
{
gx_device *tdev = pinst->saved->device;
bool has_tags = device_encodes_tags(tdev);
- int size = gx_pattern_size_estimate(pinst, has_tags);
+ size_t size = gx_pattern_size_estimate(pinst, has_tags);
gx_device_forward *fdev;
int force_no_clist = 0;
- int max_pattern_bitmap = tdev->MaxPatternBitmap == 0 ? MaxPatternBitmap_DEFAULT :
+ size_t max_pattern_bitmap = tdev->MaxPatternBitmap == 0 ? MaxPatternBitmap_DEFAULT :
tdev->MaxPatternBitmap;
pinst->is_planar = tdev->is_planar;
@@ -311,7 +309,7 @@ gx_pattern_accum_alloc(gs_memory_t * mem, gs_memory_t * storage_memory,
gx_device_clist_writer *cwdev;
const int data_size = 1024*128;
gx_band_params_t band_params = { 0 };
- byte *data = gs_alloc_bytes(tdev->memory->non_gc_memory, data_size, cname);
+ byte *data = gs_alloc_bytes(mem->non_gc_memory, data_size, cname);
if (data == NULL)
return 0;
@@ -321,7 +319,7 @@ gx_pattern_accum_alloc(gs_memory_t * mem, gs_memory_t * storage_memory,
band_params.BandHeight = pinst->size.y;
band_params.BandBufferSpace = 0;
- cdev = clist_make_accum_device(tdev, "pattern-clist", data, data_size,
+ cdev = clist_make_accum_device(mem, tdev, "pattern-clist", data, data_size,
&buf_procs, &band_params, true, /* use_memory_clist */
pinst->templat.uses_transparency, pinst);
if (cdev == 0) {
@@ -431,7 +429,7 @@ pattern_accum_open(gx_device * dev)
code = (*dev_proc(mask, open_device)) ((gx_device *) mask);
if (code >= 0) {
mask_open = true;
- memset(mask->base, 0, mask->raster * mask->height);
+ memset(mask->base, 0, (size_t)mask->raster * mask->height);
}
}
@@ -727,7 +725,10 @@ blank_unmasked_bits(gx_device * mask,
ptr += raster;
}
} else {
- if (depth/num_comps != 8)
+ /* Planar, only handle 8 or 16 bits */
+ int bytes_per_component = (depth/num_comps) >> 3;
+
+ if (depth/num_comps != 8 && depth/num_comps != 16)
return_error(gs_error_rangecheck);
for (y = 0; y < h; y++)
{
@@ -746,8 +747,10 @@ blank_unmasked_bits(gx_device * mask,
int xx = x+x0;
if (((mine[xx>>3]>>(x&7)) & 1) == 0) {
*ptr++ = blank;
+ if (bytes_per_component > 1)
+ *ptr++ = blank;
} else {
- ptr++;
+ ptr += bytes_per_component;
}
}
}
@@ -950,7 +953,7 @@ gx_pattern_cache_free_entry(gx_pattern_cache * pcache, gx_color_tile * ctile)
if (ctile->ttrans != NULL) {
if_debug2m('v', mem,
- "[v*] Freeing trans pattern from cache, uid = %ld id = %ld \n",
+ "[v*] Freeing trans pattern from cache, uid = %ld id = %ld\n",
ctile->uid.id, ctile->id);
if ( ctile->ttrans->pdev14 == NULL) {
/* This can happen if we came from the clist */
@@ -987,7 +990,7 @@ gx_pattern_cache_free_entry(gx_pattern_cache * pcache, gx_color_tile * ctile)
/* enough space is available (or nothing left to free). */
/* This will allow 1 oversized entry */
void
-gx_pattern_cache_ensure_space(gs_gstate * pgs, int needed)
+gx_pattern_cache_ensure_space(gs_gstate * pgs, size_t needed)
{
int code = ensure_pattern_cache(pgs);
gx_pattern_cache *pcache;
@@ -1015,7 +1018,7 @@ gx_pattern_cache_ensure_space(gs_gstate * pgs, int needed)
/* Export updating the pattern_cache bits_used and tiles_used for clist reading */
void
-gx_pattern_cache_update_used(gs_gstate *pgs, ulong used)
+gx_pattern_cache_update_used(gs_gstate *pgs, size_t used)
{
gx_pattern_cache *pcache = pgs->pattern_cache;
@@ -1040,7 +1043,6 @@ gx_pattern_cache_add_entry(gs_gstate * pgs,
gx_bitmap_id id;
gx_color_tile *ctile;
int code = ensure_pattern_cache(pgs);
- extern dev_proc_open_device(pattern_clist_open_device);
gx_device_memory *mmask = NULL;
gx_device_memory *mbits = NULL;
gx_pattern_trans_t *trans = NULL;
@@ -1107,7 +1109,7 @@ gx_pattern_cache_add_entry(gs_gstate * pgs,
used += mask_used;
}
if (trans != 0) {
- trans_used = trans->planestride*trans->n_chan;
+ trans_used = (size_t)trans->planestride*trans->n_chan;
used += trans_used;
}
} else {
@@ -1161,7 +1163,7 @@ gx_pattern_cache_add_entry(gs_gstate * pgs,
ctile->tmask.data = 0;
if (trans != 0) {
if_debug2m('v', pgs->memory,
- "[v*] Adding trans pattern to cache, uid = %ld id = %ld \n",
+ "[v*] Adding trans pattern to cache, uid = %ld id = %ld\n",
ctile->uid.id, ctile->id);
ctile->ttrans = trans;
}
diff --git a/base/gxpcolor.h b/base/gxpcolor.h
index 38cd625b..9d1856bd 100644
--- a/base/gxpcolor.h
+++ b/base/gxpcolor.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -294,12 +294,12 @@ bool gx_device_is_pattern_accum(gx_device *dev);
/* Given the size of a new pattern tile, free entries from the cache until */
/* enough space is available (or nothing left to free). */
/* This will allow 1 oversized entry */
-void gx_pattern_cache_ensure_space(gs_gstate * pgs, int needed);
+void gx_pattern_cache_ensure_space(gs_gstate * pgs, size_t needed);
-void gx_pattern_cache_update_used(gs_gstate *pgs, ulong used);
+void gx_pattern_cache_update_used(gs_gstate *pgs, size_t used);
/* Update cache tile space */
-void gx_pattern_cache_update_space(gs_gstate * pgs, int64_t used);
+void gx_pattern_cache_update_space(gs_gstate * pgs, size_t used);
/* Add an accumulated pattern to the cache. */
/* Note that this does not free any of the data in the accumulator */
diff --git a/base/gxpcopy.c b/base/gxpcopy.c
index 5d77de78..51abb19d 100644
--- a/base/gxpcopy.c
+++ b/base/gxpcopy.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxpdash.c b/base/gxpdash.c
index c4e73291..2e45b3cd 100644
--- a/base/gxpdash.c
+++ b/base/gxpdash.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxpflat.c b/base/gxpflat.c
index 06a778c8..fa90fc28 100644
--- a/base/gxpflat.c
+++ b/base/gxpflat.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxrplane.h b/base/gxrplane.h
index 2b0ea604..38694e89 100644
--- a/base/gxrplane.h
+++ b/base/gxrplane.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxsample.c b/base/gxsample.c
index a7969842..519abd82 100644
--- a/base/gxsample.c
+++ b/base/gxsample.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxsample.h b/base/gxsample.h
index 23982abf..25db3174 100644
--- a/base/gxsample.h
+++ b/base/gxsample.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxsamplp.h b/base/gxsamplp.h
index c936c22b..c6f6c0ae 100644
--- a/base/gxsamplp.h
+++ b/base/gxsamplp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxscanc.c b/base/gxscanc.c
index 1a4bb23c..7776d486 100644
--- a/base/gxscanc.c
+++ b/base/gxscanc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxscanc.h b/base/gxscanc.h
index c46d29e7..a585ef44 100644
--- a/base/gxscanc.h
+++ b/base/gxscanc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxshade.c b/base/gxshade.c
index 2372c85f..27413ac1 100644
--- a/base/gxshade.c
+++ b/base/gxshade.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -173,12 +173,13 @@ cs_next_packed_decoded(shade_coord_stream_t * cs, int num_bits,
int code = cs->get_value(cs, num_bits, &value);
double max_value = (double)(uint)
(num_bits == sizeof(uint) * 8 ? ~0 : ((1 << num_bits) - 1));
+ double dvalue = (double)value;
if (code < 0)
return code;
*pvalue =
- (decode == 0 ? value / max_value :
- decode[0] + value * (decode[1] - decode[0]) / max_value);
+ (decode == 0 ? dvalue / max_value :
+ decode[0] + dvalue * (decode[1] - decode[0]) / max_value);
return 0;
}
@@ -433,6 +434,33 @@ top:
if (cs_lin_test && !gx_has_transfer(pgs, dev->color_info.num_components)) {
pfs->cs_always_linear = true;
}
+
+#ifdef IGNORE_SPEC_MATCH_ADOBE_SHADINGS
+ /* Per the spec. If the source space is DeviceN or Separation and the
+ colorants are not supported (i.e. if we are using the alternate tint
+ transform) the interpolation should occur in the source space to
+ accommodate non-linear tint transform functions.
+ e.g. We had a case where the transform function
+ was an increasing staircase. Including that function in the
+ gradient smoothness calculation gave us severe quantization. AR on
+ the other hand is doing the interpolation in device color space
+ and has a smooth result for that case. So AR is not following the spec. The
+ bit below solves the issues for Type 4 and Type 5 shadings as
+ this will avoid interpolations in source space. Type 6 and Type 7 will still
+ have interpolations in the source space even if pfs->cs_always_linear == true.
+ So the approach below does not solve those issues. To do that
+ without changing the shading code, we could make a linear
+ approximation to the alternate tint transform, which would
+ ensure smoothness like what AR provides.
+ */
+ if ((gs_color_space_get_index(pcs) == gs_color_space_index_DeviceN ||
+ gs_color_space_get_index(pcs) == gs_color_space_index_Separation) &&
+ using_alt_color_space((gs_gstate*)pgs) && (psh->head.type == 4 ||
+ psh->head.type == 5)) {
+ pfs->cs_always_linear = true;
+ }
+#endif
+
return 0;
}
diff --git a/base/gxshade.h b/base/gxshade.h
index 90ed61a1..19a0aa38 100644
--- a/base/gxshade.h
+++ b/base/gxshade.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxshade1.c b/base/gxshade1.c
index 95dc7ee0..4b86d138 100644
--- a/base/gxshade1.c
+++ b/base/gxshade1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxshade4.c b/base/gxshade4.c
index 77fbded9..86cc1a57 100644
--- a/base/gxshade4.c
+++ b/base/gxshade4.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -196,7 +196,9 @@ gs_shading_LfGt_fill_rectangle(const gs_shading_t * psh0, const gs_rect * rect,
code = gs_note_error(gs_error_VMerror);
goto out;
}
- color_buffer = gs_alloc_bytes(pgs->memory, pfs.color_stack_step * per_row, "gs_shading_LfGt_fill_rectangle");
+ color_buffer = gs_alloc_bytes(pgs->memory,
+ (size_t)pfs.color_stack_step * per_row,
+ "gs_shading_LfGt_fill_rectangle");
if (color_buffer == NULL) {
code = gs_note_error(gs_error_VMerror);
goto out;
diff --git a/base/gxshade4.h b/base/gxshade4.h
index 56e31c8a..973a43c9 100644
--- a/base/gxshade4.h
+++ b/base/gxshade4.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxshade6.c b/base/gxshade6.c
index 41ab5adc..e48bcfb4 100644
--- a/base/gxshade6.c
+++ b/base/gxshade6.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -2389,7 +2389,7 @@ fill_wedges_aux(patch_fill_state_t *pfs, int k, int ka,
pfs->inside = save_inside;
return code;
} else {
- if (INTERPATCH_PADDING && (wedge_type & interpatch_padding)) {
+ if ((INTERPATCH_PADDING != 0) && (wedge_type & interpatch_padding)) {
code = mesh_padding(pfs, &pole[0], &pole[3], c0, c1);
if (code < 0)
return code;
diff --git a/base/gxstate.h b/base/gxstate.h
index 68ed3bb3..2d67efb8 100644
--- a/base/gxstate.h
+++ b/base/gxstate.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -42,7 +42,7 @@ gs_memory_t *gs_gstate_swap_memory(gs_gstate *, gs_memory_t *);
*/
typedef void *(*gs_gstate_alloc_proc_t) (gs_memory_t * mem);
typedef int (*gs_gstate_copy_proc_t) (void *to, const void *from);
-typedef void (*gs_gstate_free_proc_t) (void *old, gs_memory_t * mem);
+typedef void (*gs_gstate_free_proc_t) (void *old, gs_memory_t * mem, gs_gstate *pgs);
typedef enum {
copy_for_gsave, /* from = current, to = new(saved) */
diff --git a/base/gxstdio.h b/base/gxstdio.h
index 8b5ccb00..0956c560 100644
--- a/base/gxstdio.h
+++ b/base/gxstdio.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxstroke.c b/base/gxstroke.c
index 52c15437..e99497b6 100644
--- a/base/gxstroke.c
+++ b/base/gxstroke.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -625,10 +625,10 @@ gx_stroke_path_only_aux(gx_path * ppath, gx_path * to_path, gx_device * pdev,
Well we could use eigenvalues of the quadratic form,
but it gives same result with a bigger calculus.
*/
- double max_rr = (xx*xx + xy*xy + yx*yx + yy*yy +
- sqrt( ((xy + yx)*(xy + yx) + (xx - yy)*(xx - yy)) *
- ((xy - yx)*(xy - yx) + (xx + yy)*(xx + yy))
- )
+ double max_rr = ((double)(xx*xx + xy*xy + yx*yx + yy*yy) +
+ sqrt((double)((xy + yx)*(xy + yx) + (xx - yy)*(xx - yy)) *
+ ((xy - yx)*(xy - yx) + (xx + yy)*(xx + yy))
+ )
)/2;
always_thin = max_rr * line_width * line_width < 0.25;
@@ -1093,12 +1093,51 @@ width_is_thin(pl_ptr plp)
if ((dx = plp->vector.x) == 0)
return any_abs(wx) < fixed_half;
- /*
- * If both horizontal and vertical widths are less than
- * 0.5, the line is thin.
+ /* For the longest time, we used to have a test here that
+ * attempted to trivially accept diagonal lines as being
+ * thin based on the components of the perpendicular
+ * width vector in device space as both being less than 0.5.
+ * Bug 702196 showed some examples where this was clearly
+ * wrong.
+ *
+ * The cause for this bug was that the 0.5 figure was wrong.
+ * For the point to be less than 1/2 a pixel perpendicular
+ * distant from the line, we'd need x^2 + y^2 < .5^2.
+ * For a 45 degree line, that'd be 2(x^2) < 1/4 = x^2 < 1/8
+ * or x < sqr(1/8). 45 degree line is the "worst case", so
+ * if both horizontal and vertical widths are less than
+ * sqr(1/8), the line is thin. sqr(1/8) = 0.35355339059.
+ * So, we should be using sqr(1/8) rather than 0.5.
+ *
+ * Fixing this did indeed produce many many progressions,
+ * but left just the odd file still showing problems.
+ *
+ * Further investigations show that those cases were due to
+ * the use of "non-uniform" scaling matrices, for example
+ * (83 0 0 51 0 0). With such matrices, it's possible for
+ * nearly horizontal lines to be thin, but nearly vertical
+ * ones to be thick (or vice versa). Having the style of
+ * line "pop" between thick and thin in a single stroke
+ * looks very noticeable.
+ *
+ * We could change the trivial optimisation below to only
+ * apply in the 'uniform' case, but that would never actually
+ * trigger (as tested on the cluster), because all such
+ * cases are caught by the "always_thin" condition in the
+ * caller.
+ *
+ * Just removing the trivial test and leaving the 'complicated'
+ * test below us would leave us vulnerable to "popping",
+ * so we disable both. In practice this makes no difference
+ * to the number of tests showing diffs in the cluster.
*/
- if (any_abs(wx) < fixed_half && any_abs(wy) < fixed_half)
- return true;
+#if 0 /* DISABLED TEST, see above */
+ {
+ /* thin_threshold = fixed sqr(1/8) - see above. */
+ const fixed thin_threshold = float2fixed(0.35355339059f);
+ if (any_abs(wx) < thin_threshold && any_abs(wy) < thin_threshold)
+ return true;
+ }
/*
* We have to do this the hard way, by actually computing the
@@ -1116,6 +1155,9 @@ width_is_thin(pl_ptr plp)
/* so we don't need to do any de-scaling for the test. */
return fabs(num) < denom * 0.5;
}
+#else
+ return false;
+#endif
}
/* Adjust the endpoints and width of a stroke segment along a specified axis */
@@ -1640,6 +1682,162 @@ wide_underjoin(pl_ptr plp, pl_ptr nplp)
}
#endif
+static int
+check_miter(const gx_line_params * pgs_lp, pl_ptr plp, pl_ptr nplp,
+ const gs_matrix * pmat, p_ptr outp, p_ptr np, p_ptr mpt,
+ bool ccw0)
+{
+ /*
+ * Check whether a miter join is appropriate.
+ * Let a, b be the angles of the two lines.
+ * We check tan(a-b) against the miter_check
+ * by using the following formula:
+ * If tan(a)=u1/v1 and tan(b)=u2/v2, then
+ * tan(a-b) = (u1*v2 - u2*v1) / (u1*u2 + v1*v2).
+ *
+ * We can do all the computations unscaled,
+ * because we're only concerned with ratios.
+ * However, if we have a non-uniform coordinate
+ * system (indicated by pmat != 0), we must do the
+ * computations in user space.
+ */
+ float check;
+ double u1, v1, u2, v2;
+ double num, denom;
+ int code;
+
+ /*
+ * Don't bother with the miter check if the two
+ * points to be joined are very close together,
+ * namely, in the same square half-pixel.
+ */
+ if (fixed2long(outp->x << 1) == fixed2long(np->x << 1) &&
+ fixed2long(outp->y << 1) == fixed2long(np->y << 1))
+ return 1;
+
+ check = pgs_lp->miter_check;
+ u1 = plp->vector.y, v1 = plp->vector.x;
+ u2 = -nplp->vector.y, v2 = -nplp->vector.x;
+
+ if (pmat) {
+ gs_point pt;
+
+ code = gs_distance_transform_inverse(v1, u1, pmat, &pt);
+ if (code < 0)
+ return code;
+ v1 = pt.x, u1 = pt.y;
+ code = gs_distance_transform_inverse(v2, u2, pmat, &pt);
+ if (code < 0)
+ return code;
+ v2 = pt.x, u2 = pt.y;
+ /*
+ * We need to recompute ccw according to the
+ * relative positions of the lines in user space.
+ * We repeat the computation described above,
+ * using the cdelta values instead of the widths.
+ * Because the definition of ccw above is inverted
+ * from the intuitive one (for historical reasons),
+ * we actually have to do the test backwards.
+ */
+ ccw0 = v1 * u2 < v2 * u1;
+#if defined(DEBUG) && !defined(GS_THREADSAFE)
+ {
+ double a1 = atan2(u1, v1), a2 = atan2(u2, v2), dif = a1 - a2;
+
+ if (dif < 0)
+ dif += 2 * M_PI;
+ else if (dif >= 2 * M_PI)
+ dif -= 2 * M_PI;
+ if (dif != 0 && (dif < M_PI) != ccw0)
+ lprintf8("ccw wrong: tan(a1=%g)=%g/%g, tan(a2=%g)=%g,%g, dif=%g, ccw0=%d\n",
+ a1, u1, v1, a2, u2, v2, dif, ccw0);
+ }
+#endif
+ }
+ num = u1 * v2 - u2 * v1;
+ denom = u1 * u2 + v1 * v2;
+ /*
+ * We will want either tan(a-b) or tan(b-a)
+ * depending on the orientations of the lines.
+ * Fortunately we know the relative orientations already.
+ */
+ if (!ccw0) /* have plp - nplp, want vice versa */
+ num = -num;
+#if defined(DEBUG) && !defined(GS_THREADSAFE)
+ if (gs_debug_c('O')) {
+ dlprintf4("[o]Miter check: u1/v1=%f/%f, u2/v2=%f/%f,\n",
+ u1, v1, u2, v2);
+ dlprintf3(" num=%f, denom=%f, check=%f\n",
+ num, denom, check);
+ }
+#endif
+ /*
+ * If we define T = num / denom, then we want to use
+ * a miter join iff arctan(T) >= arctan(check).
+ * We know that both of these angles are in the 1st
+ * or 2nd quadrant, and since arctan is monotonic
+ * within each quadrant, we can do the comparisons
+ * on T and check directly, taking signs into account
+ * as follows:
+ * sign(T) sign(check) atan(T) >= atan(check)
+ * ------- ----------- ----------------------
+ * + + T >= check
+ * - + true
+ * + - false
+ * - - T >= check
+ */
+ if (num == 0 && denom == 0)
+ return_error(gs_error_unregistered); /* Must not happen. */
+ if (denom < 0)
+ num = -num, denom = -denom;
+ /* Now denom >= 0, so sign(num) = sign(T). */
+ if (check > 0 ?
+ (num < 0 || num >= denom * check) :
+ (num < 0 && num >= denom * check)
+ ) {
+ /* OK to use a miter join. */
+ gs_fixed_point dirn1, dirn2;
+
+ dirn1.x = plp->e.cdelta.x;
+ dirn1.y = plp->e.cdelta.y;
+ /* If this direction is small enough that we might have
+ * underflowed and the vector record is suitable for us
+ * to use to calculate a better one, then do so. */
+ if ((abs(dirn1.x) + abs(dirn1.y) < 16) &&
+ ((plp->vector.x != 0) || (plp->vector.y != 0)))
+ {
+ float scale = 65536.0;
+ if (abs(plp->vector.x) > abs(plp->vector.y))
+ scale /= abs(plp->vector.x);
+ else
+ scale /= abs(plp->vector.y);
+ dirn1.x = (fixed)(plp->vector.x*scale);
+ dirn1.y = (fixed)(plp->vector.y*scale);
+ }
+ dirn2.x = nplp->o.cdelta.x;
+ dirn2.y = nplp->o.cdelta.y;
+ /* If this direction is small enough that we might have
+ * underflowed and the vector record is suitable for us
+ * to use to calculate a better one, then do so. */
+ if ((abs(dirn2.x) + abs(dirn2.y) < 16) &&
+ ((nplp->vector.x != 0) || (nplp->vector.y != 0)))
+ {
+ float scale = 65536.0;
+ if (abs(nplp->vector.x) > abs(nplp->vector.y))
+ scale /= abs(nplp->vector.x);
+ else
+ scale /= abs(nplp->vector.y);
+ dirn2.x = (fixed)(-nplp->vector.x*scale);
+ dirn2.y = (fixed)(-nplp->vector.y*scale);
+ }
+ if_debug0('O', " ... passes.\n");
+ /* Compute the intersection of the extended edge lines. */
+ if (line_intersect(outp, &dirn1, np, &dirn2, mpt) == 0)
+ return 0;
+ }
+ return 1;
+}
+
/* Add a segment to the path.
* This works by crafting 2 paths, one for each edge, that will later be
* merged together. */
@@ -1660,6 +1858,14 @@ stroke_add_fast(gx_path * ppath, gx_path * rpath, bool ensure_closed, int first,
bool moveto_first = false;
bool rmoveto_first = false;
gs_line_cap start_cap, end_cap;
+ const gs_matrix *pmat = (uniform ? (const gs_matrix *)NULL : &ctm_only(pgs));
+ enum {
+ joinsense_cap = 0,
+ joinsense_cw = 1,
+ joinsense_ccw = 2,
+ joinsense_over = 4,
+ joinsense_under = 8,
+ } joinsense = joinsense_cap;
if (plp->thin) {
/* We didn't set up the endpoint parameters before, */
@@ -1702,6 +1908,100 @@ stroke_add_fast(gx_path * ppath, gx_path * rpath, bool ensure_closed, int first,
ASSIGN_POINT(&rpoints[nrpoints], plp->e.ce);
npoints++;
nrpoints++;
+
+ if (nplp != NULL && !nplp->thin) {
+ /* We need to do a join. What sense is it it? */
+ double l, r;
+
+ l = (double)(plp->width.x) /* x1 */ * (nplp->width.y) /* y2 */;
+ r = (double)(nplp->width.x) /* x2 */ * (plp->width.y) /* y1 */;
+
+ if ((l == r) && (join == gs_join_round))
+ joinsense = joinsense_cap;
+ else if ((l > r) ^ reflected)
+ joinsense = joinsense_ccw | joinsense_over | joinsense_under;
+ else
+ joinsense = joinsense_cw | joinsense_over | joinsense_under;
+
+ if (joinsense != joinsense_cap && join == gs_join_miter) {
+ /* We need to do a miter line join. Miters are 'special'
+ * in that we'd like to do them by adjusting the existing
+ * points, rather than adding new ones. */
+ gs_fixed_point mpt;
+ if (joinsense & joinsense_ccw) {
+ /* Underjoin (in reverse path):
+ * A = plp->o.co, B = plp->e.ce, C = nplp->o.co, D = nplp->e.ce */
+ double xa = plp->o.co.x, ya = plp->o.co.y;
+ double xb = plp->e.ce.x, yb = plp->e.ce.y;
+ double xc = nplp->o.co.x, yc = nplp->o.co.y;
+ double xd = nplp->e.ce.x, yd = nplp->e.ce.y;
+ double xab = xa-xb, xac = xa-xc, xcd = xc-xd;
+ double yab = ya-yb, yac = ya-yc, ycd = yc-yd;
+ double t_num = xac * ycd - yac * xcd;
+ double t_den = xab * ycd - yab * xcd;
+ code = check_miter(pgs_lp, plp, nplp, pmat, &plp->e.co,
+ &nplp->o.ce, &mpt, true);
+ if (code < 0)
+ return code;
+ if (code == 0) {
+ points[npoints-1].x = mpt.x;
+ points[npoints-1].y = mpt.y;
+ if (ensure_closed) {
+ points[npoints].x = nplp->o.ce.x;
+ points[npoints].y = nplp->o.ce.y;
+ npoints++;
+ }
+ joinsense &= ~joinsense_over;
+ } else
+ join = gs_join_bevel;
+ if (t_den != 0 &&
+ ((t_num >= 0 && t_num <= t_den) ||
+ (t_num <= 0 && t_num >= t_den))) {
+ double x = xa - xab * t_num / t_den;
+ double y = ya - yab * t_num / t_den;
+ rpoints[nrpoints-1].x = (fixed)x;
+ rpoints[nrpoints-1].y = (fixed)y;
+ joinsense &= ~joinsense_under;
+ }
+ } else {
+ /* Underjoin (in fwd path):
+ * A = plp->o.ce, B = plp->e.co, C = nplp->o.ce, D = nplp->e.co */
+ double xa = plp->o.ce.x, ya = plp->o.ce.y;
+ double xb = plp->e.co.x, yb = plp->e.co.y;
+ double xc = nplp->o.ce.x, yc = nplp->o.ce.y;
+ double xd = nplp->e.co.x, yd = nplp->e.co.y;
+ double xab = xa-xb, xac = xa-xc, xcd = xc-xd;
+ double yab = ya-yb, yac = ya-yc, ycd = yc-yd;
+ double t_num = xac * ycd - yac * xcd;
+ double t_den = xab * ycd - yab * xcd;
+ code = check_miter(pgs_lp, plp, nplp, pmat, &plp->e.ce,
+ &nplp->o.co, &mpt, false);
+ if (code < 0)
+ return code;
+ if (code == 0) {
+ rpoints[nrpoints-1].x = mpt.x;
+ rpoints[nrpoints-1].y = mpt.y;
+ if (ensure_closed) {
+ rpoints[nrpoints].x = nplp->o.co.x;
+ rpoints[nrpoints].y = nplp->o.co.y;
+ nrpoints++;
+ }
+ joinsense &= ~joinsense_over;
+ } else
+ join = gs_join_bevel;
+ if (t_den != 0 &&
+ ((t_num >= 0 && t_num <= t_den) ||
+ (t_num <= 0 && t_num >= t_den))) {
+ double x = xa - xab * t_num / t_den;
+ double y = ya - yab * t_num / t_den;
+ points[npoints-1].x = (fixed)x;
+ points[npoints-1].y = (fixed)y;
+ joinsense &= ~joinsense_under;
+ }
+ }
+ }
+ }
+
if ((code = add_points(ppath, points, npoints, moveto_first)) < 0)
return code;
if ((code = add_points(rpath, rpoints, nrpoints, rmoveto_first)) < 0)
@@ -1719,28 +2019,22 @@ stroke_add_fast(gx_path * ppath, gx_path * rpath, bool ensure_closed, int first,
} else if (nplp->thin) { /* no join */
code = cap_points(gs_cap_butt, &plp->e, points);
npoints = code;
- } else {
- /* We need to do a join */
- double l, r;
-
- l = (double)(plp->width.x) /* x1 */ * (nplp->width.y) /* y2 */;
- r = (double)(nplp->width.x) /* x2 */ * (plp->width.y) /* y1 */;
-
- if ((l == r) && (join == gs_join_round)) {
- /* Do a cap */
- code = add_pie_cap(ppath, &plp->e);
- if (code >= 0) {
- /* If the next line is in the opposite direction as the current one
- * we want to leave the point on the same side as it was
- * originally. This is required for paths that come to a stop
- * and then reverse themselves, but may produce more complexity
- * than we'd really like at the ends of smooth beziers. */
- if ((double)(plp->width.x) * nplp->width.x + (double)plp->width.y * nplp->width.y >= 0)
- code = gx_path_add_line(ppath, plp->e.co.x, plp->e.co.y);
- }
- } else if ((l > r) ^ reflected) {
- /* CCW rotation. Join in the forward path. "Underjoin" in the
- * reverse path. */
+ } else if (joinsense == joinsense_cap) {
+ /* Do a cap */
+ code = add_pie_cap(ppath, &plp->e);
+ if (code >= 0) {
+ /* If the next line is in the opposite direction as the current one
+ * we want to leave the point on the same side as it was
+ * originally. This is required for paths that come to a stop
+ * and then reverse themselves, but may produce more complexity
+ * than we'd really like at the ends of smooth beziers. */
+ if ((double)(plp->width.x) * nplp->width.x + (double)plp->width.y * nplp->width.y >= 0)
+ code = gx_path_add_line(ppath, plp->e.co.x, plp->e.co.y);
+ }
+ } else if (joinsense & joinsense_ccw) {
+ /* CCW rotation. Join in the forward path. "Underjoin" in the
+ * reverse path. */
+ if (joinsense & joinsense_over) {
/* RJW: Ideally we should include the "|| flags" clause in
* the following condition. This forces all joins between
* line segments generated from arcs to be round. This would
@@ -1750,14 +2044,13 @@ stroke_add_fast(gx_path * ppath, gx_path * rpath, bool ensure_closed, int first,
code = add_pie_join_fast_ccw(ppath, plp, nplp, reflected);
} else { /* non-round join */
code = line_join_points_fast_ccw(pgs_lp, plp, nplp,
- points,
- (uniform ? (gs_matrix *) 0 :
- &ctm_only(pgs)),
- join);
+ points, pmat, join);
npoints = code;
}
if (code < 0)
return code;
+ }
+ if (joinsense & joinsense_under) {
/* The underjoin */
#ifndef SLOWER_BUT_MORE_ACCURATE_STROKING
if ((flags & (nf_some_from_arc | nf_prev_some_from_arc)) == 0) {
@@ -1799,9 +2092,11 @@ stroke_add_fast(gx_path * ppath, gx_path * rpath, bool ensure_closed, int first,
}
#endif
code = gx_path_add_line(rpath, nplp->o.co.x, nplp->o.co.y);
- } else {
- /* CW rotation. Join in the reverse path. "Underjoin" in the
- * forward path. */
+ }
+ } else if (joinsense & joinsense) {
+ /* CW rotation. Join in the reverse path. "Underjoin" in the
+ * forward path. */
+ if (joinsense & joinsense_over) {
/* RJW: Ideally we should include the "|| flags" clause in
* the following condition. This forces all joins between
* line segments generated from arcs to be round. This would
@@ -1811,17 +2106,17 @@ stroke_add_fast(gx_path * ppath, gx_path * rpath, bool ensure_closed, int first,
code = add_pie_join_fast_cw(rpath, plp, nplp, reflected);
} else { /* non-round join */
code = line_join_points_fast_cw(pgs_lp, plp, nplp,
- rpoints,
- (uniform ? (gs_matrix *) 0 :
- &ctm_only(pgs)),
- join);
+ rpoints, pmat, join);
nrpoints = code;
}
if (code < 0)
return code;
+ }
+ if (joinsense & joinsense_under) {
/* The underjoin */
#ifndef SLOWER_BUT_MORE_ACCURATE_STROKING
- if ((flags & (nf_some_from_arc | nf_prev_some_from_arc)) == 0) {
+ if ((flags & (nf_some_from_arc | nf_prev_some_from_arc)) == 0 &&
+ join != gs_join_miter) {
/* RJW: This is an approximation. We ought to draw a line
* back to nplp->o.p, and then independently fill any exposed
* region under the curve with a round join. Sadly, that's
@@ -2047,150 +2342,6 @@ add_points(gx_path * ppath, const gs_fixed_point * points, int npoints,
/* ---------------- Join computation ---------------- */
-static int
-check_miter(const gx_line_params * pgs_lp, pl_ptr plp, pl_ptr nplp,
- const gs_matrix * pmat, p_ptr outp, p_ptr np, p_ptr mpt,
- bool ccw0)
-{
- /*
- * Check whether a miter join is appropriate.
- * Let a, b be the angles of the two lines.
- * We check tan(a-b) against the miter_check
- * by using the following formula:
- * If tan(a)=u1/v1 and tan(b)=u2/v2, then
- * tan(a-b) = (u1*v2 - u2*v1) / (u1*u2 + v1*v2).
- *
- * We can do all the computations unscaled,
- * because we're only concerned with ratios.
- * However, if we have a non-uniform coordinate
- * system (indicated by pmat != 0), we must do the
- * computations in user space.
- */
- float check = pgs_lp->miter_check;
- double u1 = plp->vector.y, v1 = plp->vector.x;
- double u2 = -nplp->vector.y, v2 = -nplp->vector.x;
- double num, denom;
- int code;
-
- if (pmat) {
- gs_point pt;
-
- code = gs_distance_transform_inverse(v1, u1, pmat, &pt);
- if (code < 0)
- return code;
- v1 = pt.x, u1 = pt.y;
- code = gs_distance_transform_inverse(v2, u2, pmat, &pt);
- if (code < 0)
- return code;
- v2 = pt.x, u2 = pt.y;
- /*
- * We need to recompute ccw according to the
- * relative positions of the lines in user space.
- * We repeat the computation described above,
- * using the cdelta values instead of the widths.
- * Because the definition of ccw above is inverted
- * from the intuitive one (for historical reasons),
- * we actually have to do the test backwards.
- */
- ccw0 = v1 * u2 < v2 * u1;
-#if defined(DEBUG) && !defined(GS_THREADSAFE)
- {
- double a1 = atan2(u1, v1), a2 = atan2(u2, v2), dif = a1 - a2;
-
- if (dif < 0)
- dif += 2 * M_PI;
- else if (dif >= 2 * M_PI)
- dif -= 2 * M_PI;
- if (dif != 0 && (dif < M_PI) != ccw0)
- lprintf8("ccw wrong: tan(a1=%g)=%g/%g, tan(a2=%g)=%g,%g, dif=%g, ccw0=%d\n",
- a1, u1, v1, a2, u2, v2, dif, ccw0);
- }
-#endif
- }
- num = u1 * v2 - u2 * v1;
- denom = u1 * u2 + v1 * v2;
- /*
- * We will want either tan(a-b) or tan(b-a)
- * depending on the orientations of the lines.
- * Fortunately we know the relative orientations already.
- */
- if (!ccw0) /* have plp - nplp, want vice versa */
- num = -num;
-#if defined(DEBUG) && !defined(GS_THREADSAFE)
- if (gs_debug_c('O')) {
- dlprintf4("[o]Miter check: u1/v1=%f/%f, u2/v2=%f/%f,\n",
- u1, v1, u2, v2);
- dlprintf3(" num=%f, denom=%f, check=%f\n",
- num, denom, check);
- }
-#endif
- /*
- * If we define T = num / denom, then we want to use
- * a miter join iff arctan(T) >= arctan(check).
- * We know that both of these angles are in the 1st
- * or 2nd quadrant, and since arctan is monotonic
- * within each quadrant, we can do the comparisons
- * on T and check directly, taking signs into account
- * as follows:
- * sign(T) sign(check) atan(T) >= atan(check)
- * ------- ----------- ----------------------
- * + + T >= check
- * - + true
- * + - false
- * - - T >= check
- */
- if (num == 0 && denom == 0)
- return_error(gs_error_unregistered); /* Must not happen. */
- if (denom < 0)
- num = -num, denom = -denom;
- /* Now denom >= 0, so sign(num) = sign(T). */
- if (check > 0 ?
- (num < 0 || num >= denom * check) :
- (num < 0 && num >= denom * check)
- ) {
- /* OK to use a miter join. */
- gs_fixed_point dirn1, dirn2;
-
- dirn1.x = plp->e.cdelta.x;
- dirn1.y = plp->e.cdelta.y;
- /* If this direction is small enough that we might have
- * underflowed and the vector record is suitable for us
- * to use to calculate a better one, then do so. */
- if ((abs(dirn1.x) + abs(dirn1.y) < 16) &&
- ((plp->vector.x != 0) || (plp->vector.y != 0)))
- {
- float scale = 65536.0;
- if (abs(plp->vector.x) > abs(plp->vector.y))
- scale /= abs(plp->vector.x);
- else
- scale /= abs(plp->vector.y);
- dirn1.x = (fixed)(plp->vector.x*scale);
- dirn1.y = (fixed)(plp->vector.y*scale);
- }
- dirn2.x = nplp->o.cdelta.x;
- dirn2.y = nplp->o.cdelta.y;
- /* If this direction is small enough that we might have
- * underflowed and the vector record is suitable for us
- * to use to calculate a better one, then do so. */
- if ((abs(dirn2.x) + abs(dirn2.y) < 16) &&
- ((nplp->vector.x != 0) || (nplp->vector.y != 0)))
- {
- float scale = 65536.0;
- if (abs(nplp->vector.x) > abs(nplp->vector.y))
- scale /= abs(nplp->vector.x);
- else
- scale /= abs(nplp->vector.y);
- dirn2.x = (fixed)(-nplp->vector.x*scale);
- dirn2.y = (fixed)(-nplp->vector.y*scale);
- }
- if_debug0('O', " ... passes.\n");
- /* Compute the intersection of the extended edge lines. */
- if (line_intersect(outp, &dirn1, np, &dirn2, mpt) == 0)
- return 0;
- }
- return 1;
-}
-
/* Compute the points for a bevel, miter, or triangle join. */
/* Treat no join the same as a bevel join. */
/* If pmat != 0, we must inverse-transform the distances for */
@@ -2238,6 +2389,7 @@ line_join_points(const gx_line_params * pgs_lp, pl_ptr plp, pl_ptr nplp,
bool ccw0 = ccw;
p_ptr outp, np;
int code;
+ gs_fixed_point mpt;
ccw ^= reflected;
@@ -2280,21 +2432,11 @@ line_join_points(const gx_line_params * pgs_lp, pl_ptr plp, pl_ptr nplp,
}
return 5;
}
- /*
- * Don't bother with the miter check if the two
- * points to be joined are very close together,
- * namely, in the same square half-pixel.
- */
if (join == gs_join_miter &&
- !(fixed2long(outp->x << 1) == fixed2long(np->x << 1) &&
- fixed2long(outp->y << 1) == fixed2long(np->y << 1))
- ) {
- gs_fixed_point mpt;
- code = check_miter(pgs_lp, plp, nplp, pmat, outp, np, &mpt, ccw0);
+ (code = check_miter(pgs_lp, plp, nplp, pmat, outp, np, &mpt, ccw0)) <= 0) {
if (code < 0)
return code;
- if (code == 0)
- ASSIGN_POINT(outp, mpt);
+ ASSIGN_POINT(outp, mpt);
}
return 4;
}
@@ -2324,26 +2466,6 @@ line_join_points_fast_cw(const gx_line_params * pgs_lp,
/* Set up for a Bevel join */
ASSIGN_POINT(&rjoin_points[0], nplp->o.co);
- /*
- * Don't bother with the miter check if the two
- * points to be joined are very close together,
- * namely, in the same square half-pixel.
- */
- if (join == gs_join_miter &&
- !(fixed2long(plp->e.ce.x << 1) == fixed2long(nplp->o.co.x << 1) &&
- fixed2long(plp->e.ce.y << 1) == fixed2long(nplp->o.co.y << 1))
- ) {
- gs_fixed_point mpt;
- int code = check_miter(pgs_lp, plp, nplp, pmat, &plp->e.ce,
- &nplp->o.co, &mpt, false);
- if (code < 0)
- return code;
- if (code == 0) {
- ASSIGN_POINT(&rjoin_points[0], mpt);
- ASSIGN_POINT(&rjoin_points[1], nplp->o.co);
- return 2;
- }
- }
return 1;
}
@@ -2371,26 +2493,6 @@ line_join_points_fast_ccw(const gx_line_params * pgs_lp,
/* Set up for a Bevel join */
ASSIGN_POINT(&join_points[0], nplp->o.ce);
- /*
- * Don't bother with the miter check if the two
- * points to be joined are very close together,
- * namely, in the same square half-pixel.
- */
- if (join == gs_join_miter &&
- !(fixed2long(plp->e.co.x << 1) == fixed2long(nplp->o.ce.x << 1) &&
- fixed2long(plp->e.co.y << 1) == fixed2long(nplp->o.ce.y << 1))
- ) {
- gs_fixed_point mpt;
- int code = check_miter(pgs_lp, plp, nplp, pmat, &plp->e.co,
- &nplp->o.ce, &mpt, true);
- if (code < 0)
- return code;
- if (code == 0) {
- ASSIGN_POINT(&join_points[0], mpt);
- ASSIGN_POINT(&join_points[1], nplp->o.ce);
- return 2;
- }
- }
return 1;
}
/* ---------------- Cap computations ---------------- */
diff --git a/base/gxsync.c b/base/gxsync.c
index 8bb30ef1..7f41a273 100644
--- a/base/gxsync.c
+++ b/base/gxsync.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxsync.h b/base/gxsync.h
index d3cf85e4..762fb2fe 100644
--- a/base/gxsync.h
+++ b/base/gxsync.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxtext.h b/base/gxtext.h
index 1d5fa9b9..afe0bc89 100644
--- a/base/gxtext.h
+++ b/base/gxtext.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxtmap.h b/base/gxtmap.h
index dadb10d7..994c38e5 100644
--- a/base/gxtmap.h
+++ b/base/gxtmap.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxttf.h b/base/gxttf.h
index c737f052..ab683ba9 100644
--- a/base/gxttf.h
+++ b/base/gxttf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxttfb.c b/base/gxttfb.c
index cd47b0c3..d0a8c882 100644
--- a/base/gxttfb.c
+++ b/base/gxttfb.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxttfb.h b/base/gxttfb.h
index a7584393..487ac941 100644
--- a/base/gxttfb.h
+++ b/base/gxttfb.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxtype1.c b/base/gxtype1.c
index a383015e..3169751f 100644
--- a/base/gxtype1.c
+++ b/base/gxtype1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxtype1.h b/base/gxtype1.h
index a2122a32..6519f113 100644
--- a/base/gxtype1.h
+++ b/base/gxtype1.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gxxfont.h b/base/gxxfont.h
index 0eeb3600..b239cd27 100644
--- a/base/gxxfont.h
+++ b/base/gxxfont.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gzacpath.h b/base/gzacpath.h
index 04f62aaf..4670b478 100644
--- a/base/gzacpath.h
+++ b/base/gzacpath.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gzcpath.h b/base/gzcpath.h
index 2f48c791..da5d2758 100644
--- a/base/gzcpath.h
+++ b/base/gzcpath.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gzht.h b/base/gzht.h
index 7a581c90..1adb06d0 100644
--- a/base/gzht.h
+++ b/base/gzht.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gzline.h b/base/gzline.h
index cfd5c2f0..919b3ad6 100644
--- a/base/gzline.h
+++ b/base/gzline.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gzpath.h b/base/gzpath.h
index fa574f6d..1c78caf8 100644
--- a/base/gzpath.h
+++ b/base/gzpath.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gzspotan.c b/base/gzspotan.c
index e6264ce0..46fd35bf 100644
--- a/base/gzspotan.c
+++ b/base/gzspotan.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gzspotan.h b/base/gzspotan.h
index 1093006f..4a60b19e 100644
--- a/base/gzspotan.h
+++ b/base/gzspotan.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/gzstate.h b/base/gzstate.h
index d20e6c7b..648534c3 100644
--- a/base/gzstate.h
+++ b/base/gzstate.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ijs.mak b/base/ijs.mak
index 4c7fcab7..557dae5b 100644
--- a/base/ijs.mak
+++ b/base/ijs.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/instcopy b/base/instcopy
index 119b44bd..ef1e260d 100755
--- a/base/instcopy
+++ b/base/instcopy
@@ -1,5 +1,5 @@
#!/bin/sh
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/jbig2.mak b/base/jbig2.mak
index c3d275b9..2ec14d94 100644
--- a/base/jbig2.mak
+++ b/base/jbig2.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/jerror_.h b/base/jerror_.h
index cd7b1d59..dafcf480 100644
--- a/base/jerror_.h
+++ b/base/jerror_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/jmemcust.c b/base/jmemcust.c
index b452d83a..bdcbb7ec 100644
--- a/base/jmemcust.c
+++ b/base/jmemcust.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/jmemcust.h b/base/jmemcust.h
index e71e6b20..8d2f97d5 100644
--- a/base/jmemcust.h
+++ b/base/jmemcust.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/jpeg.mak b/base/jpeg.mak
index c7554410..c1929e63 100644
--- a/base/jpeg.mak
+++ b/base/jpeg.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -67,6 +67,40 @@ jpeg.clean : jpeg.config-clean jpeg.clean-not-config-clean
### WRONG. MUST DELETE OBJ AND GEN FILES SELECTIVELY.
jpeg.clean-not-config-clean :
$(RM_) $(JOBJ)*.$(OBJ)
+ $(RM_) $(GLGEN)jcomapi.c
+ $(RM_) $(GLGEN)jutils.c
+ $(RM_) $(GLGEN)jmemmgr.c
+ $(RM_) $(GLGEN)jerror.c
+ $(RM_) $(GLGEN)jaricom.c
+ $(RM_) $(GLGEN)jcapimin.c
+ $(RM_) $(GLGEN)jcapistd.c
+ $(RM_) $(GLGEN)jcinit.c
+ $(RM_) $(GLGEN)jccoefct.c
+ $(RM_) $(GLGEN)jccolor.c
+ $(RM_) $(GLGEN)jcdctmgr.c
+ $(RM_) $(GLGEN)jchuff.c
+ $(RM_) $(GLGEN)jcmainct.c
+ $(RM_) $(GLGEN)jcmarker.c
+ $(RM_) $(GLGEN)jcmaster.c
+ $(RM_) $(GLGEN)jcparam.c
+ $(RM_) $(GLGEN)jcprepct.c
+ $(RM_) $(GLGEN)jcsample.c
+ $(RM_) $(GLGEN)jfdctint.c
+ $(RM_) $(GLGEN)jcarith.c
+ $(RM_) $(GLGEN)jdapimin.c
+ $(RM_) $(GLGEN)jdapistd.c
+ $(RM_) $(GLGEN)jdcoefct.c
+ $(RM_) $(GLGEN)jdcolor.c
+ $(RM_) $(GLGEN)jddctmgr.c
+ $(RM_) $(GLGEN)jdhuff.c
+ $(RM_) $(GLGEN)jdinput.c
+ $(RM_) $(GLGEN)jdmainct.c
+ $(RM_) $(GLGEN)jdmarker.c
+ $(RM_) $(GLGEN)jdmaster.c
+ $(RM_) $(GLGEN)jdpostct.c
+ $(RM_) $(GLGEN)jdsample.c
+ $(RM_) $(GLGEN)jidctint.c
+ $(RM_) $(GLGEN)jdarith.c
jpeg.config-clean :
$(RMN_) $(JGEN)jpeg*.dev
@@ -183,27 +217,22 @@ $(JGEN)jpegc0.dev : $(JPEG_MAK) $(ECHOGS_XE) $(jpegc0_)
$(JOBJ)jcomapi.$(OBJ) : $(JSRC)jcomapi.c $(JDEP)
$(CP_) $(JSRC)jcomapi.c $(GLGEN)jcomapi.c
$(JCC) $(JO_)jcomapi.$(OBJ) $(C_) $(GLGEN)jcomapi.c
- $(RM_) $(GLGEN)jcomapi.c
$(JOBJ)jutils.$(OBJ) : $(JSRC)jutils.c $(JDEP)
$(CP_) $(JSRC)jutils.c $(GLGEN)jutils.c
$(JCC) $(JO_)jutils.$(OBJ) $(C_) $(GLGEN)jutils.c
- $(RM_) $(GLGEN)jutils.c
$(JOBJ)jmemmgr.$(OBJ) : $(JSRC)jmemmgr.c $(JDEP)
$(CP_) $(JSRC)jmemmgr.c $(GLGEN)jmemmgr.c
$(JCC) $(JO_)jmemmgr.$(OBJ) $(C_) $(GLGEN)jmemmgr.c
- $(RM_) $(GLGEN)jmemmgr.c
$(JOBJ)jerror.$(OBJ) : $(JSRC)jerror.c $(JDEP)
$(CP_) $(JSRC)jerror.c $(GLGEN)jerror.c
$(JCC) $(JO_)jerror.$(OBJ) $(C_) $(GLGEN)jerror.c
- $(RM_) $(GLGEN)jerror.c
$(JOBJ)jaricom.$(OBJ) : $(JSRC)jaricom.c $(JDEP)
$(CP_) $(JSRC)jaricom.c $(GLGEN)jaricom.c
$(JCC) $(JO_)jaricom.$(OBJ) $(C_) $(GLGEN)jaricom.c
- $(RM_) $(GLGEN)jaricom.c
# Encoding (compression) code.
@@ -233,77 +262,62 @@ $(JGEN)jpege6.dev : $(JPEG_MAK) $(ECHOGS_XE) $(JGEN)jpegc0.dev $(jpege6) $(jpege
$(JOBJ)jcapimin.$(OBJ) : $(JSRC)jcapimin.c $(JDEP)
$(CP_) $(JSRC)jcapimin.c $(GLGEN)jcapimin.c
$(JCC) $(JO_)jcapimin.$(OBJ) $(C_) $(GLGEN)jcapimin.c
- $(RM_) $(GLGEN)jcapimin.c
$(JOBJ)jcapistd.$(OBJ) : $(JSRC)jcapistd.c $(JDEP)
$(CP_) $(JSRC)jcapistd.c $(GLGEN)jcapistd.c
$(JCC) $(JO_)jcapistd.$(OBJ) $(C_) $(GLGEN)jcapistd.c
- $(RM_) $(GLGEN)jcapistd.c
$(JOBJ)jcinit.$(OBJ) : $(JSRC)jcinit.c $(JDEP)
$(CP_) $(JSRC)jcinit.c $(GLGEN)jcinit.c
$(JCC) $(JO_)jcinit.$(OBJ) $(C_) $(GLGEN)jcinit.c
- $(RM_) $(GLGEN)jcinit.c
$(JOBJ)jccoefct.$(OBJ) : $(JSRC)jccoefct.c $(JDEP)
$(CP_) $(JSRC)jccoefct.c $(GLGEN)jccoefct.c
$(JCC) $(JO_)jccoefct.$(OBJ) $(C_) $(GLGEN)jccoefct.c
- $(RM_) $(GLGEN)jccoefct.c
$(JOBJ)jccolor.$(OBJ) : $(JSRC)jccolor.c $(JDEP)
$(CP_) $(JSRC)jccolor.c $(GLGEN)jccolor.c
$(JCC) $(JO_)jccolor.$(OBJ) $(C_) $(GLGEN)jccolor.c
- $(RM_) $(GLGEN)jccolor.c
$(JOBJ)jcdctmgr.$(OBJ) : $(JSRC)jcdctmgr.c $(JDEP)
$(CP_) $(JSRC)jcdctmgr.c $(GLGEN)jcdctmgr.c
$(JCC) $(JO_)jcdctmgr.$(OBJ) $(C_) $(GLGEN)jcdctmgr.c
- $(RM_) $(GLGEN)jcdctmgr.c
$(JOBJ)jchuff.$(OBJ) : $(JSRC)jchuff.c $(JDEP)
$(CP_) $(JSRC)jchuff.c $(GLGEN)jchuff.c
$(JCC) $(JO_)jchuff.$(OBJ) $(C_) $(GLGEN)jchuff.c
- $(RM_) $(GLGEN)jchuff.c
$(JOBJ)jcmainct.$(OBJ) : $(JSRC)jcmainct.c $(JDEP)
$(CP_) $(JSRC)jcmainct.c $(GLGEN)jcmainct.c
$(JCC) $(JO_)jcmainct.$(OBJ) $(C_) $(GLGEN)jcmainct.c
- $(RM_) $(GLGEN)jcmainct.c
$(JOBJ)jcmarker.$(OBJ) : $(JSRC)jcmarker.c $(JDEP)
$(CP_) $(JSRC)jcmarker.c $(GLGEN)jcmarker.c
$(JCC) $(JO_)jcmarker.$(OBJ) $(C_) $(GLGEN)jcmarker.c
- $(RM_) $(GLGEN)jcmarker.c
$(JOBJ)jcmaster.$(OBJ) : $(JSRC)jcmaster.c $(JDEP)
$(CP_) $(JSRC)jcmaster.c $(GLGEN)jcmaster.c
$(JCC) $(JO_)jcmaster.$(OBJ) $(C_) $(GLGEN)jcmaster.c
- $(RM_) $(GLGEN)jcmaster.c
$(JOBJ)jcparam.$(OBJ) : $(JSRC)jcparam.c $(JDEP)
$(CP_) $(JSRC)jcparam.c $(GLGEN)jcparam.c
$(JCC) $(JO_)jcparam.$(OBJ) $(C_) $(GLGEN)jcparam.c
- $(RM_) $(GLGEN)jcparam.c
$(JOBJ)jcprepct.$(OBJ) : $(JSRC)jcprepct.c $(JDEP)
$(CP_) $(JSRC)jcprepct.c $(GLGEN)jcprepct.c
$(JCC) $(JO_)jcprepct.$(OBJ) $(C_) $(GLGEN)jcprepct.c
- $(RM_) $(GLGEN)jcprepct.c
$(JOBJ)jcsample.$(OBJ) : $(JSRC)jcsample.c $(JDEP)
$(CP_) $(JSRC)jcsample.c $(GLGEN)jcsample.c
$(JCC) $(JO_)jcsample.$(OBJ) $(C_) $(GLGEN)jcsample.c
- $(RM_) $(GLGEN)jcsample.c
$(JOBJ)jfdctint.$(OBJ) : $(JSRC)jfdctint.c $(JDEP)
$(CP_) $(JSRC)jfdctint.c $(GLGEN)jfdctint.c
$(JCC) $(JO_)jfdctint.$(OBJ) $(C_) $(GLGEN)jfdctint.c
- $(RM_) $(GLGEN)jfdctint.c
$(JOBJ)jcarith.$(OBJ) : $(JSRC)jcarith.c $(JDEP)
$(CP_) $(JSRC)jcarith.c $(GLGEN)jcarith.c
$(JCC) $(JO_)jcarith.$(OBJ) $(C_) $(GLGEN)jcarith.c
- $(RM_) $(GLGEN)jcarith.c
# Decompression code
@@ -334,52 +348,42 @@ $(JGEN)jpegd6.dev : $(JPEG_MAK) $(ECHOGS_XE) $(JGEN)jpegc0.dev $(jpegd6) $(jpegd
$(JOBJ)jdapimin.$(OBJ) : $(JSRC)jdapimin.c $(JDEP)
$(CP_) $(JSRC)jdapimin.c $(GLGEN)jdapimin.c
$(JCC) $(JO_)jdapimin.$(OBJ) $(C_) $(GLGEN)jdapimin.c
- $(RM_) $(GLGEN)jdapimin.c
$(JOBJ)jdapistd.$(OBJ) : $(JSRC)jdapistd.c $(JDEP)
$(CP_) $(JSRC)jdapistd.c $(GLGEN)jdapistd.c
$(JCC) $(JO_)jdapistd.$(OBJ) $(C_) $(GLGEN)jdapistd.c
- $(RM_) $(GLGEN)jdapistd.c
$(JOBJ)jdcoefct.$(OBJ) : $(JSRC)jdcoefct.c $(JDEP)
$(CP_) $(JSRC)jdcoefct.c $(GLGEN)jdcoefct.c
$(JCC) $(JO_)jdcoefct.$(OBJ) $(C_) $(GLGEN)jdcoefct.c
- $(RM_) $(GLGEN)jdcoefct.c
$(JOBJ)jdcolor.$(OBJ) : $(JSRC)jdcolor.c $(JDEP)
$(CP_) $(JSRC)jdcolor.c $(GLGEN)jdcolor.c
$(JCC) $(JO_)jdcolor.$(OBJ) $(C_) $(GLGEN)jdcolor.c
- $(RM_) $(GLGEN)jdcolor.c
$(JOBJ)jddctmgr.$(OBJ) : $(JSRC)jddctmgr.c $(JDEP)
$(CP_) $(JSRC)jddctmgr.c $(GLGEN)jddctmgr.c
$(JCC) $(JO_)jddctmgr.$(OBJ) $(C_) $(GLGEN)jddctmgr.c
- $(RM_) $(GLGEN)jddctmgr.c
$(JOBJ)jdhuff.$(OBJ) : $(JSRC)jdhuff.c $(JDEP)
$(CP_) $(JSRC)jdhuff.c $(GLGEN)jdhuff.c
$(JCC) $(JO_)jdhuff.$(OBJ) $(C_) $(GLGEN)jdhuff.c
- $(RM_) $(GLGEN)jdhuff.c
$(JOBJ)jdinput.$(OBJ) : $(JSRC)jdinput.c $(JDEP)
$(CP_) $(JSRC)jdinput.c $(GLGEN)jdinput.c
$(JCC) $(JO_)jdinput.$(OBJ) $(C_) $(GLGEN)jdinput.c
- $(RM_) $(GLGEN)jdinput.c
$(JOBJ)jdmainct.$(OBJ) : $(JSRC)jdmainct.c $(JDEP)
$(CP_) $(JSRC)jdmainct.c $(GLGEN)jdmainct.c
$(JCC) $(JO_)jdmainct.$(OBJ) $(C_) $(GLGEN)jdmainct.c
- $(RM_) $(GLGEN)jdmainct.c
$(JOBJ)jdmarker.$(OBJ) : $(JSRC)jdmarker.c $(JDEP)
$(CP_) $(JSRC)jdmarker.c $(GLGEN)jdmarker.c
$(JCC) $(JO_)jdmarker.$(OBJ) $(C_) $(GLGEN)jdmarker.c
- $(RM_) $(GLGEN)jdmarker.c
$(JOBJ)jdmaster.$(OBJ) : $(JSRC)jdmaster.c $(JDEP)
$(CP_) $(JSRC)jdmaster.c $(GLGEN)jdmaster.c
$(JCC) $(JO_)jdmaster.$(OBJ) $(C_) $(GLGEN)jdmaster.c
- $(RM_) $(GLGEN)jdmaster.c
#$(JOBJ)jdhuff.$(OBJ) : $(JSRC)jdhuff.c $(JDEP)
# $(CP_) $(JSRC)jdhuff.c $(GLGEN)jdhuff.c
@@ -389,19 +393,15 @@ $(JOBJ)jdmaster.$(OBJ) : $(JSRC)jdmaster.c $(JDEP)
$(JOBJ)jdpostct.$(OBJ) : $(JSRC)jdpostct.c $(JDEP)
$(CP_) $(JSRC)jdpostct.c $(GLGEN)jdpostct.c
$(JCC) $(JO_)jdpostct.$(OBJ) $(C_) $(GLGEN)jdpostct.c
- $(RM_) $(GLGEN)jdpostct.c
$(JOBJ)jdsample.$(OBJ) : $(JSRC)jdsample.c $(JDEP)
$(CP_) $(JSRC)jdsample.c $(GLGEN)jdsample.c
$(JCC) $(JO_)jdsample.$(OBJ) $(C_) $(GLGEN)jdsample.c
- $(RM_) $(GLGEN)jdsample.c
$(JOBJ)jidctint.$(OBJ) : $(JSRC)jidctint.c $(JDEP)
$(CP_) $(JSRC)jidctint.c $(GLGEN)jidctint.c
$(JCC) $(JO_)jidctint.$(OBJ) $(C_) $(GLGEN)jidctint.c
- $(RM_) $(GLGEN)jidctint.c
$(JOBJ)jdarith.$(OBJ) : $(JSRC)jdarith.c $(JDEP)
$(CP_) $(JSRC)jdarith.c $(GLGEN)jdarith.c
$(JCC) $(JO_)jdarith.$(OBJ) $(C_) $(GLGEN)jdarith.c
- $(RM_) $(GLGEN)jdarith.c
diff --git a/base/jpegxr.mak b/base/jpegxr.mak
index 01bce19c..daa5f62f 100644
--- a/base/jpegxr.mak
+++ b/base/jpegxr.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/lcms2.mak b/base/lcms2.mak
index ebd745c2..a4224675 100644
--- a/base/lcms2.mak
+++ b/base/lcms2.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/lcms2mt.mak b/base/lcms2mt.mak
index 5d773817..68974579 100644
--- a/base/lcms2mt.mak
+++ b/base/lcms2mt.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -80,7 +80,7 @@ lcms2.config-clean :
# NB: we can't use the normal $(CC_) here because msvccmd.mak
# adds /Za which conflicts with the lcms source.
-LCMS2_CC=$(CC) $(D_)SHARE_LCMS=$(SHARE_LCMS)$(_D) $(GENOPT) $(CAPOPT) $(CFLAGS) $(LCMS2_CFLAGS) $(I_)$(LCMS2MTSRCDIR)$(D)include $(LCMS2CF_)
+LCMS2_CC=$(CC) $(CFLAGS_VISIBILITY) $(D_)SHARE_LCMS=$(SHARE_LCMS)$(_D) $(GENOPT) $(CAPOPT) $(CFLAGS) $(LCMS2_CFLAGS) $(I_)$(LCMS2MTSRCDIR)$(D)include $(LCMS2CF_)
LCMS2O_=$(O_)$(LCMS2OBJ)
# switch in the version of lcms2mt.dev we're actually using
diff --git a/base/lcups.mak b/base/lcups.mak
index da33fb04..e5974625 100644
--- a/base/lcups.mak
+++ b/base/lcups.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/lcupsi.mak b/base/lcupsi.mak
index 33f78124..5b861174 100644
--- a/base/lcupsi.mak
+++ b/base/lcupsi.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/ldf_jb2.mak b/base/ldf_jb2.mak
index 4adf0622..5005d80a 100644
--- a/base/ldf_jb2.mak
+++ b/base/ldf_jb2.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/leptonica.mak b/base/leptonica.mak
new file mode 100644
index 00000000..0929e376
--- /dev/null
+++ b/base/leptonica.mak
@@ -0,0 +1,644 @@
+LEPTINCLUDES=\
+ $(I_)$(LEPTONICADIR)/src$(_I)\
+ $(I_)$(GLSRCDIR)$(_I)\
+ $(I_)$(GLGENDIR)$(_I)
+
+LEPTCFLAGS_LOCAL=\
+ -DLEPTONICA_INTERCEPT_MALLOC=1\
+ -DHAVE_LIBJPEG=0\
+ -DHAVE_LIBTIFF=0\
+ -DHAVE_LIBPNG=0\
+ -DHAVE_LIBZ=0\
+ -DHAVE_LIBGIF=0\
+ -DHAVE_LIBUNGIF=0\
+ -DHAVE_LIBWEBP=0\
+ -DHAVE_LIBWEBP_ANIM=0\
+ -DHAVE_LIBJP2K=0
+
+LEPTCC = $(CC) $(CCFLAGS) $(LEPTINCLUDES) $(LEPTCFLAGS_LOCAL)
+LEPTOBJ = $(GLOBJDIR)$(D)leptonica_
+LEPTO_ = $(O_)$(LEPTOBJ)
+
+LEPTDEPS=\
+ $(arch_h)\
+ $(GLSRCDIR)/leptonica.mak\
+ $(MAKEDIRS)
+
+$(LEPTOBJ)adaptmap.$(OBJ) : $(LEPTONICADIR)/src/adaptmap.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)adaptmap.$(OBJ) $(C_) $(LEPTONICADIR)/src/adaptmap.c
+
+$(LEPTOBJ)affine.$(OBJ) : $(LEPTONICADIR)/src/affine.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)affine.$(OBJ) $(C_) $(LEPTONICADIR)/src/affine.c
+
+$(LEPTOBJ)affinecompose.$(OBJ) : $(LEPTONICADIR)/src/affinecompose.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)affinecompose.$(OBJ) $(C_) $(LEPTONICADIR)/src/affinecompose.c
+
+$(LEPTOBJ)arrayaccess.$(OBJ) : $(LEPTONICADIR)/src/arrayaccess.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)arrayaccess.$(OBJ) $(C_) $(LEPTONICADIR)/src/arrayaccess.c
+
+$(LEPTOBJ)baseline.$(OBJ) : $(LEPTONICADIR)/src/baseline.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)baseline.$(OBJ) $(C_) $(LEPTONICADIR)/src/baseline.c
+
+$(LEPTOBJ)bbuffer.$(OBJ) : $(LEPTONICADIR)/src/bbuffer.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bbuffer.$(OBJ) $(C_) $(LEPTONICADIR)/src/bbuffer.c
+
+$(LEPTOBJ)bilateral.$(OBJ) : $(LEPTONICADIR)/src/bilateral.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bilateral.$(OBJ) $(C_) $(LEPTONICADIR)/src/bilateral.c
+
+$(LEPTOBJ)bilinear.$(OBJ) : $(LEPTONICADIR)/src/bilinear.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bilinear.$(OBJ) $(C_) $(LEPTONICADIR)/src/bilinear.c
+
+$(LEPTOBJ)binexpand.$(OBJ) : $(LEPTONICADIR)/src/binexpand.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)binexpand.$(OBJ) $(C_) $(LEPTONICADIR)/src/binexpand.c
+
+$(LEPTOBJ)binreduce.$(OBJ) : $(LEPTONICADIR)/src/binreduce.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)binreduce.$(OBJ) $(C_) $(LEPTONICADIR)/src/binreduce.c
+
+$(LEPTOBJ)blend.$(OBJ) : $(LEPTONICADIR)/src/blend.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)blend.$(OBJ) $(C_) $(LEPTONICADIR)/src/blend.c
+
+$(LEPTOBJ)bmf.$(OBJ) : $(LEPTONICADIR)/src/bmf.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bmf.$(OBJ) $(C_) $(LEPTONICADIR)/src/bmf.c
+
+$(LEPTOBJ)bmpio.$(OBJ) : $(LEPTONICADIR)/src/bmpio.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bmpio.$(OBJ) $(C_) $(LEPTONICADIR)/src/bmpio.c
+
+$(LEPTOBJ)bmpiostub.$(OBJ) : $(LEPTONICADIR)/src/bmpiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bmpiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/bmpiostub.c
+
+$(LEPTOBJ)bootnumgen1.$(OBJ) : $(LEPTONICADIR)/src/bootnumgen1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bootnumgen1.$(OBJ) $(C_) $(LEPTONICADIR)/src/bootnumgen1.c
+
+$(LEPTOBJ)bootnumgen2.$(OBJ) : $(LEPTONICADIR)/src/bootnumgen2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bootnumgen2.$(OBJ) $(C_) $(LEPTONICADIR)/src/bootnumgen2.c
+
+$(LEPTOBJ)bootnumgen3.$(OBJ) : $(LEPTONICADIR)/src/bootnumgen3.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bootnumgen3.$(OBJ) $(C_) $(LEPTONICADIR)/src/bootnumgen3.c
+
+$(LEPTOBJ)bootnumgen4.$(OBJ) : $(LEPTONICADIR)/src/bootnumgen4.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bootnumgen4.$(OBJ) $(C_) $(LEPTONICADIR)/src/bootnumgen4.c
+
+$(LEPTOBJ)boxbasic.$(OBJ) : $(LEPTONICADIR)/src/boxbasic.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)boxbasic.$(OBJ) $(C_) $(LEPTONICADIR)/src/boxbasic.c
+
+$(LEPTOBJ)boxfunc1.$(OBJ) : $(LEPTONICADIR)/src/boxfunc1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)boxfunc1.$(OBJ) $(C_) $(LEPTONICADIR)/src/boxfunc1.c
+
+$(LEPTOBJ)boxfunc2.$(OBJ) : $(LEPTONICADIR)/src/boxfunc2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)boxfunc2.$(OBJ) $(C_) $(LEPTONICADIR)/src/boxfunc2.c
+
+$(LEPTOBJ)boxfunc3.$(OBJ) : $(LEPTONICADIR)/src/boxfunc3.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)boxfunc3.$(OBJ) $(C_) $(LEPTONICADIR)/src/boxfunc3.c
+
+$(LEPTOBJ)boxfunc4.$(OBJ) : $(LEPTONICADIR)/src/boxfunc4.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)boxfunc4.$(OBJ) $(C_) $(LEPTONICADIR)/src/boxfunc4.c
+
+$(LEPTOBJ)boxfunc5.$(OBJ) : $(LEPTONICADIR)/src/boxfunc5.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)boxfunc5.$(OBJ) $(C_) $(LEPTONICADIR)/src/boxfunc5.c
+
+$(LEPTOBJ)bytearray.$(OBJ) : $(LEPTONICADIR)/src/bytearray.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bytearray.$(OBJ) $(C_) $(LEPTONICADIR)/src/bytearray.c
+
+$(LEPTOBJ)ccbord.$(OBJ) : $(LEPTONICADIR)/src/ccbord.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)ccbord.$(OBJ) $(C_) $(LEPTONICADIR)/src/ccbord.c
+
+$(LEPTOBJ)classapp.$(OBJ) : $(LEPTONICADIR)/src/classapp.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)classapp.$(OBJ) $(C_) $(LEPTONICADIR)/src/classapp.c
+
+$(LEPTOBJ)colorcontent.$(OBJ) : $(LEPTONICADIR)/src/colorcontent.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colorcontent.$(OBJ) $(C_) $(LEPTONICADIR)/src/colorcontent.c
+
+$(LEPTOBJ)colorinfo.$(OBJ) : $(LEPTONICADIR)/src/colorinfo.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colorinfo.$(OBJ) $(C_) $(LEPTONICADIR)/src/colorinfo.c
+
+$(LEPTOBJ)coloring.$(OBJ) : $(LEPTONICADIR)/src/coloring.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)coloring.$(OBJ) $(C_) $(LEPTONICADIR)/src/coloring.c
+
+$(LEPTOBJ)colormap.$(OBJ) : $(LEPTONICADIR)/src/colormap.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colormap.$(OBJ) $(C_) $(LEPTONICADIR)/src/colormap.c
+
+$(LEPTOBJ)colormorph.$(OBJ) : $(LEPTONICADIR)/src/colormorph.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colormorph.$(OBJ) $(C_) $(LEPTONICADIR)/src/colormorph.c
+
+$(LEPTOBJ)colorquant1.$(OBJ) : $(LEPTONICADIR)/src/colorquant1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colorquant1.$(OBJ) $(C_) $(LEPTONICADIR)/src/colorquant1.c
+
+$(LEPTOBJ)colorquant2.$(OBJ) : $(LEPTONICADIR)/src/colorquant2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colorquant2.$(OBJ) $(C_) $(LEPTONICADIR)/src/colorquant2.c
+
+$(LEPTOBJ)colorseg.$(OBJ) : $(LEPTONICADIR)/src/colorseg.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colorseg.$(OBJ) $(C_) $(LEPTONICADIR)/src/colorseg.c
+
+$(LEPTOBJ)colorspace.$(OBJ) : $(LEPTONICADIR)/src/colorspace.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colorspace.$(OBJ) $(C_) $(LEPTONICADIR)/src/colorspace.c
+
+$(LEPTOBJ)compare.$(OBJ) : $(LEPTONICADIR)/src/compare.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)compare.$(OBJ) $(C_) $(LEPTONICADIR)/src/compare.c
+
+$(LEPTOBJ)conncomp.$(OBJ) : $(LEPTONICADIR)/src/conncomp.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)conncomp.$(OBJ) $(C_) $(LEPTONICADIR)/src/conncomp.c
+
+$(LEPTOBJ)convertfiles.$(OBJ) : $(LEPTONICADIR)/src/convertfiles.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)convertfiles.$(OBJ) $(C_) $(LEPTONICADIR)/src/convertfiles.c
+
+$(LEPTOBJ)convolve.$(OBJ) : $(LEPTONICADIR)/src/convolve.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)convolve.$(OBJ) $(C_) $(LEPTONICADIR)/src/convolve.c
+
+$(LEPTOBJ)correlscore.$(OBJ) : $(LEPTONICADIR)/src/correlscore.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)correlscore.$(OBJ) $(C_) $(LEPTONICADIR)/src/correlscore.c
+
+$(LEPTOBJ)dewarp1.$(OBJ) : $(LEPTONICADIR)/src/dewarp1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dewarp1.$(OBJ) $(C_) $(LEPTONICADIR)/src/dewarp1.c
+
+$(LEPTOBJ)dewarp2.$(OBJ) : $(LEPTONICADIR)/src/dewarp2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dewarp2.$(OBJ) $(C_) $(LEPTONICADIR)/src/dewarp2.c
+
+$(LEPTOBJ)dewarp3.$(OBJ) : $(LEPTONICADIR)/src/dewarp3.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dewarp3.$(OBJ) $(C_) $(LEPTONICADIR)/src/dewarp3.c
+
+$(LEPTOBJ)dewarp4.$(OBJ) : $(LEPTONICADIR)/src/dewarp4.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dewarp4.$(OBJ) $(C_) $(LEPTONICADIR)/src/dewarp4.c
+
+$(LEPTOBJ)dnabasic.$(OBJ) : $(LEPTONICADIR)/src/dnabasic.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dnabasic.$(OBJ) $(C_) $(LEPTONICADIR)/src/dnabasic.c
+
+$(LEPTOBJ)dnafunc1.$(OBJ) : $(LEPTONICADIR)/src/dnafunc1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dnafunc1.$(OBJ) $(C_) $(LEPTONICADIR)/src/dnafunc1.c
+
+$(LEPTOBJ)dnahash.$(OBJ) : $(LEPTONICADIR)/src/dnahash.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dnahash.$(OBJ) $(C_) $(LEPTONICADIR)/src/dnahash.c
+
+$(LEPTOBJ)dwacomb.2.$(OBJ) : $(LEPTONICADIR)/src/dwacomb.2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dwacomb.2.$(OBJ) $(C_) $(LEPTONICADIR)/src/dwacomb.2.c
+
+$(LEPTOBJ)dwacomblow.2.$(OBJ) : $(LEPTONICADIR)/src/dwacomblow.2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dwacomblow.2.$(OBJ) $(C_) $(LEPTONICADIR)/src/dwacomblow.2.c
+
+$(LEPTOBJ)edge.$(OBJ) : $(LEPTONICADIR)/src/edge.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)edge.$(OBJ) $(C_) $(LEPTONICADIR)/src/edge.c
+
+$(LEPTOBJ)encoding.$(OBJ) : $(LEPTONICADIR)/src/encoding.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)encoding.$(OBJ) $(C_) $(LEPTONICADIR)/src/encoding.c
+
+$(LEPTOBJ)enhance.$(OBJ) : $(LEPTONICADIR)/src/enhance.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)enhance.$(OBJ) $(C_) $(LEPTONICADIR)/src/enhance.c
+
+$(LEPTOBJ)fhmtauto.$(OBJ) : $(LEPTONICADIR)/src/fhmtauto.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fhmtauto.$(OBJ) $(C_) $(LEPTONICADIR)/src/fhmtauto.c
+
+$(LEPTOBJ)fhmtgenlow.1.$(OBJ) : $(LEPTONICADIR)/src/fhmtgenlow.1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fhmtgenlow.1.$(OBJ) $(C_) $(LEPTONICADIR)/src/fhmtgenlow.1.c
+
+$(LEPTOBJ)fmorphauto.$(OBJ) : $(LEPTONICADIR)/src/fmorphauto.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fmorphauto.$(OBJ) $(C_) $(LEPTONICADIR)/src/fmorphauto.c
+
+$(LEPTOBJ)fmorphgen.1.$(OBJ) : $(LEPTONICADIR)/src/fmorphgen.1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fmorphgen.1.$(OBJ) $(C_) $(LEPTONICADIR)/src/fmorphgen.1.c
+
+$(LEPTOBJ)fmorphgenlow.1.$(OBJ) : $(LEPTONICADIR)/src/fmorphgenlow.1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fmorphgenlow.1.$(OBJ) $(C_) $(LEPTONICADIR)/src/fmorphgenlow.1.c
+
+$(LEPTOBJ)fpix1.$(OBJ) : $(LEPTONICADIR)/src/fpix1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fpix1.$(OBJ) $(C_) $(LEPTONICADIR)/src/fpix1.c
+
+$(LEPTOBJ)fpix2.$(OBJ) : $(LEPTONICADIR)/src/fpix2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fpix2.$(OBJ) $(C_) $(LEPTONICADIR)/src/fpix2.c
+
+$(LEPTOBJ)gifiostub.$(OBJ) : $(LEPTONICADIR)/src/gifiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)gifiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/gifiostub.c
+
+$(LEPTOBJ)gplot.$(OBJ) : $(LEPTONICADIR)/src/gplot.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)gplot.$(OBJ) $(C_) $(LEPTONICADIR)/src/gplot.c
+
+$(LEPTOBJ)graphics.$(OBJ) : $(LEPTONICADIR)/src/graphics.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)graphics.$(OBJ) $(C_) $(LEPTONICADIR)/src/graphics.c
+
+$(LEPTOBJ)graymorph.$(OBJ) : $(LEPTONICADIR)/src/graymorph.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)graymorph.$(OBJ) $(C_) $(LEPTONICADIR)/src/graymorph.c
+
+$(LEPTOBJ)grayquant.$(OBJ) : $(LEPTONICADIR)/src/grayquant.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)grayquant.$(OBJ) $(C_) $(LEPTONICADIR)/src/grayquant.c
+
+$(LEPTOBJ)heap.$(OBJ) : $(LEPTONICADIR)/src/heap.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)heap.$(OBJ) $(C_) $(LEPTONICADIR)/src/heap.c
+
+$(LEPTOBJ)jbclass.$(OBJ) : $(LEPTONICADIR)/src/jbclass.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)jbclass.$(OBJ) $(C_) $(LEPTONICADIR)/src/jbclass.c
+
+$(LEPTOBJ)jp2kheader.$(OBJ) : $(LEPTONICADIR)/src/jp2kheader.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)jp2kheader.$(OBJ) $(C_) $(LEPTONICADIR)/src/jp2kheader.c
+
+$(LEPTOBJ)jp2kheaderstub.$(OBJ) : $(LEPTONICADIR)/src/jp2kheaderstub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)jp2kheaderstub.$(OBJ) $(C_) $(LEPTONICADIR)/src/jp2kheaderstub.c
+
+$(LEPTOBJ)jp2kiostub.$(OBJ) : $(LEPTONICADIR)/src/jp2kiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)jp2kiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/jp2kiostub.c
+
+$(LEPTOBJ)jpegiostub.$(OBJ) : $(LEPTONICADIR)/src/jpegiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)jpegiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/jpegiostub.c
+
+$(LEPTOBJ)kernel.$(OBJ) : $(LEPTONICADIR)/src/kernel.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)kernel.$(OBJ) $(C_) $(LEPTONICADIR)/src/kernel.c
+
+$(LEPTOBJ)libversions.$(OBJ) : $(LEPTONICADIR)/src/libversions.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)libversions.$(OBJ) $(C_) $(LEPTONICADIR)/src/libversions.c
+
+$(LEPTOBJ)list.$(OBJ) : $(LEPTONICADIR)/src/list.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)list.$(OBJ) $(C_) $(LEPTONICADIR)/src/list.c
+
+$(LEPTOBJ)map.$(OBJ) : $(LEPTONICADIR)/src/map.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)map.$(OBJ) $(C_) $(LEPTONICADIR)/src/map.c
+
+$(LEPTOBJ)morph.$(OBJ) : $(LEPTONICADIR)/src/morph.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)morph.$(OBJ) $(C_) $(LEPTONICADIR)/src/morph.c
+
+$(LEPTOBJ)morphapp.$(OBJ) : $(LEPTONICADIR)/src/morphapp.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)morphapp.$(OBJ) $(C_) $(LEPTONICADIR)/src/morphapp.c
+
+$(LEPTOBJ)morphdwa.$(OBJ) : $(LEPTONICADIR)/src/morphdwa.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)morphdwa.$(OBJ) $(C_) $(LEPTONICADIR)/src/morphdwa.c
+
+$(LEPTOBJ)morphseq.$(OBJ) : $(LEPTONICADIR)/src/morphseq.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)morphseq.$(OBJ) $(C_) $(LEPTONICADIR)/src/morphseq.c
+
+$(LEPTOBJ)numabasic.$(OBJ) : $(LEPTONICADIR)/src/numabasic.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)numabasic.$(OBJ) $(C_) $(LEPTONICADIR)/src/numabasic.c
+
+$(LEPTOBJ)numafunc1.$(OBJ) : $(LEPTONICADIR)/src/numafunc1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)numafunc1.$(OBJ) $(C_) $(LEPTONICADIR)/src/numafunc1.c
+
+$(LEPTOBJ)numafunc2.$(OBJ) : $(LEPTONICADIR)/src/numafunc2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)numafunc2.$(OBJ) $(C_) $(LEPTONICADIR)/src/numafunc2.c
+
+$(LEPTOBJ)pageseg.$(OBJ) : $(LEPTONICADIR)/src/pageseg.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pageseg.$(OBJ) $(C_) $(LEPTONICADIR)/src/pageseg.c
+
+$(LEPTOBJ)paintcmap.$(OBJ) : $(LEPTONICADIR)/src/paintcmap.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)paintcmap.$(OBJ) $(C_) $(LEPTONICADIR)/src/paintcmap.c
+
+$(LEPTOBJ)partify.$(OBJ) : $(LEPTONICADIR)/src/partify.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)partify.$(OBJ) $(C_) $(LEPTONICADIR)/src/partify.c
+
+$(LEPTOBJ)partition.$(OBJ) : $(LEPTONICADIR)/src/partition.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)partition.$(OBJ) $(C_) $(LEPTONICADIR)/src/partition.c
+
+$(LEPTOBJ)pdfio1.$(OBJ) : $(LEPTONICADIR)/src/pdfio1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pdfio1.$(OBJ) $(C_) $(LEPTONICADIR)/src/pdfio1.c
+
+$(LEPTOBJ)pdfio1stub.$(OBJ) : $(LEPTONICADIR)/src/pdfio1stub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pdfio1stub.$(OBJ) $(C_) $(LEPTONICADIR)/src/pdfio1stub.c
+
+$(LEPTOBJ)pdfio2.$(OBJ) : $(LEPTONICADIR)/src/pdfio2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pdfio2.$(OBJ) $(C_) $(LEPTONICADIR)/src/pdfio2.c
+
+$(LEPTOBJ)pdfio2stub.$(OBJ) : $(LEPTONICADIR)/src/pdfio2stub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pdfio2stub.$(OBJ) $(C_) $(LEPTONICADIR)/src/pdfio2stub.c
+
+$(LEPTOBJ)pix1.$(OBJ) : $(LEPTONICADIR)/src/pix1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pix1.$(OBJ) $(C_) $(LEPTONICADIR)/src/pix1.c
+
+$(LEPTOBJ)pix2.$(OBJ) : $(LEPTONICADIR)/src/pix2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pix2.$(OBJ) $(C_) $(LEPTONICADIR)/src/pix2.c
+
+$(LEPTOBJ)pix3.$(OBJ) : $(LEPTONICADIR)/src/pix3.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pix3.$(OBJ) $(C_) $(LEPTONICADIR)/src/pix3.c
+
+$(LEPTOBJ)pix4.$(OBJ) : $(LEPTONICADIR)/src/pix4.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pix4.$(OBJ) $(C_) $(LEPTONICADIR)/src/pix4.c
+
+$(LEPTOBJ)pix5.$(OBJ) : $(LEPTONICADIR)/src/pix5.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pix5.$(OBJ) $(C_) $(LEPTONICADIR)/src/pix5.c
+
+$(LEPTOBJ)pixabasic.$(OBJ) : $(LEPTONICADIR)/src/pixabasic.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixabasic.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixabasic.c
+
+$(LEPTOBJ)pixacc.$(OBJ) : $(LEPTONICADIR)/src/pixacc.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixacc.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixacc.c
+
+$(LEPTOBJ)pixafunc1.$(OBJ) : $(LEPTONICADIR)/src/pixafunc1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixafunc1.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixafunc1.c
+
+$(LEPTOBJ)pixafunc2.$(OBJ) : $(LEPTONICADIR)/src/pixafunc2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixafunc2.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixafunc2.c
+
+$(LEPTOBJ)pixalloc.$(OBJ) : $(LEPTONICADIR)/src/pixalloc.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixalloc.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixalloc.c
+
+$(LEPTOBJ)pixarith.$(OBJ) : $(LEPTONICADIR)/src/pixarith.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixarith.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixarith.c
+
+$(LEPTOBJ)pixcomp.$(OBJ) : $(LEPTONICADIR)/src/pixcomp.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixcomp.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixcomp.c
+
+$(LEPTOBJ)pixconv.$(OBJ) : $(LEPTONICADIR)/src/pixconv.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixconv.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixconv.c
+
+$(LEPTOBJ)pixlabel.$(OBJ) : $(LEPTONICADIR)/src/pixlabel.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixlabel.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixlabel.c
+
+$(LEPTOBJ)pixtiling.$(OBJ) : $(LEPTONICADIR)/src/pixtiling.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixtiling.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixtiling.c
+
+$(LEPTOBJ)pngiostub.$(OBJ) : $(LEPTONICADIR)/src/pngiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pngiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/pngiostub.c
+
+$(LEPTOBJ)pnmio.$(OBJ) : $(LEPTONICADIR)/src/pnmio.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pnmio.$(OBJ) $(C_) $(LEPTONICADIR)/src/pnmio.c
+
+$(LEPTOBJ)pnmiostub.$(OBJ) : $(LEPTONICADIR)/src/pnmiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pnmiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/pnmiostub.c
+
+$(LEPTOBJ)projective.$(OBJ) : $(LEPTONICADIR)/src/projective.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)projective.$(OBJ) $(C_) $(LEPTONICADIR)/src/projective.c
+
+$(LEPTOBJ)psio1.$(OBJ) : $(LEPTONICADIR)/src/psio1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)psio1.$(OBJ) $(C_) $(LEPTONICADIR)/src/psio1.c
+
+$(LEPTOBJ)psio1stub.$(OBJ) : $(LEPTONICADIR)/src/psio1stub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)psio1stub.$(OBJ) $(C_) $(LEPTONICADIR)/src/psio1stub.c
+
+$(LEPTOBJ)psio2.$(OBJ) : $(LEPTONICADIR)/src/psio2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)psio2.$(OBJ) $(C_) $(LEPTONICADIR)/src/psio2.c
+
+$(LEPTOBJ)psio2stub.$(OBJ) : $(LEPTONICADIR)/src/psio2stub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)psio2stub.$(OBJ) $(C_) $(LEPTONICADIR)/src/psio2stub.c
+
+$(LEPTOBJ)ptabasic.$(OBJ) : $(LEPTONICADIR)/src/ptabasic.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)ptabasic.$(OBJ) $(C_) $(LEPTONICADIR)/src/ptabasic.c
+
+$(LEPTOBJ)ptafunc1.$(OBJ) : $(LEPTONICADIR)/src/ptafunc1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)ptafunc1.$(OBJ) $(C_) $(LEPTONICADIR)/src/ptafunc1.c
+
+$(LEPTOBJ)ptafunc2.$(OBJ) : $(LEPTONICADIR)/src/ptafunc2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)ptafunc2.$(OBJ) $(C_) $(LEPTONICADIR)/src/ptafunc2.c
+
+$(LEPTOBJ)ptra.$(OBJ) : $(LEPTONICADIR)/src/ptra.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)ptra.$(OBJ) $(C_) $(LEPTONICADIR)/src/ptra.c
+
+$(LEPTOBJ)quadtree.$(OBJ) : $(LEPTONICADIR)/src/quadtree.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)quadtree.$(OBJ) $(C_) $(LEPTONICADIR)/src/quadtree.c
+
+$(LEPTOBJ)queue.$(OBJ) : $(LEPTONICADIR)/src/queue.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)queue.$(OBJ) $(C_) $(LEPTONICADIR)/src/queue.c
+
+$(LEPTOBJ)rank.$(OBJ) : $(LEPTONICADIR)/src/rank.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rank.$(OBJ) $(C_) $(LEPTONICADIR)/src/rank.c
+
+$(LEPTOBJ)rbtree.$(OBJ) : $(LEPTONICADIR)/src/rbtree.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rbtree.$(OBJ) $(C_) $(LEPTONICADIR)/src/rbtree.c
+
+$(LEPTOBJ)readfile.$(OBJ) : $(LEPTONICADIR)/src/readfile.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)readfile.$(OBJ) $(C_) $(LEPTONICADIR)/src/readfile.c
+
+$(LEPTOBJ)regutils.$(OBJ) : $(LEPTONICADIR)/src/regutils.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)regutils.$(OBJ) $(C_) $(LEPTONICADIR)/src/regutils.c
+
+$(LEPTOBJ)rop.$(OBJ) : $(LEPTONICADIR)/src/rop.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rop.$(OBJ) $(C_) $(LEPTONICADIR)/src/rop.c
+
+$(LEPTOBJ)roplow.$(OBJ) : $(LEPTONICADIR)/src/roplow.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)roplow.$(OBJ) $(C_) $(LEPTONICADIR)/src/roplow.c
+
+$(LEPTOBJ)rotate.$(OBJ) : $(LEPTONICADIR)/src/rotate.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rotate.$(OBJ) $(C_) $(LEPTONICADIR)/src/rotate.c
+
+$(LEPTOBJ)rotateam.$(OBJ) : $(LEPTONICADIR)/src/rotateam.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rotateam.$(OBJ) $(C_) $(LEPTONICADIR)/src/rotateam.c
+
+$(LEPTOBJ)rotateorth.$(OBJ) : $(LEPTONICADIR)/src/rotateorth.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rotateorth.$(OBJ) $(C_) $(LEPTONICADIR)/src/rotateorth.c
+
+$(LEPTOBJ)rotateshear.$(OBJ) : $(LEPTONICADIR)/src/rotateshear.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rotateshear.$(OBJ) $(C_) $(LEPTONICADIR)/src/rotateshear.c
+
+$(LEPTOBJ)runlength.$(OBJ) : $(LEPTONICADIR)/src/runlength.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)runlength.$(OBJ) $(C_) $(LEPTONICADIR)/src/runlength.c
+
+$(LEPTOBJ)sarray1.$(OBJ) : $(LEPTONICADIR)/src/sarray1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)sarray1.$(OBJ) $(C_) $(LEPTONICADIR)/src/sarray1.c
+
+$(LEPTOBJ)sarray2.$(OBJ) : $(LEPTONICADIR)/src/sarray2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)sarray2.$(OBJ) $(C_) $(LEPTONICADIR)/src/sarray2.c
+
+$(LEPTOBJ)scale1.$(OBJ) : $(LEPTONICADIR)/src/scale1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)scale1.$(OBJ) $(C_) $(LEPTONICADIR)/src/scale1.c
+
+$(LEPTOBJ)scale2.$(OBJ) : $(LEPTONICADIR)/src/scale2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)scale2.$(OBJ) $(C_) $(LEPTONICADIR)/src/scale2.c
+
+$(LEPTOBJ)seedfill.$(OBJ) : $(LEPTONICADIR)/src/seedfill.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)seedfill.$(OBJ) $(C_) $(LEPTONICADIR)/src/seedfill.c
+
+$(LEPTOBJ)sel1.$(OBJ) : $(LEPTONICADIR)/src/sel1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)sel1.$(OBJ) $(C_) $(LEPTONICADIR)/src/sel1.c
+
+$(LEPTOBJ)sel2.$(OBJ) : $(LEPTONICADIR)/src/sel2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)sel2.$(OBJ) $(C_) $(LEPTONICADIR)/src/sel2.c
+
+$(LEPTOBJ)selgen.$(OBJ) : $(LEPTONICADIR)/src/selgen.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)selgen.$(OBJ) $(C_) $(LEPTONICADIR)/src/selgen.c
+
+$(LEPTOBJ)shear.$(OBJ) : $(LEPTONICADIR)/src/shear.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)shear.$(OBJ) $(C_) $(LEPTONICADIR)/src/shear.c
+
+$(LEPTOBJ)skew.$(OBJ) : $(LEPTONICADIR)/src/skew.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)skew.$(OBJ) $(C_) $(LEPTONICADIR)/src/skew.c
+
+$(LEPTOBJ)spixio.$(OBJ) : $(LEPTONICADIR)/src/spixio.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)spixio.$(OBJ) $(C_) $(LEPTONICADIR)/src/spixio.c
+
+$(LEPTOBJ)stack.$(OBJ) : $(LEPTONICADIR)/src/stack.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)stack.$(OBJ) $(C_) $(LEPTONICADIR)/src/stack.c
+
+$(LEPTOBJ)stringcode.$(OBJ) : $(LEPTONICADIR)/src/stringcode.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)stringcode.$(OBJ) $(C_) $(LEPTONICADIR)/src/stringcode.c
+
+$(LEPTOBJ)strokes.$(OBJ) : $(LEPTONICADIR)/src/strokes.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)strokes.$(OBJ) $(C_) $(LEPTONICADIR)/src/strokes.c
+
+$(LEPTOBJ)sudoku.$(OBJ) : $(LEPTONICADIR)/src/sudoku.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)sudoku.$(OBJ) $(C_) $(LEPTONICADIR)/src/sudoku.c
+
+$(LEPTOBJ)textops.$(OBJ) : $(LEPTONICADIR)/src/textops.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)textops.$(OBJ) $(C_) $(LEPTONICADIR)/src/textops.c
+
+$(LEPTOBJ)tiffiostub.$(OBJ) : $(LEPTONICADIR)/src/tiffiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)tiffiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/tiffiostub.c
+
+$(LEPTOBJ)utils1.$(OBJ) : $(LEPTONICADIR)/src/utils1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)utils1.$(OBJ) $(C_) $(LEPTONICADIR)/src/utils1.c
+
+$(LEPTOBJ)utils2.$(OBJ) : $(LEPTONICADIR)/src/utils2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)utils2.$(OBJ) $(C_) $(LEPTONICADIR)/src/utils2.c
+
+$(LEPTOBJ)warper.$(OBJ) : $(LEPTONICADIR)/src/warper.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)warper.$(OBJ) $(C_) $(LEPTONICADIR)/src/warper.c
+
+$(LEPTOBJ)webpiostub.$(OBJ) : $(LEPTONICADIR)/src/webpiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)webpiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/webpiostub.c
+
+$(LEPTOBJ)writefile.$(OBJ) : $(LEPTONICADIR)/src/writefile.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)writefile.$(OBJ) $(C_) $(LEPTONICADIR)/src/writefile.c
+
+$(LEPTOBJ)zlibmem.$(OBJ) : $(LEPTONICADIR)/src/zlibmem.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)zlibmem.$(OBJ) $(C_) $(LEPTONICADIR)/src/zlibmem.c
+
+$(LEPTOBJ)zlibmemstub.$(OBJ) : $(LEPTONICADIR)/src/zlibmemstub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)zlibmemstub.$(OBJ) $(C_) $(LEPTONICADIR)/src/zlibmemstub.c
+
+LEPTONICA_OBJS=\
+ $(LEPTOBJ)adaptmap.$(OBJ)\
+ $(LEPTOBJ)affine.$(OBJ)\
+ $(LEPTOBJ)affinecompose.$(OBJ)\
+ $(LEPTOBJ)arrayaccess.$(OBJ)\
+ $(LEPTOBJ)baseline.$(OBJ)\
+ $(LEPTOBJ)bbuffer.$(OBJ)\
+ $(LEPTOBJ)bilateral.$(OBJ)\
+ $(LEPTOBJ)bilinear.$(OBJ)\
+ $(LEPTOBJ)binexpand.$(OBJ)\
+ $(LEPTOBJ)binreduce.$(OBJ)\
+ $(LEPTOBJ)blend.$(OBJ)\
+ $(LEPTOBJ)bmf.$(OBJ)\
+ $(LEPTOBJ)bmpio.$(OBJ)\
+ $(LEPTOBJ)bmpiostub.$(OBJ)\
+ $(LEPTOBJ)bootnumgen1.$(OBJ)\
+ $(LEPTOBJ)bootnumgen2.$(OBJ)\
+ $(LEPTOBJ)bootnumgen3.$(OBJ)\
+ $(LEPTOBJ)bootnumgen4.$(OBJ)\
+ $(LEPTOBJ)boxbasic.$(OBJ)\
+ $(LEPTOBJ)boxfunc1.$(OBJ)\
+ $(LEPTOBJ)boxfunc2.$(OBJ)\
+ $(LEPTOBJ)boxfunc3.$(OBJ)\
+ $(LEPTOBJ)boxfunc4.$(OBJ)\
+ $(LEPTOBJ)boxfunc5.$(OBJ)\
+ $(LEPTOBJ)bytearray.$(OBJ)\
+ $(LEPTOBJ)ccbord.$(OBJ)\
+ $(LEPTOBJ)classapp.$(OBJ)\
+ $(LEPTOBJ)colorcontent.$(OBJ)\
+ $(LEPTOBJ)colorinfo.$(OBJ)\
+ $(LEPTOBJ)coloring.$(OBJ)\
+ $(LEPTOBJ)colormap.$(OBJ)\
+ $(LEPTOBJ)colormorph.$(OBJ)\
+ $(LEPTOBJ)colorquant1.$(OBJ)\
+ $(LEPTOBJ)colorquant2.$(OBJ)\
+ $(LEPTOBJ)colorseg.$(OBJ)\
+ $(LEPTOBJ)colorspace.$(OBJ)\
+ $(LEPTOBJ)compare.$(OBJ)\
+ $(LEPTOBJ)conncomp.$(OBJ)\
+ $(LEPTOBJ)convertfiles.$(OBJ)\
+ $(LEPTOBJ)convolve.$(OBJ)\
+ $(LEPTOBJ)correlscore.$(OBJ)\
+ $(LEPTOBJ)dewarp1.$(OBJ)\
+ $(LEPTOBJ)dewarp2.$(OBJ)\
+ $(LEPTOBJ)dewarp3.$(OBJ)\
+ $(LEPTOBJ)dewarp4.$(OBJ)\
+ $(LEPTOBJ)dnabasic.$(OBJ)\
+ $(LEPTOBJ)dnafunc1.$(OBJ)\
+ $(LEPTOBJ)dnahash.$(OBJ)\
+ $(LEPTOBJ)dwacomb.2.$(OBJ)\
+ $(LEPTOBJ)dwacomblow.2.$(OBJ)\
+ $(LEPTOBJ)edge.$(OBJ)\
+ $(LEPTOBJ)encoding.$(OBJ)\
+ $(LEPTOBJ)enhance.$(OBJ)\
+ $(LEPTOBJ)fhmtauto.$(OBJ)\
+ $(LEPTOBJ)fhmtgenlow.1.$(OBJ)\
+ $(LEPTOBJ)fmorphauto.$(OBJ)\
+ $(LEPTOBJ)fmorphgen.1.$(OBJ)\
+ $(LEPTOBJ)fmorphgenlow.1.$(OBJ)\
+ $(LEPTOBJ)fpix1.$(OBJ)\
+ $(LEPTOBJ)fpix2.$(OBJ)\
+ $(LEPTOBJ)gifiostub.$(OBJ)\
+ $(LEPTOBJ)gplot.$(OBJ)\
+ $(LEPTOBJ)graphics.$(OBJ)\
+ $(LEPTOBJ)graymorph.$(OBJ)\
+ $(LEPTOBJ)grayquant.$(OBJ)\
+ $(LEPTOBJ)heap.$(OBJ)\
+ $(LEPTOBJ)jbclass.$(OBJ)\
+ $(LEPTOBJ)jp2kheader.$(OBJ)\
+ $(LEPTOBJ)jp2kheaderstub.$(OBJ)\
+ $(LEPTOBJ)jp2kiostub.$(OBJ)\
+ $(LEPTOBJ)jpegiostub.$(OBJ)\
+ $(LEPTOBJ)kernel.$(OBJ)\
+ $(LEPTOBJ)libversions.$(OBJ)\
+ $(LEPTOBJ)list.$(OBJ)\
+ $(LEPTOBJ)map.$(OBJ)\
+ $(LEPTOBJ)morph.$(OBJ)\
+ $(LEPTOBJ)morphapp.$(OBJ)\
+ $(LEPTOBJ)morphdwa.$(OBJ)\
+ $(LEPTOBJ)morphseq.$(OBJ)\
+ $(LEPTOBJ)numabasic.$(OBJ)\
+ $(LEPTOBJ)numafunc1.$(OBJ)\
+ $(LEPTOBJ)numafunc2.$(OBJ)\
+ $(LEPTOBJ)pageseg.$(OBJ)\
+ $(LEPTOBJ)paintcmap.$(OBJ)\
+ $(LEPTOBJ)partify.$(OBJ)\
+ $(LEPTOBJ)partition.$(OBJ)\
+ $(LEPTOBJ)pdfio1.$(OBJ)\
+ $(LEPTOBJ)pdfio1stub.$(OBJ)\
+ $(LEPTOBJ)pdfio2.$(OBJ)\
+ $(LEPTOBJ)pdfio2stub.$(OBJ)\
+ $(LEPTOBJ)pix1.$(OBJ)\
+ $(LEPTOBJ)pix2.$(OBJ)\
+ $(LEPTOBJ)pix3.$(OBJ)\
+ $(LEPTOBJ)pix4.$(OBJ)\
+ $(LEPTOBJ)pix5.$(OBJ)\
+ $(LEPTOBJ)pixabasic.$(OBJ)\
+ $(LEPTOBJ)pixacc.$(OBJ)\
+ $(LEPTOBJ)pixafunc1.$(OBJ)\
+ $(LEPTOBJ)pixafunc2.$(OBJ)\
+ $(LEPTOBJ)pixalloc.$(OBJ)\
+ $(LEPTOBJ)pixarith.$(OBJ)\
+ $(LEPTOBJ)pixcomp.$(OBJ)\
+ $(LEPTOBJ)pixconv.$(OBJ)\
+ $(LEPTOBJ)pixlabel.$(OBJ)\
+ $(LEPTOBJ)pixtiling.$(OBJ)\
+ $(LEPTOBJ)pngiostub.$(OBJ)\
+ $(LEPTOBJ)pnmio.$(OBJ)\
+ $(LEPTOBJ)pnmiostub.$(OBJ)\
+ $(LEPTOBJ)projective.$(OBJ)\
+ $(LEPTOBJ)psio1.$(OBJ)\
+ $(LEPTOBJ)psio1stub.$(OBJ)\
+ $(LEPTOBJ)psio2.$(OBJ)\
+ $(LEPTOBJ)psio2stub.$(OBJ)\
+ $(LEPTOBJ)ptabasic.$(OBJ)\
+ $(LEPTOBJ)ptafunc1.$(OBJ)\
+ $(LEPTOBJ)ptafunc2.$(OBJ)\
+ $(LEPTOBJ)ptra.$(OBJ)\
+ $(LEPTOBJ)quadtree.$(OBJ)\
+ $(LEPTOBJ)queue.$(OBJ)\
+ $(LEPTOBJ)rank.$(OBJ)\
+ $(LEPTOBJ)rbtree.$(OBJ)\
+ $(LEPTOBJ)readfile.$(OBJ)\
+ $(LEPTOBJ)regutils.$(OBJ)\
+ $(LEPTOBJ)rop.$(OBJ)\
+ $(LEPTOBJ)roplow.$(OBJ)\
+ $(LEPTOBJ)rotate.$(OBJ)\
+ $(LEPTOBJ)rotateam.$(OBJ)\
+ $(LEPTOBJ)rotateorth.$(OBJ)\
+ $(LEPTOBJ)rotateshear.$(OBJ)\
+ $(LEPTOBJ)runlength.$(OBJ)\
+ $(LEPTOBJ)sarray1.$(OBJ)\
+ $(LEPTOBJ)sarray2.$(OBJ)\
+ $(LEPTOBJ)scale1.$(OBJ)\
+ $(LEPTOBJ)scale2.$(OBJ)\
+ $(LEPTOBJ)seedfill.$(OBJ)\
+ $(LEPTOBJ)sel1.$(OBJ)\
+ $(LEPTOBJ)sel2.$(OBJ)\
+ $(LEPTOBJ)selgen.$(OBJ)\
+ $(LEPTOBJ)shear.$(OBJ)\
+ $(LEPTOBJ)skew.$(OBJ)\
+ $(LEPTOBJ)spixio.$(OBJ)\
+ $(LEPTOBJ)stack.$(OBJ)\
+ $(LEPTOBJ)stringcode.$(OBJ)\
+ $(LEPTOBJ)sudoku.$(OBJ)\
+ $(LEPTOBJ)textops.$(OBJ)\
+ $(LEPTOBJ)tiffiostub.$(OBJ)\
+ $(LEPTOBJ)utils1.$(OBJ)\
+ $(LEPTOBJ)utils2.$(OBJ)\
+ $(LEPTOBJ)warper.$(OBJ)\
+ $(LEPTOBJ)webpiostub.$(OBJ)\
+ $(LEPTOBJ)writefile.$(OBJ)\
+ $(LEPTOBJ)zlibmem.$(OBJ)\
+ $(LEPTOBJ)zlibmemstub.$(OBJ)
+
+# $(LEPTOBJ)strokes.$(OBJ)\
diff --git a/base/lib.mak b/base/lib.mak
index ac5eae19..0c2dffb9 100644
--- a/base/lib.mak
+++ b/base/lib.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -426,8 +426,7 @@ $(GLOBJ)aes.$(OBJ) : $(GLSRC)aes.c $(AK) $(string__h) $(aes_h) $(LIB_MAK) $(MAKE
### Include files
-gsalpha_h=$(GLSRC)gsalpha.h
-gsccode_h=$(GLSRC)gsccode.h
+gsccode_h=$(GLSRC)gsccode.h $(std_h) $(stdint__h) $(gstypes_h)
gsccolor_h=$(GLSRC)gsccolor.h
# gscedata.[ch] are generated automatically by lib/encs2c.ps.
gscedata_h=$(GLSRC)gscedata.h
@@ -620,6 +619,7 @@ siinterp_h=$(GLSRC)siinterp.h
siscale_h=$(GLSRC)siscale.h
sidscale_h=$(GLSRC)sidscale.h
simscale_h=$(GLSRC)simscale.h
+simscale_foo_h=$(GLSRC)simscale_foo.h
gximage_h=$(GLSRC)gximage.h
gxhldevc_h=$(GLSRC)gxhldevc.h
gsptype2_h=$(GLSRC)gsptype2.h
@@ -916,10 +916,6 @@ $(GLOBJ)gxstroke.$(OBJ) : $(GLSRC)gxstroke.c $(AK) $(gx_h)\
###### Higher-level facilities
-$(GLOBJ)gsalpha.$(OBJ) : $(GLSRC)gsalpha.c $(AK) $(gx_h)\
- $(gsalpha_h) $(gxdcolor_h) $(gzstate_h) $(LIB_MAK) $(MAKEDIRS)
- $(GLCC) $(GLO_)gsalpha.$(OBJ) $(C_) $(GLSRC)gsalpha.c
-
# gscedata.[ch] are generated automatically by lib/encs2c.ps.
$(GLOBJ)gscedata.$(OBJ) : $(GLSRC)gscedata.c\
$(stdpre_h) $(gstypes_h) $(gscedata_h) $(LIB_MAK) $(MAKEDIRS)
@@ -952,7 +948,8 @@ $(GLOBJ)gscspace.$(OBJ) : $(GLSRC)gscspace.c $(AK) $(gx_h)\
$(gserrors_h) $(memory__h) $(gsstruct_h) $(gsccolor_h) $(gsutil_h)\
$(gxcmap_h) $(gxcspace_h) $(gxgstate_h) $(gsovrc_h) $(gsstate_h)\
$(gsdevice_h) $(gxdevcli_h) $(gzstate_h) $(gsnamecl_h) $(stream_h)\
- $(gsicc_h) $(gsicc_manage_h) $(string__h) $(LIB_MAK) $(MAKEDIRS)
+ $(gsicc_h) $(gsicc_manage_h) $(string__h) $(strmio_h) $(gsicc_cache_h)\
+ $(LIB_MAK) $(MAKEDIRS)
$(GLCC) $(GLO_)gscspace.$(OBJ) $(C_) $(GLSRC)gscspace.c
$(GLOBJ)gscicach.$(OBJ) : $(GLSRC)gscicach.c $(AK) $(gx_h)\
@@ -1083,6 +1080,10 @@ $(GLOBJ)gsparams.$(OBJ) : $(GLSRC)gsparams.c $(AK) $(gx_h)\
$(gserrors_h) $(memory__h) $(gsparams_h) $(LIB_MAK) $(MAKEDIRS)
$(GLCC) $(GLO_)gsparams.$(OBJ) $(C_) $(GLSRC)gsparams.c
+$(GLOBJ)gsparaml.$(OBJ) : $(GLSRC)gsparaml.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gsparam_h) $(string__h) $(LIB_MAK) $(MAKEDIRS)
+ $(GLCC) $(GLO_)gsparaml.$(OBJ) $(C_) $(GLSRC)gsparaml.c
+
$(GLOBJ)gspath.$(OBJ) : $(GLSRC)gspath.c $(AK) $(gx_h) $(gserrors_h)\
$(math__h) $(gscoord_h) $(gspath_h)\
$(gxdevice_h) $(gxdevmem_h) $(gxfixed_h) $(gxmatrix_h)\
@@ -1091,10 +1092,11 @@ $(GLOBJ)gspath.$(OBJ) : $(GLSRC)gspath.c $(AK) $(gx_h) $(gserrors_h)\
$(GLOBJ)gsstate.$(OBJ) : $(GLSRC)gsstate.c $(AK) $(gx_h) $(gserrors_h)\
$(memory__h) $(gsstruct_h) $(gsutil_h) $(gzstate_h) $(gxcspace_h)\
- $(gsalpha_h) $(gscolor2_h) $(gscoord_h) $(gscie_h)\
+ $(gscolor2_h) $(gscoord_h) $(gscie_h)\
$(gxclipsr_h) $(gxcmap_h) $(gxdevice_h) $(gxpcache_h)\
$(gzht_h) $(gzline_h) $(gspath_h) $(gzpath_h) $(gzcpath_h)\
- $(gsovrc_h) $(gxcolor2_h) $(gxpcolor_h) $(gsicc_manage_h) $(LIB_MAK) $(MAKEDIRS)
+ $(gsovrc_h) $(gxcolor2_h) $(gscolor3_h) $(gxpcolor_h) $(gsicc_manage_h)\
+ $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
$(GLCC) $(GLO_)gsstate.$(OBJ) $(C_) $(GLSRC)gsstate.c
$(GLOBJ)gstext.$(OBJ) : $(GLSRC)gstext.c $(AK) $(memory__h) $(gdebug_h)\
@@ -1231,7 +1233,7 @@ $(GLOBJ)gdevplnx.$(OBJ) : $(GLSRC)gdevplnx.c $(AK) $(gx_h)\
$(gserrors_h) $(gsbitops_h) $(gsrop_h) $(gsstruct_h) $(gsutil_h)\
$(gdevplnx_h)\
$(gxcmap_h) $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h) $(gxdither_h)\
- $(gxgetbit_h) $(gxiparam_h) $(gxgstate_h) $(LIB_MAK) $(MAKEDIRS)
+ $(gxgetbit_h) $(gxiparam_h) $(gxgstate_h) $(gsstate_h) $(LIB_MAK) $(MAKEDIRS)
$(GLCC) $(GLO_)gdevplnx.$(OBJ) $(C_) $(GLSRC)gdevplnx.c
### Default driver procedure implementations
@@ -1411,7 +1413,7 @@ $(GLOBJ)gxdownscale.$(OBJ) : $(GLOBJ)gxdownscale_$(WITH_CAL).$(OBJ) $(AK) $(gp_h
###### Create a pseudo-"feature" for the entire graphics library.
LIB0s=$(GLOBJ)gpmisc.$(OBJ) $(GLOBJ)stream.$(OBJ) $(GLOBJ)strmio.$(OBJ)
-LIB1s=$(GLOBJ)gsalloc.$(OBJ) $(GLOBJ)gsalpha.$(OBJ) $(GLOBJ)gxdownscale.$(OBJ) $(downscale_) $(GLOBJ)gdevprn.$(OBJ) $(GLOBJ)gdevflp.$(OBJ) $(GLOBJ)gdevkrnlsclass.$(OBJ) $(GLOBJ)gdevepo.$(OBJ)
+LIB1s=$(GLOBJ)gsalloc.$(OBJ) $(GLOBJ)gxdownscale.$(OBJ) $(downscale_) $(GLOBJ)gdevprn.$(OBJ) $(GLOBJ)gdevflp.$(OBJ) $(GLOBJ)gdevkrnlsclass.$(OBJ) $(GLOBJ)gdevepo.$(OBJ)
LIB2s=$(GLOBJ)gdevmplt.$(OBJ) $(GLOBJ)gsbitcom.$(OBJ) $(GLOBJ)gsbitops.$(OBJ) $(GLOBJ)gsbittab.$(OBJ) $(GLOBJ)gdevoflt.$(OBJ) $(GLOBJ)gdevsclass.$(OBJ)
# Note: gschar.c is no longer required for a standard build;
# we include it only for backward compatibility for library clients.
@@ -2172,7 +2174,7 @@ gxclpath_h=$(GLSRC)gxclpath.h
clbase1_=$(GLOBJ)gxclist.$(OBJ) $(GLOBJ)gxclbits.$(OBJ) $(GLOBJ)gxclpage.$(OBJ)
clbase2_=$(GLOBJ)gxclrast.$(OBJ) $(GLOBJ)gxclread.$(OBJ) $(GLOBJ)gxclrect.$(OBJ)
-clbase3_=$(GLOBJ)gxclutil.$(OBJ) $(GLOBJ)gsparams.$(OBJ) $(GLOBJ)gxshade6.$(OBJ)
+clbase3_=$(GLOBJ)gxclutil.$(OBJ) $(GLOBJ)gsparams.$(OBJ) $(GLOBJ)gsparaml.$(OBJ) $(GLOBJ)gxshade6.$(OBJ)
# gxclrect.c requires rop_proc_table, so we need gsroptab here.
clbase4_=$(GLOBJ)gsroptab.$(OBJ) $(GLOBJ)gsroprun.$(OBJ) $(GLOBJ)stream.$(OBJ)
clpath_=$(GLOBJ)gxclimag.$(OBJ) $(GLOBJ)gxclpath.$(OBJ) $(GLOBJ)gxdhtserial.$(OBJ)
@@ -2386,7 +2388,7 @@ $(GLOBJ)sidscale.$(OBJ) : $(GLSRC)sidscale.c $(AK)\
# -------------- imagemask scaling filter --------------- #
-simscale_=$(GLOBJ)simscale.$(OBJ)
+simscale_=$(GLOBJ)simscale.$(OBJ) $(GLOBJ)simscale_foo.$(OBJ)
$(GLD)simscale.dev : $(LIB_MAK) $(ECHOGS_XE) $(simscale_) $(LIB_MAK) $(MAKEDIRS)
$(SETMOD) $(GLD)simscale $(simscale_)
@@ -2395,6 +2397,10 @@ $(GLOBJ)simscale.$(OBJ) : $(GLSRC)simscale.c $(AK) $(memory__h)\
$(LIB_MAK) $(MAKEDIRS)
$(GLCC) $(GLO_)simscale.$(OBJ) $(C_) $(GLSRC)simscale.c
+$(GLOBJ)simscale_foo.$(OBJ) : $(GLSRC)simscale_foo.c $(AK) $(simscale_foo_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+ $(GLCC) $(GLO_)simscale_foo.$(OBJ) $(C_) $(GLSRC)simscale_foo.c
+
# ---------------- Extended halftone support ---------------- #
# This is only used by one non-PostScript-based project.
@@ -2961,7 +2967,7 @@ $(GLD)sicclib.dev : $(LIB_MAK) $(ECHOGS_XE) $(sicclib_) $(gsicc_) $(md5_)\
$(GLOBJ)gsicc.$(OBJ) : $(GLSRC)gsicc.c $(AK) $(gx_h) $(gserrors_h)\
$(math__h) $(memory__h) $(gsstruct_h) $(stream_h) $(gxcspace_h) $(gxarith_h)\
$(gxcie_h) $(gzstate_h) $(gsicc_h) $(gsicc_cache_h) $(gsicc_cms_h)\
- $(gsicc_manage_h) $(gxdevice_h) $(gsccolor_h) $(LIB_MAK) $(MAKEDIRS)
+ $(gsicc_manage_h) $(gxdevice_h) $(gsccolor_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
$(GLCC) $(GLO_)gsicc.$(OBJ) $(C_) $(GLSRC)gsicc.c
gscms_h=$(GLSRC)gscms.h
@@ -3340,12 +3346,12 @@ $(GLD)romfs0.dev : $(LIB_MAK) $(ECHOGS_XE) $(LIB_MAK) $(MAKEDIRS)
$(GLGEN)gsromfs1_.c : $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)gsromfs1_.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(PS_ROMFS_ARGS) $(PS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(PS_ROMFS_ARGS) $(PS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)gsromfs1_1.c : $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)gsromfs1_1.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(UFST_ROMFS_ARGS) $(PS_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(UFST_ROMFS_ARGS) $(PS_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)gsromfs1.c : $(GLGEN)gsromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(CP_) $(GLGEN)gsromfs1_$(UFST_BRIDGE).c $(GLGEN)gsromfs1.c
@@ -3355,13 +3361,13 @@ $(GLGEN)pclromfs1_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs1_.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(PCLXL_FONT_ROMFS_ARGS) $(PCLXL_ROMFS_ARGS) $(PJL_ROMFS_ARGS) \
- $(PJL_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(PJL_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)pclromfs1_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs1_1.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(UFST_ROMFS_ARGS) $(PCLXL_ROMFS_ARGS) $(PJL_ROMFS_ARGS) \
- $(GL_ROMFS_ARGS)
+ $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)pclromfs1.c : $(GLGEN)pclromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(CP_) $(GLGEN)pclromfs1_$(UFST_BRIDGE).c $(GLGEN)pclromfs1.c
@@ -3374,7 +3380,7 @@ $(GLGEN)pclromfs0_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(GLGEN)pclromfs0_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs0_1.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(GL_ROMFS_ARGS)
+ $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)pclromfs0.c : $(GLGEN)pclromfs0_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(CP_) $(GLGEN)pclromfs0_$(UFST_BRIDGE).c $(GLGEN)pclromfs0.c
@@ -3383,12 +3389,12 @@ $(GLGEN)pclromfs0.c : $(GLGEN)pclromfs0_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(GLGEN)xpsromfs1_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs1_.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(XPS_ROMFS_ARGS) $(XPS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(XPS_ROMFS_ARGS) $(XPS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)xpsromfs1_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs1_1.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(XPS_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(XPS_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)xpsromfs1.c : $(GLGEN)xpsromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(CP_) $(GLGEN)xpsromfs1_$(UFST_BRIDGE).c $(GLGEN)xpsromfs1.c
@@ -3396,12 +3402,12 @@ $(GLGEN)xpsromfs1.c : $(GLGEN)xpsromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(GLGEN)xpsromfs0_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs0_.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(GL_ROMFS_ARGS)
+ $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)xpsromfs0_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs0_1.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(GL_ROMFS_ARGS)
+ $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)xpsromfs0.c : $(GLGEN)xpsromfs0_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(CP_) $(GLGEN)xpsromfs0_$(UFST_BRIDGE).c $(GLGEN)xpsromfs0.c
@@ -3427,7 +3433,7 @@ $(GLGEN)pdlromfs1_.c: $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(PCLXL_ROMFS_ARGS) $(PCLXL_FONT_ROMFS_ARGS) $(PJL_ROMFS_ARGS) \
$(XPS_ROMFS_ARGS) $(XPS_FONT_ROMFS_ARGS) \
- $(PS_ROMFS_ARGS) $(PS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(PS_ROMFS_ARGS) $(PS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
# COMPILE_INITS + UFST variant
$(GLGEN)pdlromfs1_1c0.c : $(GLGEN)pdlromfs1_1.c
@@ -3446,7 +3452,7 @@ $(GLGEN)pdlromfs1_1.c: $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdlromfs1_1.c -s 4 \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(UFST_ROMFS_ARGS) $(PCLXL_ROMFS_ARGS) $(PJL_ROMFS_ARGS) $(XPS_ROMFS_ARGS) \
- $(PS_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(PS_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
# Rules to fold COMPILE_INITS +/- UFST into 1 set of targets
$(GLGEN)pdlromfs1c0.c : $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c0.c
@@ -3760,143 +3766,143 @@ $(GLOBJ)gslib.$(OBJ) : $(GLSRC)gslib.c $(AK)\
# Dependencies:
$(GLSRC)gdevdcrd.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxtext.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gstext.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsfont.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsimage.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxdda.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxpath.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxftype.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gscms.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsrect.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsgstate.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gp.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)memento.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)memory_.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsuid.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevdcrd.h:$(GLSRC)srdline.h
$(GLSRC)gdevdcrd.h:$(GLSRC)scommon.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)memento.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gscsel.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxarith.h
$(GLSRC)gdevdcrd.h:$(GLSRC)stat_.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)memory_.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsccode.h
$(GLSRC)gdevdcrd.h:$(GLSRC)stdint_.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)std.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)std.h
$(GLSRC)gdevdcrd.h:$(GLSRC)stdpre.h
$(GLSRC)gdevdcrd.h:$(GLGEN)arch.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxtext.h
$(GLSRC)gdevpccm.h:$(GLSRC)gstext.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevpccm.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsfont.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsimage.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxdda.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxpath.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxftype.h
$(GLSRC)gdevpccm.h:$(GLSRC)gscms.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsrect.h
$(GLSRC)gdevpccm.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsgstate.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevpccm.h:$(GLSRC)gp.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevpccm.h:$(GLSRC)memento.h
+$(GLSRC)gdevpccm.h:$(GLSRC)memory_.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsuid.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevpccm.h:$(GLSRC)srdline.h
$(GLSRC)gdevpccm.h:$(GLSRC)scommon.h
-$(GLSRC)gdevpccm.h:$(GLSRC)memento.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gscsel.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxarith.h
$(GLSRC)gdevpccm.h:$(GLSRC)stat_.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevpccm.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevpccm.h:$(GLSRC)memory_.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevpccm.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevpccm.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevpccm.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevpccm.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsccode.h
$(GLSRC)gdevpccm.h:$(GLSRC)stdint_.h
$(GLSRC)gdevpccm.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevpccm.h:$(GLSRC)std.h
$(GLSRC)gdevpccm.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevpccm.h:$(GLSRC)std.h
$(GLSRC)gdevpccm.h:$(GLSRC)stdpre.h
$(GLSRC)gdevpccm.h:$(GLGEN)arch.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gs_dll_call.h
$(GLSRC)stdint_.h:$(GLSRC)std.h
$(GLSRC)stdint_.h:$(GLSRC)stdpre.h
$(GLSRC)stdint_.h:$(GLGEN)arch.h
@@ -3905,49 +3911,49 @@ $(GLSRC)srdline.h:$(GLSRC)scommon.h
$(GLSRC)srdline.h:$(GLSRC)gsstype.h
$(GLSRC)srdline.h:$(GLSRC)gsmemory.h
$(GLSRC)srdline.h:$(GLSRC)gslibctx.h
-$(GLSRC)srdline.h:$(GLSRC)gs_dll_call.h
$(GLSRC)srdline.h:$(GLSRC)stdio_.h
$(GLSRC)srdline.h:$(GLSRC)stdint_.h
$(GLSRC)srdline.h:$(GLSRC)gssprintf.h
-$(GLSRC)srdline.h:$(GLSRC)std.h
$(GLSRC)srdline.h:$(GLSRC)gstypes.h
+$(GLSRC)srdline.h:$(GLSRC)std.h
$(GLSRC)srdline.h:$(GLSRC)stdpre.h
$(GLSRC)srdline.h:$(GLGEN)arch.h
+$(GLSRC)srdline.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gpmisc.h:$(GLSRC)gp.h
+$(GLSRC)gpmisc.h:$(GLSRC)memory_.h
$(GLSRC)gpmisc.h:$(GLSRC)srdline.h
$(GLSRC)gpmisc.h:$(GLSRC)scommon.h
-$(GLSRC)gpmisc.h:$(GLSRC)gsstype.h
$(GLSRC)gpmisc.h:$(GLSRC)stat_.h
+$(GLSRC)gpmisc.h:$(GLSRC)gsstype.h
$(GLSRC)gpmisc.h:$(GLSRC)gsmemory.h
-$(GLSRC)gpmisc.h:$(GLSRC)memory_.h
$(GLSRC)gpmisc.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gpmisc.h:$(GLSRC)gslibctx.h
$(GLSRC)gpmisc.h:$(GLSRC)gscdefs.h
-$(GLSRC)gpmisc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gpmisc.h:$(GLSRC)gslibctx.h
$(GLSRC)gpmisc.h:$(GLSRC)stdio_.h
$(GLSRC)gpmisc.h:$(GLSRC)stdint_.h
$(GLSRC)gpmisc.h:$(GLSRC)gssprintf.h
-$(GLSRC)gpmisc.h:$(GLSRC)std.h
$(GLSRC)gpmisc.h:$(GLSRC)gstypes.h
+$(GLSRC)gpmisc.h:$(GLSRC)std.h
$(GLSRC)gpmisc.h:$(GLSRC)stdpre.h
$(GLSRC)gpmisc.h:$(GLGEN)arch.h
+$(GLSRC)gpmisc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gp.h:$(GLSRC)memory_.h
$(GLSRC)gp.h:$(GLSRC)srdline.h
$(GLSRC)gp.h:$(GLSRC)scommon.h
-$(GLSRC)gp.h:$(GLSRC)gsstype.h
$(GLSRC)gp.h:$(GLSRC)stat_.h
+$(GLSRC)gp.h:$(GLSRC)gsstype.h
$(GLSRC)gp.h:$(GLSRC)gsmemory.h
-$(GLSRC)gp.h:$(GLSRC)memory_.h
$(GLSRC)gp.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gp.h:$(GLSRC)gslibctx.h
$(GLSRC)gp.h:$(GLSRC)gscdefs.h
-$(GLSRC)gp.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gp.h:$(GLSRC)gslibctx.h
$(GLSRC)gp.h:$(GLSRC)stdio_.h
$(GLSRC)gp.h:$(GLSRC)stdint_.h
$(GLSRC)gp.h:$(GLSRC)gssprintf.h
-$(GLSRC)gp.h:$(GLSRC)std.h
$(GLSRC)gp.h:$(GLSRC)gstypes.h
+$(GLSRC)gp.h:$(GLSRC)std.h
$(GLSRC)gp.h:$(GLSRC)stdpre.h
$(GLSRC)gp.h:$(GLGEN)arch.h
+$(GLSRC)gp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gpcheck.h:$(GLSRC)std.h
$(GLSRC)gpcheck.h:$(GLSRC)stdpre.h
$(GLSRC)gpcheck.h:$(GLGEN)arch.h
@@ -4013,16 +4019,17 @@ $(GLSRC)pipe_.h:$(GLSRC)stdpre.h
$(GLSRC)pipe_.h:$(GLGEN)arch.h
$(GLSRC)jerror_.h:$(JSRCDIR)$(D)jerror.h
$(GLSRC)gxstdio.h:$(GLSRC)gsio.h
-$(GLSRC)gslibctx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gslibctx.h:$(GLSRC)stdio_.h
$(GLSRC)gslibctx.h:$(GLSRC)gssprintf.h
$(GLSRC)gslibctx.h:$(GLSRC)std.h
$(GLSRC)gslibctx.h:$(GLSRC)stdpre.h
$(GLSRC)gslibctx.h:$(GLGEN)arch.h
+$(GLSRC)gslibctx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdebug.h:$(GLSRC)gdbflags.h
$(GLSRC)gdebug.h:$(GLSRC)std.h
$(GLSRC)gdebug.h:$(GLSRC)stdpre.h
$(GLSRC)gdebug.h:$(GLGEN)arch.h
+$(GLSRC)gsalloc.h:$(GLSRC)stdint_.h
$(GLSRC)gsalloc.h:$(GLSRC)std.h
$(GLSRC)gsalloc.h:$(GLSRC)stdpre.h
$(GLSRC)gsalloc.h:$(GLGEN)arch.h
@@ -4033,21 +4040,22 @@ $(GLSRC)gsexit.h:$(GLSRC)std.h
$(GLSRC)gsexit.h:$(GLSRC)stdpre.h
$(GLSRC)gsexit.h:$(GLGEN)arch.h
$(GLSRC)gsgc.h:$(GLSRC)gsalloc.h
+$(GLSRC)gsgc.h:$(GLSRC)stdint_.h
$(GLSRC)gsgc.h:$(GLSRC)std.h
$(GLSRC)gsgc.h:$(GLSRC)stdpre.h
$(GLSRC)gsgc.h:$(GLGEN)arch.h
$(GLSRC)gsmalloc.h:$(GLSRC)gxsync.h
-$(GLSRC)gsmalloc.h:$(GLSRC)gsmemory.h
$(GLSRC)gsmalloc.h:$(GLSRC)gpsync.h
+$(GLSRC)gsmalloc.h:$(GLSRC)gsmemory.h
$(GLSRC)gsmalloc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsmalloc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsmalloc.h:$(GLSRC)stdio_.h
$(GLSRC)gsmalloc.h:$(GLSRC)stdint_.h
$(GLSRC)gsmalloc.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsmalloc.h:$(GLSRC)std.h
$(GLSRC)gsmalloc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsmalloc.h:$(GLSRC)std.h
$(GLSRC)gsmalloc.h:$(GLSRC)stdpre.h
$(GLSRC)gsmalloc.h:$(GLGEN)arch.h
+$(GLSRC)gsmalloc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsmchunk.h:$(GLSRC)std.h
$(GLSRC)gsmchunk.h:$(GLSRC)stdpre.h
$(GLSRC)gsmchunk.h:$(GLGEN)arch.h
@@ -4055,24 +4063,25 @@ $(GLSRC)valgrind.h:$(GLSRC)stdpre.h
$(GLSRC)gsmdebug.h:$(GLSRC)valgrind.h
$(GLSRC)gsmdebug.h:$(GLSRC)stdpre.h
$(GLSRC)gsmemory.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsmemory.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsmemory.h:$(GLSRC)stdio_.h
$(GLSRC)gsmemory.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsmemory.h:$(GLSRC)std.h
$(GLSRC)gsmemory.h:$(GLSRC)gstypes.h
+$(GLSRC)gsmemory.h:$(GLSRC)std.h
$(GLSRC)gsmemory.h:$(GLSRC)stdpre.h
$(GLSRC)gsmemory.h:$(GLGEN)arch.h
+$(GLSRC)gsmemory.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsmemret.h:$(GLSRC)gsmemory.h
$(GLSRC)gsmemret.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsmemret.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsmemret.h:$(GLSRC)stdio_.h
$(GLSRC)gsmemret.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsmemret.h:$(GLSRC)std.h
$(GLSRC)gsmemret.h:$(GLSRC)gstypes.h
+$(GLSRC)gsmemret.h:$(GLSRC)std.h
$(GLSRC)gsmemret.h:$(GLSRC)stdpre.h
$(GLSRC)gsmemret.h:$(GLGEN)arch.h
+$(GLSRC)gsmemret.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsnogc.h:$(GLSRC)gsgc.h
$(GLSRC)gsnogc.h:$(GLSRC)gsalloc.h
+$(GLSRC)gsnogc.h:$(GLSRC)stdint_.h
$(GLSRC)gsnogc.h:$(GLSRC)std.h
$(GLSRC)gsnogc.h:$(GLSRC)stdpre.h
$(GLSRC)gsnogc.h:$(GLGEN)arch.h
@@ -4083,472 +4092,472 @@ $(GLSRC)gsrefct.h:$(GLGEN)arch.h
$(GLSRC)gsserial.h:$(GLSRC)stdpre.h
$(GLSRC)gsstype.h:$(GLSRC)gsmemory.h
$(GLSRC)gsstype.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsstype.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsstype.h:$(GLSRC)stdio_.h
$(GLSRC)gsstype.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsstype.h:$(GLSRC)std.h
$(GLSRC)gsstype.h:$(GLSRC)gstypes.h
+$(GLSRC)gsstype.h:$(GLSRC)std.h
$(GLSRC)gsstype.h:$(GLSRC)stdpre.h
$(GLSRC)gsstype.h:$(GLGEN)arch.h
+$(GLSRC)gsstype.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gx.h:$(GLSRC)gdebug.h
+$(GLSRC)gx.h:$(GLSRC)gsgstate.h
$(GLSRC)gx.h:$(GLSRC)gsio.h
$(GLSRC)gx.h:$(GLSRC)gdbflags.h
$(GLSRC)gx.h:$(GLSRC)gserrors.h
$(GLSRC)gx.h:$(GLSRC)gsmemory.h
$(GLSRC)gx.h:$(GLSRC)gslibctx.h
-$(GLSRC)gx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gx.h:$(GLSRC)stdio_.h
-$(GLSRC)gx.h:$(GLSRC)gsgstate.h
$(GLSRC)gx.h:$(GLSRC)gssprintf.h
-$(GLSRC)gx.h:$(GLSRC)std.h
$(GLSRC)gx.h:$(GLSRC)gstypes.h
+$(GLSRC)gx.h:$(GLSRC)std.h
$(GLSRC)gx.h:$(GLSRC)stdpre.h
$(GLSRC)gx.h:$(GLGEN)arch.h
-$(GLSRC)gxsync.h:$(GLSRC)gsmemory.h
+$(GLSRC)gx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxsync.h:$(GLSRC)gpsync.h
+$(GLSRC)gxsync.h:$(GLSRC)gsmemory.h
$(GLSRC)gxsync.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxsync.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxsync.h:$(GLSRC)stdio_.h
$(GLSRC)gxsync.h:$(GLSRC)stdint_.h
$(GLSRC)gxsync.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxsync.h:$(GLSRC)std.h
$(GLSRC)gxsync.h:$(GLSRC)gstypes.h
+$(GLSRC)gxsync.h:$(GLSRC)std.h
$(GLSRC)gxsync.h:$(GLSRC)stdpre.h
$(GLSRC)gxsync.h:$(GLGEN)arch.h
+$(GLSRC)gxsync.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxclist.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxgstate.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxline.h
$(GLSRC)gxclthrd.h:$(GLSRC)gstrans.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gdevp14.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxline.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsht1.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcomp.h
$(GLSRC)gxclthrd.h:$(GLSRC)math_.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gdevp14.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxcolor2.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxclthrd.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsequivc.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxblend.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxclipsr.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxcomp.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxdcolor.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxdcolor.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxband.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxblend.h
$(GLSRC)gxclthrd.h:$(GLSRC)gscolor2.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gscindex.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxdevice.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsht.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxcpath.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsht.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsequivc.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscindex.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcmap.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsptype1.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxtext.h
$(GLSRC)gxclthrd.h:$(GLSRC)gscie.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxtext.h
$(GLSRC)gxclthrd.h:$(GLSRC)gstext.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxstate.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclthrd.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxstate.h
$(GLSRC)gxclthrd.h:$(GLSRC)gspcolor.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsropt.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxfmap.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsmalloc.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxctable.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsuid.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsfont.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsimage.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxdda.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsfont.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxpath.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxftype.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxftype.h
$(GLSRC)gxclthrd.h:$(GLSRC)gscms.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxstdio.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsrect.h
$(GLSRC)gxclthrd.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxstdio.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxclio.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsio.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxclio.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsrefct.h
$(GLSRC)gxclthrd.h:$(GLSRC)gp.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclthrd.h:$(GLSRC)memento.h
+$(GLSRC)gxclthrd.h:$(GLSRC)memory_.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsuid.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclthrd.h:$(GLSRC)vmsmath.h
$(GLSRC)gxclthrd.h:$(GLSRC)srdline.h
$(GLSRC)gxclthrd.h:$(GLSRC)scommon.h
-$(GLSRC)gxclthrd.h:$(GLSRC)memento.h
-$(GLSRC)gxclthrd.h:$(GLSRC)vmsmath.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gscsel.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsfname.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxarith.h
$(GLSRC)gxclthrd.h:$(GLSRC)stat_.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclthrd.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclthrd.h:$(GLSRC)memory_.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclthrd.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclthrd.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclthrd.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclthrd.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsccode.h
$(GLSRC)gxclthrd.h:$(GLSRC)stdint_.h
$(GLSRC)gxclthrd.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclthrd.h:$(GLSRC)std.h
$(GLSRC)gxclthrd.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclthrd.h:$(GLSRC)std.h
$(GLSRC)gxclthrd.h:$(GLSRC)stdpre.h
$(GLSRC)gxclthrd.h:$(GLGEN)arch.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxcmap.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxtext.h
$(GLSRC)gxdevsop.h:$(GLSRC)gstext.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevsop.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxfmap.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsuid.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsfont.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsimage.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxdda.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsfont.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxftype.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxpath.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxftype.h
$(GLSRC)gxdevsop.h:$(GLSRC)gscms.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsrect.h
$(GLSRC)gxdevsop.h:$(GLSRC)gslparam.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsrefct.h
$(GLSRC)gxdevsop.h:$(GLSRC)gp.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevsop.h:$(GLSRC)memento.h
+$(GLSRC)gxdevsop.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsuid.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdevsop.h:$(GLSRC)srdline.h
$(GLSRC)gxdevsop.h:$(GLSRC)scommon.h
-$(GLSRC)gxdevsop.h:$(GLSRC)memento.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gscsel.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxarith.h
$(GLSRC)gxdevsop.h:$(GLSRC)stat_.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevsop.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdevsop.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevsop.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevsop.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdevsop.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevsop.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsccode.h
$(GLSRC)gxdevsop.h:$(GLSRC)stdint_.h
$(GLSRC)gxdevsop.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdevsop.h:$(GLSRC)std.h
$(GLSRC)gxdevsop.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdevsop.h:$(GLSRC)std.h
$(GLSRC)gxdevsop.h:$(GLSRC)stdpre.h
$(GLSRC)gxdevsop.h:$(GLGEN)arch.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevflp.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevflp.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevflp.h:$(GLSRC)gxtext.h
$(GLSRC)gdevflp.h:$(GLSRC)gstext.h
$(GLSRC)gdevflp.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevflp.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsropt.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevflp.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevflp.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevflp.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsfont.h
$(GLSRC)gdevflp.h:$(GLSRC)gsimage.h
$(GLSRC)gdevflp.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxdda.h
$(GLSRC)gdevflp.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxpath.h
$(GLSRC)gdevflp.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxftype.h
$(GLSRC)gdevflp.h:$(GLSRC)gscms.h
-$(GLSRC)gdevflp.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxstdio.h
-$(GLSRC)gdevflp.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevflp.h:$(GLSRC)gsrect.h
$(GLSRC)gdevflp.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevflp.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevflp.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxstdio.h
$(GLSRC)gdevflp.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevflp.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevflp.h:$(GLSRC)gsio.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevflp.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevflp.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevflp.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevflp.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevflp.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevflp.h:$(GLSRC)gp.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevflp.h:$(GLSRC)memento.h
+$(GLSRC)gdevflp.h:$(GLSRC)memory_.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsuid.h
$(GLSRC)gdevflp.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevflp.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevflp.h:$(GLSRC)srdline.h
$(GLSRC)gdevflp.h:$(GLSRC)scommon.h
-$(GLSRC)gdevflp.h:$(GLSRC)memento.h
-$(GLSRC)gdevflp.h:$(GLSRC)gscsel.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevflp.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxarith.h
$(GLSRC)gdevflp.h:$(GLSRC)stat_.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevflp.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevflp.h:$(GLSRC)memory_.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevflp.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevflp.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevflp.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevflp.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevflp.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevflp.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevflp.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevflp.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevflp.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsccode.h
$(GLSRC)gdevflp.h:$(GLSRC)stdint_.h
$(GLSRC)gdevflp.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevflp.h:$(GLSRC)std.h
$(GLSRC)gdevflp.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevflp.h:$(GLSRC)std.h
$(GLSRC)gdevflp.h:$(GLSRC)stdpre.h
$(GLSRC)gdevflp.h:$(GLGEN)arch.h
+$(GLSRC)gdevflp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gdevflp.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gdevoflt.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxtext.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gstext.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsropt.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsfont.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsimage.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxdda.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxpath.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxftype.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscms.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxstdio.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsrect.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxstdio.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsio.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gp.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)memento.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)memory_.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsuid.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)srdline.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)scommon.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)memento.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscsel.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxarith.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stat_.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)memory_.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsccode.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stdint_.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)std.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)std.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stdpre.h
$(GLSRC)gdevkrnlsclass.h:$(GLGEN)arch.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxtext.h
$(GLSRC)gdevsclass.h:$(GLSRC)gstext.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevsclass.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsropt.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsfont.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsimage.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxdda.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxpath.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxftype.h
$(GLSRC)gdevsclass.h:$(GLSRC)gscms.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxstdio.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsrect.h
$(GLSRC)gdevsclass.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxstdio.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsio.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevsclass.h:$(GLSRC)gp.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevsclass.h:$(GLSRC)memento.h
+$(GLSRC)gdevsclass.h:$(GLSRC)memory_.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsuid.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevsclass.h:$(GLSRC)srdline.h
$(GLSRC)gdevsclass.h:$(GLSRC)scommon.h
-$(GLSRC)gdevsclass.h:$(GLSRC)memento.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gscsel.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxarith.h
$(GLSRC)gdevsclass.h:$(GLSRC)stat_.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevsclass.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevsclass.h:$(GLSRC)memory_.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevsclass.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevsclass.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevsclass.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevsclass.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsccode.h
$(GLSRC)gdevsclass.h:$(GLSRC)stdint_.h
$(GLSRC)gdevsclass.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevsclass.h:$(GLSRC)std.h
$(GLSRC)gdevsclass.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevsclass.h:$(GLSRC)std.h
$(GLSRC)gdevsclass.h:$(GLSRC)stdpre.h
$(GLSRC)gdevsclass.h:$(GLGEN)arch.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsnotify.h:$(GLSRC)gsstype.h
$(GLSRC)gsnotify.h:$(GLSRC)gsmemory.h
$(GLSRC)gsnotify.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsnotify.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsnotify.h:$(GLSRC)stdio_.h
$(GLSRC)gsnotify.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsnotify.h:$(GLSRC)std.h
$(GLSRC)gsnotify.h:$(GLSRC)gstypes.h
+$(GLSRC)gsnotify.h:$(GLSRC)std.h
$(GLSRC)gsnotify.h:$(GLSRC)stdpre.h
$(GLSRC)gsnotify.h:$(GLGEN)arch.h
+$(GLSRC)gsnotify.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsstruct.h:$(GLSRC)gsstype.h
$(GLSRC)gsstruct.h:$(GLSRC)gsmemory.h
$(GLSRC)gsstruct.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsstruct.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsstruct.h:$(GLSRC)stdio_.h
$(GLSRC)gsstruct.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsstruct.h:$(GLSRC)std.h
$(GLSRC)gsstruct.h:$(GLSRC)gstypes.h
+$(GLSRC)gsstruct.h:$(GLSRC)std.h
$(GLSRC)gsstruct.h:$(GLSRC)stdpre.h
$(GLSRC)gsstruct.h:$(GLGEN)arch.h
+$(GLSRC)gsstruct.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsbitmap.h:$(GLSRC)gsstype.h
$(GLSRC)gsbitmap.h:$(GLSRC)gsmemory.h
$(GLSRC)gsbitmap.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsbitmap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsbitmap.h:$(GLSRC)stdio_.h
$(GLSRC)gsbitmap.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsbitmap.h:$(GLSRC)std.h
$(GLSRC)gsbitmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gsbitmap.h:$(GLSRC)std.h
$(GLSRC)gsbitmap.h:$(GLSRC)stdpre.h
$(GLSRC)gsbitmap.h:$(GLGEN)arch.h
+$(GLSRC)gsbitmap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsbitops.h:$(GLSRC)gxcindex.h
$(GLSRC)gsbitops.h:$(GLSRC)stdint_.h
-$(GLSRC)gsbitops.h:$(GLSRC)std.h
$(GLSRC)gsbitops.h:$(GLSRC)gstypes.h
+$(GLSRC)gsbitops.h:$(GLSRC)std.h
$(GLSRC)gsbitops.h:$(GLSRC)stdpre.h
$(GLSRC)gsbitops.h:$(GLGEN)arch.h
$(GLSRC)gsbittab.h:$(GLSRC)gstypes.h
@@ -4557,82 +4566,82 @@ $(GLSRC)gsflip.h:$(GLSRC)stdpre.h
$(GLSRC)gsuid.h:$(GLSRC)std.h
$(GLSRC)gsuid.h:$(GLSRC)stdpre.h
$(GLSRC)gsuid.h:$(GLGEN)arch.h
-$(GLSRC)gsutil.h:$(GLSRC)std.h
$(GLSRC)gsutil.h:$(GLSRC)gstypes.h
+$(GLSRC)gsutil.h:$(GLSRC)std.h
$(GLSRC)gsutil.h:$(GLSRC)stdpre.h
$(GLSRC)gsutil.h:$(GLGEN)arch.h
$(GLSRC)gxbitmap.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxbitmap.h:$(GLSRC)gsstype.h
$(GLSRC)gxbitmap.h:$(GLSRC)gsmemory.h
$(GLSRC)gxbitmap.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxbitmap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxbitmap.h:$(GLSRC)stdio_.h
$(GLSRC)gxbitmap.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxbitmap.h:$(GLSRC)std.h
$(GLSRC)gxbitmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gxbitmap.h:$(GLSRC)std.h
$(GLSRC)gxbitmap.h:$(GLSRC)stdpre.h
$(GLSRC)gxbitmap.h:$(GLGEN)arch.h
+$(GLSRC)gxbitmap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfarith.h:$(GLSRC)gxarith.h
$(GLSRC)gxfarith.h:$(GLSRC)stdpre.h
$(GLSRC)gxfixed.h:$(GLSRC)std.h
$(GLSRC)gxfixed.h:$(GLSRC)stdpre.h
$(GLSRC)gxfixed.h:$(GLGEN)arch.h
-$(GLSRC)gxobj.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxobj.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxobj.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxobj.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxobj.h:$(GLSRC)gsstype.h
$(GLSRC)gxobj.h:$(GLSRC)gsmemory.h
$(GLSRC)gxobj.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxobj.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxobj.h:$(GLSRC)stdio_.h
$(GLSRC)gxobj.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxobj.h:$(GLSRC)std.h
$(GLSRC)gxobj.h:$(GLSRC)gstypes.h
+$(GLSRC)gxobj.h:$(GLSRC)std.h
$(GLSRC)gxobj.h:$(GLSRC)stdpre.h
$(GLSRC)gxobj.h:$(GLGEN)arch.h
+$(GLSRC)gxobj.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxrplane.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxrplane.h:$(GLSRC)gsgstate.h
$(GLSRC)gxrplane.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxrplane.h:$(GLSRC)gsparam.h
$(GLSRC)gxrplane.h:$(GLSRC)scommon.h
$(GLSRC)gxrplane.h:$(GLSRC)gsstype.h
$(GLSRC)gxrplane.h:$(GLSRC)gsmemory.h
$(GLSRC)gxrplane.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxrplane.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxrplane.h:$(GLSRC)stdio_.h
-$(GLSRC)gxrplane.h:$(GLSRC)gsgstate.h
$(GLSRC)gxrplane.h:$(GLSRC)stdint_.h
$(GLSRC)gxrplane.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxrplane.h:$(GLSRC)std.h
$(GLSRC)gxrplane.h:$(GLSRC)gstypes.h
+$(GLSRC)gxrplane.h:$(GLSRC)std.h
$(GLSRC)gxrplane.h:$(GLSRC)stdpre.h
$(GLSRC)gxrplane.h:$(GLGEN)arch.h
+$(GLSRC)gxrplane.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsrect.h:$(GLSRC)gxfixed.h
-$(GLSRC)gsrect.h:$(GLSRC)std.h
$(GLSRC)gsrect.h:$(GLSRC)gstypes.h
+$(GLSRC)gsrect.h:$(GLSRC)std.h
$(GLSRC)gsrect.h:$(GLSRC)stdpre.h
$(GLSRC)gsrect.h:$(GLGEN)arch.h
$(GLSRC)gxalloc.h:$(GLSRC)gxobj.h
-$(GLSRC)gxalloc.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxalloc.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxalloc.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxalloc.h:$(GLSRC)scommon.h
$(GLSRC)gxalloc.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxalloc.h:$(GLSRC)gsstype.h
$(GLSRC)gxalloc.h:$(GLSRC)gsmemory.h
$(GLSRC)gxalloc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxalloc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxalloc.h:$(GLSRC)gsalloc.h
$(GLSRC)gxalloc.h:$(GLSRC)stdio_.h
$(GLSRC)gxalloc.h:$(GLSRC)stdint_.h
$(GLSRC)gxalloc.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxalloc.h:$(GLSRC)std.h
$(GLSRC)gxalloc.h:$(GLSRC)gstypes.h
+$(GLSRC)gxalloc.h:$(GLSRC)std.h
$(GLSRC)gxalloc.h:$(GLSRC)stdpre.h
$(GLSRC)gxalloc.h:$(GLGEN)arch.h
+$(GLSRC)gxalloc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxbitops.h:$(GLSRC)gsbitops.h
$(GLSRC)gxbitops.h:$(GLSRC)gxcindex.h
$(GLSRC)gxbitops.h:$(GLSRC)stdint_.h
-$(GLSRC)gxbitops.h:$(GLSRC)std.h
$(GLSRC)gxbitops.h:$(GLSRC)gstypes.h
+$(GLSRC)gxbitops.h:$(GLSRC)std.h
$(GLSRC)gxbitops.h:$(GLSRC)stdpre.h
$(GLSRC)gxbitops.h:$(GLGEN)arch.h
$(GLSRC)gxcindex.h:$(GLSRC)stdint_.h
@@ -4641,203 +4650,203 @@ $(GLSRC)gxcindex.h:$(GLSRC)stdpre.h
$(GLSRC)gxcindex.h:$(GLGEN)arch.h
$(GLSRC)gxfont42.h:$(GLSRC)gxfont.h
$(GLSRC)gxfont42.h:$(GLSRC)gspath.h
-$(GLSRC)gxfont42.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxfont42.h:$(GLSRC)gsgdata.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxfont42.h:$(GLSRC)gxfapi.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfont42.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxfont42.h:$(GLSRC)gstext.h
$(GLSRC)gxfont42.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsuid.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxfont42.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxpath.h
$(GLSRC)gxfont42.h:$(GLSRC)gxftype.h
$(GLSRC)gxfont42.h:$(GLSRC)gscms.h
-$(GLSRC)gxfont42.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfont42.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfont42.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxfont42.h:$(GLSRC)gxarith.h
-$(GLSRC)gxfont42.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfont42.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfont42.h:$(GLSRC)gsrect.h
$(GLSRC)gxfont42.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfont42.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont42.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfont42.h:$(GLSRC)gsxfont.h
$(GLSRC)gxfont42.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfont42.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxfont42.h:$(GLSRC)gscpm.h
$(GLSRC)gxfont42.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont42.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfont42.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont42.h:$(GLSRC)memento.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsuid.h
$(GLSRC)gxfont42.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxfont42.h:$(GLSRC)scommon.h
-$(GLSRC)gxfont42.h:$(GLSRC)memento.h
$(GLSRC)gxfont42.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont42.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont42.h:$(GLSRC)gsstype.h
$(GLSRC)gxfont42.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxfont42.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont42.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfont42.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfont42.h:$(GLSRC)stdio_.h
$(GLSRC)gxfont42.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont42.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsccode.h
$(GLSRC)gxfont42.h:$(GLSRC)stdint_.h
$(GLSRC)gxfont42.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfont42.h:$(GLSRC)std.h
$(GLSRC)gxfont42.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfont42.h:$(GLSRC)std.h
$(GLSRC)gxfont42.h:$(GLSRC)stdpre.h
$(GLSRC)gxfont42.h:$(GLGEN)arch.h
+$(GLSRC)gxfont42.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gstrans.h:$(GLSRC)gdevp14.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcomp.h
$(GLSRC)gstrans.h:$(GLSRC)gxcolor2.h
$(GLSRC)gstrans.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gstrans.h:$(GLSRC)gxdevmem.h
$(GLSRC)gstrans.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gstrans.h:$(GLSRC)gsequivc.h
-$(GLSRC)gstrans.h:$(GLSRC)gxblend.h
-$(GLSRC)gstrans.h:$(GLSRC)gxcomp.h
$(GLSRC)gstrans.h:$(GLSRC)gxdcolor.h
-$(GLSRC)gstrans.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gstrans.h:$(GLSRC)gxblend.h
$(GLSRC)gstrans.h:$(GLSRC)gscolor2.h
-$(GLSRC)gstrans.h:$(GLSRC)gscindex.h
$(GLSRC)gstrans.h:$(GLSRC)gxdevice.h
$(GLSRC)gstrans.h:$(GLSRC)gxcpath.h
-$(GLSRC)gstrans.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gstrans.h:$(GLSRC)gsequivc.h
$(GLSRC)gstrans.h:$(GLSRC)gxdevcli.h
$(GLSRC)gstrans.h:$(GLSRC)gxpcache.h
+$(GLSRC)gstrans.h:$(GLSRC)gscindex.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcmap.h
$(GLSRC)gstrans.h:$(GLSRC)gsptype1.h
-$(GLSRC)gstrans.h:$(GLSRC)gxtext.h
$(GLSRC)gstrans.h:$(GLSRC)gscie.h
+$(GLSRC)gstrans.h:$(GLSRC)gxtext.h
$(GLSRC)gstrans.h:$(GLSRC)gstext.h
$(GLSRC)gstrans.h:$(GLSRC)gsnamecl.h
$(GLSRC)gstrans.h:$(GLSRC)gstparam.h
$(GLSRC)gstrans.h:$(GLSRC)gspcolor.h
-$(GLSRC)gstrans.h:$(GLSRC)gxfcache.h
-$(GLSRC)gstrans.h:$(GLSRC)gxcspace.h
-$(GLSRC)gstrans.h:$(GLSRC)gsropt.h
-$(GLSRC)gstrans.h:$(GLSRC)gsfunc.h
+$(GLSRC)gstrans.h:$(GLSRC)gxfmap.h
$(GLSRC)gstrans.h:$(GLSRC)gsmalloc.h
-$(GLSRC)gstrans.h:$(GLSRC)gxrplane.h
+$(GLSRC)gstrans.h:$(GLSRC)gsfunc.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcspace.h
$(GLSRC)gstrans.h:$(GLSRC)gxctable.h
-$(GLSRC)gstrans.h:$(GLSRC)gsuid.h
-$(GLSRC)gstrans.h:$(GLSRC)gxcmap.h
+$(GLSRC)gstrans.h:$(GLSRC)gxrplane.h
+$(GLSRC)gstrans.h:$(GLSRC)gscsel.h
+$(GLSRC)gstrans.h:$(GLSRC)gxfcache.h
+$(GLSRC)gstrans.h:$(GLSRC)gsfont.h
$(GLSRC)gstrans.h:$(GLSRC)gsimage.h
$(GLSRC)gstrans.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gstrans.h:$(GLSRC)gxdda.h
$(GLSRC)gstrans.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gstrans.h:$(GLSRC)gsfont.h
-$(GLSRC)gstrans.h:$(GLSRC)gxfmap.h
+$(GLSRC)gstrans.h:$(GLSRC)gxbcache.h
+$(GLSRC)gstrans.h:$(GLSRC)gsropt.h
+$(GLSRC)gstrans.h:$(GLSRC)gxdda.h
+$(GLSRC)gstrans.h:$(GLSRC)gxpath.h
$(GLSRC)gstrans.h:$(GLSRC)gxiclass.h
-$(GLSRC)gstrans.h:$(GLSRC)gxftype.h
$(GLSRC)gstrans.h:$(GLSRC)gxfrac.h
+$(GLSRC)gstrans.h:$(GLSRC)gxtmap.h
+$(GLSRC)gstrans.h:$(GLSRC)gxftype.h
$(GLSRC)gstrans.h:$(GLSRC)gscms.h
-$(GLSRC)gstrans.h:$(GLSRC)gscspace.h
-$(GLSRC)gstrans.h:$(GLSRC)gxpath.h
-$(GLSRC)gstrans.h:$(GLSRC)gxbcache.h
-$(GLSRC)gstrans.h:$(GLSRC)gsdevice.h
-$(GLSRC)gstrans.h:$(GLSRC)gxarith.h
-$(GLSRC)gstrans.h:$(GLSRC)gxstdio.h
-$(GLSRC)gstrans.h:$(GLSRC)gspenum.h
-$(GLSRC)gstrans.h:$(GLSRC)gxhttile.h
$(GLSRC)gstrans.h:$(GLSRC)gsrect.h
$(GLSRC)gstrans.h:$(GLSRC)gslparam.h
+$(GLSRC)gstrans.h:$(GLSRC)gsdevice.h
+$(GLSRC)gstrans.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gstrans.h:$(GLSRC)gscpm.h
+$(GLSRC)gstrans.h:$(GLSRC)gscspace.h
+$(GLSRC)gstrans.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstrans.h:$(GLSRC)gxstdio.h
$(GLSRC)gstrans.h:$(GLSRC)gsxfont.h
-$(GLSRC)gstrans.h:$(GLSRC)gsiparam.h
$(GLSRC)gstrans.h:$(GLSRC)gsdsrc.h
$(GLSRC)gstrans.h:$(GLSRC)gsio.h
-$(GLSRC)gstrans.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gstrans.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gstrans.h:$(GLSRC)gscpm.h
+$(GLSRC)gstrans.h:$(GLSRC)gsiparam.h
$(GLSRC)gstrans.h:$(GLSRC)gxfixed.h
-$(GLSRC)gstrans.h:$(GLSRC)gsrefct.h
+$(GLSRC)gstrans.h:$(GLSRC)gscompt.h
+$(GLSRC)gstrans.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstrans.h:$(GLSRC)gspenum.h
+$(GLSRC)gstrans.h:$(GLSRC)gxhttile.h
$(GLSRC)gstrans.h:$(GLSRC)gsparam.h
+$(GLSRC)gstrans.h:$(GLSRC)gsrefct.h
$(GLSRC)gstrans.h:$(GLSRC)gp.h
-$(GLSRC)gstrans.h:$(GLSRC)gsccolor.h
+$(GLSRC)gstrans.h:$(GLSRC)memento.h
+$(GLSRC)gstrans.h:$(GLSRC)memory_.h
+$(GLSRC)gstrans.h:$(GLSRC)gsuid.h
$(GLSRC)gstrans.h:$(GLSRC)gsstruct.h
$(GLSRC)gstrans.h:$(GLSRC)gxsync.h
+$(GLSRC)gstrans.h:$(GLSRC)gxbitmap.h
$(GLSRC)gstrans.h:$(GLSRC)srdline.h
$(GLSRC)gstrans.h:$(GLSRC)scommon.h
-$(GLSRC)gstrans.h:$(GLSRC)memento.h
-$(GLSRC)gstrans.h:$(GLSRC)gscsel.h
-$(GLSRC)gstrans.h:$(GLSRC)gsbitmap.h
$(GLSRC)gstrans.h:$(GLSRC)gsfname.h
-$(GLSRC)gstrans.h:$(GLSRC)gsstype.h
+$(GLSRC)gstrans.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gstrans.h:$(GLSRC)gsccolor.h
+$(GLSRC)gstrans.h:$(GLSRC)gxarith.h
$(GLSRC)gstrans.h:$(GLSRC)stat_.h
-$(GLSRC)gstrans.h:$(GLSRC)gxtmap.h
-$(GLSRC)gstrans.h:$(GLSRC)gsmemory.h
$(GLSRC)gstrans.h:$(GLSRC)gpsync.h
-$(GLSRC)gstrans.h:$(GLSRC)memory_.h
+$(GLSRC)gstrans.h:$(GLSRC)gsstype.h
+$(GLSRC)gstrans.h:$(GLSRC)gsmemory.h
$(GLSRC)gstrans.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gstrans.h:$(GLSRC)gslibctx.h
$(GLSRC)gstrans.h:$(GLSRC)gscdefs.h
-$(GLSRC)gstrans.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gstrans.h:$(GLSRC)stdio_.h
-$(GLSRC)gstrans.h:$(GLSRC)gscompt.h
+$(GLSRC)gstrans.h:$(GLSRC)gslibctx.h
$(GLSRC)gstrans.h:$(GLSRC)gxcindex.h
-$(GLSRC)gstrans.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstrans.h:$(GLSRC)stdio_.h
+$(GLSRC)gstrans.h:$(GLSRC)gsccode.h
$(GLSRC)gstrans.h:$(GLSRC)stdint_.h
$(GLSRC)gstrans.h:$(GLSRC)gssprintf.h
-$(GLSRC)gstrans.h:$(GLSRC)gsccode.h
-$(GLSRC)gstrans.h:$(GLSRC)std.h
$(GLSRC)gstrans.h:$(GLSRC)gstypes.h
+$(GLSRC)gstrans.h:$(GLSRC)std.h
$(GLSRC)gstrans.h:$(GLSRC)stdpre.h
$(GLSRC)gstrans.h:$(GLGEN)arch.h
+$(GLSRC)gstrans.h:$(GLSRC)gs_dll_call.h
$(GLSRC)scommon.h:$(GLSRC)gsstype.h
$(GLSRC)scommon.h:$(GLSRC)gsmemory.h
$(GLSRC)scommon.h:$(GLSRC)gslibctx.h
-$(GLSRC)scommon.h:$(GLSRC)gs_dll_call.h
$(GLSRC)scommon.h:$(GLSRC)stdio_.h
$(GLSRC)scommon.h:$(GLSRC)stdint_.h
$(GLSRC)scommon.h:$(GLSRC)gssprintf.h
-$(GLSRC)scommon.h:$(GLSRC)std.h
$(GLSRC)scommon.h:$(GLSRC)gstypes.h
+$(GLSRC)scommon.h:$(GLSRC)std.h
$(GLSRC)scommon.h:$(GLSRC)stdpre.h
$(GLSRC)scommon.h:$(GLGEN)arch.h
+$(GLSRC)scommon.h:$(GLSRC)gs_dll_call.h
$(GLSRC)stream.h:$(GLSRC)gxiodev.h
$(GLSRC)stream.h:$(GLSRC)gsparam.h
$(GLSRC)stream.h:$(GLSRC)gp.h
+$(GLSRC)stream.h:$(GLSRC)memory_.h
$(GLSRC)stream.h:$(GLSRC)srdline.h
$(GLSRC)stream.h:$(GLSRC)scommon.h
$(GLSRC)stream.h:$(GLSRC)gsfname.h
-$(GLSRC)stream.h:$(GLSRC)gsstype.h
$(GLSRC)stream.h:$(GLSRC)stat_.h
+$(GLSRC)stream.h:$(GLSRC)gsstype.h
$(GLSRC)stream.h:$(GLSRC)gsmemory.h
-$(GLSRC)stream.h:$(GLSRC)memory_.h
$(GLSRC)stream.h:$(GLSRC)gpgetenv.h
-$(GLSRC)stream.h:$(GLSRC)gslibctx.h
$(GLSRC)stream.h:$(GLSRC)gscdefs.h
-$(GLSRC)stream.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)stream.h:$(GLSRC)gslibctx.h
$(GLSRC)stream.h:$(GLSRC)stdio_.h
$(GLSRC)stream.h:$(GLSRC)stdint_.h
$(GLSRC)stream.h:$(GLSRC)gssprintf.h
-$(GLSRC)stream.h:$(GLSRC)std.h
$(GLSRC)stream.h:$(GLSRC)gstypes.h
+$(GLSRC)stream.h:$(GLSRC)std.h
$(GLSRC)stream.h:$(GLSRC)stdpre.h
$(GLSRC)stream.h:$(GLGEN)arch.h
+$(GLSRC)stream.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ramfs.h:$(GLSRC)stream.h
$(GLSRC)ramfs.h:$(GLSRC)gxiodev.h
$(GLSRC)ramfs.h:$(GLSRC)gsparam.h
$(GLSRC)ramfs.h:$(GLSRC)gp.h
+$(GLSRC)ramfs.h:$(GLSRC)memory_.h
$(GLSRC)ramfs.h:$(GLSRC)srdline.h
$(GLSRC)ramfs.h:$(GLSRC)scommon.h
$(GLSRC)ramfs.h:$(GLSRC)gsfname.h
-$(GLSRC)ramfs.h:$(GLSRC)gsstype.h
$(GLSRC)ramfs.h:$(GLSRC)stat_.h
+$(GLSRC)ramfs.h:$(GLSRC)gsstype.h
$(GLSRC)ramfs.h:$(GLSRC)gsmemory.h
-$(GLSRC)ramfs.h:$(GLSRC)memory_.h
$(GLSRC)ramfs.h:$(GLSRC)gpgetenv.h
-$(GLSRC)ramfs.h:$(GLSRC)gslibctx.h
$(GLSRC)ramfs.h:$(GLSRC)gscdefs.h
-$(GLSRC)ramfs.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)ramfs.h:$(GLSRC)gslibctx.h
$(GLSRC)ramfs.h:$(GLSRC)stdio_.h
$(GLSRC)ramfs.h:$(GLSRC)stdint_.h
$(GLSRC)ramfs.h:$(GLSRC)gssprintf.h
-$(GLSRC)ramfs.h:$(GLSRC)std.h
$(GLSRC)ramfs.h:$(GLSRC)gstypes.h
+$(GLSRC)ramfs.h:$(GLSRC)std.h
$(GLSRC)ramfs.h:$(GLSRC)stdpre.h
$(GLSRC)ramfs.h:$(GLGEN)arch.h
+$(GLSRC)ramfs.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsmd5.h:$(GLSRC)memory_.h
$(GLSRC)gsmd5.h:$(GLSRC)std.h
$(GLSRC)gsmd5.h:$(GLSRC)stdpre.h
@@ -4846,25 +4855,26 @@ $(GLSRC)sha2.h:$(GLSRC)stdint_.h
$(GLSRC)sha2.h:$(GLSRC)std.h
$(GLSRC)sha2.h:$(GLSRC)stdpre.h
$(GLSRC)sha2.h:$(GLGEN)arch.h
-$(GLSRC)gsalpha.h:$(GLSRC)gsgstate.h
-$(GLSRC)gsccode.h:$(GLSRC)std.h
+$(GLSRC)gsccode.h:$(GLSRC)stdint_.h
$(GLSRC)gsccode.h:$(GLSRC)gstypes.h
+$(GLSRC)gsccode.h:$(GLSRC)std.h
$(GLSRC)gsccode.h:$(GLSRC)stdpre.h
$(GLSRC)gsccode.h:$(GLGEN)arch.h
$(GLSRC)gsccolor.h:$(GLSRC)gsstype.h
$(GLSRC)gsccolor.h:$(GLSRC)gsmemory.h
$(GLSRC)gsccolor.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsccolor.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsccolor.h:$(GLSRC)stdio_.h
$(GLSRC)gsccolor.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsccolor.h:$(GLSRC)std.h
$(GLSRC)gsccolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gsccolor.h:$(GLSRC)std.h
$(GLSRC)gsccolor.h:$(GLSRC)stdpre.h
$(GLSRC)gsccolor.h:$(GLGEN)arch.h
+$(GLSRC)gsccolor.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscedata.h:$(GLSRC)stdpre.h
$(GLSRC)gscencs.h:$(GLSRC)gsccode.h
-$(GLSRC)gscencs.h:$(GLSRC)std.h
+$(GLSRC)gscencs.h:$(GLSRC)stdint_.h
$(GLSRC)gscencs.h:$(GLSRC)gstypes.h
+$(GLSRC)gscencs.h:$(GLSRC)std.h
$(GLSRC)gscencs.h:$(GLSRC)stdpre.h
$(GLSRC)gscencs.h:$(GLGEN)arch.h
$(GLSRC)gsclipsr.h:$(GLSRC)gsgstate.h
@@ -4873,95 +4883,96 @@ $(GLSRC)gscolor1.h:$(GLSRC)gsgstate.h
$(GLSRC)gscolor1.h:$(GLSRC)stdpre.h
$(GLSRC)gscompt.h:$(GLSRC)gstypes.h
$(GLSRC)gscompt.h:$(GLSRC)stdpre.h
+$(GLSRC)gscoord.h:$(GLSRC)gsgstate.h
$(GLSRC)gscoord.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscoord.h:$(GLSRC)scommon.h
$(GLSRC)gscoord.h:$(GLSRC)gsstype.h
$(GLSRC)gscoord.h:$(GLSRC)gsmemory.h
$(GLSRC)gscoord.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscoord.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscoord.h:$(GLSRC)stdio_.h
-$(GLSRC)gscoord.h:$(GLSRC)gsgstate.h
$(GLSRC)gscoord.h:$(GLSRC)stdint_.h
$(GLSRC)gscoord.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscoord.h:$(GLSRC)std.h
$(GLSRC)gscoord.h:$(GLSRC)gstypes.h
+$(GLSRC)gscoord.h:$(GLSRC)std.h
$(GLSRC)gscoord.h:$(GLSRC)stdpre.h
$(GLSRC)gscoord.h:$(GLGEN)arch.h
+$(GLSRC)gscoord.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsdevice.h:$(GLSRC)gsgstate.h
$(GLSRC)gsdevice.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsdevice.h:$(GLSRC)gsparam.h
$(GLSRC)gsdevice.h:$(GLSRC)scommon.h
$(GLSRC)gsdevice.h:$(GLSRC)gsstype.h
$(GLSRC)gsdevice.h:$(GLSRC)gsmemory.h
$(GLSRC)gsdevice.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsdevice.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsdevice.h:$(GLSRC)stdio_.h
-$(GLSRC)gsdevice.h:$(GLSRC)gsgstate.h
$(GLSRC)gsdevice.h:$(GLSRC)stdint_.h
$(GLSRC)gsdevice.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsdevice.h:$(GLSRC)std.h
$(GLSRC)gsdevice.h:$(GLSRC)gstypes.h
+$(GLSRC)gsdevice.h:$(GLSRC)std.h
$(GLSRC)gsdevice.h:$(GLSRC)stdpre.h
$(GLSRC)gsdevice.h:$(GLGEN)arch.h
+$(GLSRC)gsdevice.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfcmap.h:$(GLSRC)gsccode.h
-$(GLSRC)gsfcmap.h:$(GLSRC)std.h
+$(GLSRC)gsfcmap.h:$(GLSRC)stdint_.h
$(GLSRC)gsfcmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfcmap.h:$(GLSRC)std.h
$(GLSRC)gsfcmap.h:$(GLSRC)stdpre.h
$(GLSRC)gsfcmap.h:$(GLGEN)arch.h
$(GLSRC)gsfname.h:$(GLSRC)std.h
$(GLSRC)gsfname.h:$(GLSRC)stdpre.h
$(GLSRC)gsfname.h:$(GLGEN)arch.h
+$(GLSRC)gsfont.h:$(GLSRC)gsgstate.h
$(GLSRC)gsfont.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsfont.h:$(GLSRC)scommon.h
$(GLSRC)gsfont.h:$(GLSRC)gsstype.h
$(GLSRC)gsfont.h:$(GLSRC)gsmemory.h
$(GLSRC)gsfont.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsfont.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfont.h:$(GLSRC)stdio_.h
-$(GLSRC)gsfont.h:$(GLSRC)gsgstate.h
$(GLSRC)gsfont.h:$(GLSRC)stdint_.h
$(GLSRC)gsfont.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsfont.h:$(GLSRC)std.h
$(GLSRC)gsfont.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfont.h:$(GLSRC)std.h
$(GLSRC)gsfont.h:$(GLSRC)stdpre.h
$(GLSRC)gsfont.h:$(GLGEN)arch.h
-$(GLSRC)gsgdata.h:$(GLSRC)gsgcache.h
+$(GLSRC)gsfont.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsgdata.h:$(GLSRC)gsfont.h
+$(GLSRC)gsgdata.h:$(GLSRC)gsgcache.h
+$(GLSRC)gsgdata.h:$(GLSRC)gsgstate.h
$(GLSRC)gsgdata.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsgdata.h:$(GLSRC)scommon.h
$(GLSRC)gsgdata.h:$(GLSRC)gsstype.h
$(GLSRC)gsgdata.h:$(GLSRC)gsmemory.h
$(GLSRC)gsgdata.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsgdata.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsgdata.h:$(GLSRC)stdio_.h
-$(GLSRC)gsgdata.h:$(GLSRC)gsgstate.h
$(GLSRC)gsgdata.h:$(GLSRC)stdint_.h
$(GLSRC)gsgdata.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsgdata.h:$(GLSRC)std.h
$(GLSRC)gsgdata.h:$(GLSRC)gstypes.h
+$(GLSRC)gsgdata.h:$(GLSRC)std.h
$(GLSRC)gsgdata.h:$(GLSRC)stdpre.h
$(GLSRC)gsgdata.h:$(GLGEN)arch.h
+$(GLSRC)gsgdata.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsgcache.h:$(GLSRC)scommon.h
$(GLSRC)gsgcache.h:$(GLSRC)gsstype.h
$(GLSRC)gsgcache.h:$(GLSRC)gsmemory.h
$(GLSRC)gsgcache.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsgcache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsgcache.h:$(GLSRC)stdio_.h
$(GLSRC)gsgcache.h:$(GLSRC)stdint_.h
$(GLSRC)gsgcache.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsgcache.h:$(GLSRC)std.h
$(GLSRC)gsgcache.h:$(GLSRC)gstypes.h
+$(GLSRC)gsgcache.h:$(GLSRC)std.h
$(GLSRC)gsgcache.h:$(GLSRC)stdpre.h
$(GLSRC)gsgcache.h:$(GLGEN)arch.h
+$(GLSRC)gsgcache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gshsb.h:$(GLSRC)gsgstate.h
$(GLSRC)gsht.h:$(GLSRC)gsgstate.h
-$(GLSRC)gsht.h:$(GLSRC)std.h
$(GLSRC)gsht.h:$(GLSRC)gstypes.h
+$(GLSRC)gsht.h:$(GLSRC)std.h
$(GLSRC)gsht.h:$(GLSRC)stdpre.h
$(GLSRC)gsht.h:$(GLGEN)arch.h
$(GLSRC)gsht1.h:$(GLSRC)gsht.h
$(GLSRC)gsht1.h:$(GLSRC)gsgstate.h
-$(GLSRC)gsht1.h:$(GLSRC)std.h
$(GLSRC)gsht1.h:$(GLSRC)gstypes.h
+$(GLSRC)gsht1.h:$(GLSRC)std.h
$(GLSRC)gsht1.h:$(GLSRC)stdpre.h
$(GLSRC)gsht1.h:$(GLGEN)arch.h
$(GLSRC)gsjconf.h:$(GLSRC)stdpre.h
@@ -4973,1252 +4984,1254 @@ $(GLSRC)gsmatrix.h:$(GLSRC)scommon.h
$(GLSRC)gsmatrix.h:$(GLSRC)gsstype.h
$(GLSRC)gsmatrix.h:$(GLSRC)gsmemory.h
$(GLSRC)gsmatrix.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsmatrix.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsmatrix.h:$(GLSRC)stdio_.h
$(GLSRC)gsmatrix.h:$(GLSRC)stdint_.h
$(GLSRC)gsmatrix.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsmatrix.h:$(GLSRC)std.h
$(GLSRC)gsmatrix.h:$(GLSRC)gstypes.h
+$(GLSRC)gsmatrix.h:$(GLSRC)std.h
$(GLSRC)gsmatrix.h:$(GLSRC)stdpre.h
$(GLSRC)gsmatrix.h:$(GLGEN)arch.h
+$(GLSRC)gsmatrix.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxbitfmt.h:$(GLSRC)stdpre.h
-$(GLSRC)gxcomp.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxcomp.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxcomp.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxcomp.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcomp.h:$(GLSRC)gscompt.h
$(GLSRC)gxcomp.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxcomp.h:$(GLSRC)gsrefct.h
$(GLSRC)gxcomp.h:$(GLSRC)gsparam.h
-$(GLSRC)gxcomp.h:$(GLSRC)scommon.h
+$(GLSRC)gxcomp.h:$(GLSRC)gsrefct.h
$(GLSRC)gxcomp.h:$(GLSRC)memento.h
+$(GLSRC)gxcomp.h:$(GLSRC)scommon.h
$(GLSRC)gxcomp.h:$(GLSRC)gsstype.h
$(GLSRC)gxcomp.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcomp.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxcomp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcomp.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcomp.h:$(GLSRC)gscompt.h
-$(GLSRC)gxcomp.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcomp.h:$(GLSRC)stdint_.h
$(GLSRC)gxcomp.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxcomp.h:$(GLSRC)std.h
$(GLSRC)gxcomp.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcomp.h:$(GLSRC)std.h
$(GLSRC)gxcomp.h:$(GLSRC)stdpre.h
$(GLSRC)gxcomp.h:$(GLGEN)arch.h
+$(GLSRC)gxcomp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsovrc.h:$(GLSRC)gxcomp.h
-$(GLSRC)gsovrc.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gsovrc.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsovrc.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gsovrc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsovrc.h:$(GLSRC)gscompt.h
$(GLSRC)gsovrc.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsovrc.h:$(GLSRC)gsrefct.h
$(GLSRC)gsovrc.h:$(GLSRC)gsparam.h
-$(GLSRC)gsovrc.h:$(GLSRC)scommon.h
+$(GLSRC)gsovrc.h:$(GLSRC)gsrefct.h
$(GLSRC)gsovrc.h:$(GLSRC)memento.h
+$(GLSRC)gsovrc.h:$(GLSRC)scommon.h
$(GLSRC)gsovrc.h:$(GLSRC)gsstype.h
$(GLSRC)gsovrc.h:$(GLSRC)gsmemory.h
$(GLSRC)gsovrc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsovrc.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gsovrc.h:$(GLSRC)stdio_.h
-$(GLSRC)gsovrc.h:$(GLSRC)gscompt.h
$(GLSRC)gsovrc.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsovrc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsovrc.h:$(GLSRC)stdio_.h
$(GLSRC)gsovrc.h:$(GLSRC)stdint_.h
$(GLSRC)gsovrc.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsovrc.h:$(GLSRC)std.h
$(GLSRC)gsovrc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsovrc.h:$(GLSRC)std.h
$(GLSRC)gsovrc.h:$(GLSRC)stdpre.h
$(GLSRC)gsovrc.h:$(GLGEN)arch.h
+$(GLSRC)gsovrc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gspaint.h:$(GLSRC)gsgstate.h
$(GLSRC)gspaint.h:$(GLSRC)stdpre.h
$(GLSRC)gsparam.h:$(GLSRC)gsstype.h
$(GLSRC)gsparam.h:$(GLSRC)gsmemory.h
$(GLSRC)gsparam.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsparam.h:$(GLSRC)stdio_.h
+$(GLSRC)gsparam.h:$(GLSRC)stdint_.h
$(GLSRC)gsparam.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsparam.h:$(GLSRC)std.h
$(GLSRC)gsparam.h:$(GLSRC)gstypes.h
+$(GLSRC)gsparam.h:$(GLSRC)std.h
$(GLSRC)gsparam.h:$(GLSRC)stdpre.h
$(GLSRC)gsparam.h:$(GLGEN)arch.h
+$(GLSRC)gsparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsparams.h:$(GLSRC)stream.h
$(GLSRC)gsparams.h:$(GLSRC)gxiodev.h
$(GLSRC)gsparams.h:$(GLSRC)gsparam.h
$(GLSRC)gsparams.h:$(GLSRC)gp.h
+$(GLSRC)gsparams.h:$(GLSRC)memory_.h
$(GLSRC)gsparams.h:$(GLSRC)srdline.h
$(GLSRC)gsparams.h:$(GLSRC)scommon.h
$(GLSRC)gsparams.h:$(GLSRC)gsfname.h
-$(GLSRC)gsparams.h:$(GLSRC)gsstype.h
$(GLSRC)gsparams.h:$(GLSRC)stat_.h
+$(GLSRC)gsparams.h:$(GLSRC)gsstype.h
$(GLSRC)gsparams.h:$(GLSRC)gsmemory.h
-$(GLSRC)gsparams.h:$(GLSRC)memory_.h
$(GLSRC)gsparams.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gsparams.h:$(GLSRC)gslibctx.h
$(GLSRC)gsparams.h:$(GLSRC)gscdefs.h
-$(GLSRC)gsparams.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsparams.h:$(GLSRC)gslibctx.h
$(GLSRC)gsparams.h:$(GLSRC)stdio_.h
$(GLSRC)gsparams.h:$(GLSRC)stdint_.h
$(GLSRC)gsparams.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsparams.h:$(GLSRC)std.h
$(GLSRC)gsparams.h:$(GLSRC)gstypes.h
+$(GLSRC)gsparams.h:$(GLSRC)std.h
$(GLSRC)gsparams.h:$(GLSRC)stdpre.h
$(GLSRC)gsparams.h:$(GLGEN)arch.h
+$(GLSRC)gsparams.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsparamx.h:$(GLSRC)gsparam.h
$(GLSRC)gsparamx.h:$(GLSRC)gsstype.h
$(GLSRC)gsparamx.h:$(GLSRC)gsmemory.h
$(GLSRC)gsparamx.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsparamx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsparamx.h:$(GLSRC)stdio_.h
+$(GLSRC)gsparamx.h:$(GLSRC)stdint_.h
$(GLSRC)gsparamx.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsparamx.h:$(GLSRC)std.h
$(GLSRC)gsparamx.h:$(GLSRC)gstypes.h
+$(GLSRC)gsparamx.h:$(GLSRC)std.h
$(GLSRC)gsparamx.h:$(GLSRC)stdpre.h
$(GLSRC)gsparamx.h:$(GLGEN)arch.h
+$(GLSRC)gsparamx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gspath2.h:$(GLSRC)gsgstate.h
$(GLSRC)gspath2.h:$(GLSRC)gsmatrix.h
$(GLSRC)gspath2.h:$(GLSRC)scommon.h
$(GLSRC)gspath2.h:$(GLSRC)gsstype.h
$(GLSRC)gspath2.h:$(GLSRC)gsmemory.h
$(GLSRC)gspath2.h:$(GLSRC)gslibctx.h
-$(GLSRC)gspath2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gspath2.h:$(GLSRC)stdio_.h
-$(GLSRC)gspath2.h:$(GLSRC)gsgstate.h
$(GLSRC)gspath2.h:$(GLSRC)stdint_.h
$(GLSRC)gspath2.h:$(GLSRC)gssprintf.h
-$(GLSRC)gspath2.h:$(GLSRC)std.h
$(GLSRC)gspath2.h:$(GLSRC)gstypes.h
+$(GLSRC)gspath2.h:$(GLSRC)std.h
$(GLSRC)gspath2.h:$(GLSRC)stdpre.h
$(GLSRC)gspath2.h:$(GLGEN)arch.h
-$(GLSRC)gspcolor.h:$(GLSRC)gsuid.h
+$(GLSRC)gspath2.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gspcolor.h:$(GLSRC)gsgstate.h
$(GLSRC)gspcolor.h:$(GLSRC)gsmatrix.h
$(GLSRC)gspcolor.h:$(GLSRC)gsrefct.h
-$(GLSRC)gspcolor.h:$(GLSRC)gsccolor.h
-$(GLSRC)gspcolor.h:$(GLSRC)scommon.h
$(GLSRC)gspcolor.h:$(GLSRC)memento.h
+$(GLSRC)gspcolor.h:$(GLSRC)gsuid.h
+$(GLSRC)gspcolor.h:$(GLSRC)scommon.h
+$(GLSRC)gspcolor.h:$(GLSRC)gsccolor.h
$(GLSRC)gspcolor.h:$(GLSRC)gsstype.h
$(GLSRC)gspcolor.h:$(GLSRC)gsmemory.h
$(GLSRC)gspcolor.h:$(GLSRC)gslibctx.h
-$(GLSRC)gspcolor.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gspcolor.h:$(GLSRC)stdio_.h
-$(GLSRC)gspcolor.h:$(GLSRC)gsgstate.h
$(GLSRC)gspcolor.h:$(GLSRC)stdint_.h
$(GLSRC)gspcolor.h:$(GLSRC)gssprintf.h
-$(GLSRC)gspcolor.h:$(GLSRC)std.h
$(GLSRC)gspcolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gspcolor.h:$(GLSRC)std.h
$(GLSRC)gspcolor.h:$(GLSRC)stdpre.h
$(GLSRC)gspcolor.h:$(GLGEN)arch.h
+$(GLSRC)gspcolor.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsptype1.h:$(GLSRC)gspcolor.h
-$(GLSRC)gsptype1.h:$(GLSRC)gsuid.h
$(GLSRC)gsptype1.h:$(GLSRC)gsdcolor.h
$(GLSRC)gsptype1.h:$(GLSRC)gscms.h
-$(GLSRC)gsptype1.h:$(GLSRC)gscspace.h
$(GLSRC)gsptype1.h:$(GLSRC)gsdevice.h
-$(GLSRC)gsptype1.h:$(GLSRC)gxarith.h
-$(GLSRC)gsptype1.h:$(GLSRC)gxhttile.h
+$(GLSRC)gsptype1.h:$(GLSRC)gscspace.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsgstate.h
$(GLSRC)gsptype1.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsptype1.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsptype1.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsptype1.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsptype1.h:$(GLSRC)gxhttile.h
$(GLSRC)gsptype1.h:$(GLSRC)gsparam.h
-$(GLSRC)gsptype1.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsptype1.h:$(GLSRC)memento.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsuid.h
$(GLSRC)gsptype1.h:$(GLSRC)gxsync.h
+$(GLSRC)gsptype1.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsptype1.h:$(GLSRC)scommon.h
-$(GLSRC)gsptype1.h:$(GLSRC)memento.h
$(GLSRC)gsptype1.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsptype1.h:$(GLSRC)gxarith.h
+$(GLSRC)gsptype1.h:$(GLSRC)gpsync.h
$(GLSRC)gsptype1.h:$(GLSRC)gsstype.h
$(GLSRC)gsptype1.h:$(GLSRC)gsmemory.h
-$(GLSRC)gsptype1.h:$(GLSRC)gpsync.h
$(GLSRC)gsptype1.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsptype1.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gsptype1.h:$(GLSRC)stdio_.h
$(GLSRC)gsptype1.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsptype1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsptype1.h:$(GLSRC)stdio_.h
$(GLSRC)gsptype1.h:$(GLSRC)stdint_.h
$(GLSRC)gsptype1.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsptype1.h:$(GLSRC)std.h
$(GLSRC)gsptype1.h:$(GLSRC)gstypes.h
+$(GLSRC)gsptype1.h:$(GLSRC)std.h
$(GLSRC)gsptype1.h:$(GLSRC)stdpre.h
$(GLSRC)gsptype1.h:$(GLGEN)arch.h
+$(GLSRC)gsptype1.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsropt.h:$(GLSRC)stdpre.h
-$(GLSRC)gstext.h:$(GLSRC)gsdcolor.h
$(GLSRC)gstext.h:$(GLSRC)gsfont.h
-$(GLSRC)gstext.h:$(GLSRC)gscms.h
-$(GLSRC)gstext.h:$(GLSRC)gscspace.h
+$(GLSRC)gstext.h:$(GLSRC)gsdcolor.h
$(GLSRC)gstext.h:$(GLSRC)gxpath.h
-$(GLSRC)gstext.h:$(GLSRC)gsdevice.h
-$(GLSRC)gstext.h:$(GLSRC)gxarith.h
-$(GLSRC)gstext.h:$(GLSRC)gspenum.h
-$(GLSRC)gstext.h:$(GLSRC)gxhttile.h
+$(GLSRC)gstext.h:$(GLSRC)gscms.h
$(GLSRC)gstext.h:$(GLSRC)gsrect.h
$(GLSRC)gstext.h:$(GLSRC)gslparam.h
-$(GLSRC)gstext.h:$(GLSRC)gsiparam.h
-$(GLSRC)gstext.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gstext.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstext.h:$(GLSRC)gsdevice.h
$(GLSRC)gstext.h:$(GLSRC)gscpm.h
+$(GLSRC)gstext.h:$(GLSRC)gscspace.h
+$(GLSRC)gstext.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstext.h:$(GLSRC)gsiparam.h
$(GLSRC)gstext.h:$(GLSRC)gxfixed.h
-$(GLSRC)gstext.h:$(GLSRC)gsrefct.h
+$(GLSRC)gstext.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstext.h:$(GLSRC)gspenum.h
+$(GLSRC)gstext.h:$(GLSRC)gxhttile.h
$(GLSRC)gstext.h:$(GLSRC)gsparam.h
-$(GLSRC)gstext.h:$(GLSRC)gsccolor.h
+$(GLSRC)gstext.h:$(GLSRC)gsrefct.h
+$(GLSRC)gstext.h:$(GLSRC)memento.h
$(GLSRC)gstext.h:$(GLSRC)gxsync.h
+$(GLSRC)gstext.h:$(GLSRC)gxbitmap.h
$(GLSRC)gstext.h:$(GLSRC)scommon.h
-$(GLSRC)gstext.h:$(GLSRC)memento.h
$(GLSRC)gstext.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gstext.h:$(GLSRC)gsccolor.h
+$(GLSRC)gstext.h:$(GLSRC)gxarith.h
+$(GLSRC)gstext.h:$(GLSRC)gpsync.h
$(GLSRC)gstext.h:$(GLSRC)gsstype.h
$(GLSRC)gstext.h:$(GLSRC)gsmemory.h
-$(GLSRC)gstext.h:$(GLSRC)gpsync.h
$(GLSRC)gstext.h:$(GLSRC)gslibctx.h
-$(GLSRC)gstext.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gstext.h:$(GLSRC)stdio_.h
$(GLSRC)gstext.h:$(GLSRC)gxcindex.h
-$(GLSRC)gstext.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstext.h:$(GLSRC)stdio_.h
+$(GLSRC)gstext.h:$(GLSRC)gsccode.h
$(GLSRC)gstext.h:$(GLSRC)stdint_.h
$(GLSRC)gstext.h:$(GLSRC)gssprintf.h
-$(GLSRC)gstext.h:$(GLSRC)gsccode.h
-$(GLSRC)gstext.h:$(GLSRC)std.h
$(GLSRC)gstext.h:$(GLSRC)gstypes.h
+$(GLSRC)gstext.h:$(GLSRC)std.h
$(GLSRC)gstext.h:$(GLSRC)stdpre.h
$(GLSRC)gstext.h:$(GLGEN)arch.h
+$(GLSRC)gstext.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsxfont.h:$(GLSRC)stdpre.h
$(GLSRC)gschar.h:$(GLSRC)gsstate.h
$(GLSRC)gschar.h:$(GLSRC)gsovrc.h
$(GLSRC)gschar.h:$(GLSRC)gscolor.h
-$(GLSRC)gschar.h:$(GLSRC)gxcomp.h
$(GLSRC)gschar.h:$(GLSRC)gsline.h
-$(GLSRC)gschar.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gschar.h:$(GLSRC)gxcomp.h
$(GLSRC)gschar.h:$(GLSRC)gsht.h
$(GLSRC)gschar.h:$(GLSRC)gxtext.h
$(GLSRC)gschar.h:$(GLSRC)gstext.h
+$(GLSRC)gschar.h:$(GLSRC)gscsel.h
$(GLSRC)gschar.h:$(GLSRC)gxfcache.h
-$(GLSRC)gschar.h:$(GLSRC)gsuid.h
-$(GLSRC)gschar.h:$(GLSRC)gsdcolor.h
$(GLSRC)gschar.h:$(GLSRC)gsfont.h
+$(GLSRC)gschar.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gschar.h:$(GLSRC)gxbcache.h
+$(GLSRC)gschar.h:$(GLSRC)gxpath.h
+$(GLSRC)gschar.h:$(GLSRC)gxtmap.h
$(GLSRC)gschar.h:$(GLSRC)gxftype.h
$(GLSRC)gschar.h:$(GLSRC)gscms.h
-$(GLSRC)gschar.h:$(GLSRC)gscspace.h
-$(GLSRC)gschar.h:$(GLSRC)gxpath.h
-$(GLSRC)gschar.h:$(GLSRC)gxbcache.h
-$(GLSRC)gschar.h:$(GLSRC)gsdevice.h
-$(GLSRC)gschar.h:$(GLSRC)gxarith.h
-$(GLSRC)gschar.h:$(GLSRC)gspenum.h
-$(GLSRC)gschar.h:$(GLSRC)gxhttile.h
$(GLSRC)gschar.h:$(GLSRC)gsrect.h
$(GLSRC)gschar.h:$(GLSRC)gslparam.h
+$(GLSRC)gschar.h:$(GLSRC)gsdevice.h
+$(GLSRC)gschar.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gschar.h:$(GLSRC)gscpm.h
+$(GLSRC)gschar.h:$(GLSRC)gscspace.h
+$(GLSRC)gschar.h:$(GLSRC)gsgstate.h
$(GLSRC)gschar.h:$(GLSRC)gsxfont.h
$(GLSRC)gschar.h:$(GLSRC)gsiparam.h
-$(GLSRC)gschar.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gschar.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gschar.h:$(GLSRC)gscpm.h
$(GLSRC)gschar.h:$(GLSRC)gxfixed.h
-$(GLSRC)gschar.h:$(GLSRC)gsrefct.h
+$(GLSRC)gschar.h:$(GLSRC)gscompt.h
+$(GLSRC)gschar.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gschar.h:$(GLSRC)gspenum.h
+$(GLSRC)gschar.h:$(GLSRC)gxhttile.h
$(GLSRC)gschar.h:$(GLSRC)gsparam.h
-$(GLSRC)gschar.h:$(GLSRC)gsccolor.h
+$(GLSRC)gschar.h:$(GLSRC)gsrefct.h
+$(GLSRC)gschar.h:$(GLSRC)memento.h
+$(GLSRC)gschar.h:$(GLSRC)gsuid.h
$(GLSRC)gschar.h:$(GLSRC)gxsync.h
+$(GLSRC)gschar.h:$(GLSRC)gxbitmap.h
$(GLSRC)gschar.h:$(GLSRC)scommon.h
-$(GLSRC)gschar.h:$(GLSRC)memento.h
-$(GLSRC)gschar.h:$(GLSRC)gscsel.h
$(GLSRC)gschar.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gschar.h:$(GLSRC)gsccolor.h
+$(GLSRC)gschar.h:$(GLSRC)gxarith.h
+$(GLSRC)gschar.h:$(GLSRC)gpsync.h
$(GLSRC)gschar.h:$(GLSRC)gsstype.h
-$(GLSRC)gschar.h:$(GLSRC)gxtmap.h
$(GLSRC)gschar.h:$(GLSRC)gsmemory.h
-$(GLSRC)gschar.h:$(GLSRC)gpsync.h
$(GLSRC)gschar.h:$(GLSRC)gslibctx.h
-$(GLSRC)gschar.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gschar.h:$(GLSRC)stdio_.h
-$(GLSRC)gschar.h:$(GLSRC)gscompt.h
$(GLSRC)gschar.h:$(GLSRC)gxcindex.h
-$(GLSRC)gschar.h:$(GLSRC)gsgstate.h
+$(GLSRC)gschar.h:$(GLSRC)stdio_.h
+$(GLSRC)gschar.h:$(GLSRC)gsccode.h
$(GLSRC)gschar.h:$(GLSRC)stdint_.h
$(GLSRC)gschar.h:$(GLSRC)gssprintf.h
-$(GLSRC)gschar.h:$(GLSRC)gsccode.h
-$(GLSRC)gschar.h:$(GLSRC)std.h
$(GLSRC)gschar.h:$(GLSRC)gstypes.h
+$(GLSRC)gschar.h:$(GLSRC)std.h
$(GLSRC)gschar.h:$(GLSRC)stdpre.h
$(GLSRC)gschar.h:$(GLGEN)arch.h
-$(GLSRC)gsiparam.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gschar.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsiparam.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsiparam.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsiparam.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsiparam.h:$(GLSRC)scommon.h
$(GLSRC)gsiparam.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsiparam.h:$(GLSRC)gsccolor.h
$(GLSRC)gsiparam.h:$(GLSRC)gsstype.h
$(GLSRC)gsiparam.h:$(GLSRC)gsmemory.h
$(GLSRC)gsiparam.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsiparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsiparam.h:$(GLSRC)stdio_.h
$(GLSRC)gsiparam.h:$(GLSRC)stdint_.h
$(GLSRC)gsiparam.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsiparam.h:$(GLSRC)std.h
$(GLSRC)gsiparam.h:$(GLSRC)gstypes.h
+$(GLSRC)gsiparam.h:$(GLSRC)std.h
$(GLSRC)gsiparam.h:$(GLSRC)stdpre.h
$(GLSRC)gsiparam.h:$(GLGEN)arch.h
+$(GLSRC)gsiparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsimage.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsimage.h:$(GLSRC)gsgstate.h
$(GLSRC)gsimage.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsimage.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsimage.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsimage.h:$(GLSRC)gsparam.h
-$(GLSRC)gsimage.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsimage.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsimage.h:$(GLSRC)scommon.h
$(GLSRC)gsimage.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsimage.h:$(GLSRC)gsccolor.h
$(GLSRC)gsimage.h:$(GLSRC)gsstype.h
$(GLSRC)gsimage.h:$(GLSRC)gsmemory.h
$(GLSRC)gsimage.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsimage.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsimage.h:$(GLSRC)stdio_.h
-$(GLSRC)gsimage.h:$(GLSRC)gsgstate.h
$(GLSRC)gsimage.h:$(GLSRC)stdint_.h
$(GLSRC)gsimage.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsimage.h:$(GLSRC)std.h
$(GLSRC)gsimage.h:$(GLSRC)gstypes.h
+$(GLSRC)gsimage.h:$(GLSRC)std.h
$(GLSRC)gsimage.h:$(GLSRC)stdpre.h
$(GLSRC)gsimage.h:$(GLGEN)arch.h
+$(GLSRC)gsimage.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsline.h:$(GLSRC)gslparam.h
$(GLSRC)gsline.h:$(GLSRC)gsgstate.h
$(GLSRC)gsline.h:$(GLSRC)stdpre.h
$(GLSRC)gspath.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gspath.h:$(GLSRC)gspenum.h
-$(GLSRC)gspath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gspath.h:$(GLSRC)gsgstate.h
$(GLSRC)gspath.h:$(GLSRC)gxfixed.h
+$(GLSRC)gspath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gspath.h:$(GLSRC)gspenum.h
$(GLSRC)gspath.h:$(GLSRC)scommon.h
$(GLSRC)gspath.h:$(GLSRC)gsstype.h
$(GLSRC)gspath.h:$(GLSRC)gsmemory.h
$(GLSRC)gspath.h:$(GLSRC)gslibctx.h
-$(GLSRC)gspath.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gspath.h:$(GLSRC)stdio_.h
-$(GLSRC)gspath.h:$(GLSRC)gsgstate.h
$(GLSRC)gspath.h:$(GLSRC)stdint_.h
$(GLSRC)gspath.h:$(GLSRC)gssprintf.h
-$(GLSRC)gspath.h:$(GLSRC)std.h
$(GLSRC)gspath.h:$(GLSRC)gstypes.h
+$(GLSRC)gspath.h:$(GLSRC)std.h
$(GLSRC)gspath.h:$(GLSRC)stdpre.h
$(GLSRC)gspath.h:$(GLGEN)arch.h
+$(GLSRC)gspath.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsrop.h:$(GLSRC)gsropt.h
$(GLSRC)gsrop.h:$(GLSRC)gsgstate.h
$(GLSRC)gsrop.h:$(GLSRC)stdpre.h
$(GLSRC)gstparam.h:$(GLSRC)gsfunc.h
$(GLSRC)gstparam.h:$(GLSRC)gscspace.h
-$(GLSRC)gstparam.h:$(GLSRC)gsiparam.h
+$(GLSRC)gstparam.h:$(GLSRC)gsgstate.h
$(GLSRC)gstparam.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gstparam.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gstparam.h:$(GLSRC)gsiparam.h
$(GLSRC)gstparam.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gstparam.h:$(GLSRC)gsrefct.h
$(GLSRC)gstparam.h:$(GLSRC)gsparam.h
-$(GLSRC)gstparam.h:$(GLSRC)gsccolor.h
+$(GLSRC)gstparam.h:$(GLSRC)gsrefct.h
+$(GLSRC)gstparam.h:$(GLSRC)memento.h
$(GLSRC)gstparam.h:$(GLSRC)gsstruct.h
+$(GLSRC)gstparam.h:$(GLSRC)gxbitmap.h
$(GLSRC)gstparam.h:$(GLSRC)scommon.h
-$(GLSRC)gstparam.h:$(GLSRC)memento.h
$(GLSRC)gstparam.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gstparam.h:$(GLSRC)gsccolor.h
$(GLSRC)gstparam.h:$(GLSRC)gsstype.h
$(GLSRC)gstparam.h:$(GLSRC)gsmemory.h
$(GLSRC)gstparam.h:$(GLSRC)gslibctx.h
-$(GLSRC)gstparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gstparam.h:$(GLSRC)stdio_.h
-$(GLSRC)gstparam.h:$(GLSRC)gsgstate.h
$(GLSRC)gstparam.h:$(GLSRC)stdint_.h
$(GLSRC)gstparam.h:$(GLSRC)gssprintf.h
-$(GLSRC)gstparam.h:$(GLSRC)std.h
$(GLSRC)gstparam.h:$(GLSRC)gstypes.h
+$(GLSRC)gstparam.h:$(GLSRC)std.h
$(GLSRC)gstparam.h:$(GLSRC)stdpre.h
$(GLSRC)gstparam.h:$(GLGEN)arch.h
+$(GLSRC)gstparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxbcache.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxbcache.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxbcache.h:$(GLSRC)gsstype.h
$(GLSRC)gxbcache.h:$(GLSRC)gsmemory.h
$(GLSRC)gxbcache.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxbcache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxbcache.h:$(GLSRC)stdio_.h
$(GLSRC)gxbcache.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxbcache.h:$(GLSRC)std.h
$(GLSRC)gxbcache.h:$(GLSRC)gstypes.h
+$(GLSRC)gxbcache.h:$(GLSRC)std.h
$(GLSRC)gxbcache.h:$(GLSRC)stdpre.h
$(GLSRC)gxbcache.h:$(GLGEN)arch.h
+$(GLSRC)gxbcache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxclio.h:$(GLSRC)gp.h
+$(GLSRC)gxclio.h:$(GLSRC)memory_.h
$(GLSRC)gxclio.h:$(GLSRC)srdline.h
$(GLSRC)gxclio.h:$(GLSRC)scommon.h
-$(GLSRC)gxclio.h:$(GLSRC)gsstype.h
$(GLSRC)gxclio.h:$(GLSRC)stat_.h
+$(GLSRC)gxclio.h:$(GLSRC)gsstype.h
$(GLSRC)gxclio.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxclio.h:$(GLSRC)memory_.h
$(GLSRC)gxclio.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxclio.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclio.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxclio.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclio.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclio.h:$(GLSRC)stdio_.h
$(GLSRC)gxclio.h:$(GLSRC)stdint_.h
$(GLSRC)gxclio.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxclio.h:$(GLSRC)std.h
$(GLSRC)gxclio.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclio.h:$(GLSRC)std.h
$(GLSRC)gxclio.h:$(GLSRC)stdpre.h
$(GLSRC)gxclio.h:$(GLGEN)arch.h
+$(GLSRC)gxclio.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxclip.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxclip.h:$(GLSRC)gxcmap.h
$(GLSRC)gxclip.h:$(GLSRC)gxtext.h
$(GLSRC)gxclip.h:$(GLSRC)gstext.h
$(GLSRC)gxclip.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclip.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclip.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxclip.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxclip.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclip.h:$(GLSRC)gxfmap.h
$(GLSRC)gxclip.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclip.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclip.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxclip.h:$(GLSRC)gsuid.h
-$(GLSRC)gxclip.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclip.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclip.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclip.h:$(GLSRC)gsfont.h
$(GLSRC)gxclip.h:$(GLSRC)gsimage.h
$(GLSRC)gxclip.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclip.h:$(GLSRC)gxdda.h
$(GLSRC)gxclip.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclip.h:$(GLSRC)gsfont.h
-$(GLSRC)gxclip.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxclip.h:$(GLSRC)gxftype.h
+$(GLSRC)gxclip.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclip.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclip.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclip.h:$(GLSRC)gxpath.h
$(GLSRC)gxclip.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclip.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclip.h:$(GLSRC)gxftype.h
$(GLSRC)gxclip.h:$(GLSRC)gscms.h
-$(GLSRC)gxclip.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclip.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclip.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclip.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxclip.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclip.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclip.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclip.h:$(GLSRC)gsrect.h
$(GLSRC)gxclip.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclip.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclip.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclip.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclip.h:$(GLSRC)gsgstate.h
$(GLSRC)gxclip.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxclip.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclip.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxclip.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclip.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxclip.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclip.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclip.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxclip.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclip.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclip.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclip.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclip.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclip.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclip.h:$(GLSRC)gsrefct.h
$(GLSRC)gxclip.h:$(GLSRC)gp.h
-$(GLSRC)gxclip.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclip.h:$(GLSRC)memento.h
+$(GLSRC)gxclip.h:$(GLSRC)memory_.h
+$(GLSRC)gxclip.h:$(GLSRC)gsuid.h
$(GLSRC)gxclip.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclip.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclip.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxclip.h:$(GLSRC)srdline.h
$(GLSRC)gxclip.h:$(GLSRC)scommon.h
-$(GLSRC)gxclip.h:$(GLSRC)memento.h
-$(GLSRC)gxclip.h:$(GLSRC)gscsel.h
$(GLSRC)gxclip.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxclip.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclip.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclip.h:$(GLSRC)gxarith.h
$(GLSRC)gxclip.h:$(GLSRC)stat_.h
-$(GLSRC)gxclip.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclip.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclip.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclip.h:$(GLSRC)memory_.h
+$(GLSRC)gxclip.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclip.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclip.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxclip.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclip.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxclip.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclip.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclip.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclip.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclip.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclip.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclip.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclip.h:$(GLSRC)gsccode.h
$(GLSRC)gxclip.h:$(GLSRC)stdint_.h
$(GLSRC)gxclip.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxclip.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclip.h:$(GLSRC)std.h
$(GLSRC)gxclip.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclip.h:$(GLSRC)std.h
$(GLSRC)gxclip.h:$(GLSRC)stdpre.h
$(GLSRC)gxclip.h:$(GLGEN)arch.h
+$(GLSRC)gxclip.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxclipsr.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclipsr.h:$(GLSRC)gspenum.h
$(GLSRC)gxclipsr.h:$(GLSRC)gsrect.h
$(GLSRC)gxclipsr.h:$(GLSRC)gslparam.h
$(GLSRC)gxclipsr.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gsgstate.h
$(GLSRC)gxclipsr.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gspenum.h
$(GLSRC)gxclipsr.h:$(GLSRC)gsrefct.h
$(GLSRC)gxclipsr.h:$(GLSRC)memento.h
-$(GLSRC)gxclipsr.h:$(GLSRC)gsgstate.h
-$(GLSRC)gxclipsr.h:$(GLSRC)std.h
$(GLSRC)gxclipsr.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclipsr.h:$(GLSRC)std.h
$(GLSRC)gxclipsr.h:$(GLSRC)stdpre.h
$(GLSRC)gxclipsr.h:$(GLGEN)arch.h
$(GLSRC)gxcoord.h:$(GLSRC)gscoord.h
$(GLSRC)gxcoord.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gxcoord.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcoord.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcoord.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxcoord.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxcoord.h:$(GLSRC)scommon.h
$(GLSRC)gxcoord.h:$(GLSRC)gsstype.h
$(GLSRC)gxcoord.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcoord.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxcoord.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcoord.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcoord.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcoord.h:$(GLSRC)stdint_.h
$(GLSRC)gxcoord.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxcoord.h:$(GLSRC)std.h
$(GLSRC)gxcoord.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcoord.h:$(GLSRC)std.h
$(GLSRC)gxcoord.h:$(GLSRC)stdpre.h
$(GLSRC)gxcoord.h:$(GLGEN)arch.h
+$(GLSRC)gxcoord.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcpath.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxcmap.h
$(GLSRC)gxcpath.h:$(GLSRC)gxtext.h
$(GLSRC)gxcpath.h:$(GLSRC)gstext.h
$(GLSRC)gxcpath.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxcpath.h:$(GLSRC)gstparam.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsropt.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxfmap.h
$(GLSRC)gxcpath.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxcspace.h
$(GLSRC)gxcpath.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsuid.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxcpath.h:$(GLSRC)gscsel.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsfont.h
$(GLSRC)gxcpath.h:$(GLSRC)gsimage.h
$(GLSRC)gxcpath.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxdda.h
$(GLSRC)gxcpath.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsfont.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxftype.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsropt.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxdda.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxpath.h
$(GLSRC)gxcpath.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxftype.h
$(GLSRC)gxcpath.h:$(GLSRC)gscms.h
-$(GLSRC)gxcpath.h:$(GLSRC)gscspace.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxpath.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxarith.h
-$(GLSRC)gxcpath.h:$(GLSRC)gspenum.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxhttile.h
$(GLSRC)gxcpath.h:$(GLSRC)gsrect.h
$(GLSRC)gxcpath.h:$(GLSRC)gslparam.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxcpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gxcpath.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcpath.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsiparam.h
$(GLSRC)gxcpath.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxcpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsiparam.h
$(GLSRC)gxcpath.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcpath.h:$(GLSRC)gscompt.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxhttile.h
$(GLSRC)gxcpath.h:$(GLSRC)gsparam.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsrefct.h
$(GLSRC)gxcpath.h:$(GLSRC)gp.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcpath.h:$(GLSRC)memento.h
+$(GLSRC)gxcpath.h:$(GLSRC)memory_.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsuid.h
$(GLSRC)gxcpath.h:$(GLSRC)gsstruct.h
$(GLSRC)gxcpath.h:$(GLSRC)gxsync.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxcpath.h:$(GLSRC)srdline.h
$(GLSRC)gxcpath.h:$(GLSRC)scommon.h
-$(GLSRC)gxcpath.h:$(GLSRC)memento.h
-$(GLSRC)gxcpath.h:$(GLSRC)gscsel.h
$(GLSRC)gxcpath.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxarith.h
$(GLSRC)gxcpath.h:$(GLSRC)stat_.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcpath.h:$(GLSRC)gpsync.h
-$(GLSRC)gxcpath.h:$(GLSRC)memory_.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcpath.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxcpath.h:$(GLSRC)gslibctx.h
$(GLSRC)gxcpath.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxcpath.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxcpath.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcpath.h:$(GLSRC)gscompt.h
+$(GLSRC)gxcpath.h:$(GLSRC)gslibctx.h
$(GLSRC)gxcpath.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcpath.h:$(GLSRC)stdio_.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsccode.h
$(GLSRC)gxcpath.h:$(GLSRC)stdint_.h
$(GLSRC)gxcpath.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsccode.h
-$(GLSRC)gxcpath.h:$(GLSRC)std.h
$(GLSRC)gxcpath.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcpath.h:$(GLSRC)std.h
$(GLSRC)gxcpath.h:$(GLSRC)stdpre.h
$(GLSRC)gxcpath.h:$(GLGEN)arch.h
+$(GLSRC)gxcpath.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdda.h:$(GLSRC)gxfixed.h
$(GLSRC)gxdda.h:$(GLSRC)std.h
$(GLSRC)gxdda.h:$(GLSRC)stdpre.h
$(GLSRC)gxdda.h:$(GLGEN)arch.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxband.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxcmap.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxtext.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gstext.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxfmap.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsuid.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsfont.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsimage.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxdda.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsfont.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxftype.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxpath.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxftype.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gscms.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsrect.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gslparam.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxclio.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxclio.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsrefct.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gp.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)memento.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsuid.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdevbuf.h:$(GLSRC)srdline.h
$(GLSRC)gxdevbuf.h:$(GLSRC)scommon.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)memento.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gscsel.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxarith.h
$(GLSRC)gxdevbuf.h:$(GLSRC)stat_.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsccode.h
$(GLSRC)gxdevbuf.h:$(GLSRC)stdint_.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)std.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)std.h
$(GLSRC)gxdevbuf.h:$(GLSRC)stdpre.h
$(GLSRC)gxdevbuf.h:$(GLGEN)arch.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxcmap.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxtext.h
$(GLSRC)gxdevrop.h:$(GLSRC)gstext.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevrop.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxfmap.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsuid.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsfont.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsimage.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxdda.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsfont.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxftype.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxpath.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxftype.h
$(GLSRC)gxdevrop.h:$(GLSRC)gscms.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsrect.h
$(GLSRC)gxdevrop.h:$(GLSRC)gslparam.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsrefct.h
$(GLSRC)gxdevrop.h:$(GLSRC)gp.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevrop.h:$(GLSRC)memento.h
+$(GLSRC)gxdevrop.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsuid.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdevrop.h:$(GLSRC)srdline.h
$(GLSRC)gxdevrop.h:$(GLSRC)scommon.h
-$(GLSRC)gxdevrop.h:$(GLSRC)memento.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gscsel.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxarith.h
$(GLSRC)gxdevrop.h:$(GLSRC)stat_.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevrop.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdevrop.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevrop.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevrop.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdevrop.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevrop.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsccode.h
$(GLSRC)gxdevrop.h:$(GLSRC)stdint_.h
$(GLSRC)gxdevrop.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdevrop.h:$(GLSRC)std.h
$(GLSRC)gxdevrop.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdevrop.h:$(GLSRC)std.h
$(GLSRC)gxdevrop.h:$(GLSRC)stdpre.h
$(GLSRC)gxdevrop.h:$(GLGEN)arch.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxcmap.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxtext.h
$(GLSRC)gxdevmem.h:$(GLSRC)gstext.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevmem.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxfmap.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsuid.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsfont.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsimage.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxdda.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsfont.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxftype.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxpath.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxftype.h
$(GLSRC)gxdevmem.h:$(GLSRC)gscms.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsrect.h
$(GLSRC)gxdevmem.h:$(GLSRC)gslparam.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsrefct.h
$(GLSRC)gxdevmem.h:$(GLSRC)gp.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevmem.h:$(GLSRC)memento.h
+$(GLSRC)gxdevmem.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsuid.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdevmem.h:$(GLSRC)srdline.h
$(GLSRC)gxdevmem.h:$(GLSRC)scommon.h
-$(GLSRC)gxdevmem.h:$(GLSRC)memento.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gscsel.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxarith.h
$(GLSRC)gxdevmem.h:$(GLSRC)stat_.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevmem.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdevmem.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevmem.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevmem.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdevmem.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevmem.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsccode.h
$(GLSRC)gxdevmem.h:$(GLSRC)stdint_.h
$(GLSRC)gxdevmem.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdevmem.h:$(GLSRC)std.h
$(GLSRC)gxdevmem.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdevmem.h:$(GLSRC)std.h
$(GLSRC)gxdevmem.h:$(GLSRC)stdpre.h
$(GLSRC)gxdevmem.h:$(GLGEN)arch.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdhtres.h:$(GLSRC)stdpre.h
$(GLSRC)gxfont0.h:$(GLSRC)gxfont.h
$(GLSRC)gxfont0.h:$(GLSRC)gspath.h
-$(GLSRC)gxfont0.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxfont0.h:$(GLSRC)gsgdata.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxfont0.h:$(GLSRC)gxfapi.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfont0.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxfont0.h:$(GLSRC)gstext.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsuid.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxfont0.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxpath.h
$(GLSRC)gxfont0.h:$(GLSRC)gxftype.h
$(GLSRC)gxfont0.h:$(GLSRC)gscms.h
-$(GLSRC)gxfont0.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfont0.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxfont0.h:$(GLSRC)gxarith.h
-$(GLSRC)gxfont0.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfont0.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfont0.h:$(GLSRC)gsrect.h
$(GLSRC)gxfont0.h:$(GLSRC)gslparam.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfont0.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsdevice.h
$(GLSRC)gxfont0.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont0.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsnotify.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsiparam.h
$(GLSRC)gxfont0.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont0.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfont0.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont0.h:$(GLSRC)memento.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsuid.h
$(GLSRC)gxfont0.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxfont0.h:$(GLSRC)scommon.h
-$(GLSRC)gxfont0.h:$(GLSRC)memento.h
$(GLSRC)gxfont0.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont0.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont0.h:$(GLSRC)gsstype.h
$(GLSRC)gxfont0.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxfont0.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont0.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfont0.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfont0.h:$(GLSRC)stdio_.h
$(GLSRC)gxfont0.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont0.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsccode.h
$(GLSRC)gxfont0.h:$(GLSRC)stdint_.h
$(GLSRC)gxfont0.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfont0.h:$(GLSRC)std.h
$(GLSRC)gxfont0.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfont0.h:$(GLSRC)std.h
$(GLSRC)gxfont0.h:$(GLSRC)stdpre.h
$(GLSRC)gxfont0.h:$(GLGEN)arch.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxfont0.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxcmap.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxtext.h
$(GLSRC)gxgetbit.h:$(GLSRC)gstext.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxgetbit.h:$(GLSRC)gstparam.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsropt.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxfmap.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxcspace.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsuid.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gscsel.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsfont.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsimage.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxdda.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsfont.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxftype.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsropt.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxdda.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxpath.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxftype.h
$(GLSRC)gxgetbit.h:$(GLSRC)gscms.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gscspace.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxpath.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxarith.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gspenum.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxhttile.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsrect.h
$(GLSRC)gxgetbit.h:$(GLSRC)gslparam.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gscpm.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gscspace.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsgstate.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsiparam.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gscpm.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsiparam.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gscompt.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gspenum.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxhttile.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsparam.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsrefct.h
$(GLSRC)gxgetbit.h:$(GLSRC)gp.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxgetbit.h:$(GLSRC)memento.h
+$(GLSRC)gxgetbit.h:$(GLSRC)memory_.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsuid.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsstruct.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxsync.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxgetbit.h:$(GLSRC)srdline.h
$(GLSRC)gxgetbit.h:$(GLSRC)scommon.h
-$(GLSRC)gxgetbit.h:$(GLSRC)memento.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gscsel.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsstype.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxarith.h
$(GLSRC)gxgetbit.h:$(GLSRC)stat_.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsmemory.h
$(GLSRC)gxgetbit.h:$(GLSRC)gpsync.h
-$(GLSRC)gxgetbit.h:$(GLSRC)memory_.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsstype.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsmemory.h
$(GLSRC)gxgetbit.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gslibctx.h
$(GLSRC)gxgetbit.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxgetbit.h:$(GLSRC)stdio_.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gscompt.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gslibctx.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxgetbit.h:$(GLSRC)stdio_.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsccode.h
$(GLSRC)gxgetbit.h:$(GLSRC)stdint_.h
$(GLSRC)gxgetbit.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsccode.h
-$(GLSRC)gxgetbit.h:$(GLSRC)std.h
$(GLSRC)gxgetbit.h:$(GLSRC)gstypes.h
+$(GLSRC)gxgetbit.h:$(GLSRC)std.h
$(GLSRC)gxgetbit.h:$(GLSRC)stdpre.h
$(GLSRC)gxgetbit.h:$(GLGEN)arch.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxhttile.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxhttile.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxhttile.h:$(GLSRC)gsstype.h
$(GLSRC)gxhttile.h:$(GLSRC)gsmemory.h
$(GLSRC)gxhttile.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxhttile.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxhttile.h:$(GLSRC)stdio_.h
$(GLSRC)gxhttile.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxhttile.h:$(GLSRC)std.h
$(GLSRC)gxhttile.h:$(GLSRC)gstypes.h
+$(GLSRC)gxhttile.h:$(GLSRC)std.h
$(GLSRC)gxhttile.h:$(GLSRC)stdpre.h
$(GLSRC)gxhttile.h:$(GLGEN)arch.h
+$(GLSRC)gxhttile.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxiclass.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxiclass.h:$(GLSRC)gsgstate.h
$(GLSRC)gxiclass.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxiclass.h:$(GLSRC)gsparam.h
$(GLSRC)gxiclass.h:$(GLSRC)scommon.h
$(GLSRC)gxiclass.h:$(GLSRC)gsstype.h
$(GLSRC)gxiclass.h:$(GLSRC)gsmemory.h
$(GLSRC)gxiclass.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxiclass.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxiclass.h:$(GLSRC)stdio_.h
-$(GLSRC)gxiclass.h:$(GLSRC)gsgstate.h
$(GLSRC)gxiclass.h:$(GLSRC)stdint_.h
$(GLSRC)gxiclass.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxiclass.h:$(GLSRC)std.h
$(GLSRC)gxiclass.h:$(GLSRC)gstypes.h
+$(GLSRC)gxiclass.h:$(GLSRC)std.h
$(GLSRC)gxiclass.h:$(GLSRC)stdpre.h
$(GLSRC)gxiclass.h:$(GLGEN)arch.h
+$(GLSRC)gxiclass.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxiodev.h:$(GLSRC)gsparam.h
$(GLSRC)gxiodev.h:$(GLSRC)gp.h
+$(GLSRC)gxiodev.h:$(GLSRC)memory_.h
$(GLSRC)gxiodev.h:$(GLSRC)srdline.h
$(GLSRC)gxiodev.h:$(GLSRC)scommon.h
$(GLSRC)gxiodev.h:$(GLSRC)gsfname.h
-$(GLSRC)gxiodev.h:$(GLSRC)gsstype.h
$(GLSRC)gxiodev.h:$(GLSRC)stat_.h
+$(GLSRC)gxiodev.h:$(GLSRC)gsstype.h
$(GLSRC)gxiodev.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxiodev.h:$(GLSRC)memory_.h
$(GLSRC)gxiodev.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxiodev.h:$(GLSRC)gslibctx.h
$(GLSRC)gxiodev.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxiodev.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxiodev.h:$(GLSRC)gslibctx.h
$(GLSRC)gxiodev.h:$(GLSRC)stdio_.h
$(GLSRC)gxiodev.h:$(GLSRC)stdint_.h
$(GLSRC)gxiodev.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxiodev.h:$(GLSRC)std.h
$(GLSRC)gxiodev.h:$(GLSRC)gstypes.h
+$(GLSRC)gxiodev.h:$(GLSRC)std.h
$(GLSRC)gxiodev.h:$(GLSRC)stdpre.h
$(GLSRC)gxiodev.h:$(GLGEN)arch.h
+$(GLSRC)gxiodev.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxline.h:$(GLSRC)math_.h
$(GLSRC)gxline.h:$(GLSRC)gslparam.h
$(GLSRC)gxline.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxline.h:$(GLSRC)scommon.h
$(GLSRC)gxline.h:$(GLSRC)vmsmath.h
+$(GLSRC)gxline.h:$(GLSRC)scommon.h
$(GLSRC)gxline.h:$(GLSRC)gsstype.h
$(GLSRC)gxline.h:$(GLSRC)gsmemory.h
$(GLSRC)gxline.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxline.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxline.h:$(GLSRC)stdio_.h
$(GLSRC)gxline.h:$(GLSRC)stdint_.h
$(GLSRC)gxline.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxline.h:$(GLSRC)std.h
$(GLSRC)gxline.h:$(GLSRC)gstypes.h
+$(GLSRC)gxline.h:$(GLSRC)std.h
$(GLSRC)gxline.h:$(GLSRC)stdpre.h
$(GLSRC)gxline.h:$(GLGEN)arch.h
-$(GLSRC)gxmatrix.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxline.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxmatrix.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxmatrix.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxmatrix.h:$(GLSRC)scommon.h
$(GLSRC)gxmatrix.h:$(GLSRC)gsstype.h
$(GLSRC)gxmatrix.h:$(GLSRC)gsmemory.h
$(GLSRC)gxmatrix.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxmatrix.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxmatrix.h:$(GLSRC)stdio_.h
$(GLSRC)gxmatrix.h:$(GLSRC)stdint_.h
$(GLSRC)gxmatrix.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxmatrix.h:$(GLSRC)std.h
$(GLSRC)gxmatrix.h:$(GLSRC)gstypes.h
+$(GLSRC)gxmatrix.h:$(GLSRC)std.h
$(GLSRC)gxmatrix.h:$(GLSRC)stdpre.h
$(GLSRC)gxmatrix.h:$(GLGEN)arch.h
+$(GLSRC)gxmatrix.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxmclip.h:$(GLSRC)gxclip.h
$(GLSRC)gxmclip.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxmclip.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxcmap.h
$(GLSRC)gxmclip.h:$(GLSRC)gxtext.h
$(GLSRC)gxmclip.h:$(GLSRC)gstext.h
$(GLSRC)gxmclip.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxmclip.h:$(GLSRC)gstparam.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsropt.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxfmap.h
$(GLSRC)gxmclip.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxcspace.h
$(GLSRC)gxmclip.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsuid.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxmclip.h:$(GLSRC)gscsel.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsfont.h
$(GLSRC)gxmclip.h:$(GLSRC)gsimage.h
$(GLSRC)gxmclip.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxdda.h
$(GLSRC)gxmclip.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsfont.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxftype.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsropt.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxdda.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxpath.h
$(GLSRC)gxmclip.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxftype.h
$(GLSRC)gxmclip.h:$(GLSRC)gscms.h
-$(GLSRC)gxmclip.h:$(GLSRC)gscspace.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxpath.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxarith.h
-$(GLSRC)gxmclip.h:$(GLSRC)gspenum.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxhttile.h
$(GLSRC)gxmclip.h:$(GLSRC)gsrect.h
$(GLSRC)gxmclip.h:$(GLSRC)gslparam.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxmclip.h:$(GLSRC)gscpm.h
+$(GLSRC)gxmclip.h:$(GLSRC)gscspace.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsgstate.h
$(GLSRC)gxmclip.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsiparam.h
$(GLSRC)gxmclip.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxmclip.h:$(GLSRC)gscpm.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsiparam.h
$(GLSRC)gxmclip.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxmclip.h:$(GLSRC)gscompt.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxmclip.h:$(GLSRC)gspenum.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxhttile.h
$(GLSRC)gxmclip.h:$(GLSRC)gsparam.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsrefct.h
$(GLSRC)gxmclip.h:$(GLSRC)gp.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxmclip.h:$(GLSRC)memento.h
+$(GLSRC)gxmclip.h:$(GLSRC)memory_.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsuid.h
$(GLSRC)gxmclip.h:$(GLSRC)gsstruct.h
$(GLSRC)gxmclip.h:$(GLSRC)gxsync.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxmclip.h:$(GLSRC)srdline.h
$(GLSRC)gxmclip.h:$(GLSRC)scommon.h
-$(GLSRC)gxmclip.h:$(GLSRC)memento.h
-$(GLSRC)gxmclip.h:$(GLSRC)gscsel.h
$(GLSRC)gxmclip.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsstype.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxarith.h
$(GLSRC)gxmclip.h:$(GLSRC)stat_.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsmemory.h
$(GLSRC)gxmclip.h:$(GLSRC)gpsync.h
-$(GLSRC)gxmclip.h:$(GLSRC)memory_.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsstype.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsmemory.h
$(GLSRC)gxmclip.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxmclip.h:$(GLSRC)gslibctx.h
$(GLSRC)gxmclip.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxmclip.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxmclip.h:$(GLSRC)stdio_.h
-$(GLSRC)gxmclip.h:$(GLSRC)gscompt.h
+$(GLSRC)gxmclip.h:$(GLSRC)gslibctx.h
$(GLSRC)gxmclip.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxmclip.h:$(GLSRC)stdio_.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsccode.h
$(GLSRC)gxmclip.h:$(GLSRC)stdint_.h
$(GLSRC)gxmclip.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsccode.h
-$(GLSRC)gxmclip.h:$(GLSRC)std.h
$(GLSRC)gxmclip.h:$(GLSRC)gstypes.h
+$(GLSRC)gxmclip.h:$(GLSRC)std.h
$(GLSRC)gxmclip.h:$(GLSRC)stdpre.h
$(GLSRC)gxmclip.h:$(GLGEN)arch.h
+$(GLSRC)gxmclip.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxoprect.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxcmap.h
$(GLSRC)gxoprect.h:$(GLSRC)gxtext.h
$(GLSRC)gxoprect.h:$(GLSRC)gstext.h
$(GLSRC)gxoprect.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxoprect.h:$(GLSRC)gstparam.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsropt.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxfmap.h
$(GLSRC)gxoprect.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxcspace.h
$(GLSRC)gxoprect.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsuid.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxoprect.h:$(GLSRC)gscsel.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsfont.h
$(GLSRC)gxoprect.h:$(GLSRC)gsimage.h
$(GLSRC)gxoprect.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxdda.h
$(GLSRC)gxoprect.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsfont.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxftype.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsropt.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxdda.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxpath.h
$(GLSRC)gxoprect.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxftype.h
$(GLSRC)gxoprect.h:$(GLSRC)gscms.h
-$(GLSRC)gxoprect.h:$(GLSRC)gscspace.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxpath.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxarith.h
-$(GLSRC)gxoprect.h:$(GLSRC)gspenum.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxhttile.h
$(GLSRC)gxoprect.h:$(GLSRC)gsrect.h
$(GLSRC)gxoprect.h:$(GLSRC)gslparam.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxoprect.h:$(GLSRC)gscpm.h
+$(GLSRC)gxoprect.h:$(GLSRC)gscspace.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsgstate.h
$(GLSRC)gxoprect.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsiparam.h
$(GLSRC)gxoprect.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxoprect.h:$(GLSRC)gscpm.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsiparam.h
$(GLSRC)gxoprect.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxoprect.h:$(GLSRC)gscompt.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxoprect.h:$(GLSRC)gspenum.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxhttile.h
$(GLSRC)gxoprect.h:$(GLSRC)gsparam.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsrefct.h
$(GLSRC)gxoprect.h:$(GLSRC)gp.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxoprect.h:$(GLSRC)memento.h
+$(GLSRC)gxoprect.h:$(GLSRC)memory_.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsuid.h
$(GLSRC)gxoprect.h:$(GLSRC)gsstruct.h
$(GLSRC)gxoprect.h:$(GLSRC)gxsync.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxoprect.h:$(GLSRC)srdline.h
$(GLSRC)gxoprect.h:$(GLSRC)scommon.h
-$(GLSRC)gxoprect.h:$(GLSRC)memento.h
-$(GLSRC)gxoprect.h:$(GLSRC)gscsel.h
$(GLSRC)gxoprect.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsstype.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxarith.h
$(GLSRC)gxoprect.h:$(GLSRC)stat_.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsmemory.h
$(GLSRC)gxoprect.h:$(GLSRC)gpsync.h
-$(GLSRC)gxoprect.h:$(GLSRC)memory_.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsstype.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsmemory.h
$(GLSRC)gxoprect.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxoprect.h:$(GLSRC)gslibctx.h
$(GLSRC)gxoprect.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxoprect.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxoprect.h:$(GLSRC)stdio_.h
-$(GLSRC)gxoprect.h:$(GLSRC)gscompt.h
+$(GLSRC)gxoprect.h:$(GLSRC)gslibctx.h
$(GLSRC)gxoprect.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxoprect.h:$(GLSRC)stdio_.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsccode.h
$(GLSRC)gxoprect.h:$(GLSRC)stdint_.h
$(GLSRC)gxoprect.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsccode.h
-$(GLSRC)gxoprect.h:$(GLSRC)std.h
$(GLSRC)gxoprect.h:$(GLSRC)gstypes.h
+$(GLSRC)gxoprect.h:$(GLSRC)std.h
$(GLSRC)gxoprect.h:$(GLSRC)stdpre.h
$(GLSRC)gxoprect.h:$(GLGEN)arch.h
+$(GLSRC)gxoprect.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxpcolor.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxblend.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxblend.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxdevice.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxcpath.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxcmap.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxtext.h
$(GLSRC)gxp1impl.h:$(GLSRC)gstext.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxp1impl.h:$(GLSRC)gstparam.h
$(GLSRC)gxp1impl.h:$(GLSRC)gspcolor.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsropt.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxfmap.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxcspace.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsuid.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gscsel.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsfont.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsimage.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxdda.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsfont.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsropt.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxdda.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxpath.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxftype.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxftype.h
$(GLSRC)gxp1impl.h:$(GLSRC)gscms.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gscspace.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxpath.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxarith.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxstdio.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gspenum.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxhttile.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsrect.h
$(GLSRC)gxp1impl.h:$(GLSRC)gslparam.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gscpm.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gscspace.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxstdio.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsiparam.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsio.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gscpm.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsiparam.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gscompt.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gspenum.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxhttile.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsparam.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsrefct.h
$(GLSRC)gxp1impl.h:$(GLSRC)gp.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxp1impl.h:$(GLSRC)memento.h
+$(GLSRC)gxp1impl.h:$(GLSRC)memory_.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsuid.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsstruct.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxsync.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxp1impl.h:$(GLSRC)srdline.h
$(GLSRC)gxp1impl.h:$(GLSRC)scommon.h
-$(GLSRC)gxp1impl.h:$(GLSRC)memento.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gscsel.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsfname.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsstype.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxarith.h
$(GLSRC)gxp1impl.h:$(GLSRC)stat_.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsmemory.h
$(GLSRC)gxp1impl.h:$(GLSRC)gpsync.h
-$(GLSRC)gxp1impl.h:$(GLSRC)memory_.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsstype.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsmemory.h
$(GLSRC)gxp1impl.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gslibctx.h
$(GLSRC)gxp1impl.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxp1impl.h:$(GLSRC)stdio_.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gscompt.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gslibctx.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxp1impl.h:$(GLSRC)stdio_.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsccode.h
$(GLSRC)gxp1impl.h:$(GLSRC)stdint_.h
$(GLSRC)gxp1impl.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsccode.h
-$(GLSRC)gxp1impl.h:$(GLSRC)std.h
$(GLSRC)gxp1impl.h:$(GLSRC)gstypes.h
+$(GLSRC)gxp1impl.h:$(GLSRC)std.h
$(GLSRC)gxp1impl.h:$(GLSRC)stdpre.h
$(GLSRC)gxp1impl.h:$(GLGEN)arch.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxpaint.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxpaint.h:$(GLSRC)gscms.h
-$(GLSRC)gxpaint.h:$(GLSRC)gscspace.h
$(GLSRC)gxpaint.h:$(GLSRC)gxpath.h
-$(GLSRC)gxpaint.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxpaint.h:$(GLSRC)gxarith.h
-$(GLSRC)gxpaint.h:$(GLSRC)gspenum.h
-$(GLSRC)gxpaint.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxpaint.h:$(GLSRC)gscms.h
$(GLSRC)gxpaint.h:$(GLSRC)gsrect.h
$(GLSRC)gxpaint.h:$(GLSRC)gslparam.h
-$(GLSRC)gxpaint.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxpaint.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxpaint.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsdevice.h
$(GLSRC)gxpaint.h:$(GLSRC)gscpm.h
+$(GLSRC)gxpaint.h:$(GLSRC)gscspace.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsiparam.h
$(GLSRC)gxpaint.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxpaint.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxpaint.h:$(GLSRC)gspenum.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxhttile.h
$(GLSRC)gxpaint.h:$(GLSRC)gsparam.h
-$(GLSRC)gxpaint.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxpaint.h:$(GLSRC)memento.h
$(GLSRC)gxpaint.h:$(GLSRC)gxsync.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxpaint.h:$(GLSRC)scommon.h
-$(GLSRC)gxpaint.h:$(GLSRC)memento.h
$(GLSRC)gxpaint.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxarith.h
+$(GLSRC)gxpaint.h:$(GLSRC)gpsync.h
$(GLSRC)gxpaint.h:$(GLSRC)gsstype.h
$(GLSRC)gxpaint.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxpaint.h:$(GLSRC)gpsync.h
$(GLSRC)gxpaint.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxpaint.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxpaint.h:$(GLSRC)stdio_.h
$(GLSRC)gxpaint.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxpaint.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxpaint.h:$(GLSRC)stdio_.h
$(GLSRC)gxpaint.h:$(GLSRC)stdint_.h
$(GLSRC)gxpaint.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxpaint.h:$(GLSRC)std.h
$(GLSRC)gxpaint.h:$(GLSRC)gstypes.h
+$(GLSRC)gxpaint.h:$(GLSRC)std.h
$(GLSRC)gxpaint.h:$(GLSRC)stdpre.h
$(GLSRC)gxpaint.h:$(GLGEN)arch.h
-$(GLSRC)gxpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gxpaint.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxpath.h:$(GLSRC)gsrect.h
$(GLSRC)gxpath.h:$(GLSRC)gslparam.h
$(GLSRC)gxpath.h:$(GLSRC)gscpm.h
-$(GLSRC)gxpath.h:$(GLSRC)gxfixed.h
$(GLSRC)gxpath.h:$(GLSRC)gsgstate.h
-$(GLSRC)gxpath.h:$(GLSRC)std.h
+$(GLSRC)gxpath.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxpath.h:$(GLSRC)gspenum.h
$(GLSRC)gxpath.h:$(GLSRC)gstypes.h
+$(GLSRC)gxpath.h:$(GLSRC)std.h
$(GLSRC)gxpath.h:$(GLSRC)stdpre.h
$(GLSRC)gxpath.h:$(GLGEN)arch.h
$(GLSRC)gxpcache.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxpcache.h:$(GLSRC)gscms.h
-$(GLSRC)gxpcache.h:$(GLSRC)gscspace.h
$(GLSRC)gxpcache.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxpcache.h:$(GLSRC)gxarith.h
-$(GLSRC)gxpcache.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxpcache.h:$(GLSRC)gscspace.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsgstate.h
$(GLSRC)gxpcache.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxpcache.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxpcache.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxpcache.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxpcache.h:$(GLSRC)gxhttile.h
$(GLSRC)gxpcache.h:$(GLSRC)gsparam.h
-$(GLSRC)gxpcache.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxpcache.h:$(GLSRC)memento.h
$(GLSRC)gxpcache.h:$(GLSRC)gxsync.h
+$(GLSRC)gxpcache.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxpcache.h:$(GLSRC)scommon.h
-$(GLSRC)gxpcache.h:$(GLSRC)memento.h
$(GLSRC)gxpcache.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxpcache.h:$(GLSRC)gxarith.h
+$(GLSRC)gxpcache.h:$(GLSRC)gpsync.h
$(GLSRC)gxpcache.h:$(GLSRC)gsstype.h
$(GLSRC)gxpcache.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxpcache.h:$(GLSRC)gpsync.h
$(GLSRC)gxpcache.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxpcache.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxpcache.h:$(GLSRC)stdio_.h
$(GLSRC)gxpcache.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxpcache.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxpcache.h:$(GLSRC)stdio_.h
$(GLSRC)gxpcache.h:$(GLSRC)stdint_.h
$(GLSRC)gxpcache.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxpcache.h:$(GLSRC)std.h
$(GLSRC)gxpcache.h:$(GLSRC)gstypes.h
+$(GLSRC)gxpcache.h:$(GLSRC)std.h
$(GLSRC)gxpcache.h:$(GLSRC)stdpre.h
$(GLSRC)gxpcache.h:$(GLGEN)arch.h
+$(GLSRC)gxpcache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxsample.h:$(GLSRC)std.h
$(GLSRC)gxsample.h:$(GLSRC)stdpre.h
$(GLSRC)gxsample.h:$(GLGEN)arch.h
@@ -6226,1947 +6239,1947 @@ $(GLSRC)gxsamplp.h:$(GLSRC)valgrind.h
$(GLSRC)gxsamplp.h:$(GLSRC)stdpre.h
$(GLSRC)gxscanc.h:$(GLSRC)gxdevice.h
$(GLSRC)gxscanc.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxcmap.h
$(GLSRC)gxscanc.h:$(GLSRC)gxtext.h
$(GLSRC)gxscanc.h:$(GLSRC)gstext.h
$(GLSRC)gxscanc.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxscanc.h:$(GLSRC)gstparam.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsropt.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxfmap.h
$(GLSRC)gxscanc.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxcspace.h
$(GLSRC)gxscanc.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsuid.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxscanc.h:$(GLSRC)gscsel.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsfont.h
$(GLSRC)gxscanc.h:$(GLSRC)gsimage.h
$(GLSRC)gxscanc.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxdda.h
$(GLSRC)gxscanc.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsfont.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxftype.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsropt.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxdda.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxpath.h
$(GLSRC)gxscanc.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxftype.h
$(GLSRC)gxscanc.h:$(GLSRC)gscms.h
-$(GLSRC)gxscanc.h:$(GLSRC)gscspace.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxpath.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxarith.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxstdio.h
-$(GLSRC)gxscanc.h:$(GLSRC)gspenum.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxhttile.h
$(GLSRC)gxscanc.h:$(GLSRC)gsrect.h
$(GLSRC)gxscanc.h:$(GLSRC)gslparam.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxscanc.h:$(GLSRC)gscpm.h
+$(GLSRC)gxscanc.h:$(GLSRC)gscspace.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxstdio.h
$(GLSRC)gxscanc.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsiparam.h
$(GLSRC)gxscanc.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxscanc.h:$(GLSRC)gsio.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxscanc.h:$(GLSRC)gscpm.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsiparam.h
$(GLSRC)gxscanc.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxscanc.h:$(GLSRC)gscompt.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxscanc.h:$(GLSRC)gspenum.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxhttile.h
$(GLSRC)gxscanc.h:$(GLSRC)gsparam.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsrefct.h
$(GLSRC)gxscanc.h:$(GLSRC)gp.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxscanc.h:$(GLSRC)memento.h
+$(GLSRC)gxscanc.h:$(GLSRC)memory_.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsuid.h
$(GLSRC)gxscanc.h:$(GLSRC)gsstruct.h
$(GLSRC)gxscanc.h:$(GLSRC)gxsync.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxscanc.h:$(GLSRC)srdline.h
$(GLSRC)gxscanc.h:$(GLSRC)scommon.h
-$(GLSRC)gxscanc.h:$(GLSRC)memento.h
-$(GLSRC)gxscanc.h:$(GLSRC)gscsel.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxscanc.h:$(GLSRC)gsfname.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsstype.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxarith.h
$(GLSRC)gxscanc.h:$(GLSRC)stat_.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsmemory.h
$(GLSRC)gxscanc.h:$(GLSRC)gpsync.h
-$(GLSRC)gxscanc.h:$(GLSRC)memory_.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsstype.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsmemory.h
$(GLSRC)gxscanc.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxscanc.h:$(GLSRC)gslibctx.h
$(GLSRC)gxscanc.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxscanc.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxscanc.h:$(GLSRC)stdio_.h
-$(GLSRC)gxscanc.h:$(GLSRC)gscompt.h
+$(GLSRC)gxscanc.h:$(GLSRC)gslibctx.h
$(GLSRC)gxscanc.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxscanc.h:$(GLSRC)stdio_.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsccode.h
$(GLSRC)gxscanc.h:$(GLSRC)stdint_.h
$(GLSRC)gxscanc.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsccode.h
-$(GLSRC)gxscanc.h:$(GLSRC)std.h
$(GLSRC)gxscanc.h:$(GLSRC)gstypes.h
+$(GLSRC)gxscanc.h:$(GLSRC)std.h
$(GLSRC)gxscanc.h:$(GLSRC)stdpre.h
$(GLSRC)gxscanc.h:$(GLGEN)arch.h
+$(GLSRC)gxscanc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxstate.h:$(GLSRC)gscspace.h
+$(GLSRC)gxstate.h:$(GLSRC)gsgstate.h
$(GLSRC)gxstate.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxstate.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxstate.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxstate.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxstate.h:$(GLSRC)gsccolor.h
-$(GLSRC)gxstate.h:$(GLSRC)scommon.h
$(GLSRC)gxstate.h:$(GLSRC)memento.h
+$(GLSRC)gxstate.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxstate.h:$(GLSRC)scommon.h
$(GLSRC)gxstate.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxstate.h:$(GLSRC)gsccolor.h
$(GLSRC)gxstate.h:$(GLSRC)gsstype.h
$(GLSRC)gxstate.h:$(GLSRC)gsmemory.h
$(GLSRC)gxstate.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxstate.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxstate.h:$(GLSRC)stdio_.h
-$(GLSRC)gxstate.h:$(GLSRC)gsgstate.h
$(GLSRC)gxstate.h:$(GLSRC)stdint_.h
$(GLSRC)gxstate.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxstate.h:$(GLSRC)std.h
$(GLSRC)gxstate.h:$(GLSRC)gstypes.h
+$(GLSRC)gxstate.h:$(GLSRC)std.h
$(GLSRC)gxstate.h:$(GLSRC)stdpre.h
$(GLSRC)gxstate.h:$(GLGEN)arch.h
+$(GLSRC)gxstate.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxtext.h:$(GLSRC)gstext.h
$(GLSRC)gxtext.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxtext.h:$(GLSRC)gsuid.h
-$(GLSRC)gxtext.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxtext.h:$(GLSRC)gsfont.h
+$(GLSRC)gxtext.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxtext.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxtext.h:$(GLSRC)gxpath.h
$(GLSRC)gxtext.h:$(GLSRC)gxftype.h
$(GLSRC)gxtext.h:$(GLSRC)gscms.h
-$(GLSRC)gxtext.h:$(GLSRC)gscspace.h
-$(GLSRC)gxtext.h:$(GLSRC)gxpath.h
-$(GLSRC)gxtext.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxtext.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxtext.h:$(GLSRC)gxarith.h
-$(GLSRC)gxtext.h:$(GLSRC)gspenum.h
-$(GLSRC)gxtext.h:$(GLSRC)gxhttile.h
$(GLSRC)gxtext.h:$(GLSRC)gsrect.h
$(GLSRC)gxtext.h:$(GLSRC)gslparam.h
+$(GLSRC)gxtext.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxtext.h:$(GLSRC)gscpm.h
+$(GLSRC)gxtext.h:$(GLSRC)gscspace.h
+$(GLSRC)gxtext.h:$(GLSRC)gsgstate.h
$(GLSRC)gxtext.h:$(GLSRC)gsxfont.h
$(GLSRC)gxtext.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxtext.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxtext.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxtext.h:$(GLSRC)gscpm.h
$(GLSRC)gxtext.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxtext.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxtext.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxtext.h:$(GLSRC)gspenum.h
+$(GLSRC)gxtext.h:$(GLSRC)gxhttile.h
$(GLSRC)gxtext.h:$(GLSRC)gsparam.h
-$(GLSRC)gxtext.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxtext.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxtext.h:$(GLSRC)memento.h
+$(GLSRC)gxtext.h:$(GLSRC)gsuid.h
$(GLSRC)gxtext.h:$(GLSRC)gxsync.h
+$(GLSRC)gxtext.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxtext.h:$(GLSRC)scommon.h
-$(GLSRC)gxtext.h:$(GLSRC)memento.h
$(GLSRC)gxtext.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxtext.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxtext.h:$(GLSRC)gxarith.h
+$(GLSRC)gxtext.h:$(GLSRC)gpsync.h
$(GLSRC)gxtext.h:$(GLSRC)gsstype.h
$(GLSRC)gxtext.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxtext.h:$(GLSRC)gpsync.h
$(GLSRC)gxtext.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxtext.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxtext.h:$(GLSRC)stdio_.h
$(GLSRC)gxtext.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxtext.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxtext.h:$(GLSRC)stdio_.h
+$(GLSRC)gxtext.h:$(GLSRC)gsccode.h
$(GLSRC)gxtext.h:$(GLSRC)stdint_.h
$(GLSRC)gxtext.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxtext.h:$(GLSRC)gsccode.h
-$(GLSRC)gxtext.h:$(GLSRC)std.h
$(GLSRC)gxtext.h:$(GLSRC)gstypes.h
+$(GLSRC)gxtext.h:$(GLSRC)std.h
$(GLSRC)gxtext.h:$(GLSRC)stdpre.h
$(GLSRC)gxtext.h:$(GLGEN)arch.h
+$(GLSRC)gxtext.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxxfont.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxcmap.h
$(GLSRC)gxxfont.h:$(GLSRC)gxtext.h
$(GLSRC)gxxfont.h:$(GLSRC)gstext.h
$(GLSRC)gxxfont.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxxfont.h:$(GLSRC)gstparam.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsropt.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxfmap.h
$(GLSRC)gxxfont.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxcspace.h
$(GLSRC)gxxfont.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsuid.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxxfont.h:$(GLSRC)gscsel.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsfont.h
$(GLSRC)gxxfont.h:$(GLSRC)gsimage.h
$(GLSRC)gxxfont.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxdda.h
$(GLSRC)gxxfont.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsfont.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxftype.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsropt.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxdda.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxpath.h
$(GLSRC)gxxfont.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxftype.h
$(GLSRC)gxxfont.h:$(GLSRC)gscms.h
-$(GLSRC)gxxfont.h:$(GLSRC)gscspace.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxpath.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxarith.h
-$(GLSRC)gxxfont.h:$(GLSRC)gspenum.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxhttile.h
$(GLSRC)gxxfont.h:$(GLSRC)gsrect.h
$(GLSRC)gxxfont.h:$(GLSRC)gslparam.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxxfont.h:$(GLSRC)gscpm.h
+$(GLSRC)gxxfont.h:$(GLSRC)gscspace.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsgstate.h
$(GLSRC)gxxfont.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsiparam.h
$(GLSRC)gxxfont.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxxfont.h:$(GLSRC)gscpm.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsiparam.h
$(GLSRC)gxxfont.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxxfont.h:$(GLSRC)gscompt.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxxfont.h:$(GLSRC)gspenum.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxhttile.h
$(GLSRC)gxxfont.h:$(GLSRC)gsparam.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsrefct.h
$(GLSRC)gxxfont.h:$(GLSRC)gp.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxxfont.h:$(GLSRC)memento.h
+$(GLSRC)gxxfont.h:$(GLSRC)memory_.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsuid.h
$(GLSRC)gxxfont.h:$(GLSRC)gsstruct.h
$(GLSRC)gxxfont.h:$(GLSRC)gxsync.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxxfont.h:$(GLSRC)srdline.h
$(GLSRC)gxxfont.h:$(GLSRC)scommon.h
-$(GLSRC)gxxfont.h:$(GLSRC)memento.h
-$(GLSRC)gxxfont.h:$(GLSRC)gscsel.h
$(GLSRC)gxxfont.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsstype.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxarith.h
$(GLSRC)gxxfont.h:$(GLSRC)stat_.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsmemory.h
$(GLSRC)gxxfont.h:$(GLSRC)gpsync.h
-$(GLSRC)gxxfont.h:$(GLSRC)memory_.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsstype.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsmemory.h
$(GLSRC)gxxfont.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxxfont.h:$(GLSRC)gslibctx.h
$(GLSRC)gxxfont.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxxfont.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxxfont.h:$(GLSRC)stdio_.h
-$(GLSRC)gxxfont.h:$(GLSRC)gscompt.h
+$(GLSRC)gxxfont.h:$(GLSRC)gslibctx.h
$(GLSRC)gxxfont.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxxfont.h:$(GLSRC)stdio_.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsccode.h
$(GLSRC)gxxfont.h:$(GLSRC)stdint_.h
$(GLSRC)gxxfont.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsccode.h
-$(GLSRC)gxxfont.h:$(GLSRC)std.h
$(GLSRC)gxxfont.h:$(GLSRC)gstypes.h
+$(GLSRC)gxxfont.h:$(GLSRC)std.h
$(GLSRC)gxxfont.h:$(GLSRC)stdpre.h
$(GLSRC)gxxfont.h:$(GLGEN)arch.h
+$(GLSRC)gxxfont.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxband.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxband.h:$(GLSRC)gxcmap.h
$(GLSRC)gxband.h:$(GLSRC)gxtext.h
$(GLSRC)gxband.h:$(GLSRC)gstext.h
$(GLSRC)gxband.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxband.h:$(GLSRC)gstparam.h
-$(GLSRC)gxband.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxband.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxband.h:$(GLSRC)gsropt.h
+$(GLSRC)gxband.h:$(GLSRC)gxfmap.h
$(GLSRC)gxband.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxband.h:$(GLSRC)gxcspace.h
$(GLSRC)gxband.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxband.h:$(GLSRC)gsuid.h
-$(GLSRC)gxband.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxband.h:$(GLSRC)gscsel.h
+$(GLSRC)gxband.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxband.h:$(GLSRC)gsfont.h
$(GLSRC)gxband.h:$(GLSRC)gsimage.h
$(GLSRC)gxband.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxband.h:$(GLSRC)gxdda.h
$(GLSRC)gxband.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxband.h:$(GLSRC)gsfont.h
-$(GLSRC)gxband.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxband.h:$(GLSRC)gxftype.h
+$(GLSRC)gxband.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxband.h:$(GLSRC)gsropt.h
+$(GLSRC)gxband.h:$(GLSRC)gxdda.h
+$(GLSRC)gxband.h:$(GLSRC)gxpath.h
$(GLSRC)gxband.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxband.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxband.h:$(GLSRC)gxftype.h
$(GLSRC)gxband.h:$(GLSRC)gscms.h
-$(GLSRC)gxband.h:$(GLSRC)gscspace.h
-$(GLSRC)gxband.h:$(GLSRC)gxpath.h
-$(GLSRC)gxband.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxband.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxband.h:$(GLSRC)gxarith.h
-$(GLSRC)gxband.h:$(GLSRC)gspenum.h
-$(GLSRC)gxband.h:$(GLSRC)gxhttile.h
$(GLSRC)gxband.h:$(GLSRC)gsrect.h
$(GLSRC)gxband.h:$(GLSRC)gslparam.h
+$(GLSRC)gxband.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxband.h:$(GLSRC)gscpm.h
+$(GLSRC)gxband.h:$(GLSRC)gscspace.h
+$(GLSRC)gxband.h:$(GLSRC)gsgstate.h
$(GLSRC)gxband.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxband.h:$(GLSRC)gxclio.h
-$(GLSRC)gxband.h:$(GLSRC)gsiparam.h
$(GLSRC)gxband.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxband.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxband.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxband.h:$(GLSRC)gscpm.h
+$(GLSRC)gxband.h:$(GLSRC)gsiparam.h
$(GLSRC)gxband.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxband.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxband.h:$(GLSRC)gxclio.h
+$(GLSRC)gxband.h:$(GLSRC)gscompt.h
+$(GLSRC)gxband.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxband.h:$(GLSRC)gspenum.h
+$(GLSRC)gxband.h:$(GLSRC)gxhttile.h
$(GLSRC)gxband.h:$(GLSRC)gsparam.h
+$(GLSRC)gxband.h:$(GLSRC)gsrefct.h
$(GLSRC)gxband.h:$(GLSRC)gp.h
-$(GLSRC)gxband.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxband.h:$(GLSRC)memento.h
+$(GLSRC)gxband.h:$(GLSRC)memory_.h
+$(GLSRC)gxband.h:$(GLSRC)gsuid.h
$(GLSRC)gxband.h:$(GLSRC)gsstruct.h
$(GLSRC)gxband.h:$(GLSRC)gxsync.h
+$(GLSRC)gxband.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxband.h:$(GLSRC)srdline.h
$(GLSRC)gxband.h:$(GLSRC)scommon.h
-$(GLSRC)gxband.h:$(GLSRC)memento.h
-$(GLSRC)gxband.h:$(GLSRC)gscsel.h
$(GLSRC)gxband.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxband.h:$(GLSRC)gsstype.h
+$(GLSRC)gxband.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxband.h:$(GLSRC)gxarith.h
$(GLSRC)gxband.h:$(GLSRC)stat_.h
-$(GLSRC)gxband.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxband.h:$(GLSRC)gsmemory.h
$(GLSRC)gxband.h:$(GLSRC)gpsync.h
-$(GLSRC)gxband.h:$(GLSRC)memory_.h
+$(GLSRC)gxband.h:$(GLSRC)gsstype.h
+$(GLSRC)gxband.h:$(GLSRC)gsmemory.h
$(GLSRC)gxband.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxband.h:$(GLSRC)gslibctx.h
$(GLSRC)gxband.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxband.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxband.h:$(GLSRC)stdio_.h
-$(GLSRC)gxband.h:$(GLSRC)gscompt.h
+$(GLSRC)gxband.h:$(GLSRC)gslibctx.h
$(GLSRC)gxband.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxband.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxband.h:$(GLSRC)stdio_.h
+$(GLSRC)gxband.h:$(GLSRC)gsccode.h
$(GLSRC)gxband.h:$(GLSRC)stdint_.h
$(GLSRC)gxband.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxband.h:$(GLSRC)gsccode.h
-$(GLSRC)gxband.h:$(GLSRC)std.h
$(GLSRC)gxband.h:$(GLSRC)gstypes.h
+$(GLSRC)gxband.h:$(GLSRC)std.h
$(GLSRC)gxband.h:$(GLSRC)stdpre.h
$(GLSRC)gxband.h:$(GLGEN)arch.h
+$(GLSRC)gxband.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcdevn.h:$(GLSRC)gxfrac.h
$(GLSRC)gxcdevn.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcdevn.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxcdevn.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxcdevn.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxcdevn.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxcdevn.h:$(GLSRC)gsccolor.h
-$(GLSRC)gxcdevn.h:$(GLSRC)scommon.h
$(GLSRC)gxcdevn.h:$(GLSRC)memento.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcdevn.h:$(GLSRC)scommon.h
$(GLSRC)gxcdevn.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcdevn.h:$(GLSRC)gsstype.h
$(GLSRC)gxcdevn.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcdevn.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxcdevn.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxcdevn.h:$(GLSRC)stdio_.h
$(GLSRC)gxcdevn.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcdevn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcdevn.h:$(GLSRC)stdio_.h
$(GLSRC)gxcdevn.h:$(GLSRC)stdint_.h
$(GLSRC)gxcdevn.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxcdevn.h:$(GLSRC)std.h
$(GLSRC)gxcdevn.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcdevn.h:$(GLSRC)std.h
$(GLSRC)gxcdevn.h:$(GLSRC)stdpre.h
$(GLSRC)gxcdevn.h:$(GLGEN)arch.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxchar.h:$(GLSRC)gschar.h
$(GLSRC)gxchar.h:$(GLSRC)gsstate.h
$(GLSRC)gxchar.h:$(GLSRC)gsovrc.h
$(GLSRC)gxchar.h:$(GLSRC)gscolor.h
-$(GLSRC)gxchar.h:$(GLSRC)gxcomp.h
$(GLSRC)gxchar.h:$(GLSRC)gsline.h
-$(GLSRC)gxchar.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxchar.h:$(GLSRC)gxcomp.h
$(GLSRC)gxchar.h:$(GLSRC)gsht.h
$(GLSRC)gxchar.h:$(GLSRC)gxtext.h
$(GLSRC)gxchar.h:$(GLSRC)gstext.h
+$(GLSRC)gxchar.h:$(GLSRC)gscsel.h
$(GLSRC)gxchar.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxchar.h:$(GLSRC)gsuid.h
-$(GLSRC)gxchar.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxchar.h:$(GLSRC)gsfont.h
+$(GLSRC)gxchar.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxchar.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxchar.h:$(GLSRC)gxpath.h
+$(GLSRC)gxchar.h:$(GLSRC)gxtmap.h
$(GLSRC)gxchar.h:$(GLSRC)gxftype.h
$(GLSRC)gxchar.h:$(GLSRC)gscms.h
-$(GLSRC)gxchar.h:$(GLSRC)gscspace.h
-$(GLSRC)gxchar.h:$(GLSRC)gxpath.h
-$(GLSRC)gxchar.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxchar.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxchar.h:$(GLSRC)gxarith.h
-$(GLSRC)gxchar.h:$(GLSRC)gspenum.h
-$(GLSRC)gxchar.h:$(GLSRC)gxhttile.h
$(GLSRC)gxchar.h:$(GLSRC)gsrect.h
$(GLSRC)gxchar.h:$(GLSRC)gslparam.h
+$(GLSRC)gxchar.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxchar.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxchar.h:$(GLSRC)gscpm.h
+$(GLSRC)gxchar.h:$(GLSRC)gscspace.h
+$(GLSRC)gxchar.h:$(GLSRC)gsgstate.h
$(GLSRC)gxchar.h:$(GLSRC)gsxfont.h
$(GLSRC)gxchar.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxchar.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxchar.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxchar.h:$(GLSRC)gscpm.h
$(GLSRC)gxchar.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxchar.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxchar.h:$(GLSRC)gscompt.h
+$(GLSRC)gxchar.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxchar.h:$(GLSRC)gspenum.h
+$(GLSRC)gxchar.h:$(GLSRC)gxhttile.h
$(GLSRC)gxchar.h:$(GLSRC)gsparam.h
-$(GLSRC)gxchar.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxchar.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxchar.h:$(GLSRC)memento.h
+$(GLSRC)gxchar.h:$(GLSRC)gsuid.h
$(GLSRC)gxchar.h:$(GLSRC)gxsync.h
+$(GLSRC)gxchar.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxchar.h:$(GLSRC)scommon.h
-$(GLSRC)gxchar.h:$(GLSRC)memento.h
-$(GLSRC)gxchar.h:$(GLSRC)gscsel.h
$(GLSRC)gxchar.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxchar.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxchar.h:$(GLSRC)gxarith.h
+$(GLSRC)gxchar.h:$(GLSRC)gpsync.h
$(GLSRC)gxchar.h:$(GLSRC)gsstype.h
-$(GLSRC)gxchar.h:$(GLSRC)gxtmap.h
$(GLSRC)gxchar.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxchar.h:$(GLSRC)gpsync.h
$(GLSRC)gxchar.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxchar.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxchar.h:$(GLSRC)stdio_.h
-$(GLSRC)gxchar.h:$(GLSRC)gscompt.h
$(GLSRC)gxchar.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxchar.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxchar.h:$(GLSRC)stdio_.h
+$(GLSRC)gxchar.h:$(GLSRC)gsccode.h
$(GLSRC)gxchar.h:$(GLSRC)stdint_.h
$(GLSRC)gxchar.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxchar.h:$(GLSRC)gsccode.h
-$(GLSRC)gxchar.h:$(GLSRC)std.h
$(GLSRC)gxchar.h:$(GLSRC)gstypes.h
+$(GLSRC)gxchar.h:$(GLSRC)std.h
$(GLSRC)gxchar.h:$(GLSRC)stdpre.h
$(GLSRC)gxchar.h:$(GLGEN)arch.h
+$(GLSRC)gxchar.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxchrout.h:$(GLSRC)gsgstate.h
$(GLSRC)gsdcolor.h:$(GLSRC)gscms.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gscspace.h
$(GLSRC)gsdcolor.h:$(GLSRC)gsdevice.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gxarith.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gxhttile.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gscspace.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsgstate.h
$(GLSRC)gsdcolor.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsdcolor.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gxhttile.h
$(GLSRC)gsdcolor.h:$(GLSRC)gsparam.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsdcolor.h:$(GLSRC)memento.h
$(GLSRC)gsdcolor.h:$(GLSRC)gxsync.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsdcolor.h:$(GLSRC)scommon.h
-$(GLSRC)gsdcolor.h:$(GLSRC)memento.h
$(GLSRC)gsdcolor.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gxarith.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gpsync.h
$(GLSRC)gsdcolor.h:$(GLSRC)gsstype.h
$(GLSRC)gsdcolor.h:$(GLSRC)gsmemory.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gpsync.h
$(GLSRC)gsdcolor.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gsdcolor.h:$(GLSRC)stdio_.h
$(GLSRC)gsdcolor.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsdcolor.h:$(GLSRC)stdio_.h
$(GLSRC)gsdcolor.h:$(GLSRC)stdint_.h
$(GLSRC)gsdcolor.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsdcolor.h:$(GLSRC)std.h
$(GLSRC)gsdcolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gsdcolor.h:$(GLSRC)std.h
$(GLSRC)gsdcolor.h:$(GLSRC)stdpre.h
$(GLSRC)gsdcolor.h:$(GLGEN)arch.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gsropt.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gscsel.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsropt.h
$(GLSRC)gxdcolor.h:$(GLSRC)gscms.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gscspace.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdcolor.h:$(GLSRC)memento.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdcolor.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdcolor.h:$(GLSRC)scommon.h
-$(GLSRC)gxdcolor.h:$(GLSRC)memento.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gscsel.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gpsync.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsstype.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gpsync.h
$(GLSRC)gxdcolor.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdcolor.h:$(GLSRC)stdio_.h
$(GLSRC)gxdcolor.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdcolor.h:$(GLSRC)stdio_.h
$(GLSRC)gxdcolor.h:$(GLSRC)stdint_.h
$(GLSRC)gxdcolor.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxdcolor.h:$(GLSRC)std.h
$(GLSRC)gxdcolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdcolor.h:$(GLSRC)std.h
$(GLSRC)gxdcolor.h:$(GLSRC)stdpre.h
$(GLSRC)gxdcolor.h:$(GLGEN)arch.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsnamecl.h:$(GLSRC)gxcspace.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gscsel.h
$(GLSRC)gsnamecl.h:$(GLSRC)gsdcolor.h
$(GLSRC)gsnamecl.h:$(GLSRC)gxfrac.h
$(GLSRC)gsnamecl.h:$(GLSRC)gscms.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gscspace.h
$(GLSRC)gsnamecl.h:$(GLSRC)gsdevice.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gxarith.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gxhttile.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gscspace.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsgstate.h
$(GLSRC)gsnamecl.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsnamecl.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gxhttile.h
$(GLSRC)gsnamecl.h:$(GLSRC)gsparam.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsnamecl.h:$(GLSRC)memento.h
$(GLSRC)gsnamecl.h:$(GLSRC)gxsync.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsnamecl.h:$(GLSRC)scommon.h
-$(GLSRC)gsnamecl.h:$(GLSRC)memento.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gscsel.h
$(GLSRC)gsnamecl.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gxarith.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gpsync.h
$(GLSRC)gsnamecl.h:$(GLSRC)gsstype.h
$(GLSRC)gsnamecl.h:$(GLSRC)gsmemory.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gpsync.h
$(GLSRC)gsnamecl.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gsnamecl.h:$(GLSRC)stdio_.h
$(GLSRC)gsnamecl.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsnamecl.h:$(GLSRC)stdio_.h
$(GLSRC)gsnamecl.h:$(GLSRC)stdint_.h
$(GLSRC)gsnamecl.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsnamecl.h:$(GLSRC)std.h
$(GLSRC)gsnamecl.h:$(GLSRC)gstypes.h
+$(GLSRC)gsnamecl.h:$(GLSRC)std.h
$(GLSRC)gsnamecl.h:$(GLSRC)stdpre.h
$(GLSRC)gsnamecl.h:$(GLGEN)arch.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscspace.h:$(GLSRC)gsgstate.h
$(GLSRC)gscspace.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscspace.h:$(GLSRC)gxbitmap.h
$(GLSRC)gscspace.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscspace.h:$(GLSRC)gsrefct.h
-$(GLSRC)gscspace.h:$(GLSRC)gsccolor.h
-$(GLSRC)gscspace.h:$(GLSRC)scommon.h
$(GLSRC)gscspace.h:$(GLSRC)memento.h
+$(GLSRC)gscspace.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscspace.h:$(GLSRC)scommon.h
$(GLSRC)gscspace.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscspace.h:$(GLSRC)gsccolor.h
$(GLSRC)gscspace.h:$(GLSRC)gsstype.h
$(GLSRC)gscspace.h:$(GLSRC)gsmemory.h
$(GLSRC)gscspace.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscspace.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscspace.h:$(GLSRC)stdio_.h
-$(GLSRC)gscspace.h:$(GLSRC)gsgstate.h
$(GLSRC)gscspace.h:$(GLSRC)stdint_.h
$(GLSRC)gscspace.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscspace.h:$(GLSRC)std.h
$(GLSRC)gscspace.h:$(GLSRC)gstypes.h
+$(GLSRC)gscspace.h:$(GLSRC)std.h
$(GLSRC)gscspace.h:$(GLSRC)stdpre.h
$(GLSRC)gscspace.h:$(GLGEN)arch.h
+$(GLSRC)gscspace.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscssub.h:$(GLSRC)gscspace.h
+$(GLSRC)gscssub.h:$(GLSRC)gsgstate.h
$(GLSRC)gscssub.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscssub.h:$(GLSRC)gxbitmap.h
$(GLSRC)gscssub.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscssub.h:$(GLSRC)gsrefct.h
-$(GLSRC)gscssub.h:$(GLSRC)gsccolor.h
-$(GLSRC)gscssub.h:$(GLSRC)scommon.h
$(GLSRC)gscssub.h:$(GLSRC)memento.h
+$(GLSRC)gscssub.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscssub.h:$(GLSRC)scommon.h
$(GLSRC)gscssub.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscssub.h:$(GLSRC)gsccolor.h
$(GLSRC)gscssub.h:$(GLSRC)gsstype.h
$(GLSRC)gscssub.h:$(GLSRC)gsmemory.h
$(GLSRC)gscssub.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscssub.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscssub.h:$(GLSRC)stdio_.h
-$(GLSRC)gscssub.h:$(GLSRC)gsgstate.h
$(GLSRC)gscssub.h:$(GLSRC)stdint_.h
$(GLSRC)gscssub.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscssub.h:$(GLSRC)std.h
$(GLSRC)gscssub.h:$(GLSRC)gstypes.h
+$(GLSRC)gscssub.h:$(GLSRC)std.h
$(GLSRC)gscssub.h:$(GLSRC)stdpre.h
$(GLSRC)gscssub.h:$(GLGEN)arch.h
+$(GLSRC)gscssub.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxcmap.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxtext.h
$(GLSRC)gxdevcli.h:$(GLSRC)gstext.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevcli.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxfmap.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsuid.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsfont.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsimage.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxdda.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsfont.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxftype.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxpath.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxftype.h
$(GLSRC)gxdevcli.h:$(GLSRC)gscms.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsrect.h
$(GLSRC)gxdevcli.h:$(GLSRC)gslparam.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsrefct.h
$(GLSRC)gxdevcli.h:$(GLSRC)gp.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevcli.h:$(GLSRC)memento.h
+$(GLSRC)gxdevcli.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsuid.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdevcli.h:$(GLSRC)srdline.h
$(GLSRC)gxdevcli.h:$(GLSRC)scommon.h
-$(GLSRC)gxdevcli.h:$(GLSRC)memento.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gscsel.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxarith.h
$(GLSRC)gxdevcli.h:$(GLSRC)stat_.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevcli.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdevcli.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevcli.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevcli.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdevcli.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevcli.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsccode.h
$(GLSRC)gxdevcli.h:$(GLSRC)stdint_.h
$(GLSRC)gxdevcli.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdevcli.h:$(GLSRC)std.h
$(GLSRC)gxdevcli.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdevcli.h:$(GLSRC)std.h
$(GLSRC)gxdevcli.h:$(GLSRC)stdpre.h
$(GLSRC)gxdevcli.h:$(GLGEN)arch.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscicach.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gscicach.h:$(GLSRC)gxcmap.h
$(GLSRC)gscicach.h:$(GLSRC)gxtext.h
$(GLSRC)gscicach.h:$(GLSRC)gstext.h
$(GLSRC)gscicach.h:$(GLSRC)gsnamecl.h
$(GLSRC)gscicach.h:$(GLSRC)gstparam.h
-$(GLSRC)gscicach.h:$(GLSRC)gxfcache.h
-$(GLSRC)gscicach.h:$(GLSRC)gxcspace.h
-$(GLSRC)gscicach.h:$(GLSRC)gsropt.h
+$(GLSRC)gscicach.h:$(GLSRC)gxfmap.h
$(GLSRC)gscicach.h:$(GLSRC)gsfunc.h
+$(GLSRC)gscicach.h:$(GLSRC)gxcspace.h
$(GLSRC)gscicach.h:$(GLSRC)gxrplane.h
-$(GLSRC)gscicach.h:$(GLSRC)gsuid.h
-$(GLSRC)gscicach.h:$(GLSRC)gxcmap.h
+$(GLSRC)gscicach.h:$(GLSRC)gscsel.h
+$(GLSRC)gscicach.h:$(GLSRC)gxfcache.h
+$(GLSRC)gscicach.h:$(GLSRC)gsfont.h
$(GLSRC)gscicach.h:$(GLSRC)gsimage.h
$(GLSRC)gscicach.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gscicach.h:$(GLSRC)gxdda.h
$(GLSRC)gscicach.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gscicach.h:$(GLSRC)gsfont.h
-$(GLSRC)gscicach.h:$(GLSRC)gxfmap.h
-$(GLSRC)gscicach.h:$(GLSRC)gxftype.h
+$(GLSRC)gscicach.h:$(GLSRC)gxbcache.h
+$(GLSRC)gscicach.h:$(GLSRC)gsropt.h
+$(GLSRC)gscicach.h:$(GLSRC)gxdda.h
+$(GLSRC)gscicach.h:$(GLSRC)gxpath.h
$(GLSRC)gscicach.h:$(GLSRC)gxfrac.h
+$(GLSRC)gscicach.h:$(GLSRC)gxtmap.h
+$(GLSRC)gscicach.h:$(GLSRC)gxftype.h
$(GLSRC)gscicach.h:$(GLSRC)gscms.h
-$(GLSRC)gscicach.h:$(GLSRC)gscspace.h
-$(GLSRC)gscicach.h:$(GLSRC)gxpath.h
-$(GLSRC)gscicach.h:$(GLSRC)gxbcache.h
-$(GLSRC)gscicach.h:$(GLSRC)gsdevice.h
-$(GLSRC)gscicach.h:$(GLSRC)gxarith.h
-$(GLSRC)gscicach.h:$(GLSRC)gspenum.h
-$(GLSRC)gscicach.h:$(GLSRC)gxhttile.h
$(GLSRC)gscicach.h:$(GLSRC)gsrect.h
$(GLSRC)gscicach.h:$(GLSRC)gslparam.h
+$(GLSRC)gscicach.h:$(GLSRC)gsdevice.h
+$(GLSRC)gscicach.h:$(GLSRC)gscpm.h
+$(GLSRC)gscicach.h:$(GLSRC)gscspace.h
+$(GLSRC)gscicach.h:$(GLSRC)gsgstate.h
$(GLSRC)gscicach.h:$(GLSRC)gsxfont.h
-$(GLSRC)gscicach.h:$(GLSRC)gsiparam.h
$(GLSRC)gscicach.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gscicach.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gscicach.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gscicach.h:$(GLSRC)gscpm.h
+$(GLSRC)gscicach.h:$(GLSRC)gsiparam.h
$(GLSRC)gscicach.h:$(GLSRC)gxfixed.h
-$(GLSRC)gscicach.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscicach.h:$(GLSRC)gscompt.h
+$(GLSRC)gscicach.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscicach.h:$(GLSRC)gspenum.h
+$(GLSRC)gscicach.h:$(GLSRC)gxhttile.h
$(GLSRC)gscicach.h:$(GLSRC)gsparam.h
+$(GLSRC)gscicach.h:$(GLSRC)gsrefct.h
$(GLSRC)gscicach.h:$(GLSRC)gp.h
-$(GLSRC)gscicach.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscicach.h:$(GLSRC)memento.h
+$(GLSRC)gscicach.h:$(GLSRC)memory_.h
+$(GLSRC)gscicach.h:$(GLSRC)gsuid.h
$(GLSRC)gscicach.h:$(GLSRC)gsstruct.h
$(GLSRC)gscicach.h:$(GLSRC)gxsync.h
+$(GLSRC)gscicach.h:$(GLSRC)gxbitmap.h
$(GLSRC)gscicach.h:$(GLSRC)srdline.h
$(GLSRC)gscicach.h:$(GLSRC)scommon.h
-$(GLSRC)gscicach.h:$(GLSRC)memento.h
-$(GLSRC)gscicach.h:$(GLSRC)gscsel.h
$(GLSRC)gscicach.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscicach.h:$(GLSRC)gsstype.h
+$(GLSRC)gscicach.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscicach.h:$(GLSRC)gxarith.h
$(GLSRC)gscicach.h:$(GLSRC)stat_.h
-$(GLSRC)gscicach.h:$(GLSRC)gxtmap.h
-$(GLSRC)gscicach.h:$(GLSRC)gsmemory.h
$(GLSRC)gscicach.h:$(GLSRC)gpsync.h
-$(GLSRC)gscicach.h:$(GLSRC)memory_.h
+$(GLSRC)gscicach.h:$(GLSRC)gsstype.h
+$(GLSRC)gscicach.h:$(GLSRC)gsmemory.h
$(GLSRC)gscicach.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gscicach.h:$(GLSRC)gslibctx.h
$(GLSRC)gscicach.h:$(GLSRC)gscdefs.h
-$(GLSRC)gscicach.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gscicach.h:$(GLSRC)stdio_.h
-$(GLSRC)gscicach.h:$(GLSRC)gscompt.h
+$(GLSRC)gscicach.h:$(GLSRC)gslibctx.h
$(GLSRC)gscicach.h:$(GLSRC)gxcindex.h
-$(GLSRC)gscicach.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscicach.h:$(GLSRC)stdio_.h
+$(GLSRC)gscicach.h:$(GLSRC)gsccode.h
$(GLSRC)gscicach.h:$(GLSRC)stdint_.h
$(GLSRC)gscicach.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscicach.h:$(GLSRC)gsccode.h
-$(GLSRC)gscicach.h:$(GLSRC)std.h
$(GLSRC)gscicach.h:$(GLSRC)gstypes.h
+$(GLSRC)gscicach.h:$(GLSRC)std.h
$(GLSRC)gscicach.h:$(GLSRC)stdpre.h
$(GLSRC)gscicach.h:$(GLGEN)arch.h
+$(GLSRC)gscicach.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdevice.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxcmap.h
$(GLSRC)gxdevice.h:$(GLSRC)gxtext.h
$(GLSRC)gxdevice.h:$(GLSRC)gstext.h
$(GLSRC)gxdevice.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevice.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsropt.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxfmap.h
$(GLSRC)gxdevice.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdevice.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsuid.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevice.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsfont.h
$(GLSRC)gxdevice.h:$(GLSRC)gsimage.h
$(GLSRC)gxdevice.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxdda.h
$(GLSRC)gxdevice.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsfont.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxftype.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxpath.h
$(GLSRC)gxdevice.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxftype.h
$(GLSRC)gxdevice.h:$(GLSRC)gscms.h
-$(GLSRC)gxdevice.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxstdio.h
-$(GLSRC)gxdevice.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdevice.h:$(GLSRC)gsrect.h
$(GLSRC)gxdevice.h:$(GLSRC)gslparam.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdevice.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevice.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxstdio.h
$(GLSRC)gxdevice.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdevice.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxdevice.h:$(GLSRC)gsio.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdevice.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdevice.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdevice.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevice.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdevice.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsrefct.h
$(GLSRC)gxdevice.h:$(GLSRC)gp.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevice.h:$(GLSRC)memento.h
+$(GLSRC)gxdevice.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsuid.h
$(GLSRC)gxdevice.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdevice.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdevice.h:$(GLSRC)srdline.h
$(GLSRC)gxdevice.h:$(GLSRC)scommon.h
-$(GLSRC)gxdevice.h:$(GLSRC)memento.h
-$(GLSRC)gxdevice.h:$(GLSRC)gscsel.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxdevice.h:$(GLSRC)gsfname.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxarith.h
$(GLSRC)gxdevice.h:$(GLSRC)stat_.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevice.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdevice.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevice.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxdevice.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevice.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxdevice.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdevice.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdevice.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevice.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevice.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevice.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsccode.h
$(GLSRC)gxdevice.h:$(GLSRC)stdint_.h
$(GLSRC)gxdevice.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdevice.h:$(GLSRC)std.h
$(GLSRC)gxdevice.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdevice.h:$(GLSRC)std.h
$(GLSRC)gxdevice.h:$(GLSRC)stdpre.h
$(GLSRC)gxdevice.h:$(GLGEN)arch.h
+$(GLSRC)gxdevice.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdht.h:$(GLSRC)gxht.h
$(GLSRC)gxdht.h:$(GLSRC)gxhttype.h
$(GLSRC)gxdht.h:$(GLSRC)gsht1.h
$(GLSRC)gxdht.h:$(GLSRC)gsht.h
$(GLSRC)gxdht.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxdht.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdht.h:$(GLSRC)gxtmap.h
$(GLSRC)gxdht.h:$(GLSRC)gscms.h
-$(GLSRC)gxdht.h:$(GLSRC)gscspace.h
$(GLSRC)gxdht.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxdht.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdht.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdht.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdht.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdht.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxdht.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdht.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdht.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdht.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdht.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdht.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdht.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdht.h:$(GLSRC)memento.h
$(GLSRC)gxdht.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdht.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdht.h:$(GLSRC)scommon.h
-$(GLSRC)gxdht.h:$(GLSRC)memento.h
$(GLSRC)gxdht.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdht.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdht.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdht.h:$(GLSRC)gpsync.h
$(GLSRC)gxdht.h:$(GLSRC)gsstype.h
-$(GLSRC)gxdht.h:$(GLSRC)gxtmap.h
$(GLSRC)gxdht.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxdht.h:$(GLSRC)gpsync.h
$(GLSRC)gxdht.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxdht.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdht.h:$(GLSRC)stdio_.h
$(GLSRC)gxdht.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdht.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdht.h:$(GLSRC)stdio_.h
$(GLSRC)gxdht.h:$(GLSRC)stdint_.h
$(GLSRC)gxdht.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxdht.h:$(GLSRC)std.h
$(GLSRC)gxdht.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdht.h:$(GLSRC)std.h
$(GLSRC)gxdht.h:$(GLSRC)stdpre.h
$(GLSRC)gxdht.h:$(GLGEN)arch.h
+$(GLSRC)gxdht.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gscms.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gscspace.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)memento.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdhtserial.h:$(GLSRC)scommon.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)memento.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gpsync.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gsstype.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gpsync.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)stdio_.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)stdio_.h
$(GLSRC)gxdhtserial.h:$(GLSRC)stdint_.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)std.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)std.h
$(GLSRC)gxdhtserial.h:$(GLSRC)stdpre.h
$(GLSRC)gxdhtserial.h:$(GLGEN)arch.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdither.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxdither.h:$(GLSRC)gxfrac.h
$(GLSRC)gxdither.h:$(GLSRC)gscms.h
-$(GLSRC)gxdither.h:$(GLSRC)gscspace.h
$(GLSRC)gxdither.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxdither.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdither.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdither.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdither.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdither.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxdither.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdither.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdither.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdither.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdither.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdither.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdither.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdither.h:$(GLSRC)memento.h
$(GLSRC)gxdither.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdither.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdither.h:$(GLSRC)scommon.h
-$(GLSRC)gxdither.h:$(GLSRC)memento.h
$(GLSRC)gxdither.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdither.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdither.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdither.h:$(GLSRC)gpsync.h
$(GLSRC)gxdither.h:$(GLSRC)gsstype.h
$(GLSRC)gxdither.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxdither.h:$(GLSRC)gpsync.h
$(GLSRC)gxdither.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxdither.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdither.h:$(GLSRC)stdio_.h
$(GLSRC)gxdither.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdither.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdither.h:$(GLSRC)stdio_.h
$(GLSRC)gxdither.h:$(GLSRC)stdint_.h
$(GLSRC)gxdither.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxdither.h:$(GLSRC)std.h
$(GLSRC)gxdither.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdither.h:$(GLSRC)std.h
$(GLSRC)gxdither.h:$(GLSRC)stdpre.h
$(GLSRC)gxdither.h:$(GLGEN)arch.h
+$(GLSRC)gxdither.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxclip2.h:$(GLSRC)gxmclip.h
$(GLSRC)gxclip2.h:$(GLSRC)gxclip.h
$(GLSRC)gxclip2.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxclip2.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxcmap.h
$(GLSRC)gxclip2.h:$(GLSRC)gxtext.h
$(GLSRC)gxclip2.h:$(GLSRC)gstext.h
$(GLSRC)gxclip2.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclip2.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxfmap.h
$(GLSRC)gxclip2.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclip2.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsuid.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclip2.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsfont.h
$(GLSRC)gxclip2.h:$(GLSRC)gsimage.h
$(GLSRC)gxclip2.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxdda.h
$(GLSRC)gxclip2.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsfont.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxftype.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxpath.h
$(GLSRC)gxclip2.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxftype.h
$(GLSRC)gxclip2.h:$(GLSRC)gscms.h
-$(GLSRC)gxclip2.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclip2.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclip2.h:$(GLSRC)gsrect.h
$(GLSRC)gxclip2.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclip2.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclip2.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsgstate.h
$(GLSRC)gxclip2.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclip2.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxclip2.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclip2.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclip2.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclip2.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclip2.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsrefct.h
$(GLSRC)gxclip2.h:$(GLSRC)gp.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclip2.h:$(GLSRC)memento.h
+$(GLSRC)gxclip2.h:$(GLSRC)memory_.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsuid.h
$(GLSRC)gxclip2.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclip2.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxclip2.h:$(GLSRC)srdline.h
$(GLSRC)gxclip2.h:$(GLSRC)scommon.h
-$(GLSRC)gxclip2.h:$(GLSRC)memento.h
-$(GLSRC)gxclip2.h:$(GLSRC)gscsel.h
$(GLSRC)gxclip2.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxarith.h
$(GLSRC)gxclip2.h:$(GLSRC)stat_.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclip2.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclip2.h:$(GLSRC)memory_.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclip2.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxclip2.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclip2.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxclip2.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclip2.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclip2.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclip2.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclip2.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclip2.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsccode.h
$(GLSRC)gxclip2.h:$(GLSRC)stdint_.h
$(GLSRC)gxclip2.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclip2.h:$(GLSRC)std.h
$(GLSRC)gxclip2.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclip2.h:$(GLSRC)std.h
$(GLSRC)gxclip2.h:$(GLSRC)stdpre.h
$(GLSRC)gxclip2.h:$(GLGEN)arch.h
+$(GLSRC)gxclip2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxclipm.h:$(GLSRC)gxmclip.h
$(GLSRC)gxclipm.h:$(GLSRC)gxclip.h
$(GLSRC)gxclipm.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxclipm.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxcmap.h
$(GLSRC)gxclipm.h:$(GLSRC)gxtext.h
$(GLSRC)gxclipm.h:$(GLSRC)gstext.h
$(GLSRC)gxclipm.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclipm.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxfmap.h
$(GLSRC)gxclipm.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclipm.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsuid.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclipm.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsfont.h
$(GLSRC)gxclipm.h:$(GLSRC)gsimage.h
$(GLSRC)gxclipm.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxdda.h
$(GLSRC)gxclipm.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsfont.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxftype.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxpath.h
$(GLSRC)gxclipm.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxftype.h
$(GLSRC)gxclipm.h:$(GLSRC)gscms.h
-$(GLSRC)gxclipm.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclipm.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclipm.h:$(GLSRC)gsrect.h
$(GLSRC)gxclipm.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclipm.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclipm.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsgstate.h
$(GLSRC)gxclipm.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclipm.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxclipm.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclipm.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclipm.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclipm.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclipm.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsrefct.h
$(GLSRC)gxclipm.h:$(GLSRC)gp.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclipm.h:$(GLSRC)memento.h
+$(GLSRC)gxclipm.h:$(GLSRC)memory_.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsuid.h
$(GLSRC)gxclipm.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclipm.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxclipm.h:$(GLSRC)srdline.h
$(GLSRC)gxclipm.h:$(GLSRC)scommon.h
-$(GLSRC)gxclipm.h:$(GLSRC)memento.h
-$(GLSRC)gxclipm.h:$(GLSRC)gscsel.h
$(GLSRC)gxclipm.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxarith.h
$(GLSRC)gxclipm.h:$(GLSRC)stat_.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclipm.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclipm.h:$(GLSRC)memory_.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclipm.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxclipm.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclipm.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxclipm.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclipm.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclipm.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclipm.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclipm.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclipm.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsccode.h
$(GLSRC)gxclipm.h:$(GLSRC)stdint_.h
$(GLSRC)gxclipm.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclipm.h:$(GLSRC)std.h
$(GLSRC)gxclipm.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclipm.h:$(GLSRC)std.h
$(GLSRC)gxclipm.h:$(GLSRC)stdpre.h
$(GLSRC)gxclipm.h:$(GLGEN)arch.h
+$(GLSRC)gxclipm.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxctable.h:$(GLSRC)gxfrac.h
$(GLSRC)gxctable.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxctable.h:$(GLSRC)std.h
$(GLSRC)gxctable.h:$(GLSRC)gstypes.h
+$(GLSRC)gxctable.h:$(GLSRC)std.h
$(GLSRC)gxctable.h:$(GLSRC)stdpre.h
$(GLSRC)gxctable.h:$(GLGEN)arch.h
-$(GLSRC)gxfcache.h:$(GLSRC)gsuid.h
$(GLSRC)gxfcache.h:$(GLSRC)gsfont.h
-$(GLSRC)gxfcache.h:$(GLSRC)gxftype.h
$(GLSRC)gxfcache.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxfcache.h:$(GLSRC)gxftype.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsgstate.h
$(GLSRC)gxfcache.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxfcache.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxfcache.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxfcache.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfcache.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxfcache.h:$(GLSRC)scommon.h
$(GLSRC)gxfcache.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxfcache.h:$(GLSRC)gsstype.h
$(GLSRC)gxfcache.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfcache.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfcache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfcache.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfcache.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsccode.h
$(GLSRC)gxfcache.h:$(GLSRC)stdint_.h
$(GLSRC)gxfcache.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxfcache.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfcache.h:$(GLSRC)std.h
$(GLSRC)gxfcache.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfcache.h:$(GLSRC)std.h
$(GLSRC)gxfcache.h:$(GLSRC)stdpre.h
$(GLSRC)gxfcache.h:$(GLGEN)arch.h
+$(GLSRC)gxfcache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfont.h:$(GLSRC)gspath.h
-$(GLSRC)gxfont.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxfont.h:$(GLSRC)gsgdata.h
-$(GLSRC)gxfont.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxfont.h:$(GLSRC)gxfapi.h
-$(GLSRC)gxfont.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfont.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxfont.h:$(GLSRC)gstext.h
-$(GLSRC)gxfont.h:$(GLSRC)gsuid.h
-$(GLSRC)gxfont.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxfont.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfont.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfont.h:$(GLSRC)gxpath.h
$(GLSRC)gxfont.h:$(GLSRC)gxftype.h
$(GLSRC)gxfont.h:$(GLSRC)gscms.h
-$(GLSRC)gxfont.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfont.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfont.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxfont.h:$(GLSRC)gxarith.h
-$(GLSRC)gxfont.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfont.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfont.h:$(GLSRC)gsrect.h
$(GLSRC)gxfont.h:$(GLSRC)gslparam.h
-$(GLSRC)gxfont.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfont.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxfont.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont.h:$(GLSRC)gsdevice.h
$(GLSRC)gxfont.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfont.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfont.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont.h:$(GLSRC)gsnotify.h
+$(GLSRC)gxfont.h:$(GLSRC)gsiparam.h
$(GLSRC)gxfont.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxfont.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfont.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfont.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont.h:$(GLSRC)memento.h
+$(GLSRC)gxfont.h:$(GLSRC)gsuid.h
$(GLSRC)gxfont.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfont.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxfont.h:$(GLSRC)scommon.h
-$(GLSRC)gxfont.h:$(GLSRC)memento.h
$(GLSRC)gxfont.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfont.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont.h:$(GLSRC)gsstype.h
$(GLSRC)gxfont.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxfont.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfont.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfont.h:$(GLSRC)stdio_.h
$(GLSRC)gxfont.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfont.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfont.h:$(GLSRC)gsccode.h
$(GLSRC)gxfont.h:$(GLSRC)stdint_.h
$(GLSRC)gxfont.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxfont.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfont.h:$(GLSRC)std.h
$(GLSRC)gxfont.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfont.h:$(GLSRC)std.h
$(GLSRC)gxfont.h:$(GLSRC)stdpre.h
$(GLSRC)gxfont.h:$(GLGEN)arch.h
+$(GLSRC)gxfont.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxiparam.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxcmap.h
$(GLSRC)gxiparam.h:$(GLSRC)gxtext.h
$(GLSRC)gxiparam.h:$(GLSRC)gstext.h
$(GLSRC)gxiparam.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxiparam.h:$(GLSRC)gstparam.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsropt.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxfmap.h
$(GLSRC)gxiparam.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxcspace.h
$(GLSRC)gxiparam.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsuid.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxiparam.h:$(GLSRC)gscsel.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsfont.h
$(GLSRC)gxiparam.h:$(GLSRC)gsimage.h
$(GLSRC)gxiparam.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxdda.h
$(GLSRC)gxiparam.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsfont.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxftype.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsropt.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxdda.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxpath.h
$(GLSRC)gxiparam.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxftype.h
$(GLSRC)gxiparam.h:$(GLSRC)gscms.h
-$(GLSRC)gxiparam.h:$(GLSRC)gscspace.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxpath.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxarith.h
-$(GLSRC)gxiparam.h:$(GLSRC)gspenum.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxhttile.h
$(GLSRC)gxiparam.h:$(GLSRC)gsrect.h
$(GLSRC)gxiparam.h:$(GLSRC)gslparam.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxiparam.h:$(GLSRC)gscpm.h
+$(GLSRC)gxiparam.h:$(GLSRC)gscspace.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsgstate.h
$(GLSRC)gxiparam.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsiparam.h
$(GLSRC)gxiparam.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxiparam.h:$(GLSRC)gscpm.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsiparam.h
$(GLSRC)gxiparam.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxiparam.h:$(GLSRC)gscompt.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxiparam.h:$(GLSRC)gspenum.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxhttile.h
$(GLSRC)gxiparam.h:$(GLSRC)gsparam.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsrefct.h
$(GLSRC)gxiparam.h:$(GLSRC)gp.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxiparam.h:$(GLSRC)memento.h
+$(GLSRC)gxiparam.h:$(GLSRC)memory_.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsuid.h
$(GLSRC)gxiparam.h:$(GLSRC)gsstruct.h
$(GLSRC)gxiparam.h:$(GLSRC)gxsync.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxiparam.h:$(GLSRC)srdline.h
$(GLSRC)gxiparam.h:$(GLSRC)scommon.h
-$(GLSRC)gxiparam.h:$(GLSRC)memento.h
-$(GLSRC)gxiparam.h:$(GLSRC)gscsel.h
$(GLSRC)gxiparam.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsstype.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxarith.h
$(GLSRC)gxiparam.h:$(GLSRC)stat_.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsmemory.h
$(GLSRC)gxiparam.h:$(GLSRC)gpsync.h
-$(GLSRC)gxiparam.h:$(GLSRC)memory_.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsstype.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsmemory.h
$(GLSRC)gxiparam.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxiparam.h:$(GLSRC)gslibctx.h
$(GLSRC)gxiparam.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxiparam.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxiparam.h:$(GLSRC)stdio_.h
-$(GLSRC)gxiparam.h:$(GLSRC)gscompt.h
+$(GLSRC)gxiparam.h:$(GLSRC)gslibctx.h
$(GLSRC)gxiparam.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxiparam.h:$(GLSRC)stdio_.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsccode.h
$(GLSRC)gxiparam.h:$(GLSRC)stdint_.h
$(GLSRC)gxiparam.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsccode.h
-$(GLSRC)gxiparam.h:$(GLSRC)std.h
$(GLSRC)gxiparam.h:$(GLSRC)gstypes.h
+$(GLSRC)gxiparam.h:$(GLSRC)std.h
$(GLSRC)gxiparam.h:$(GLSRC)stdpre.h
$(GLSRC)gxiparam.h:$(GLGEN)arch.h
-$(GLSRC)gximask.h:$(GLSRC)gsropt.h
+$(GLSRC)gxiparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gximask.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gximask.h:$(GLSRC)gscms.h
-$(GLSRC)gximask.h:$(GLSRC)gscspace.h
+$(GLSRC)gximask.h:$(GLSRC)gsropt.h
$(GLSRC)gximask.h:$(GLSRC)gxpath.h
-$(GLSRC)gximask.h:$(GLSRC)gsdevice.h
-$(GLSRC)gximask.h:$(GLSRC)gxarith.h
-$(GLSRC)gximask.h:$(GLSRC)gspenum.h
-$(GLSRC)gximask.h:$(GLSRC)gxhttile.h
+$(GLSRC)gximask.h:$(GLSRC)gscms.h
$(GLSRC)gximask.h:$(GLSRC)gsrect.h
$(GLSRC)gximask.h:$(GLSRC)gslparam.h
-$(GLSRC)gximask.h:$(GLSRC)gsiparam.h
-$(GLSRC)gximask.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gximask.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximask.h:$(GLSRC)gsdevice.h
$(GLSRC)gximask.h:$(GLSRC)gscpm.h
+$(GLSRC)gximask.h:$(GLSRC)gscspace.h
+$(GLSRC)gximask.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximask.h:$(GLSRC)gsiparam.h
$(GLSRC)gximask.h:$(GLSRC)gxfixed.h
-$(GLSRC)gximask.h:$(GLSRC)gsrefct.h
+$(GLSRC)gximask.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximask.h:$(GLSRC)gspenum.h
+$(GLSRC)gximask.h:$(GLSRC)gxhttile.h
$(GLSRC)gximask.h:$(GLSRC)gsparam.h
-$(GLSRC)gximask.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximask.h:$(GLSRC)gsrefct.h
+$(GLSRC)gximask.h:$(GLSRC)memento.h
$(GLSRC)gximask.h:$(GLSRC)gxsync.h
+$(GLSRC)gximask.h:$(GLSRC)gxbitmap.h
$(GLSRC)gximask.h:$(GLSRC)scommon.h
-$(GLSRC)gximask.h:$(GLSRC)memento.h
$(GLSRC)gximask.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gximask.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximask.h:$(GLSRC)gxarith.h
+$(GLSRC)gximask.h:$(GLSRC)gpsync.h
$(GLSRC)gximask.h:$(GLSRC)gsstype.h
$(GLSRC)gximask.h:$(GLSRC)gsmemory.h
-$(GLSRC)gximask.h:$(GLSRC)gpsync.h
$(GLSRC)gximask.h:$(GLSRC)gslibctx.h
-$(GLSRC)gximask.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gximask.h:$(GLSRC)stdio_.h
$(GLSRC)gximask.h:$(GLSRC)gxcindex.h
-$(GLSRC)gximask.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximask.h:$(GLSRC)stdio_.h
$(GLSRC)gximask.h:$(GLSRC)stdint_.h
$(GLSRC)gximask.h:$(GLSRC)gssprintf.h
-$(GLSRC)gximask.h:$(GLSRC)std.h
$(GLSRC)gximask.h:$(GLSRC)gstypes.h
+$(GLSRC)gximask.h:$(GLSRC)std.h
$(GLSRC)gximask.h:$(GLSRC)stdpre.h
$(GLSRC)gximask.h:$(GLGEN)arch.h
+$(GLSRC)gximask.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscie.h:$(GLSRC)gxctable.h
$(GLSRC)gscie.h:$(GLSRC)gxfrac.h
$(GLSRC)gscie.h:$(GLSRC)gscspace.h
+$(GLSRC)gscie.h:$(GLSRC)gsgstate.h
$(GLSRC)gscie.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscie.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gscie.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscie.h:$(GLSRC)gxfixed.h
+$(GLSRC)gscie.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscie.h:$(GLSRC)gsrefct.h
-$(GLSRC)gscie.h:$(GLSRC)gsccolor.h
-$(GLSRC)gscie.h:$(GLSRC)scommon.h
$(GLSRC)gscie.h:$(GLSRC)memento.h
+$(GLSRC)gscie.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscie.h:$(GLSRC)scommon.h
$(GLSRC)gscie.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscie.h:$(GLSRC)gsccolor.h
$(GLSRC)gscie.h:$(GLSRC)gsstype.h
$(GLSRC)gscie.h:$(GLSRC)gsmemory.h
$(GLSRC)gscie.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscie.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscie.h:$(GLSRC)stdio_.h
-$(GLSRC)gscie.h:$(GLSRC)gsgstate.h
$(GLSRC)gscie.h:$(GLSRC)stdint_.h
$(GLSRC)gscie.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscie.h:$(GLSRC)std.h
$(GLSRC)gscie.h:$(GLSRC)gstypes.h
+$(GLSRC)gscie.h:$(GLSRC)std.h
$(GLSRC)gscie.h:$(GLSRC)stdpre.h
$(GLSRC)gscie.h:$(GLGEN)arch.h
+$(GLSRC)gscie.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc.h:$(GLSRC)gscie.h
$(GLSRC)gsicc.h:$(GLSRC)gxcspace.h
$(GLSRC)gsicc.h:$(GLSRC)gxctable.h
+$(GLSRC)gsicc.h:$(GLSRC)gscsel.h
$(GLSRC)gsicc.h:$(GLSRC)gsdcolor.h
$(GLSRC)gsicc.h:$(GLSRC)gxfrac.h
$(GLSRC)gsicc.h:$(GLSRC)gscms.h
-$(GLSRC)gsicc.h:$(GLSRC)gscspace.h
$(GLSRC)gsicc.h:$(GLSRC)gsdevice.h
-$(GLSRC)gsicc.h:$(GLSRC)gxarith.h
-$(GLSRC)gsicc.h:$(GLSRC)gxhttile.h
+$(GLSRC)gsicc.h:$(GLSRC)gscspace.h
+$(GLSRC)gsicc.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsicc.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gsicc.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsicc.h:$(GLSRC)gxfixed.h
-$(GLSRC)gsicc.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsicc.h:$(GLSRC)gxhttile.h
$(GLSRC)gsicc.h:$(GLSRC)gsparam.h
-$(GLSRC)gsicc.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc.h:$(GLSRC)memento.h
$(GLSRC)gsicc.h:$(GLSRC)gxsync.h
+$(GLSRC)gsicc.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsicc.h:$(GLSRC)scommon.h
-$(GLSRC)gsicc.h:$(GLSRC)memento.h
-$(GLSRC)gsicc.h:$(GLSRC)gscsel.h
$(GLSRC)gsicc.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsicc.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc.h:$(GLSRC)gxarith.h
+$(GLSRC)gsicc.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc.h:$(GLSRC)gsstype.h
$(GLSRC)gsicc.h:$(GLSRC)gsmemory.h
-$(GLSRC)gsicc.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsicc.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gsicc.h:$(GLSRC)stdio_.h
$(GLSRC)gsicc.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsicc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsicc.h:$(GLSRC)stdio_.h
$(GLSRC)gsicc.h:$(GLSRC)stdint_.h
$(GLSRC)gsicc.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsicc.h:$(GLSRC)std.h
$(GLSRC)gsicc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc.h:$(GLSRC)std.h
$(GLSRC)gsicc.h:$(GLSRC)stdpre.h
$(GLSRC)gsicc.h:$(GLGEN)arch.h
+$(GLSRC)gsicc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscrd.h:$(GLSRC)gscie.h
$(GLSRC)gscrd.h:$(GLSRC)gxctable.h
$(GLSRC)gscrd.h:$(GLSRC)gxfrac.h
$(GLSRC)gscrd.h:$(GLSRC)gscspace.h
+$(GLSRC)gscrd.h:$(GLSRC)gsgstate.h
$(GLSRC)gscrd.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscrd.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gscrd.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscrd.h:$(GLSRC)gxfixed.h
+$(GLSRC)gscrd.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscrd.h:$(GLSRC)gsrefct.h
-$(GLSRC)gscrd.h:$(GLSRC)gsccolor.h
-$(GLSRC)gscrd.h:$(GLSRC)scommon.h
$(GLSRC)gscrd.h:$(GLSRC)memento.h
+$(GLSRC)gscrd.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscrd.h:$(GLSRC)scommon.h
$(GLSRC)gscrd.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscrd.h:$(GLSRC)gsccolor.h
$(GLSRC)gscrd.h:$(GLSRC)gsstype.h
$(GLSRC)gscrd.h:$(GLSRC)gsmemory.h
$(GLSRC)gscrd.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscrd.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscrd.h:$(GLSRC)stdio_.h
-$(GLSRC)gscrd.h:$(GLSRC)gsgstate.h
$(GLSRC)gscrd.h:$(GLSRC)stdint_.h
$(GLSRC)gscrd.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscrd.h:$(GLSRC)std.h
$(GLSRC)gscrd.h:$(GLSRC)gstypes.h
+$(GLSRC)gscrd.h:$(GLSRC)std.h
$(GLSRC)gscrd.h:$(GLSRC)stdpre.h
$(GLSRC)gscrd.h:$(GLGEN)arch.h
+$(GLSRC)gscrd.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscrdp.h:$(GLSRC)gscie.h
$(GLSRC)gscrdp.h:$(GLSRC)gxctable.h
$(GLSRC)gscrdp.h:$(GLSRC)gxfrac.h
-$(GLSRC)gscrdp.h:$(GLSRC)gscspace.h
$(GLSRC)gscrdp.h:$(GLSRC)gsdevice.h
+$(GLSRC)gscrdp.h:$(GLSRC)gscspace.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsgstate.h
$(GLSRC)gscrdp.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscrdp.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gscrdp.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscrdp.h:$(GLSRC)gxfixed.h
-$(GLSRC)gscrdp.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscrdp.h:$(GLSRC)gsparam.h
-$(GLSRC)gscrdp.h:$(GLSRC)gsccolor.h
-$(GLSRC)gscrdp.h:$(GLSRC)scommon.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsrefct.h
$(GLSRC)gscrdp.h:$(GLSRC)memento.h
+$(GLSRC)gscrdp.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscrdp.h:$(GLSRC)scommon.h
$(GLSRC)gscrdp.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsccolor.h
$(GLSRC)gscrdp.h:$(GLSRC)gsstype.h
$(GLSRC)gscrdp.h:$(GLSRC)gsmemory.h
$(GLSRC)gscrdp.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscrdp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscrdp.h:$(GLSRC)stdio_.h
-$(GLSRC)gscrdp.h:$(GLSRC)gsgstate.h
$(GLSRC)gscrdp.h:$(GLSRC)stdint_.h
$(GLSRC)gscrdp.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscrdp.h:$(GLSRC)std.h
$(GLSRC)gscrdp.h:$(GLSRC)gstypes.h
+$(GLSRC)gscrdp.h:$(GLSRC)std.h
$(GLSRC)gscrdp.h:$(GLSRC)stdpre.h
$(GLSRC)gscrdp.h:$(GLGEN)arch.h
+$(GLSRC)gscrdp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscdevn.h:$(GLSRC)gsfunc.h
$(GLSRC)gscdevn.h:$(GLSRC)gscspace.h
-$(GLSRC)gscdevn.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsgstate.h
$(GLSRC)gscdevn.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gscdevn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsiparam.h
$(GLSRC)gscdevn.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gscdevn.h:$(GLSRC)gsrefct.h
$(GLSRC)gscdevn.h:$(GLSRC)gsparam.h
-$(GLSRC)gscdevn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscdevn.h:$(GLSRC)memento.h
$(GLSRC)gscdevn.h:$(GLSRC)gsstruct.h
+$(GLSRC)gscdevn.h:$(GLSRC)gxbitmap.h
$(GLSRC)gscdevn.h:$(GLSRC)scommon.h
-$(GLSRC)gscdevn.h:$(GLSRC)memento.h
$(GLSRC)gscdevn.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsccolor.h
$(GLSRC)gscdevn.h:$(GLSRC)gsstype.h
$(GLSRC)gscdevn.h:$(GLSRC)gsmemory.h
$(GLSRC)gscdevn.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscdevn.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscdevn.h:$(GLSRC)stdio_.h
-$(GLSRC)gscdevn.h:$(GLSRC)gsgstate.h
$(GLSRC)gscdevn.h:$(GLSRC)stdint_.h
$(GLSRC)gscdevn.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscdevn.h:$(GLSRC)std.h
$(GLSRC)gscdevn.h:$(GLSRC)gstypes.h
+$(GLSRC)gscdevn.h:$(GLSRC)std.h
$(GLSRC)gscdevn.h:$(GLSRC)stdpre.h
$(GLSRC)gscdevn.h:$(GLGEN)arch.h
+$(GLSRC)gscdevn.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscindex.h:$(GLSRC)gxfrac.h
$(GLSRC)gscindex.h:$(GLSRC)gscspace.h
+$(GLSRC)gscindex.h:$(GLSRC)gsgstate.h
$(GLSRC)gscindex.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscindex.h:$(GLSRC)gxbitmap.h
$(GLSRC)gscindex.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscindex.h:$(GLSRC)gsrefct.h
-$(GLSRC)gscindex.h:$(GLSRC)gsccolor.h
-$(GLSRC)gscindex.h:$(GLSRC)scommon.h
$(GLSRC)gscindex.h:$(GLSRC)memento.h
+$(GLSRC)gscindex.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscindex.h:$(GLSRC)scommon.h
$(GLSRC)gscindex.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscindex.h:$(GLSRC)gsccolor.h
$(GLSRC)gscindex.h:$(GLSRC)gsstype.h
$(GLSRC)gscindex.h:$(GLSRC)gsmemory.h
$(GLSRC)gscindex.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscindex.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscindex.h:$(GLSRC)stdio_.h
-$(GLSRC)gscindex.h:$(GLSRC)gsgstate.h
$(GLSRC)gscindex.h:$(GLSRC)stdint_.h
$(GLSRC)gscindex.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscindex.h:$(GLSRC)std.h
$(GLSRC)gscindex.h:$(GLSRC)gstypes.h
+$(GLSRC)gscindex.h:$(GLSRC)std.h
$(GLSRC)gscindex.h:$(GLSRC)stdpre.h
$(GLSRC)gscindex.h:$(GLGEN)arch.h
+$(GLSRC)gscindex.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscolor2.h:$(GLSRC)gscindex.h
$(GLSRC)gscolor2.h:$(GLSRC)gsptype1.h
$(GLSRC)gscolor2.h:$(GLSRC)gscie.h
$(GLSRC)gscolor2.h:$(GLSRC)gspcolor.h
$(GLSRC)gscolor2.h:$(GLSRC)gxctable.h
-$(GLSRC)gscolor2.h:$(GLSRC)gsuid.h
$(GLSRC)gscolor2.h:$(GLSRC)gsdcolor.h
$(GLSRC)gscolor2.h:$(GLSRC)gxfrac.h
$(GLSRC)gscolor2.h:$(GLSRC)gscms.h
-$(GLSRC)gscolor2.h:$(GLSRC)gscspace.h
$(GLSRC)gscolor2.h:$(GLSRC)gsdevice.h
-$(GLSRC)gscolor2.h:$(GLSRC)gxarith.h
-$(GLSRC)gscolor2.h:$(GLSRC)gxhttile.h
+$(GLSRC)gscolor2.h:$(GLSRC)gscspace.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsgstate.h
$(GLSRC)gscolor2.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscolor2.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gscolor2.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscolor2.h:$(GLSRC)gxfixed.h
-$(GLSRC)gscolor2.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxhttile.h
$(GLSRC)gscolor2.h:$(GLSRC)gsparam.h
-$(GLSRC)gscolor2.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscolor2.h:$(GLSRC)memento.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsuid.h
$(GLSRC)gscolor2.h:$(GLSRC)gxsync.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxbitmap.h
$(GLSRC)gscolor2.h:$(GLSRC)scommon.h
-$(GLSRC)gscolor2.h:$(GLSRC)memento.h
$(GLSRC)gscolor2.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxarith.h
+$(GLSRC)gscolor2.h:$(GLSRC)gpsync.h
$(GLSRC)gscolor2.h:$(GLSRC)gsstype.h
$(GLSRC)gscolor2.h:$(GLSRC)gsmemory.h
-$(GLSRC)gscolor2.h:$(GLSRC)gpsync.h
$(GLSRC)gscolor2.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscolor2.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gscolor2.h:$(GLSRC)stdio_.h
$(GLSRC)gscolor2.h:$(GLSRC)gxcindex.h
-$(GLSRC)gscolor2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscolor2.h:$(GLSRC)stdio_.h
$(GLSRC)gscolor2.h:$(GLSRC)stdint_.h
$(GLSRC)gscolor2.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscolor2.h:$(GLSRC)std.h
$(GLSRC)gscolor2.h:$(GLSRC)gstypes.h
+$(GLSRC)gscolor2.h:$(GLSRC)std.h
$(GLSRC)gscolor2.h:$(GLSRC)stdpre.h
$(GLSRC)gscolor2.h:$(GLGEN)arch.h
+$(GLSRC)gscolor2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscsepr.h:$(GLSRC)gsfunc.h
$(GLSRC)gscsepr.h:$(GLSRC)gscspace.h
-$(GLSRC)gscsepr.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsgstate.h
$(GLSRC)gscsepr.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gscsepr.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsiparam.h
$(GLSRC)gscsepr.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gscsepr.h:$(GLSRC)gsrefct.h
$(GLSRC)gscsepr.h:$(GLSRC)gsparam.h
-$(GLSRC)gscsepr.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscsepr.h:$(GLSRC)memento.h
$(GLSRC)gscsepr.h:$(GLSRC)gsstruct.h
+$(GLSRC)gscsepr.h:$(GLSRC)gxbitmap.h
$(GLSRC)gscsepr.h:$(GLSRC)scommon.h
-$(GLSRC)gscsepr.h:$(GLSRC)memento.h
$(GLSRC)gscsepr.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsccolor.h
$(GLSRC)gscsepr.h:$(GLSRC)gsstype.h
$(GLSRC)gscsepr.h:$(GLSRC)gsmemory.h
$(GLSRC)gscsepr.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscsepr.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscsepr.h:$(GLSRC)stdio_.h
-$(GLSRC)gscsepr.h:$(GLSRC)gsgstate.h
$(GLSRC)gscsepr.h:$(GLSRC)stdint_.h
$(GLSRC)gscsepr.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscsepr.h:$(GLSRC)std.h
$(GLSRC)gscsepr.h:$(GLSRC)gstypes.h
+$(GLSRC)gscsepr.h:$(GLSRC)std.h
$(GLSRC)gscsepr.h:$(GLSRC)stdpre.h
$(GLSRC)gscsepr.h:$(GLGEN)arch.h
+$(GLSRC)gscsepr.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdcconv.h:$(GLSRC)gxfrac.h
$(GLSRC)gxdcconv.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdcconv.h:$(GLSRC)std.h
$(GLSRC)gxdcconv.h:$(GLSRC)stdpre.h
$(GLSRC)gxdcconv.h:$(GLGEN)arch.h
$(GLSRC)gxfmap.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxfmap.h:$(GLSRC)gxtmap.h
$(GLSRC)gxfmap.h:$(GLSRC)gsrefct.h
$(GLSRC)gxfmap.h:$(GLSRC)memento.h
$(GLSRC)gxfmap.h:$(GLSRC)gsstype.h
-$(GLSRC)gxfmap.h:$(GLSRC)gxtmap.h
$(GLSRC)gxfmap.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfmap.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfmap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfmap.h:$(GLSRC)stdio_.h
$(GLSRC)gxfmap.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxfmap.h:$(GLSRC)std.h
$(GLSRC)gxfmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfmap.h:$(GLSRC)std.h
$(GLSRC)gxfmap.h:$(GLSRC)stdpre.h
$(GLSRC)gxfmap.h:$(GLGEN)arch.h
+$(GLSRC)gxfmap.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxcmap.h:$(GLSRC)gscsel.h
$(GLSRC)gxcmap.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxcmap.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxcmap.h:$(GLSRC)gxfmap.h
$(GLSRC)gxcmap.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxtmap.h
$(GLSRC)gxcmap.h:$(GLSRC)gscms.h
-$(GLSRC)gxcmap.h:$(GLSRC)gscspace.h
$(GLSRC)gxcmap.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxcmap.h:$(GLSRC)gxarith.h
-$(GLSRC)gxcmap.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcmap.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcmap.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxcmap.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxcmap.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxcmap.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxhttile.h
$(GLSRC)gxcmap.h:$(GLSRC)gsparam.h
-$(GLSRC)gxcmap.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcmap.h:$(GLSRC)memento.h
$(GLSRC)gxcmap.h:$(GLSRC)gxsync.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxcmap.h:$(GLSRC)scommon.h
-$(GLSRC)gxcmap.h:$(GLSRC)memento.h
-$(GLSRC)gxcmap.h:$(GLSRC)gscsel.h
$(GLSRC)gxcmap.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxarith.h
+$(GLSRC)gxcmap.h:$(GLSRC)gpsync.h
$(GLSRC)gxcmap.h:$(GLSRC)gsstype.h
-$(GLSRC)gxcmap.h:$(GLSRC)gxtmap.h
$(GLSRC)gxcmap.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxcmap.h:$(GLSRC)gpsync.h
$(GLSRC)gxcmap.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxcmap.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxcmap.h:$(GLSRC)stdio_.h
$(GLSRC)gxcmap.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcmap.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcmap.h:$(GLSRC)stdio_.h
$(GLSRC)gxcmap.h:$(GLSRC)stdint_.h
$(GLSRC)gxcmap.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxcmap.h:$(GLSRC)std.h
$(GLSRC)gxcmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcmap.h:$(GLSRC)std.h
$(GLSRC)gxcmap.h:$(GLSRC)stdpre.h
$(GLSRC)gxcmap.h:$(GLGEN)arch.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxline.h
+$(GLSRC)gxcmap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxgstate.h:$(GLSRC)gstrans.h
+$(GLSRC)gxgstate.h:$(GLSRC)gdevp14.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxline.h
$(GLSRC)gxgstate.h:$(GLSRC)gsht1.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcomp.h
$(GLSRC)gxgstate.h:$(GLSRC)math_.h
-$(GLSRC)gxgstate.h:$(GLSRC)gdevp14.h
$(GLSRC)gxgstate.h:$(GLSRC)gxcolor2.h
$(GLSRC)gxgstate.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxgstate.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsequivc.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxblend.h
$(GLSRC)gxgstate.h:$(GLSRC)gxclipsr.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxcomp.h
$(GLSRC)gxgstate.h:$(GLSRC)gxdcolor.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxblend.h
$(GLSRC)gxgstate.h:$(GLSRC)gscolor2.h
-$(GLSRC)gxgstate.h:$(GLSRC)gscindex.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxgstate.h:$(GLSRC)gxdevice.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsht.h
$(GLSRC)gxgstate.h:$(GLSRC)gxcpath.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsht.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsequivc.h
$(GLSRC)gxgstate.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxgstate.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscindex.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcmap.h
$(GLSRC)gxgstate.h:$(GLSRC)gsptype1.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxtext.h
$(GLSRC)gxgstate.h:$(GLSRC)gscie.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxtext.h
$(GLSRC)gxgstate.h:$(GLSRC)gstext.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxstate.h
$(GLSRC)gxgstate.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxgstate.h:$(GLSRC)gstparam.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxstate.h
$(GLSRC)gxgstate.h:$(GLSRC)gspcolor.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsropt.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxfmap.h
$(GLSRC)gxgstate.h:$(GLSRC)gsmalloc.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcspace.h
$(GLSRC)gxgstate.h:$(GLSRC)gxctable.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsuid.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscsel.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsfont.h
$(GLSRC)gxgstate.h:$(GLSRC)gsimage.h
$(GLSRC)gxgstate.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxdda.h
$(GLSRC)gxgstate.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsfont.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsropt.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxdda.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxpath.h
$(GLSRC)gxgstate.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxftype.h
$(GLSRC)gxgstate.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxftype.h
$(GLSRC)gxgstate.h:$(GLSRC)gscms.h
-$(GLSRC)gxgstate.h:$(GLSRC)gscspace.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxpath.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxarith.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxstdio.h
-$(GLSRC)gxgstate.h:$(GLSRC)gspenum.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxhttile.h
$(GLSRC)gxgstate.h:$(GLSRC)gsrect.h
$(GLSRC)gxgstate.h:$(GLSRC)gslparam.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscpm.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscspace.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxstdio.h
$(GLSRC)gxgstate.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsiparam.h
$(GLSRC)gxgstate.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxgstate.h:$(GLSRC)gsio.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxgstate.h:$(GLSRC)gscpm.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsiparam.h
$(GLSRC)gxgstate.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscompt.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxgstate.h:$(GLSRC)gspenum.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxhttile.h
$(GLSRC)gxgstate.h:$(GLSRC)gsparam.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsrefct.h
$(GLSRC)gxgstate.h:$(GLSRC)gp.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxgstate.h:$(GLSRC)memento.h
+$(GLSRC)gxgstate.h:$(GLSRC)memory_.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsuid.h
$(GLSRC)gxgstate.h:$(GLSRC)gsstruct.h
$(GLSRC)gxgstate.h:$(GLSRC)gxsync.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxgstate.h:$(GLSRC)vmsmath.h
$(GLSRC)gxgstate.h:$(GLSRC)srdline.h
$(GLSRC)gxgstate.h:$(GLSRC)scommon.h
-$(GLSRC)gxgstate.h:$(GLSRC)memento.h
-$(GLSRC)gxgstate.h:$(GLSRC)vmsmath.h
-$(GLSRC)gxgstate.h:$(GLSRC)gscsel.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxgstate.h:$(GLSRC)gsfname.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsstype.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxarith.h
$(GLSRC)gxgstate.h:$(GLSRC)stat_.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsmemory.h
$(GLSRC)gxgstate.h:$(GLSRC)gpsync.h
-$(GLSRC)gxgstate.h:$(GLSRC)memory_.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsstype.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsmemory.h
$(GLSRC)gxgstate.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxgstate.h:$(GLSRC)gslibctx.h
$(GLSRC)gxgstate.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxgstate.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxgstate.h:$(GLSRC)stdio_.h
-$(GLSRC)gxgstate.h:$(GLSRC)gscompt.h
+$(GLSRC)gxgstate.h:$(GLSRC)gslibctx.h
$(GLSRC)gxgstate.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxgstate.h:$(GLSRC)stdio_.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsccode.h
$(GLSRC)gxgstate.h:$(GLSRC)stdint_.h
$(GLSRC)gxgstate.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsccode.h
-$(GLSRC)gxgstate.h:$(GLSRC)std.h
$(GLSRC)gxgstate.h:$(GLSRC)gstypes.h
+$(GLSRC)gxgstate.h:$(GLSRC)std.h
$(GLSRC)gxgstate.h:$(GLSRC)stdpre.h
$(GLSRC)gxgstate.h:$(GLGEN)arch.h
+$(GLSRC)gxgstate.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcolor2.h:$(GLSRC)gscolor2.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gscindex.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscindex.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxcmap.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsptype1.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxtext.h
$(GLSRC)gxcolor2.h:$(GLSRC)gscie.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxtext.h
$(GLSRC)gxcolor2.h:$(GLSRC)gstext.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxcolor2.h:$(GLSRC)gstparam.h
$(GLSRC)gxcolor2.h:$(GLSRC)gspcolor.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsropt.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxfmap.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxcspace.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxctable.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsuid.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscsel.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsfont.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsimage.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxdda.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsfont.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxftype.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsropt.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxdda.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxpath.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxftype.h
$(GLSRC)gxcolor2.h:$(GLSRC)gscms.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gscspace.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxpath.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxarith.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gspenum.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxhttile.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsrect.h
$(GLSRC)gxcolor2.h:$(GLSRC)gslparam.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscpm.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsiparam.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gscpm.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsiparam.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscompt.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gspenum.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxhttile.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsparam.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsrefct.h
$(GLSRC)gxcolor2.h:$(GLSRC)gp.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcolor2.h:$(GLSRC)memento.h
+$(GLSRC)gxcolor2.h:$(GLSRC)memory_.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsuid.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsstruct.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxsync.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxcolor2.h:$(GLSRC)srdline.h
$(GLSRC)gxcolor2.h:$(GLSRC)scommon.h
-$(GLSRC)gxcolor2.h:$(GLSRC)memento.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gscsel.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxarith.h
$(GLSRC)gxcolor2.h:$(GLSRC)stat_.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcolor2.h:$(GLSRC)gpsync.h
-$(GLSRC)gxcolor2.h:$(GLSRC)memory_.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcolor2.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gslibctx.h
$(GLSRC)gxcolor2.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxcolor2.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gscompt.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gslibctx.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcolor2.h:$(GLSRC)stdio_.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsccode.h
$(GLSRC)gxcolor2.h:$(GLSRC)stdint_.h
$(GLSRC)gxcolor2.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsccode.h
-$(GLSRC)gxcolor2.h:$(GLSRC)std.h
$(GLSRC)gxcolor2.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcolor2.h:$(GLSRC)std.h
$(GLSRC)gxcolor2.h:$(GLSRC)stdpre.h
$(GLSRC)gxcolor2.h:$(GLGEN)arch.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxclist.h:$(GLSRC)gxgstate.h
-$(GLSRC)gxclist.h:$(GLSRC)gxline.h
$(GLSRC)gxclist.h:$(GLSRC)gstrans.h
+$(GLSRC)gxclist.h:$(GLSRC)gdevp14.h
+$(GLSRC)gxclist.h:$(GLSRC)gxline.h
$(GLSRC)gxclist.h:$(GLSRC)gsht1.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcomp.h
$(GLSRC)gxclist.h:$(GLSRC)math_.h
-$(GLSRC)gxclist.h:$(GLSRC)gdevp14.h
$(GLSRC)gxclist.h:$(GLSRC)gxcolor2.h
$(GLSRC)gxclist.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gxclist.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxclist.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gxclist.h:$(GLSRC)gsequivc.h
-$(GLSRC)gxclist.h:$(GLSRC)gxblend.h
$(GLSRC)gxclist.h:$(GLSRC)gxclipsr.h
-$(GLSRC)gxclist.h:$(GLSRC)gxcomp.h
-$(GLSRC)gxclist.h:$(GLSRC)gxdcolor.h
-$(GLSRC)gxclist.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gxclist.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxclist.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gxclist.h:$(GLSRC)gxdcolor.h
$(GLSRC)gxclist.h:$(GLSRC)gxband.h
+$(GLSRC)gxclist.h:$(GLSRC)gxblend.h
$(GLSRC)gxclist.h:$(GLSRC)gscolor2.h
-$(GLSRC)gxclist.h:$(GLSRC)gscindex.h
+$(GLSRC)gxclist.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxclist.h:$(GLSRC)gxdevice.h
-$(GLSRC)gxclist.h:$(GLSRC)gsht.h
$(GLSRC)gxclist.h:$(GLSRC)gxcpath.h
-$(GLSRC)gxclist.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclist.h:$(GLSRC)gsht.h
+$(GLSRC)gxclist.h:$(GLSRC)gsequivc.h
$(GLSRC)gxclist.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclist.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxclist.h:$(GLSRC)gscindex.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcmap.h
$(GLSRC)gxclist.h:$(GLSRC)gsptype1.h
-$(GLSRC)gxclist.h:$(GLSRC)gxtext.h
$(GLSRC)gxclist.h:$(GLSRC)gscie.h
+$(GLSRC)gxclist.h:$(GLSRC)gxtext.h
$(GLSRC)gxclist.h:$(GLSRC)gstext.h
+$(GLSRC)gxclist.h:$(GLSRC)gxstate.h
$(GLSRC)gxclist.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclist.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclist.h:$(GLSRC)gxstate.h
$(GLSRC)gxclist.h:$(GLSRC)gspcolor.h
-$(GLSRC)gxclist.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxclist.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxclist.h:$(GLSRC)gsropt.h
-$(GLSRC)gxclist.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclist.h:$(GLSRC)gxfmap.h
$(GLSRC)gxclist.h:$(GLSRC)gsmalloc.h
-$(GLSRC)gxclist.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclist.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclist.h:$(GLSRC)gxctable.h
-$(GLSRC)gxclist.h:$(GLSRC)gsuid.h
-$(GLSRC)gxclist.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclist.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclist.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclist.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclist.h:$(GLSRC)gsfont.h
$(GLSRC)gxclist.h:$(GLSRC)gsimage.h
$(GLSRC)gxclist.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclist.h:$(GLSRC)gxdda.h
$(GLSRC)gxclist.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclist.h:$(GLSRC)gsfont.h
-$(GLSRC)gxclist.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxclist.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclist.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclist.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclist.h:$(GLSRC)gxpath.h
$(GLSRC)gxclist.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxclist.h:$(GLSRC)gxftype.h
$(GLSRC)gxclist.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclist.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclist.h:$(GLSRC)gxftype.h
$(GLSRC)gxclist.h:$(GLSRC)gscms.h
-$(GLSRC)gxclist.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclist.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclist.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclist.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxclist.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclist.h:$(GLSRC)gxstdio.h
-$(GLSRC)gxclist.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclist.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclist.h:$(GLSRC)gsrect.h
$(GLSRC)gxclist.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclist.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclist.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxclist.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclist.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclist.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclist.h:$(GLSRC)gxstdio.h
$(GLSRC)gxclist.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxclist.h:$(GLSRC)gxclio.h
-$(GLSRC)gxclist.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclist.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxclist.h:$(GLSRC)gsio.h
-$(GLSRC)gxclist.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclist.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxclist.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclist.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclist.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxclist.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclist.h:$(GLSRC)gxclio.h
+$(GLSRC)gxclist.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclist.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclist.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclist.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclist.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclist.h:$(GLSRC)gsrefct.h
$(GLSRC)gxclist.h:$(GLSRC)gp.h
-$(GLSRC)gxclist.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclist.h:$(GLSRC)memento.h
+$(GLSRC)gxclist.h:$(GLSRC)memory_.h
+$(GLSRC)gxclist.h:$(GLSRC)gsuid.h
$(GLSRC)gxclist.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclist.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclist.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclist.h:$(GLSRC)vmsmath.h
$(GLSRC)gxclist.h:$(GLSRC)srdline.h
$(GLSRC)gxclist.h:$(GLSRC)scommon.h
-$(GLSRC)gxclist.h:$(GLSRC)memento.h
-$(GLSRC)gxclist.h:$(GLSRC)vmsmath.h
-$(GLSRC)gxclist.h:$(GLSRC)gscsel.h
-$(GLSRC)gxclist.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxclist.h:$(GLSRC)gsfname.h
-$(GLSRC)gxclist.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclist.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxclist.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclist.h:$(GLSRC)gxarith.h
$(GLSRC)gxclist.h:$(GLSRC)stat_.h
-$(GLSRC)gxclist.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclist.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclist.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclist.h:$(GLSRC)memory_.h
+$(GLSRC)gxclist.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclist.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclist.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxclist.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclist.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxclist.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclist.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclist.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclist.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclist.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclist.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclist.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclist.h:$(GLSRC)gsccode.h
$(GLSRC)gxclist.h:$(GLSRC)stdint_.h
$(GLSRC)gxclist.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxclist.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclist.h:$(GLSRC)std.h
$(GLSRC)gxclist.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclist.h:$(GLSRC)std.h
$(GLSRC)gxclist.h:$(GLSRC)stdpre.h
$(GLSRC)gxclist.h:$(GLGEN)arch.h
+$(GLSRC)gxclist.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxcspace.h:$(GLSRC)gscsel.h
$(GLSRC)gxcspace.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxcspace.h:$(GLSRC)gxfrac.h
$(GLSRC)gxcspace.h:$(GLSRC)gscms.h
-$(GLSRC)gxcspace.h:$(GLSRC)gscspace.h
$(GLSRC)gxcspace.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxcspace.h:$(GLSRC)gxarith.h
-$(GLSRC)gxcspace.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcspace.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcspace.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxcspace.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxcspace.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxcspace.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcspace.h:$(GLSRC)gxhttile.h
$(GLSRC)gxcspace.h:$(GLSRC)gsparam.h
-$(GLSRC)gxcspace.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcspace.h:$(GLSRC)memento.h
$(GLSRC)gxcspace.h:$(GLSRC)gxsync.h
+$(GLSRC)gxcspace.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxcspace.h:$(GLSRC)scommon.h
-$(GLSRC)gxcspace.h:$(GLSRC)memento.h
-$(GLSRC)gxcspace.h:$(GLSRC)gscsel.h
$(GLSRC)gxcspace.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcspace.h:$(GLSRC)gxarith.h
+$(GLSRC)gxcspace.h:$(GLSRC)gpsync.h
$(GLSRC)gxcspace.h:$(GLSRC)gsstype.h
$(GLSRC)gxcspace.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxcspace.h:$(GLSRC)gpsync.h
$(GLSRC)gxcspace.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxcspace.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxcspace.h:$(GLSRC)stdio_.h
$(GLSRC)gxcspace.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcspace.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcspace.h:$(GLSRC)stdio_.h
$(GLSRC)gxcspace.h:$(GLSRC)stdint_.h
$(GLSRC)gxcspace.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxcspace.h:$(GLSRC)std.h
$(GLSRC)gxcspace.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcspace.h:$(GLSRC)std.h
$(GLSRC)gxcspace.h:$(GLSRC)stdpre.h
$(GLSRC)gxcspace.h:$(GLGEN)arch.h
+$(GLSRC)gxcspace.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxht.h:$(GLSRC)gxhttype.h
$(GLSRC)gxht.h:$(GLSRC)gsht1.h
$(GLSRC)gxht.h:$(GLSRC)gsht.h
+$(GLSRC)gxht.h:$(GLSRC)gxtmap.h
$(GLSRC)gxht.h:$(GLSRC)gscspace.h
+$(GLSRC)gxht.h:$(GLSRC)gsgstate.h
$(GLSRC)gxht.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxht.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxht.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxht.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxht.h:$(GLSRC)gsccolor.h
-$(GLSRC)gxht.h:$(GLSRC)scommon.h
$(GLSRC)gxht.h:$(GLSRC)memento.h
+$(GLSRC)gxht.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxht.h:$(GLSRC)scommon.h
$(GLSRC)gxht.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxht.h:$(GLSRC)gsccolor.h
$(GLSRC)gxht.h:$(GLSRC)gsstype.h
-$(GLSRC)gxht.h:$(GLSRC)gxtmap.h
$(GLSRC)gxht.h:$(GLSRC)gsmemory.h
$(GLSRC)gxht.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxht.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxht.h:$(GLSRC)stdio_.h
-$(GLSRC)gxht.h:$(GLSRC)gsgstate.h
$(GLSRC)gxht.h:$(GLSRC)stdint_.h
$(GLSRC)gxht.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxht.h:$(GLSRC)std.h
$(GLSRC)gxht.h:$(GLSRC)gstypes.h
+$(GLSRC)gxht.h:$(GLSRC)std.h
$(GLSRC)gxht.h:$(GLSRC)stdpre.h
$(GLSRC)gxht.h:$(GLGEN)arch.h
+$(GLSRC)gxht.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcie.h:$(GLSRC)gscie.h
$(GLSRC)gxcie.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxcie.h:$(GLSRC)gxcspace.h
$(GLSRC)gxcie.h:$(GLSRC)gxctable.h
+$(GLSRC)gxcie.h:$(GLSRC)gscsel.h
$(GLSRC)gxcie.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxcie.h:$(GLSRC)gxfrac.h
$(GLSRC)gxcie.h:$(GLSRC)gscms.h
-$(GLSRC)gxcie.h:$(GLSRC)gscspace.h
$(GLSRC)gxcie.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxcie.h:$(GLSRC)gxarith.h
-$(GLSRC)gxcie.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcie.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcie.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcie.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxcie.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxcie.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxcie.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxcie.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcie.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcie.h:$(GLSRC)gxhttile.h
$(GLSRC)gxcie.h:$(GLSRC)gsparam.h
-$(GLSRC)gxcie.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcie.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcie.h:$(GLSRC)memento.h
$(GLSRC)gxcie.h:$(GLSRC)gxsync.h
+$(GLSRC)gxcie.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxcie.h:$(GLSRC)scommon.h
-$(GLSRC)gxcie.h:$(GLSRC)memento.h
-$(GLSRC)gxcie.h:$(GLSRC)gscsel.h
$(GLSRC)gxcie.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxcie.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcie.h:$(GLSRC)gxarith.h
+$(GLSRC)gxcie.h:$(GLSRC)gpsync.h
$(GLSRC)gxcie.h:$(GLSRC)gsstype.h
$(GLSRC)gxcie.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxcie.h:$(GLSRC)gpsync.h
$(GLSRC)gxcie.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxcie.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxcie.h:$(GLSRC)stdio_.h
$(GLSRC)gxcie.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcie.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcie.h:$(GLSRC)stdio_.h
$(GLSRC)gxcie.h:$(GLSRC)stdint_.h
$(GLSRC)gxcie.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxcie.h:$(GLSRC)std.h
$(GLSRC)gxcie.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcie.h:$(GLSRC)std.h
$(GLSRC)gxcie.h:$(GLSRC)stdpre.h
$(GLSRC)gxcie.h:$(GLGEN)arch.h
+$(GLSRC)gxcie.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gxdda.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gxiclass.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsgstate.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gsparam.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxht_thresh.h:$(GLSRC)scommon.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsccolor.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gsstype.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gsmemory.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxht_thresh.h:$(GLSRC)stdio_.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)gsgstate.h
$(GLSRC)gxht_thresh.h:$(GLSRC)stdint_.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)std.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gstypes.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)std.h
$(GLSRC)gxht_thresh.h:$(GLSRC)stdpre.h
$(GLSRC)gxht_thresh.h:$(GLGEN)arch.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxblend.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxblend.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxdevice.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxcpath.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxcmap.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxtext.h
$(GLSRC)gxpcolor.h:$(GLSRC)gstext.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxpcolor.h:$(GLSRC)gstparam.h
$(GLSRC)gxpcolor.h:$(GLSRC)gspcolor.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsropt.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxfmap.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxcspace.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsuid.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gscsel.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsfont.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsimage.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxdda.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsfont.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsropt.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxdda.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxpath.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxftype.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxftype.h
$(GLSRC)gxpcolor.h:$(GLSRC)gscms.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gscspace.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxpath.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxarith.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxstdio.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gspenum.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxhttile.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsrect.h
$(GLSRC)gxpcolor.h:$(GLSRC)gslparam.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gscpm.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gscspace.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxstdio.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsiparam.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsio.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gscpm.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsiparam.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gscompt.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gspenum.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxhttile.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsparam.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsrefct.h
$(GLSRC)gxpcolor.h:$(GLSRC)gp.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxpcolor.h:$(GLSRC)memento.h
+$(GLSRC)gxpcolor.h:$(GLSRC)memory_.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsuid.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsstruct.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxsync.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxpcolor.h:$(GLSRC)srdline.h
$(GLSRC)gxpcolor.h:$(GLSRC)scommon.h
-$(GLSRC)gxpcolor.h:$(GLSRC)memento.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gscsel.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsfname.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsstype.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxarith.h
$(GLSRC)gxpcolor.h:$(GLSRC)stat_.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsmemory.h
$(GLSRC)gxpcolor.h:$(GLSRC)gpsync.h
-$(GLSRC)gxpcolor.h:$(GLSRC)memory_.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsstype.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsmemory.h
$(GLSRC)gxpcolor.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gslibctx.h
$(GLSRC)gxpcolor.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxpcolor.h:$(GLSRC)stdio_.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gscompt.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gslibctx.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxpcolor.h:$(GLSRC)stdio_.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsccode.h
$(GLSRC)gxpcolor.h:$(GLSRC)stdint_.h
$(GLSRC)gxpcolor.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsccode.h
-$(GLSRC)gxpcolor.h:$(GLSRC)std.h
$(GLSRC)gxpcolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gxpcolor.h:$(GLSRC)std.h
$(GLSRC)gxpcolor.h:$(GLSRC)stdpre.h
$(GLSRC)gxpcolor.h:$(GLGEN)arch.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscolor.h:$(GLSRC)gxtmap.h
$(GLSRC)gscolor.h:$(GLSRC)gsgstate.h
$(GLSRC)gscolor.h:$(GLSRC)stdpre.h
$(GLSRC)gsstate.h:$(GLSRC)gsovrc.h
$(GLSRC)gsstate.h:$(GLSRC)gscolor.h
-$(GLSRC)gsstate.h:$(GLSRC)gxcomp.h
$(GLSRC)gsstate.h:$(GLSRC)gsline.h
-$(GLSRC)gsstate.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gsstate.h:$(GLSRC)gxcomp.h
$(GLSRC)gsstate.h:$(GLSRC)gsht.h
-$(GLSRC)gsstate.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsstate.h:$(GLSRC)gscsel.h
+$(GLSRC)gsstate.h:$(GLSRC)gxtmap.h
$(GLSRC)gsstate.h:$(GLSRC)gslparam.h
-$(GLSRC)gsstate.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsstate.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsstate.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gsstate.h:$(GLSRC)gscpm.h
-$(GLSRC)gsstate.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsstate.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsstate.h:$(GLSRC)gscompt.h
+$(GLSRC)gsstate.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsstate.h:$(GLSRC)gsparam.h
-$(GLSRC)gsstate.h:$(GLSRC)scommon.h
+$(GLSRC)gsstate.h:$(GLSRC)gsrefct.h
$(GLSRC)gsstate.h:$(GLSRC)memento.h
-$(GLSRC)gsstate.h:$(GLSRC)gscsel.h
+$(GLSRC)gsstate.h:$(GLSRC)scommon.h
$(GLSRC)gsstate.h:$(GLSRC)gsstype.h
-$(GLSRC)gsstate.h:$(GLSRC)gxtmap.h
$(GLSRC)gsstate.h:$(GLSRC)gsmemory.h
$(GLSRC)gsstate.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsstate.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gsstate.h:$(GLSRC)stdio_.h
-$(GLSRC)gsstate.h:$(GLSRC)gscompt.h
$(GLSRC)gsstate.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsstate.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsstate.h:$(GLSRC)stdio_.h
$(GLSRC)gsstate.h:$(GLSRC)stdint_.h
$(GLSRC)gsstate.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsstate.h:$(GLSRC)std.h
$(GLSRC)gsstate.h:$(GLSRC)gstypes.h
+$(GLSRC)gsstate.h:$(GLSRC)std.h
$(GLSRC)gsstate.h:$(GLSRC)stdpre.h
$(GLSRC)gsstate.h:$(GLGEN)arch.h
+$(GLSRC)gsstate.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_create.h:$(GLSRC)gscie.h
$(GLSRC)gsicc_create.h:$(GLSRC)gxctable.h
$(GLSRC)gsicc_create.h:$(GLSRC)gxfrac.h
$(GLSRC)gsicc_create.h:$(GLSRC)gscspace.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_create.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsicc_create.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gsicc_create.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsicc_create.h:$(GLSRC)gxfixed.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsicc_create.h:$(GLSRC)gsrefct.h
-$(GLSRC)gsicc_create.h:$(GLSRC)gsccolor.h
-$(GLSRC)gsicc_create.h:$(GLSRC)scommon.h
$(GLSRC)gsicc_create.h:$(GLSRC)memento.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc_create.h:$(GLSRC)scommon.h
$(GLSRC)gsicc_create.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsccolor.h
$(GLSRC)gsicc_create.h:$(GLSRC)gsstype.h
$(GLSRC)gsicc_create.h:$(GLSRC)gsmemory.h
$(GLSRC)gsicc_create.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsicc_create.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_create.h:$(GLSRC)stdio_.h
-$(GLSRC)gsicc_create.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_create.h:$(GLSRC)stdint_.h
$(GLSRC)gsicc_create.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsicc_create.h:$(GLSRC)std.h
$(GLSRC)gsicc_create.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_create.h:$(GLSRC)std.h
$(GLSRC)gsicc_create.h:$(GLSRC)stdpre.h
$(GLSRC)gsicc_create.h:$(GLGEN)arch.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gximdecode.h:$(GLSRC)gximage.h
$(GLSRC)gximdecode.h:$(GLSRC)gxsample.h
$(GLSRC)gximdecode.h:$(GLSRC)sisparam.h
@@ -8175,1247 +8188,1247 @@ $(GLSRC)gximdecode.h:$(GLSRC)gdebug.h
$(GLSRC)gximdecode.h:$(GLSRC)gxcpath.h
$(GLSRC)gximdecode.h:$(GLSRC)gxiparam.h
$(GLSRC)gximdecode.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxcmap.h
$(GLSRC)gximdecode.h:$(GLSRC)gxtext.h
$(GLSRC)gximdecode.h:$(GLSRC)gstext.h
$(GLSRC)gximdecode.h:$(GLSRC)gsnamecl.h
$(GLSRC)gximdecode.h:$(GLSRC)gstparam.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxfcache.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxcspace.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsropt.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxfmap.h
$(GLSRC)gximdecode.h:$(GLSRC)gsfunc.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxrplane.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsuid.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxcspace.h
$(GLSRC)gximdecode.h:$(GLSRC)strimpl.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxrplane.h
+$(GLSRC)gximdecode.h:$(GLSRC)gscsel.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsfont.h
$(GLSRC)gximdecode.h:$(GLSRC)gsimage.h
$(GLSRC)gximdecode.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxdda.h
$(GLSRC)gximdecode.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsfont.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxfmap.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxbcache.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsropt.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxdda.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxpath.h
$(GLSRC)gximdecode.h:$(GLSRC)gxiclass.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxftype.h
$(GLSRC)gximdecode.h:$(GLSRC)gxfrac.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxtmap.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxftype.h
$(GLSRC)gximdecode.h:$(GLSRC)gscms.h
-$(GLSRC)gximdecode.h:$(GLSRC)gscspace.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxpath.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxbcache.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsdevice.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxarith.h
-$(GLSRC)gximdecode.h:$(GLSRC)gspenum.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxhttile.h
$(GLSRC)gximdecode.h:$(GLSRC)gsrect.h
$(GLSRC)gximdecode.h:$(GLSRC)gslparam.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsdevice.h
+$(GLSRC)gximdecode.h:$(GLSRC)gscpm.h
+$(GLSRC)gximdecode.h:$(GLSRC)gscspace.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsgstate.h
$(GLSRC)gximdecode.h:$(GLSRC)gsxfont.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsiparam.h
$(GLSRC)gximdecode.h:$(GLSRC)gsdsrc.h
$(GLSRC)gximdecode.h:$(GLSRC)gsio.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gximdecode.h:$(GLSRC)gscpm.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsiparam.h
$(GLSRC)gximdecode.h:$(GLSRC)gxfixed.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsrefct.h
+$(GLSRC)gximdecode.h:$(GLSRC)gscompt.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximdecode.h:$(GLSRC)gspenum.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxhttile.h
$(GLSRC)gximdecode.h:$(GLSRC)gsparam.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsrefct.h
$(GLSRC)gximdecode.h:$(GLSRC)gp.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximdecode.h:$(GLSRC)memento.h
+$(GLSRC)gximdecode.h:$(GLSRC)memory_.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsuid.h
$(GLSRC)gximdecode.h:$(GLSRC)gsstruct.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxsync.h
$(GLSRC)gximdecode.h:$(GLSRC)gdbflags.h
-$(GLSRC)gximdecode.h:$(GLSRC)srdline.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxsync.h
$(GLSRC)gximdecode.h:$(GLSRC)gserrors.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gximdecode.h:$(GLSRC)srdline.h
$(GLSRC)gximdecode.h:$(GLSRC)scommon.h
-$(GLSRC)gximdecode.h:$(GLSRC)memento.h
-$(GLSRC)gximdecode.h:$(GLSRC)gscsel.h
$(GLSRC)gximdecode.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsstype.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxarith.h
$(GLSRC)gximdecode.h:$(GLSRC)stat_.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxtmap.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsmemory.h
$(GLSRC)gximdecode.h:$(GLSRC)gpsync.h
-$(GLSRC)gximdecode.h:$(GLSRC)memory_.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsstype.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsmemory.h
$(GLSRC)gximdecode.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gximdecode.h:$(GLSRC)gslibctx.h
$(GLSRC)gximdecode.h:$(GLSRC)gscdefs.h
-$(GLSRC)gximdecode.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gximdecode.h:$(GLSRC)stdio_.h
-$(GLSRC)gximdecode.h:$(GLSRC)gscompt.h
+$(GLSRC)gximdecode.h:$(GLSRC)gslibctx.h
$(GLSRC)gximdecode.h:$(GLSRC)gxcindex.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximdecode.h:$(GLSRC)stdio_.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsccode.h
$(GLSRC)gximdecode.h:$(GLSRC)stdint_.h
$(GLSRC)gximdecode.h:$(GLSRC)gssprintf.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsccode.h
-$(GLSRC)gximdecode.h:$(GLSRC)std.h
$(GLSRC)gximdecode.h:$(GLSRC)gstypes.h
+$(GLSRC)gximdecode.h:$(GLSRC)std.h
$(GLSRC)gximdecode.h:$(GLSRC)stdpre.h
$(GLSRC)gximdecode.h:$(GLGEN)arch.h
+$(GLSRC)gximdecode.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gzacpath.h:$(GLSRC)gxcpath.h
$(GLSRC)gzacpath.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxcmap.h
$(GLSRC)gzacpath.h:$(GLSRC)gxtext.h
$(GLSRC)gzacpath.h:$(GLSRC)gstext.h
$(GLSRC)gzacpath.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzacpath.h:$(GLSRC)gstparam.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxfcache.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxcspace.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsropt.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxfmap.h
$(GLSRC)gzacpath.h:$(GLSRC)gsfunc.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxcspace.h
$(GLSRC)gzacpath.h:$(GLSRC)gxrplane.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsuid.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzacpath.h:$(GLSRC)gscsel.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsfont.h
$(GLSRC)gzacpath.h:$(GLSRC)gsimage.h
$(GLSRC)gzacpath.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxdda.h
$(GLSRC)gzacpath.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsfont.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxfmap.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxftype.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsropt.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxdda.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxpath.h
$(GLSRC)gzacpath.h:$(GLSRC)gxfrac.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxtmap.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxftype.h
$(GLSRC)gzacpath.h:$(GLSRC)gscms.h
-$(GLSRC)gzacpath.h:$(GLSRC)gscspace.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxpath.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxbcache.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsdevice.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxarith.h
-$(GLSRC)gzacpath.h:$(GLSRC)gspenum.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxhttile.h
$(GLSRC)gzacpath.h:$(GLSRC)gsrect.h
$(GLSRC)gzacpath.h:$(GLSRC)gslparam.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsdevice.h
+$(GLSRC)gzacpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gzacpath.h:$(GLSRC)gscspace.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsgstate.h
$(GLSRC)gzacpath.h:$(GLSRC)gsxfont.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsiparam.h
$(GLSRC)gzacpath.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gzacpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsiparam.h
$(GLSRC)gzacpath.h:$(GLSRC)gxfixed.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsrefct.h
+$(GLSRC)gzacpath.h:$(GLSRC)gscompt.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzacpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxhttile.h
$(GLSRC)gzacpath.h:$(GLSRC)gsparam.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsrefct.h
$(GLSRC)gzacpath.h:$(GLSRC)gp.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzacpath.h:$(GLSRC)memento.h
+$(GLSRC)gzacpath.h:$(GLSRC)memory_.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsuid.h
$(GLSRC)gzacpath.h:$(GLSRC)gsstruct.h
$(GLSRC)gzacpath.h:$(GLSRC)gxsync.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxbitmap.h
$(GLSRC)gzacpath.h:$(GLSRC)srdline.h
$(GLSRC)gzacpath.h:$(GLSRC)scommon.h
-$(GLSRC)gzacpath.h:$(GLSRC)memento.h
-$(GLSRC)gzacpath.h:$(GLSRC)gscsel.h
$(GLSRC)gzacpath.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxarith.h
$(GLSRC)gzacpath.h:$(GLSRC)stat_.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxtmap.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gzacpath.h:$(GLSRC)gpsync.h
-$(GLSRC)gzacpath.h:$(GLSRC)memory_.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gzacpath.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gzacpath.h:$(GLSRC)gslibctx.h
$(GLSRC)gzacpath.h:$(GLSRC)gscdefs.h
-$(GLSRC)gzacpath.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gzacpath.h:$(GLSRC)stdio_.h
-$(GLSRC)gzacpath.h:$(GLSRC)gscompt.h
+$(GLSRC)gzacpath.h:$(GLSRC)gslibctx.h
$(GLSRC)gzacpath.h:$(GLSRC)gxcindex.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzacpath.h:$(GLSRC)stdio_.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsccode.h
$(GLSRC)gzacpath.h:$(GLSRC)stdint_.h
$(GLSRC)gzacpath.h:$(GLSRC)gssprintf.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsccode.h
-$(GLSRC)gzacpath.h:$(GLSRC)std.h
$(GLSRC)gzacpath.h:$(GLSRC)gstypes.h
+$(GLSRC)gzacpath.h:$(GLSRC)std.h
$(GLSRC)gzacpath.h:$(GLSRC)stdpre.h
$(GLSRC)gzacpath.h:$(GLGEN)arch.h
+$(GLSRC)gzacpath.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gzcpath.h:$(GLSRC)gzpath.h
$(GLSRC)gzcpath.h:$(GLSRC)gxcpath.h
$(GLSRC)gzcpath.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxcmap.h
$(GLSRC)gzcpath.h:$(GLSRC)gxtext.h
$(GLSRC)gzcpath.h:$(GLSRC)gstext.h
$(GLSRC)gzcpath.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzcpath.h:$(GLSRC)gstparam.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxfcache.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxcspace.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsropt.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxfmap.h
$(GLSRC)gzcpath.h:$(GLSRC)gsfunc.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxcspace.h
$(GLSRC)gzcpath.h:$(GLSRC)gxrplane.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsuid.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzcpath.h:$(GLSRC)gscsel.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsfont.h
$(GLSRC)gzcpath.h:$(GLSRC)gsimage.h
$(GLSRC)gzcpath.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxdda.h
$(GLSRC)gzcpath.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsfont.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxfmap.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxftype.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsropt.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxdda.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxpath.h
$(GLSRC)gzcpath.h:$(GLSRC)gxfrac.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxtmap.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxftype.h
$(GLSRC)gzcpath.h:$(GLSRC)gscms.h
-$(GLSRC)gzcpath.h:$(GLSRC)gscspace.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxpath.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxbcache.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsdevice.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxarith.h
-$(GLSRC)gzcpath.h:$(GLSRC)gspenum.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxhttile.h
$(GLSRC)gzcpath.h:$(GLSRC)gsrect.h
$(GLSRC)gzcpath.h:$(GLSRC)gslparam.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsdevice.h
+$(GLSRC)gzcpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gzcpath.h:$(GLSRC)gscspace.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsgstate.h
$(GLSRC)gzcpath.h:$(GLSRC)gsxfont.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsiparam.h
$(GLSRC)gzcpath.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gzcpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsiparam.h
$(GLSRC)gzcpath.h:$(GLSRC)gxfixed.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsrefct.h
+$(GLSRC)gzcpath.h:$(GLSRC)gscompt.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzcpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxhttile.h
$(GLSRC)gzcpath.h:$(GLSRC)gsparam.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsrefct.h
$(GLSRC)gzcpath.h:$(GLSRC)gp.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzcpath.h:$(GLSRC)memento.h
+$(GLSRC)gzcpath.h:$(GLSRC)memory_.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsuid.h
$(GLSRC)gzcpath.h:$(GLSRC)gsstruct.h
$(GLSRC)gzcpath.h:$(GLSRC)gxsync.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxbitmap.h
$(GLSRC)gzcpath.h:$(GLSRC)srdline.h
$(GLSRC)gzcpath.h:$(GLSRC)scommon.h
-$(GLSRC)gzcpath.h:$(GLSRC)memento.h
-$(GLSRC)gzcpath.h:$(GLSRC)gscsel.h
$(GLSRC)gzcpath.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxarith.h
$(GLSRC)gzcpath.h:$(GLSRC)stat_.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxtmap.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gzcpath.h:$(GLSRC)gpsync.h
-$(GLSRC)gzcpath.h:$(GLSRC)memory_.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gzcpath.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gzcpath.h:$(GLSRC)gslibctx.h
$(GLSRC)gzcpath.h:$(GLSRC)gscdefs.h
-$(GLSRC)gzcpath.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gzcpath.h:$(GLSRC)stdio_.h
-$(GLSRC)gzcpath.h:$(GLSRC)gscompt.h
+$(GLSRC)gzcpath.h:$(GLSRC)gslibctx.h
$(GLSRC)gzcpath.h:$(GLSRC)gxcindex.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzcpath.h:$(GLSRC)stdio_.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsccode.h
$(GLSRC)gzcpath.h:$(GLSRC)stdint_.h
$(GLSRC)gzcpath.h:$(GLSRC)gssprintf.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsccode.h
-$(GLSRC)gzcpath.h:$(GLSRC)std.h
$(GLSRC)gzcpath.h:$(GLSRC)gstypes.h
+$(GLSRC)gzcpath.h:$(GLSRC)std.h
$(GLSRC)gzcpath.h:$(GLSRC)stdpre.h
$(GLSRC)gzcpath.h:$(GLGEN)arch.h
+$(GLSRC)gzcpath.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gzht.h:$(GLSRC)gxdht.h
$(GLSRC)gzht.h:$(GLSRC)gxht.h
$(GLSRC)gzht.h:$(GLSRC)gxhttype.h
$(GLSRC)gzht.h:$(GLSRC)gsht1.h
$(GLSRC)gzht.h:$(GLSRC)gsht.h
$(GLSRC)gzht.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gzht.h:$(GLSRC)gxcmap.h
$(GLSRC)gzht.h:$(GLSRC)gxtext.h
$(GLSRC)gzht.h:$(GLSRC)gstext.h
$(GLSRC)gzht.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzht.h:$(GLSRC)gstparam.h
-$(GLSRC)gzht.h:$(GLSRC)gxfcache.h
-$(GLSRC)gzht.h:$(GLSRC)gxcspace.h
-$(GLSRC)gzht.h:$(GLSRC)gsropt.h
+$(GLSRC)gzht.h:$(GLSRC)gxfmap.h
$(GLSRC)gzht.h:$(GLSRC)gsfunc.h
+$(GLSRC)gzht.h:$(GLSRC)gxcspace.h
$(GLSRC)gzht.h:$(GLSRC)gxrplane.h
-$(GLSRC)gzht.h:$(GLSRC)gsuid.h
-$(GLSRC)gzht.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzht.h:$(GLSRC)gscsel.h
+$(GLSRC)gzht.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzht.h:$(GLSRC)gsfont.h
$(GLSRC)gzht.h:$(GLSRC)gsimage.h
$(GLSRC)gzht.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gzht.h:$(GLSRC)gxdda.h
$(GLSRC)gzht.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gzht.h:$(GLSRC)gsfont.h
-$(GLSRC)gzht.h:$(GLSRC)gxfmap.h
-$(GLSRC)gzht.h:$(GLSRC)gxftype.h
+$(GLSRC)gzht.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzht.h:$(GLSRC)gsropt.h
+$(GLSRC)gzht.h:$(GLSRC)gxdda.h
+$(GLSRC)gzht.h:$(GLSRC)gxpath.h
$(GLSRC)gzht.h:$(GLSRC)gxfrac.h
+$(GLSRC)gzht.h:$(GLSRC)gxtmap.h
+$(GLSRC)gzht.h:$(GLSRC)gxftype.h
$(GLSRC)gzht.h:$(GLSRC)gscms.h
-$(GLSRC)gzht.h:$(GLSRC)gscspace.h
-$(GLSRC)gzht.h:$(GLSRC)gxpath.h
-$(GLSRC)gzht.h:$(GLSRC)gxbcache.h
-$(GLSRC)gzht.h:$(GLSRC)gsdevice.h
-$(GLSRC)gzht.h:$(GLSRC)gxarith.h
-$(GLSRC)gzht.h:$(GLSRC)gspenum.h
-$(GLSRC)gzht.h:$(GLSRC)gxhttile.h
$(GLSRC)gzht.h:$(GLSRC)gsrect.h
$(GLSRC)gzht.h:$(GLSRC)gslparam.h
+$(GLSRC)gzht.h:$(GLSRC)gsdevice.h
+$(GLSRC)gzht.h:$(GLSRC)gscpm.h
+$(GLSRC)gzht.h:$(GLSRC)gscspace.h
+$(GLSRC)gzht.h:$(GLSRC)gsgstate.h
$(GLSRC)gzht.h:$(GLSRC)gsxfont.h
-$(GLSRC)gzht.h:$(GLSRC)gsiparam.h
$(GLSRC)gzht.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gzht.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gzht.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gzht.h:$(GLSRC)gscpm.h
+$(GLSRC)gzht.h:$(GLSRC)gsiparam.h
$(GLSRC)gzht.h:$(GLSRC)gxfixed.h
-$(GLSRC)gzht.h:$(GLSRC)gsrefct.h
+$(GLSRC)gzht.h:$(GLSRC)gscompt.h
+$(GLSRC)gzht.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzht.h:$(GLSRC)gspenum.h
+$(GLSRC)gzht.h:$(GLSRC)gxhttile.h
$(GLSRC)gzht.h:$(GLSRC)gsparam.h
+$(GLSRC)gzht.h:$(GLSRC)gsrefct.h
$(GLSRC)gzht.h:$(GLSRC)gp.h
-$(GLSRC)gzht.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzht.h:$(GLSRC)memento.h
+$(GLSRC)gzht.h:$(GLSRC)memory_.h
+$(GLSRC)gzht.h:$(GLSRC)gsuid.h
$(GLSRC)gzht.h:$(GLSRC)gsstruct.h
$(GLSRC)gzht.h:$(GLSRC)gxsync.h
+$(GLSRC)gzht.h:$(GLSRC)gxbitmap.h
$(GLSRC)gzht.h:$(GLSRC)srdline.h
$(GLSRC)gzht.h:$(GLSRC)scommon.h
-$(GLSRC)gzht.h:$(GLSRC)memento.h
-$(GLSRC)gzht.h:$(GLSRC)gscsel.h
$(GLSRC)gzht.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gzht.h:$(GLSRC)gsstype.h
+$(GLSRC)gzht.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzht.h:$(GLSRC)gxarith.h
$(GLSRC)gzht.h:$(GLSRC)stat_.h
-$(GLSRC)gzht.h:$(GLSRC)gxtmap.h
-$(GLSRC)gzht.h:$(GLSRC)gsmemory.h
$(GLSRC)gzht.h:$(GLSRC)gpsync.h
-$(GLSRC)gzht.h:$(GLSRC)memory_.h
+$(GLSRC)gzht.h:$(GLSRC)gsstype.h
+$(GLSRC)gzht.h:$(GLSRC)gsmemory.h
$(GLSRC)gzht.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gzht.h:$(GLSRC)gslibctx.h
$(GLSRC)gzht.h:$(GLSRC)gscdefs.h
-$(GLSRC)gzht.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gzht.h:$(GLSRC)stdio_.h
-$(GLSRC)gzht.h:$(GLSRC)gscompt.h
+$(GLSRC)gzht.h:$(GLSRC)gslibctx.h
$(GLSRC)gzht.h:$(GLSRC)gxcindex.h
-$(GLSRC)gzht.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzht.h:$(GLSRC)stdio_.h
+$(GLSRC)gzht.h:$(GLSRC)gsccode.h
$(GLSRC)gzht.h:$(GLSRC)stdint_.h
$(GLSRC)gzht.h:$(GLSRC)gssprintf.h
-$(GLSRC)gzht.h:$(GLSRC)gsccode.h
-$(GLSRC)gzht.h:$(GLSRC)std.h
$(GLSRC)gzht.h:$(GLSRC)gstypes.h
+$(GLSRC)gzht.h:$(GLSRC)std.h
$(GLSRC)gzht.h:$(GLSRC)stdpre.h
$(GLSRC)gzht.h:$(GLGEN)arch.h
+$(GLSRC)gzht.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gzline.h:$(GLSRC)gxline.h
$(GLSRC)gzline.h:$(GLSRC)math_.h
$(GLSRC)gzline.h:$(GLSRC)gslparam.h
+$(GLSRC)gzline.h:$(GLSRC)gsgstate.h
$(GLSRC)gzline.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gzline.h:$(GLSRC)scommon.h
$(GLSRC)gzline.h:$(GLSRC)vmsmath.h
+$(GLSRC)gzline.h:$(GLSRC)scommon.h
$(GLSRC)gzline.h:$(GLSRC)gsstype.h
$(GLSRC)gzline.h:$(GLSRC)gsmemory.h
$(GLSRC)gzline.h:$(GLSRC)gslibctx.h
-$(GLSRC)gzline.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gzline.h:$(GLSRC)stdio_.h
-$(GLSRC)gzline.h:$(GLSRC)gsgstate.h
$(GLSRC)gzline.h:$(GLSRC)stdint_.h
$(GLSRC)gzline.h:$(GLSRC)gssprintf.h
-$(GLSRC)gzline.h:$(GLSRC)std.h
$(GLSRC)gzline.h:$(GLSRC)gstypes.h
+$(GLSRC)gzline.h:$(GLSRC)std.h
$(GLSRC)gzline.h:$(GLSRC)stdpre.h
$(GLSRC)gzline.h:$(GLGEN)arch.h
+$(GLSRC)gzline.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gzpath.h:$(GLSRC)gxpath.h
-$(GLSRC)gzpath.h:$(GLSRC)gspenum.h
$(GLSRC)gzpath.h:$(GLSRC)gsrect.h
$(GLSRC)gzpath.h:$(GLSRC)gslparam.h
-$(GLSRC)gzpath.h:$(GLSRC)gsmatrix.h
$(GLSRC)gzpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gzpath.h:$(GLSRC)gsgstate.h
$(GLSRC)gzpath.h:$(GLSRC)gxfixed.h
+$(GLSRC)gzpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzpath.h:$(GLSRC)gspenum.h
$(GLSRC)gzpath.h:$(GLSRC)gsrefct.h
-$(GLSRC)gzpath.h:$(GLSRC)scommon.h
$(GLSRC)gzpath.h:$(GLSRC)memento.h
+$(GLSRC)gzpath.h:$(GLSRC)scommon.h
$(GLSRC)gzpath.h:$(GLSRC)gsstype.h
$(GLSRC)gzpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gzpath.h:$(GLSRC)gslibctx.h
-$(GLSRC)gzpath.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gzpath.h:$(GLSRC)stdio_.h
-$(GLSRC)gzpath.h:$(GLSRC)gsgstate.h
$(GLSRC)gzpath.h:$(GLSRC)stdint_.h
$(GLSRC)gzpath.h:$(GLSRC)gssprintf.h
-$(GLSRC)gzpath.h:$(GLSRC)std.h
$(GLSRC)gzpath.h:$(GLSRC)gstypes.h
+$(GLSRC)gzpath.h:$(GLSRC)std.h
$(GLSRC)gzpath.h:$(GLSRC)stdpre.h
$(GLSRC)gzpath.h:$(GLGEN)arch.h
+$(GLSRC)gzpath.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gzstate.h:$(GLSRC)gsstate.h
$(GLSRC)gzstate.h:$(GLSRC)gsovrc.h
$(GLSRC)gzstate.h:$(GLSRC)gxgstate.h
-$(GLSRC)gzstate.h:$(GLSRC)gxline.h
$(GLSRC)gzstate.h:$(GLSRC)gstrans.h
+$(GLSRC)gzstate.h:$(GLSRC)gdevp14.h
+$(GLSRC)gzstate.h:$(GLSRC)gxline.h
$(GLSRC)gzstate.h:$(GLSRC)gscolor.h
$(GLSRC)gzstate.h:$(GLSRC)gsht1.h
+$(GLSRC)gzstate.h:$(GLSRC)gsline.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcomp.h
$(GLSRC)gzstate.h:$(GLSRC)math_.h
-$(GLSRC)gzstate.h:$(GLSRC)gdevp14.h
$(GLSRC)gzstate.h:$(GLSRC)gxcolor2.h
$(GLSRC)gzstate.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gzstate.h:$(GLSRC)gxdevmem.h
$(GLSRC)gzstate.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gzstate.h:$(GLSRC)gsequivc.h
-$(GLSRC)gzstate.h:$(GLSRC)gxblend.h
$(GLSRC)gzstate.h:$(GLSRC)gxclipsr.h
-$(GLSRC)gzstate.h:$(GLSRC)gxcomp.h
-$(GLSRC)gzstate.h:$(GLSRC)gsline.h
$(GLSRC)gzstate.h:$(GLSRC)gxdcolor.h
-$(GLSRC)gzstate.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gzstate.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gzstate.h:$(GLSRC)gxblend.h
$(GLSRC)gzstate.h:$(GLSRC)gscolor2.h
-$(GLSRC)gzstate.h:$(GLSRC)gscindex.h
+$(GLSRC)gzstate.h:$(GLSRC)gxmatrix.h
$(GLSRC)gzstate.h:$(GLSRC)gxdevice.h
-$(GLSRC)gzstate.h:$(GLSRC)gsht.h
$(GLSRC)gzstate.h:$(GLSRC)gxcpath.h
-$(GLSRC)gzstate.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gzstate.h:$(GLSRC)gsht.h
+$(GLSRC)gzstate.h:$(GLSRC)gsequivc.h
$(GLSRC)gzstate.h:$(GLSRC)gxdevcli.h
$(GLSRC)gzstate.h:$(GLSRC)gxpcache.h
+$(GLSRC)gzstate.h:$(GLSRC)gscindex.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcmap.h
$(GLSRC)gzstate.h:$(GLSRC)gsptype1.h
-$(GLSRC)gzstate.h:$(GLSRC)gxtext.h
$(GLSRC)gzstate.h:$(GLSRC)gscie.h
+$(GLSRC)gzstate.h:$(GLSRC)gxtext.h
$(GLSRC)gzstate.h:$(GLSRC)gstext.h
+$(GLSRC)gzstate.h:$(GLSRC)gxstate.h
$(GLSRC)gzstate.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzstate.h:$(GLSRC)gstparam.h
-$(GLSRC)gzstate.h:$(GLSRC)gxstate.h
$(GLSRC)gzstate.h:$(GLSRC)gspcolor.h
-$(GLSRC)gzstate.h:$(GLSRC)gxfcache.h
-$(GLSRC)gzstate.h:$(GLSRC)gxcspace.h
-$(GLSRC)gzstate.h:$(GLSRC)gsropt.h
-$(GLSRC)gzstate.h:$(GLSRC)gsfunc.h
+$(GLSRC)gzstate.h:$(GLSRC)gxfmap.h
$(GLSRC)gzstate.h:$(GLSRC)gsmalloc.h
-$(GLSRC)gzstate.h:$(GLSRC)gxrplane.h
+$(GLSRC)gzstate.h:$(GLSRC)gsfunc.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcspace.h
$(GLSRC)gzstate.h:$(GLSRC)gxctable.h
-$(GLSRC)gzstate.h:$(GLSRC)gsuid.h
-$(GLSRC)gzstate.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzstate.h:$(GLSRC)gxrplane.h
+$(GLSRC)gzstate.h:$(GLSRC)gscsel.h
+$(GLSRC)gzstate.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzstate.h:$(GLSRC)gsfont.h
$(GLSRC)gzstate.h:$(GLSRC)gsimage.h
$(GLSRC)gzstate.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gzstate.h:$(GLSRC)gxdda.h
$(GLSRC)gzstate.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gzstate.h:$(GLSRC)gsfont.h
-$(GLSRC)gzstate.h:$(GLSRC)gxfmap.h
+$(GLSRC)gzstate.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzstate.h:$(GLSRC)gsropt.h
+$(GLSRC)gzstate.h:$(GLSRC)gxdda.h
+$(GLSRC)gzstate.h:$(GLSRC)gxpath.h
$(GLSRC)gzstate.h:$(GLSRC)gxiclass.h
-$(GLSRC)gzstate.h:$(GLSRC)gxftype.h
$(GLSRC)gzstate.h:$(GLSRC)gxfrac.h
+$(GLSRC)gzstate.h:$(GLSRC)gxtmap.h
+$(GLSRC)gzstate.h:$(GLSRC)gxftype.h
$(GLSRC)gzstate.h:$(GLSRC)gscms.h
-$(GLSRC)gzstate.h:$(GLSRC)gscspace.h
-$(GLSRC)gzstate.h:$(GLSRC)gxpath.h
-$(GLSRC)gzstate.h:$(GLSRC)gxbcache.h
-$(GLSRC)gzstate.h:$(GLSRC)gsdevice.h
-$(GLSRC)gzstate.h:$(GLSRC)gxarith.h
-$(GLSRC)gzstate.h:$(GLSRC)gxstdio.h
-$(GLSRC)gzstate.h:$(GLSRC)gspenum.h
-$(GLSRC)gzstate.h:$(GLSRC)gxhttile.h
$(GLSRC)gzstate.h:$(GLSRC)gsrect.h
$(GLSRC)gzstate.h:$(GLSRC)gslparam.h
+$(GLSRC)gzstate.h:$(GLSRC)gsdevice.h
+$(GLSRC)gzstate.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gzstate.h:$(GLSRC)gscpm.h
+$(GLSRC)gzstate.h:$(GLSRC)gscspace.h
+$(GLSRC)gzstate.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzstate.h:$(GLSRC)gxstdio.h
$(GLSRC)gzstate.h:$(GLSRC)gsxfont.h
-$(GLSRC)gzstate.h:$(GLSRC)gsiparam.h
$(GLSRC)gzstate.h:$(GLSRC)gsdsrc.h
$(GLSRC)gzstate.h:$(GLSRC)gsio.h
-$(GLSRC)gzstate.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gzstate.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gzstate.h:$(GLSRC)gscpm.h
+$(GLSRC)gzstate.h:$(GLSRC)gsiparam.h
$(GLSRC)gzstate.h:$(GLSRC)gxfixed.h
-$(GLSRC)gzstate.h:$(GLSRC)gsrefct.h
+$(GLSRC)gzstate.h:$(GLSRC)gscompt.h
+$(GLSRC)gzstate.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzstate.h:$(GLSRC)gspenum.h
+$(GLSRC)gzstate.h:$(GLSRC)gxhttile.h
$(GLSRC)gzstate.h:$(GLSRC)gsparam.h
+$(GLSRC)gzstate.h:$(GLSRC)gsrefct.h
$(GLSRC)gzstate.h:$(GLSRC)gp.h
-$(GLSRC)gzstate.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzstate.h:$(GLSRC)memento.h
+$(GLSRC)gzstate.h:$(GLSRC)memory_.h
+$(GLSRC)gzstate.h:$(GLSRC)gsuid.h
$(GLSRC)gzstate.h:$(GLSRC)gsstruct.h
$(GLSRC)gzstate.h:$(GLSRC)gxsync.h
+$(GLSRC)gzstate.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gzstate.h:$(GLSRC)vmsmath.h
$(GLSRC)gzstate.h:$(GLSRC)srdline.h
$(GLSRC)gzstate.h:$(GLSRC)scommon.h
-$(GLSRC)gzstate.h:$(GLSRC)memento.h
-$(GLSRC)gzstate.h:$(GLSRC)vmsmath.h
-$(GLSRC)gzstate.h:$(GLSRC)gscsel.h
-$(GLSRC)gzstate.h:$(GLSRC)gsbitmap.h
$(GLSRC)gzstate.h:$(GLSRC)gsfname.h
-$(GLSRC)gzstate.h:$(GLSRC)gsstype.h
+$(GLSRC)gzstate.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gzstate.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzstate.h:$(GLSRC)gxarith.h
$(GLSRC)gzstate.h:$(GLSRC)stat_.h
-$(GLSRC)gzstate.h:$(GLSRC)gxtmap.h
-$(GLSRC)gzstate.h:$(GLSRC)gsmemory.h
$(GLSRC)gzstate.h:$(GLSRC)gpsync.h
-$(GLSRC)gzstate.h:$(GLSRC)memory_.h
+$(GLSRC)gzstate.h:$(GLSRC)gsstype.h
+$(GLSRC)gzstate.h:$(GLSRC)gsmemory.h
$(GLSRC)gzstate.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gzstate.h:$(GLSRC)gslibctx.h
$(GLSRC)gzstate.h:$(GLSRC)gscdefs.h
-$(GLSRC)gzstate.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gzstate.h:$(GLSRC)stdio_.h
-$(GLSRC)gzstate.h:$(GLSRC)gscompt.h
+$(GLSRC)gzstate.h:$(GLSRC)gslibctx.h
$(GLSRC)gzstate.h:$(GLSRC)gxcindex.h
-$(GLSRC)gzstate.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzstate.h:$(GLSRC)stdio_.h
+$(GLSRC)gzstate.h:$(GLSRC)gsccode.h
$(GLSRC)gzstate.h:$(GLSRC)stdint_.h
$(GLSRC)gzstate.h:$(GLSRC)gssprintf.h
-$(GLSRC)gzstate.h:$(GLSRC)gsccode.h
-$(GLSRC)gzstate.h:$(GLSRC)std.h
$(GLSRC)gzstate.h:$(GLSRC)gstypes.h
+$(GLSRC)gzstate.h:$(GLSRC)std.h
$(GLSRC)gzstate.h:$(GLSRC)stdpre.h
$(GLSRC)gzstate.h:$(GLGEN)arch.h
+$(GLSRC)gzstate.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxtext.h
$(GLSRC)gdevbbox.h:$(GLSRC)gstext.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevbbox.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsfont.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsimage.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxdda.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxpath.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxftype.h
$(GLSRC)gdevbbox.h:$(GLSRC)gscms.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsrect.h
$(GLSRC)gdevbbox.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsgstate.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevbbox.h:$(GLSRC)gp.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevbbox.h:$(GLSRC)memento.h
+$(GLSRC)gdevbbox.h:$(GLSRC)memory_.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsuid.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevbbox.h:$(GLSRC)srdline.h
$(GLSRC)gdevbbox.h:$(GLSRC)scommon.h
-$(GLSRC)gdevbbox.h:$(GLSRC)memento.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gscsel.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxarith.h
$(GLSRC)gdevbbox.h:$(GLSRC)stat_.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevbbox.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevbbox.h:$(GLSRC)memory_.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevbbox.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevbbox.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevbbox.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevbbox.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsccode.h
$(GLSRC)gdevbbox.h:$(GLSRC)stdint_.h
$(GLSRC)gdevbbox.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevbbox.h:$(GLSRC)std.h
$(GLSRC)gdevbbox.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevbbox.h:$(GLSRC)std.h
$(GLSRC)gdevbbox.h:$(GLSRC)stdpre.h
$(GLSRC)gdevbbox.h:$(GLGEN)arch.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevmem.h:$(GLSRC)gxbitops.h
$(GLSRC)gdevmem.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevmem.h:$(GLSRC)gxtext.h
$(GLSRC)gdevmem.h:$(GLSRC)gstext.h
$(GLSRC)gdevmem.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevmem.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevmem.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevmem.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmem.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsfont.h
$(GLSRC)gdevmem.h:$(GLSRC)gsimage.h
$(GLSRC)gdevmem.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxdda.h
$(GLSRC)gdevmem.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxpath.h
$(GLSRC)gdevmem.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxftype.h
$(GLSRC)gdevmem.h:$(GLSRC)gscms.h
-$(GLSRC)gdevmem.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevmem.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevmem.h:$(GLSRC)gsrect.h
$(GLSRC)gdevmem.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevmem.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevmem.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsgstate.h
$(GLSRC)gdevmem.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevmem.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevmem.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevmem.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevmem.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmem.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevmem.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevmem.h:$(GLSRC)gp.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevmem.h:$(GLSRC)memento.h
+$(GLSRC)gdevmem.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsuid.h
$(GLSRC)gdevmem.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevmem.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevmem.h:$(GLSRC)srdline.h
$(GLSRC)gdevmem.h:$(GLSRC)scommon.h
-$(GLSRC)gdevmem.h:$(GLSRC)memento.h
-$(GLSRC)gdevmem.h:$(GLSRC)gscsel.h
$(GLSRC)gdevmem.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxarith.h
$(GLSRC)gdevmem.h:$(GLSRC)stat_.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmem.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevmem.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmem.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevmem.h:$(GLSRC)gslibctx.h
-$(GLSRC)gdevmem.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevmem.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevmem.h:$(GLSRC)gsbitops.h
-$(GLSRC)gdevmem.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevmem.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevmem.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevmem.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevmem.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmem.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsccode.h
$(GLSRC)gdevmem.h:$(GLSRC)stdint_.h
$(GLSRC)gdevmem.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevmem.h:$(GLSRC)std.h
$(GLSRC)gdevmem.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevmem.h:$(GLSRC)std.h
$(GLSRC)gdevmem.h:$(GLSRC)stdpre.h
$(GLSRC)gdevmem.h:$(GLGEN)arch.h
+$(GLSRC)gdevmem.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevmpla.h:$(GLSRC)gxrplane.h
$(GLSRC)gdevmpla.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gsgstate.h
$(GLSRC)gdevmpla.h:$(GLSRC)gsmatrix.h
$(GLSRC)gdevmpla.h:$(GLSRC)gsparam.h
$(GLSRC)gdevmpla.h:$(GLSRC)scommon.h
$(GLSRC)gdevmpla.h:$(GLSRC)gsstype.h
$(GLSRC)gdevmpla.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmpla.h:$(GLSRC)gslibctx.h
-$(GLSRC)gdevmpla.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevmpla.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevmpla.h:$(GLSRC)gsgstate.h
$(GLSRC)gdevmpla.h:$(GLSRC)stdint_.h
$(GLSRC)gdevmpla.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevmpla.h:$(GLSRC)std.h
$(GLSRC)gdevmpla.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevmpla.h:$(GLSRC)std.h
$(GLSRC)gdevmpla.h:$(GLSRC)stdpre.h
$(GLSRC)gdevmpla.h:$(GLGEN)arch.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevmrop.h:$(GLSRC)gximage.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxsample.h
$(GLSRC)gdevmrop.h:$(GLSRC)sisparam.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxcpath.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxiparam.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxtext.h
$(GLSRC)gdevmrop.h:$(GLSRC)gstext.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevmrop.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevmrop.h:$(GLSRC)strimpl.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsfont.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsimage.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxdda.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxpath.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxiclass.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxftype.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxftype.h
$(GLSRC)gdevmrop.h:$(GLSRC)gscms.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsrect.h
$(GLSRC)gdevmrop.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsgstate.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevmrop.h:$(GLSRC)gp.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevmrop.h:$(GLSRC)memento.h
+$(GLSRC)gdevmrop.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsuid.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevmrop.h:$(GLSRC)srdline.h
$(GLSRC)gdevmrop.h:$(GLSRC)scommon.h
-$(GLSRC)gdevmrop.h:$(GLSRC)memento.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gscsel.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxarith.h
$(GLSRC)gdevmrop.h:$(GLSRC)stat_.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmrop.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevmrop.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmrop.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevmrop.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevmrop.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmrop.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsccode.h
$(GLSRC)gdevmrop.h:$(GLSRC)stdint_.h
$(GLSRC)gdevmrop.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevmrop.h:$(GLSRC)std.h
$(GLSRC)gdevmrop.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevmrop.h:$(GLSRC)std.h
$(GLSRC)gdevmrop.h:$(GLSRC)stdpre.h
$(GLSRC)gdevmrop.h:$(GLGEN)arch.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxdevmem.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxtext.h
$(GLSRC)gdevmrun.h:$(GLSRC)gstext.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevmrun.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsfont.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsimage.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxdda.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxpath.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxftype.h
$(GLSRC)gdevmrun.h:$(GLSRC)gscms.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsrect.h
$(GLSRC)gdevmrun.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsgstate.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevmrun.h:$(GLSRC)gp.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevmrun.h:$(GLSRC)memento.h
+$(GLSRC)gdevmrun.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsuid.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevmrun.h:$(GLSRC)srdline.h
$(GLSRC)gdevmrun.h:$(GLSRC)scommon.h
-$(GLSRC)gdevmrun.h:$(GLSRC)memento.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gscsel.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxarith.h
$(GLSRC)gdevmrun.h:$(GLSRC)stat_.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmrun.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevmrun.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmrun.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevmrun.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevmrun.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmrun.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsccode.h
$(GLSRC)gdevmrun.h:$(GLSRC)stdint_.h
$(GLSRC)gdevmrun.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevmrun.h:$(GLSRC)std.h
$(GLSRC)gdevmrun.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevmrun.h:$(GLSRC)std.h
$(GLSRC)gdevmrun.h:$(GLSRC)stdpre.h
$(GLSRC)gdevmrun.h:$(GLGEN)arch.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxtext.h
$(GLSRC)gdevplnx.h:$(GLSRC)gstext.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevplnx.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsfont.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsimage.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxdda.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxpath.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxftype.h
$(GLSRC)gdevplnx.h:$(GLSRC)gscms.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsrect.h
$(GLSRC)gdevplnx.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsgstate.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevplnx.h:$(GLSRC)gp.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevplnx.h:$(GLSRC)memento.h
+$(GLSRC)gdevplnx.h:$(GLSRC)memory_.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsuid.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevplnx.h:$(GLSRC)srdline.h
$(GLSRC)gdevplnx.h:$(GLSRC)scommon.h
-$(GLSRC)gdevplnx.h:$(GLSRC)memento.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gscsel.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxarith.h
$(GLSRC)gdevplnx.h:$(GLSRC)stat_.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevplnx.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevplnx.h:$(GLSRC)memory_.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevplnx.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevplnx.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevplnx.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevplnx.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsccode.h
$(GLSRC)gdevplnx.h:$(GLSRC)stdint_.h
$(GLSRC)gdevplnx.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevplnx.h:$(GLSRC)std.h
$(GLSRC)gdevplnx.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevplnx.h:$(GLSRC)std.h
$(GLSRC)gdevplnx.h:$(GLSRC)stdpre.h
$(GLSRC)gdevplnx.h:$(GLGEN)arch.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevepo.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevepo.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevepo.h:$(GLSRC)gxtext.h
$(GLSRC)gdevepo.h:$(GLSRC)gstext.h
$(GLSRC)gdevepo.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevepo.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsropt.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevepo.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevepo.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevepo.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsfont.h
$(GLSRC)gdevepo.h:$(GLSRC)gsimage.h
$(GLSRC)gdevepo.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxdda.h
$(GLSRC)gdevepo.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxpath.h
$(GLSRC)gdevepo.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxftype.h
$(GLSRC)gdevepo.h:$(GLSRC)gscms.h
-$(GLSRC)gdevepo.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxstdio.h
-$(GLSRC)gdevepo.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevepo.h:$(GLSRC)gsrect.h
$(GLSRC)gdevepo.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevepo.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevepo.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxstdio.h
$(GLSRC)gdevepo.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevepo.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevepo.h:$(GLSRC)gsio.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevepo.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevepo.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevepo.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevepo.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevepo.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevepo.h:$(GLSRC)gp.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevepo.h:$(GLSRC)memento.h
+$(GLSRC)gdevepo.h:$(GLSRC)memory_.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsuid.h
$(GLSRC)gdevepo.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevepo.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevepo.h:$(GLSRC)srdline.h
$(GLSRC)gdevepo.h:$(GLSRC)scommon.h
-$(GLSRC)gdevepo.h:$(GLSRC)memento.h
-$(GLSRC)gdevepo.h:$(GLSRC)gscsel.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevepo.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxarith.h
$(GLSRC)gdevepo.h:$(GLSRC)stat_.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevepo.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevepo.h:$(GLSRC)memory_.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevepo.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevepo.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevepo.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevepo.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevepo.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevepo.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevepo.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevepo.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevepo.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsccode.h
$(GLSRC)gdevepo.h:$(GLSRC)stdint_.h
$(GLSRC)gdevepo.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevepo.h:$(GLSRC)std.h
$(GLSRC)gdevepo.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevepo.h:$(GLSRC)std.h
$(GLSRC)gdevepo.h:$(GLSRC)stdpre.h
$(GLSRC)gdevepo.h:$(GLGEN)arch.h
+$(GLSRC)gdevepo.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sa85d.h:$(GLSRC)scommon.h
$(GLSRC)sa85d.h:$(GLSRC)gsstype.h
$(GLSRC)sa85d.h:$(GLSRC)gsmemory.h
$(GLSRC)sa85d.h:$(GLSRC)gslibctx.h
-$(GLSRC)sa85d.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sa85d.h:$(GLSRC)stdio_.h
$(GLSRC)sa85d.h:$(GLSRC)stdint_.h
$(GLSRC)sa85d.h:$(GLSRC)gssprintf.h
-$(GLSRC)sa85d.h:$(GLSRC)std.h
$(GLSRC)sa85d.h:$(GLSRC)gstypes.h
+$(GLSRC)sa85d.h:$(GLSRC)std.h
$(GLSRC)sa85d.h:$(GLSRC)stdpre.h
$(GLSRC)sa85d.h:$(GLGEN)arch.h
+$(GLSRC)sa85d.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sa85x.h:$(GLSRC)sa85d.h
$(GLSRC)sa85x.h:$(GLSRC)scommon.h
$(GLSRC)sa85x.h:$(GLSRC)gsstype.h
$(GLSRC)sa85x.h:$(GLSRC)gsmemory.h
$(GLSRC)sa85x.h:$(GLSRC)gslibctx.h
-$(GLSRC)sa85x.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sa85x.h:$(GLSRC)stdio_.h
$(GLSRC)sa85x.h:$(GLSRC)stdint_.h
$(GLSRC)sa85x.h:$(GLSRC)gssprintf.h
-$(GLSRC)sa85x.h:$(GLSRC)std.h
$(GLSRC)sa85x.h:$(GLSRC)gstypes.h
+$(GLSRC)sa85x.h:$(GLSRC)std.h
$(GLSRC)sa85x.h:$(GLSRC)stdpre.h
$(GLSRC)sa85x.h:$(GLGEN)arch.h
+$(GLSRC)sa85x.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sbcp.h:$(GLSRC)scommon.h
$(GLSRC)sbcp.h:$(GLSRC)gsstype.h
$(GLSRC)sbcp.h:$(GLSRC)gsmemory.h
$(GLSRC)sbcp.h:$(GLSRC)gslibctx.h
-$(GLSRC)sbcp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sbcp.h:$(GLSRC)stdio_.h
$(GLSRC)sbcp.h:$(GLSRC)stdint_.h
$(GLSRC)sbcp.h:$(GLSRC)gssprintf.h
-$(GLSRC)sbcp.h:$(GLSRC)std.h
$(GLSRC)sbcp.h:$(GLSRC)gstypes.h
+$(GLSRC)sbcp.h:$(GLSRC)std.h
$(GLSRC)sbcp.h:$(GLSRC)stdpre.h
$(GLSRC)sbcp.h:$(GLGEN)arch.h
+$(GLSRC)sbcp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sbtx.h:$(GLSRC)scommon.h
$(GLSRC)sbtx.h:$(GLSRC)gsstype.h
$(GLSRC)sbtx.h:$(GLSRC)gsmemory.h
$(GLSRC)sbtx.h:$(GLSRC)gslibctx.h
-$(GLSRC)sbtx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sbtx.h:$(GLSRC)stdio_.h
$(GLSRC)sbtx.h:$(GLSRC)stdint_.h
$(GLSRC)sbtx.h:$(GLSRC)gssprintf.h
-$(GLSRC)sbtx.h:$(GLSRC)std.h
$(GLSRC)sbtx.h:$(GLSRC)gstypes.h
+$(GLSRC)sbtx.h:$(GLSRC)std.h
$(GLSRC)sbtx.h:$(GLSRC)stdpre.h
$(GLSRC)sbtx.h:$(GLGEN)arch.h
+$(GLSRC)sbtx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)scanchar.h:$(GLSRC)scommon.h
$(GLSRC)scanchar.h:$(GLSRC)gsstype.h
$(GLSRC)scanchar.h:$(GLSRC)gsmemory.h
$(GLSRC)scanchar.h:$(GLSRC)gslibctx.h
-$(GLSRC)scanchar.h:$(GLSRC)gs_dll_call.h
$(GLSRC)scanchar.h:$(GLSRC)stdio_.h
$(GLSRC)scanchar.h:$(GLSRC)stdint_.h
$(GLSRC)scanchar.h:$(GLSRC)gssprintf.h
-$(GLSRC)scanchar.h:$(GLSRC)std.h
$(GLSRC)scanchar.h:$(GLSRC)gstypes.h
+$(GLSRC)scanchar.h:$(GLSRC)std.h
$(GLSRC)scanchar.h:$(GLSRC)stdpre.h
$(GLSRC)scanchar.h:$(GLGEN)arch.h
+$(GLSRC)scanchar.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sfilter.h:$(GLSRC)scommon.h
$(GLSRC)sfilter.h:$(GLSRC)gsstype.h
$(GLSRC)sfilter.h:$(GLSRC)gsmemory.h
$(GLSRC)sfilter.h:$(GLSRC)gslibctx.h
-$(GLSRC)sfilter.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sfilter.h:$(GLSRC)stdio_.h
$(GLSRC)sfilter.h:$(GLSRC)stdint_.h
$(GLSRC)sfilter.h:$(GLSRC)gssprintf.h
-$(GLSRC)sfilter.h:$(GLSRC)std.h
$(GLSRC)sfilter.h:$(GLSRC)gstypes.h
+$(GLSRC)sfilter.h:$(GLSRC)std.h
$(GLSRC)sfilter.h:$(GLSRC)stdpre.h
$(GLSRC)sfilter.h:$(GLGEN)arch.h
+$(GLSRC)sfilter.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sdct.h:$(GLSRC)setjmp_.h
$(GLSRC)sdct.h:$(GLSRC)strimpl.h
$(GLSRC)sdct.h:$(GLSRC)gscms.h
-$(GLSRC)sdct.h:$(GLSRC)gscspace.h
$(GLSRC)sdct.h:$(GLSRC)gsdevice.h
+$(GLSRC)sdct.h:$(GLSRC)gscspace.h
+$(GLSRC)sdct.h:$(GLSRC)gsgstate.h
$(GLSRC)sdct.h:$(GLSRC)gsiparam.h
-$(GLSRC)sdct.h:$(GLSRC)gxbitmap.h
$(GLSRC)sdct.h:$(GLSRC)gsmatrix.h
-$(GLSRC)sdct.h:$(GLSRC)gsrefct.h
$(GLSRC)sdct.h:$(GLSRC)gsparam.h
-$(GLSRC)sdct.h:$(GLSRC)gsccolor.h
+$(GLSRC)sdct.h:$(GLSRC)gsrefct.h
+$(GLSRC)sdct.h:$(GLSRC)memento.h
$(GLSRC)sdct.h:$(GLSRC)gsstruct.h
$(GLSRC)sdct.h:$(GLSRC)gxsync.h
+$(GLSRC)sdct.h:$(GLSRC)gxbitmap.h
$(GLSRC)sdct.h:$(GLSRC)scommon.h
-$(GLSRC)sdct.h:$(GLSRC)memento.h
$(GLSRC)sdct.h:$(GLSRC)gsbitmap.h
+$(GLSRC)sdct.h:$(GLSRC)gsccolor.h
+$(GLSRC)sdct.h:$(GLSRC)gpsync.h
$(GLSRC)sdct.h:$(GLSRC)gsstype.h
$(GLSRC)sdct.h:$(GLSRC)gsmemory.h
-$(GLSRC)sdct.h:$(GLSRC)gpsync.h
$(GLSRC)sdct.h:$(GLSRC)gslibctx.h
-$(GLSRC)sdct.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sdct.h:$(GLSRC)stdio_.h
-$(GLSRC)sdct.h:$(GLSRC)gsgstate.h
$(GLSRC)sdct.h:$(GLSRC)stdint_.h
$(GLSRC)sdct.h:$(GLSRC)gssprintf.h
-$(GLSRC)sdct.h:$(GLSRC)std.h
$(GLSRC)sdct.h:$(GLSRC)gstypes.h
+$(GLSRC)sdct.h:$(GLSRC)std.h
$(GLSRC)sdct.h:$(GLSRC)stdpre.h
$(GLSRC)sdct.h:$(GLGEN)arch.h
+$(GLSRC)sdct.h:$(GLSRC)gs_dll_call.h
$(GLSRC)shc.h:$(GLSRC)scommon.h
$(GLSRC)shc.h:$(GLSRC)gsstype.h
$(GLSRC)shc.h:$(GLSRC)gsmemory.h
$(GLSRC)shc.h:$(GLSRC)gslibctx.h
-$(GLSRC)shc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)shc.h:$(GLSRC)stdio_.h
-$(GLSRC)shc.h:$(GLSRC)gsbittab.h
$(GLSRC)shc.h:$(GLSRC)stdint_.h
$(GLSRC)shc.h:$(GLSRC)gssprintf.h
-$(GLSRC)shc.h:$(GLSRC)std.h
+$(GLSRC)shc.h:$(GLSRC)gsbittab.h
$(GLSRC)shc.h:$(GLSRC)gstypes.h
+$(GLSRC)shc.h:$(GLSRC)std.h
$(GLSRC)shc.h:$(GLSRC)stdpre.h
$(GLSRC)shc.h:$(GLGEN)arch.h
+$(GLSRC)shc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sisparam.h:$(GLSRC)gxdda.h
$(GLSRC)sisparam.h:$(GLSRC)gxfixed.h
$(GLSRC)sisparam.h:$(GLSRC)scommon.h
$(GLSRC)sisparam.h:$(GLSRC)gsstype.h
$(GLSRC)sisparam.h:$(GLSRC)gsmemory.h
$(GLSRC)sisparam.h:$(GLSRC)gslibctx.h
-$(GLSRC)sisparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sisparam.h:$(GLSRC)stdio_.h
$(GLSRC)sisparam.h:$(GLSRC)stdint_.h
$(GLSRC)sisparam.h:$(GLSRC)gssprintf.h
-$(GLSRC)sisparam.h:$(GLSRC)std.h
$(GLSRC)sisparam.h:$(GLSRC)gstypes.h
+$(GLSRC)sisparam.h:$(GLSRC)std.h
$(GLSRC)sisparam.h:$(GLSRC)stdpre.h
$(GLSRC)sisparam.h:$(GLGEN)arch.h
+$(GLSRC)sisparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sjpeg.h:$(GLSRC)sdct.h
$(GLSRC)sjpeg.h:$(GLSRC)setjmp_.h
$(GLSRC)sjpeg.h:$(GLSRC)strimpl.h
$(GLSRC)sjpeg.h:$(GLSRC)gscms.h
-$(GLSRC)sjpeg.h:$(GLSRC)gscspace.h
$(GLSRC)sjpeg.h:$(GLSRC)gsdevice.h
+$(GLSRC)sjpeg.h:$(GLSRC)gscspace.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsgstate.h
$(GLSRC)sjpeg.h:$(GLSRC)gsiparam.h
-$(GLSRC)sjpeg.h:$(GLSRC)gxbitmap.h
$(GLSRC)sjpeg.h:$(GLSRC)gsmatrix.h
-$(GLSRC)sjpeg.h:$(GLSRC)gsrefct.h
$(GLSRC)sjpeg.h:$(GLSRC)gsparam.h
-$(GLSRC)sjpeg.h:$(GLSRC)gsccolor.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsrefct.h
+$(GLSRC)sjpeg.h:$(GLSRC)memento.h
$(GLSRC)sjpeg.h:$(GLSRC)gsstruct.h
$(GLSRC)sjpeg.h:$(GLSRC)gxsync.h
+$(GLSRC)sjpeg.h:$(GLSRC)gxbitmap.h
$(GLSRC)sjpeg.h:$(GLSRC)scommon.h
-$(GLSRC)sjpeg.h:$(GLSRC)memento.h
$(GLSRC)sjpeg.h:$(GLSRC)gsbitmap.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsccolor.h
+$(GLSRC)sjpeg.h:$(GLSRC)gpsync.h
$(GLSRC)sjpeg.h:$(GLSRC)gsstype.h
$(GLSRC)sjpeg.h:$(GLSRC)gsmemory.h
-$(GLSRC)sjpeg.h:$(GLSRC)gpsync.h
$(GLSRC)sjpeg.h:$(GLSRC)gslibctx.h
-$(GLSRC)sjpeg.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sjpeg.h:$(GLSRC)stdio_.h
-$(GLSRC)sjpeg.h:$(GLSRC)gsgstate.h
$(GLSRC)sjpeg.h:$(GLSRC)stdint_.h
$(GLSRC)sjpeg.h:$(GLSRC)gssprintf.h
-$(GLSRC)sjpeg.h:$(GLSRC)std.h
$(GLSRC)sjpeg.h:$(GLSRC)gstypes.h
+$(GLSRC)sjpeg.h:$(GLSRC)std.h
$(GLSRC)sjpeg.h:$(GLSRC)stdpre.h
$(GLSRC)sjpeg.h:$(GLGEN)arch.h
+$(GLSRC)sjpeg.h:$(GLSRC)gs_dll_call.h
$(GLSRC)slzwx.h:$(GLSRC)scommon.h
$(GLSRC)slzwx.h:$(GLSRC)gsstype.h
$(GLSRC)slzwx.h:$(GLSRC)gsmemory.h
$(GLSRC)slzwx.h:$(GLSRC)gslibctx.h
-$(GLSRC)slzwx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)slzwx.h:$(GLSRC)stdio_.h
$(GLSRC)slzwx.h:$(GLSRC)stdint_.h
$(GLSRC)slzwx.h:$(GLSRC)gssprintf.h
-$(GLSRC)slzwx.h:$(GLSRC)std.h
$(GLSRC)slzwx.h:$(GLSRC)gstypes.h
+$(GLSRC)slzwx.h:$(GLSRC)std.h
$(GLSRC)slzwx.h:$(GLSRC)stdpre.h
$(GLSRC)slzwx.h:$(GLGEN)arch.h
+$(GLSRC)slzwx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)smd5.h:$(GLSRC)gsmd5.h
+$(GLSRC)smd5.h:$(GLSRC)memory_.h
$(GLSRC)smd5.h:$(GLSRC)scommon.h
$(GLSRC)smd5.h:$(GLSRC)gsstype.h
$(GLSRC)smd5.h:$(GLSRC)gsmemory.h
-$(GLSRC)smd5.h:$(GLSRC)memory_.h
$(GLSRC)smd5.h:$(GLSRC)gslibctx.h
-$(GLSRC)smd5.h:$(GLSRC)gs_dll_call.h
$(GLSRC)smd5.h:$(GLSRC)stdio_.h
$(GLSRC)smd5.h:$(GLSRC)stdint_.h
$(GLSRC)smd5.h:$(GLSRC)gssprintf.h
-$(GLSRC)smd5.h:$(GLSRC)std.h
$(GLSRC)smd5.h:$(GLSRC)gstypes.h
+$(GLSRC)smd5.h:$(GLSRC)std.h
$(GLSRC)smd5.h:$(GLSRC)stdpre.h
$(GLSRC)smd5.h:$(GLGEN)arch.h
+$(GLSRC)smd5.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sarc4.h:$(GLSRC)scommon.h
$(GLSRC)sarc4.h:$(GLSRC)gsstype.h
$(GLSRC)sarc4.h:$(GLSRC)gsmemory.h
$(GLSRC)sarc4.h:$(GLSRC)gslibctx.h
-$(GLSRC)sarc4.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sarc4.h:$(GLSRC)stdio_.h
$(GLSRC)sarc4.h:$(GLSRC)stdint_.h
$(GLSRC)sarc4.h:$(GLSRC)gssprintf.h
-$(GLSRC)sarc4.h:$(GLSRC)std.h
$(GLSRC)sarc4.h:$(GLSRC)gstypes.h
+$(GLSRC)sarc4.h:$(GLSRC)std.h
$(GLSRC)sarc4.h:$(GLSRC)stdpre.h
$(GLSRC)sarc4.h:$(GLGEN)arch.h
+$(GLSRC)sarc4.h:$(GLSRC)gs_dll_call.h
$(GLSRC)saes.h:$(GLSRC)aes.h
$(GLSRC)saes.h:$(GLSRC)scommon.h
$(GLSRC)saes.h:$(GLSRC)gsstype.h
$(GLSRC)saes.h:$(GLSRC)gsmemory.h
$(GLSRC)saes.h:$(GLSRC)gslibctx.h
-$(GLSRC)saes.h:$(GLSRC)gs_dll_call.h
$(GLSRC)saes.h:$(GLSRC)stdio_.h
$(GLSRC)saes.h:$(GLSRC)stdint_.h
$(GLSRC)saes.h:$(GLSRC)gssprintf.h
-$(GLSRC)saes.h:$(GLSRC)std.h
$(GLSRC)saes.h:$(GLSRC)gstypes.h
+$(GLSRC)saes.h:$(GLSRC)std.h
$(GLSRC)saes.h:$(GLSRC)stdpre.h
$(GLSRC)saes.h:$(GLGEN)arch.h
+$(GLSRC)saes.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sjbig2.h:$(GLSRC)scommon.h
$(GLSRC)sjbig2.h:$(GLSRC)gsstype.h
$(GLSRC)sjbig2.h:$(GLSRC)gsmemory.h
$(GLSRC)sjbig2.h:$(GLSRC)gslibctx.h
-$(GLSRC)sjbig2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sjbig2.h:$(GLSRC)stdio_.h
$(GLSRC)sjbig2.h:$(GLSRC)stdint_.h
$(GLSRC)sjbig2.h:$(GLSRC)gssprintf.h
-$(GLSRC)sjbig2.h:$(GLSRC)std.h
$(GLSRC)sjbig2.h:$(GLSRC)gstypes.h
+$(GLSRC)sjbig2.h:$(GLSRC)std.h
$(GLSRC)sjbig2.h:$(GLSRC)stdpre.h
$(GLSRC)sjbig2.h:$(GLGEN)arch.h
+$(GLSRC)sjbig2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spdiffx.h:$(GLSRC)scommon.h
$(GLSRC)spdiffx.h:$(GLSRC)gsstype.h
$(GLSRC)spdiffx.h:$(GLSRC)gsmemory.h
$(GLSRC)spdiffx.h:$(GLSRC)gslibctx.h
-$(GLSRC)spdiffx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spdiffx.h:$(GLSRC)stdio_.h
$(GLSRC)spdiffx.h:$(GLSRC)stdint_.h
$(GLSRC)spdiffx.h:$(GLSRC)gssprintf.h
-$(GLSRC)spdiffx.h:$(GLSRC)std.h
$(GLSRC)spdiffx.h:$(GLSRC)gstypes.h
+$(GLSRC)spdiffx.h:$(GLSRC)std.h
$(GLSRC)spdiffx.h:$(GLSRC)stdpre.h
$(GLSRC)spdiffx.h:$(GLGEN)arch.h
+$(GLSRC)spdiffx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spngpx.h:$(GLSRC)scommon.h
$(GLSRC)spngpx.h:$(GLSRC)gsstype.h
$(GLSRC)spngpx.h:$(GLSRC)gsmemory.h
$(GLSRC)spngpx.h:$(GLSRC)gslibctx.h
-$(GLSRC)spngpx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spngpx.h:$(GLSRC)stdio_.h
$(GLSRC)spngpx.h:$(GLSRC)stdint_.h
$(GLSRC)spngpx.h:$(GLSRC)gssprintf.h
-$(GLSRC)spngpx.h:$(GLSRC)std.h
$(GLSRC)spngpx.h:$(GLSRC)gstypes.h
+$(GLSRC)spngpx.h:$(GLSRC)std.h
$(GLSRC)spngpx.h:$(GLSRC)stdpre.h
$(GLSRC)spngpx.h:$(GLGEN)arch.h
+$(GLSRC)spngpx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spprint.h:$(GLSRC)scommon.h
$(GLSRC)spprint.h:$(GLSRC)gsstype.h
$(GLSRC)spprint.h:$(GLSRC)gsmemory.h
$(GLSRC)spprint.h:$(GLSRC)gslibctx.h
-$(GLSRC)spprint.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spprint.h:$(GLSRC)stdio_.h
$(GLSRC)spprint.h:$(GLSRC)stdint_.h
$(GLSRC)spprint.h:$(GLSRC)gssprintf.h
-$(GLSRC)spprint.h:$(GLSRC)std.h
$(GLSRC)spprint.h:$(GLSRC)gstypes.h
+$(GLSRC)spprint.h:$(GLSRC)std.h
$(GLSRC)spprint.h:$(GLSRC)stdpre.h
$(GLSRC)spprint.h:$(GLGEN)arch.h
+$(GLSRC)spprint.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spsdf.h:$(GLSRC)gsparam.h
$(GLSRC)spsdf.h:$(GLSRC)scommon.h
$(GLSRC)spsdf.h:$(GLSRC)gsstype.h
$(GLSRC)spsdf.h:$(GLSRC)gsmemory.h
$(GLSRC)spsdf.h:$(GLSRC)gslibctx.h
-$(GLSRC)spsdf.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spsdf.h:$(GLSRC)stdio_.h
$(GLSRC)spsdf.h:$(GLSRC)stdint_.h
$(GLSRC)spsdf.h:$(GLSRC)gssprintf.h
-$(GLSRC)spsdf.h:$(GLSRC)std.h
$(GLSRC)spsdf.h:$(GLSRC)gstypes.h
+$(GLSRC)spsdf.h:$(GLSRC)std.h
$(GLSRC)spsdf.h:$(GLSRC)stdpre.h
$(GLSRC)spsdf.h:$(GLGEN)arch.h
+$(GLSRC)spsdf.h:$(GLSRC)gs_dll_call.h
$(GLSRC)srlx.h:$(GLSRC)scommon.h
$(GLSRC)srlx.h:$(GLSRC)gsstype.h
$(GLSRC)srlx.h:$(GLSRC)gsmemory.h
$(GLSRC)srlx.h:$(GLSRC)gslibctx.h
-$(GLSRC)srlx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)srlx.h:$(GLSRC)stdio_.h
$(GLSRC)srlx.h:$(GLSRC)stdint_.h
$(GLSRC)srlx.h:$(GLSRC)gssprintf.h
-$(GLSRC)srlx.h:$(GLSRC)std.h
$(GLSRC)srlx.h:$(GLSRC)gstypes.h
+$(GLSRC)srlx.h:$(GLSRC)std.h
$(GLSRC)srlx.h:$(GLSRC)stdpre.h
$(GLSRC)srlx.h:$(GLGEN)arch.h
+$(GLSRC)srlx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spwgx.h:$(GLSRC)scommon.h
$(GLSRC)spwgx.h:$(GLSRC)gsstype.h
$(GLSRC)spwgx.h:$(GLSRC)gsmemory.h
$(GLSRC)spwgx.h:$(GLSRC)gslibctx.h
-$(GLSRC)spwgx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spwgx.h:$(GLSRC)stdio_.h
$(GLSRC)spwgx.h:$(GLSRC)stdint_.h
$(GLSRC)spwgx.h:$(GLSRC)gssprintf.h
-$(GLSRC)spwgx.h:$(GLSRC)std.h
$(GLSRC)spwgx.h:$(GLSRC)gstypes.h
+$(GLSRC)spwgx.h:$(GLSRC)std.h
$(GLSRC)spwgx.h:$(GLSRC)stdpre.h
$(GLSRC)spwgx.h:$(GLGEN)arch.h
+$(GLSRC)spwgx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sstring.h:$(GLSRC)scommon.h
$(GLSRC)sstring.h:$(GLSRC)gsstype.h
$(GLSRC)sstring.h:$(GLSRC)gsmemory.h
$(GLSRC)sstring.h:$(GLSRC)gslibctx.h
-$(GLSRC)sstring.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sstring.h:$(GLSRC)stdio_.h
$(GLSRC)sstring.h:$(GLSRC)stdint_.h
$(GLSRC)sstring.h:$(GLSRC)gssprintf.h
-$(GLSRC)sstring.h:$(GLSRC)std.h
$(GLSRC)sstring.h:$(GLSRC)gstypes.h
+$(GLSRC)sstring.h:$(GLSRC)std.h
$(GLSRC)sstring.h:$(GLSRC)stdpre.h
$(GLSRC)sstring.h:$(GLGEN)arch.h
+$(GLSRC)sstring.h:$(GLSRC)gs_dll_call.h
$(GLSRC)strimpl.h:$(GLSRC)gsstruct.h
$(GLSRC)strimpl.h:$(GLSRC)scommon.h
$(GLSRC)strimpl.h:$(GLSRC)gsstype.h
$(GLSRC)strimpl.h:$(GLSRC)gsmemory.h
$(GLSRC)strimpl.h:$(GLSRC)gslibctx.h
-$(GLSRC)strimpl.h:$(GLSRC)gs_dll_call.h
$(GLSRC)strimpl.h:$(GLSRC)stdio_.h
$(GLSRC)strimpl.h:$(GLSRC)stdint_.h
$(GLSRC)strimpl.h:$(GLSRC)gssprintf.h
-$(GLSRC)strimpl.h:$(GLSRC)std.h
$(GLSRC)strimpl.h:$(GLSRC)gstypes.h
+$(GLSRC)strimpl.h:$(GLSRC)std.h
$(GLSRC)strimpl.h:$(GLSRC)stdpre.h
$(GLSRC)strimpl.h:$(GLGEN)arch.h
+$(GLSRC)strimpl.h:$(GLSRC)gs_dll_call.h
$(GLSRC)szlibx.h:$(GLSRC)scommon.h
$(GLSRC)szlibx.h:$(GLSRC)gsstype.h
$(GLSRC)szlibx.h:$(GLSRC)gsmemory.h
$(GLSRC)szlibx.h:$(GLSRC)gslibctx.h
-$(GLSRC)szlibx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)szlibx.h:$(GLSRC)stdio_.h
$(GLSRC)szlibx.h:$(GLSRC)stdint_.h
$(GLSRC)szlibx.h:$(GLSRC)gssprintf.h
-$(GLSRC)szlibx.h:$(GLSRC)std.h
$(GLSRC)szlibx.h:$(GLSRC)gstypes.h
+$(GLSRC)szlibx.h:$(GLSRC)std.h
$(GLSRC)szlibx.h:$(GLSRC)stdpre.h
$(GLSRC)szlibx.h:$(GLGEN)arch.h
+$(GLSRC)szlibx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)scf.h:$(GLSRC)shc.h
$(GLSRC)scf.h:$(GLSRC)scommon.h
$(GLSRC)scf.h:$(GLSRC)gsstype.h
$(GLSRC)scf.h:$(GLSRC)gsmemory.h
$(GLSRC)scf.h:$(GLSRC)gslibctx.h
-$(GLSRC)scf.h:$(GLSRC)gs_dll_call.h
$(GLSRC)scf.h:$(GLSRC)stdio_.h
-$(GLSRC)scf.h:$(GLSRC)gsbittab.h
$(GLSRC)scf.h:$(GLSRC)stdint_.h
$(GLSRC)scf.h:$(GLSRC)gssprintf.h
-$(GLSRC)scf.h:$(GLSRC)std.h
+$(GLSRC)scf.h:$(GLSRC)gsbittab.h
$(GLSRC)scf.h:$(GLSRC)gstypes.h
+$(GLSRC)scf.h:$(GLSRC)std.h
$(GLSRC)scf.h:$(GLSRC)stdpre.h
$(GLSRC)scf.h:$(GLGEN)arch.h
+$(GLSRC)scf.h:$(GLSRC)gs_dll_call.h
$(GLSRC)scfx.h:$(GLSRC)shc.h
$(GLSRC)scfx.h:$(GLSRC)scommon.h
$(GLSRC)scfx.h:$(GLSRC)gsstype.h
$(GLSRC)scfx.h:$(GLSRC)gsmemory.h
$(GLSRC)scfx.h:$(GLSRC)gslibctx.h
-$(GLSRC)scfx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)scfx.h:$(GLSRC)stdio_.h
-$(GLSRC)scfx.h:$(GLSRC)gsbittab.h
$(GLSRC)scfx.h:$(GLSRC)stdint_.h
$(GLSRC)scfx.h:$(GLSRC)gssprintf.h
-$(GLSRC)scfx.h:$(GLSRC)std.h
+$(GLSRC)scfx.h:$(GLSRC)gsbittab.h
$(GLSRC)scfx.h:$(GLSRC)gstypes.h
+$(GLSRC)scfx.h:$(GLSRC)std.h
$(GLSRC)scfx.h:$(GLSRC)stdpre.h
$(GLSRC)scfx.h:$(GLGEN)arch.h
+$(GLSRC)scfx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)siinterp.h:$(GLSRC)sisparam.h
$(GLSRC)siinterp.h:$(GLSRC)gxdda.h
$(GLSRC)siinterp.h:$(GLSRC)gxfixed.h
@@ -9423,14 +9436,14 @@ $(GLSRC)siinterp.h:$(GLSRC)scommon.h
$(GLSRC)siinterp.h:$(GLSRC)gsstype.h
$(GLSRC)siinterp.h:$(GLSRC)gsmemory.h
$(GLSRC)siinterp.h:$(GLSRC)gslibctx.h
-$(GLSRC)siinterp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)siinterp.h:$(GLSRC)stdio_.h
$(GLSRC)siinterp.h:$(GLSRC)stdint_.h
$(GLSRC)siinterp.h:$(GLSRC)gssprintf.h
-$(GLSRC)siinterp.h:$(GLSRC)std.h
$(GLSRC)siinterp.h:$(GLSRC)gstypes.h
+$(GLSRC)siinterp.h:$(GLSRC)std.h
$(GLSRC)siinterp.h:$(GLSRC)stdpre.h
$(GLSRC)siinterp.h:$(GLGEN)arch.h
+$(GLSRC)siinterp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)siscale.h:$(GLSRC)sisparam.h
$(GLSRC)siscale.h:$(GLSRC)gxdda.h
$(GLSRC)siscale.h:$(GLSRC)gxfixed.h
@@ -9438,14 +9451,14 @@ $(GLSRC)siscale.h:$(GLSRC)scommon.h
$(GLSRC)siscale.h:$(GLSRC)gsstype.h
$(GLSRC)siscale.h:$(GLSRC)gsmemory.h
$(GLSRC)siscale.h:$(GLSRC)gslibctx.h
-$(GLSRC)siscale.h:$(GLSRC)gs_dll_call.h
$(GLSRC)siscale.h:$(GLSRC)stdio_.h
$(GLSRC)siscale.h:$(GLSRC)stdint_.h
$(GLSRC)siscale.h:$(GLSRC)gssprintf.h
-$(GLSRC)siscale.h:$(GLSRC)std.h
$(GLSRC)siscale.h:$(GLSRC)gstypes.h
+$(GLSRC)siscale.h:$(GLSRC)std.h
$(GLSRC)siscale.h:$(GLSRC)stdpre.h
$(GLSRC)siscale.h:$(GLGEN)arch.h
+$(GLSRC)siscale.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sidscale.h:$(GLSRC)sisparam.h
$(GLSRC)sidscale.h:$(GLSRC)gxdda.h
$(GLSRC)sidscale.h:$(GLSRC)gxfixed.h
@@ -9453,14 +9466,14 @@ $(GLSRC)sidscale.h:$(GLSRC)scommon.h
$(GLSRC)sidscale.h:$(GLSRC)gsstype.h
$(GLSRC)sidscale.h:$(GLSRC)gsmemory.h
$(GLSRC)sidscale.h:$(GLSRC)gslibctx.h
-$(GLSRC)sidscale.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sidscale.h:$(GLSRC)stdio_.h
$(GLSRC)sidscale.h:$(GLSRC)stdint_.h
$(GLSRC)sidscale.h:$(GLSRC)gssprintf.h
-$(GLSRC)sidscale.h:$(GLSRC)std.h
$(GLSRC)sidscale.h:$(GLSRC)gstypes.h
+$(GLSRC)sidscale.h:$(GLSRC)std.h
$(GLSRC)sidscale.h:$(GLSRC)stdpre.h
$(GLSRC)sidscale.h:$(GLGEN)arch.h
+$(GLSRC)sidscale.h:$(GLSRC)gs_dll_call.h
$(GLSRC)simscale.h:$(GLSRC)sisparam.h
$(GLSRC)simscale.h:$(GLSRC)gxdda.h
$(GLSRC)simscale.h:$(GLSRC)gxfixed.h
@@ -9468,119 +9481,119 @@ $(GLSRC)simscale.h:$(GLSRC)scommon.h
$(GLSRC)simscale.h:$(GLSRC)gsstype.h
$(GLSRC)simscale.h:$(GLSRC)gsmemory.h
$(GLSRC)simscale.h:$(GLSRC)gslibctx.h
-$(GLSRC)simscale.h:$(GLSRC)gs_dll_call.h
$(GLSRC)simscale.h:$(GLSRC)stdio_.h
$(GLSRC)simscale.h:$(GLSRC)stdint_.h
$(GLSRC)simscale.h:$(GLSRC)gssprintf.h
-$(GLSRC)simscale.h:$(GLSRC)std.h
$(GLSRC)simscale.h:$(GLSRC)gstypes.h
+$(GLSRC)simscale.h:$(GLSRC)std.h
$(GLSRC)simscale.h:$(GLSRC)stdpre.h
$(GLSRC)simscale.h:$(GLGEN)arch.h
+$(GLSRC)simscale.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gximage.h:$(GLSRC)gxsample.h
$(GLSRC)gximage.h:$(GLSRC)sisparam.h
$(GLSRC)gximage.h:$(GLSRC)gxcpath.h
$(GLSRC)gximage.h:$(GLSRC)gxiparam.h
$(GLSRC)gximage.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gximage.h:$(GLSRC)gxcmap.h
$(GLSRC)gximage.h:$(GLSRC)gxtext.h
$(GLSRC)gximage.h:$(GLSRC)gstext.h
$(GLSRC)gximage.h:$(GLSRC)gsnamecl.h
$(GLSRC)gximage.h:$(GLSRC)gstparam.h
-$(GLSRC)gximage.h:$(GLSRC)gxfcache.h
-$(GLSRC)gximage.h:$(GLSRC)gxcspace.h
-$(GLSRC)gximage.h:$(GLSRC)gsropt.h
+$(GLSRC)gximage.h:$(GLSRC)gxfmap.h
$(GLSRC)gximage.h:$(GLSRC)gsfunc.h
-$(GLSRC)gximage.h:$(GLSRC)gxrplane.h
-$(GLSRC)gximage.h:$(GLSRC)gsuid.h
-$(GLSRC)gximage.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximage.h:$(GLSRC)gxcspace.h
$(GLSRC)gximage.h:$(GLSRC)strimpl.h
+$(GLSRC)gximage.h:$(GLSRC)gxrplane.h
+$(GLSRC)gximage.h:$(GLSRC)gscsel.h
+$(GLSRC)gximage.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximage.h:$(GLSRC)gsfont.h
$(GLSRC)gximage.h:$(GLSRC)gsimage.h
$(GLSRC)gximage.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gximage.h:$(GLSRC)gxdda.h
$(GLSRC)gximage.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gximage.h:$(GLSRC)gsfont.h
-$(GLSRC)gximage.h:$(GLSRC)gxfmap.h
+$(GLSRC)gximage.h:$(GLSRC)gxbcache.h
+$(GLSRC)gximage.h:$(GLSRC)gsropt.h
+$(GLSRC)gximage.h:$(GLSRC)gxdda.h
+$(GLSRC)gximage.h:$(GLSRC)gxpath.h
$(GLSRC)gximage.h:$(GLSRC)gxiclass.h
-$(GLSRC)gximage.h:$(GLSRC)gxftype.h
$(GLSRC)gximage.h:$(GLSRC)gxfrac.h
+$(GLSRC)gximage.h:$(GLSRC)gxtmap.h
+$(GLSRC)gximage.h:$(GLSRC)gxftype.h
$(GLSRC)gximage.h:$(GLSRC)gscms.h
-$(GLSRC)gximage.h:$(GLSRC)gscspace.h
-$(GLSRC)gximage.h:$(GLSRC)gxpath.h
-$(GLSRC)gximage.h:$(GLSRC)gxbcache.h
-$(GLSRC)gximage.h:$(GLSRC)gsdevice.h
-$(GLSRC)gximage.h:$(GLSRC)gxarith.h
-$(GLSRC)gximage.h:$(GLSRC)gspenum.h
-$(GLSRC)gximage.h:$(GLSRC)gxhttile.h
$(GLSRC)gximage.h:$(GLSRC)gsrect.h
$(GLSRC)gximage.h:$(GLSRC)gslparam.h
+$(GLSRC)gximage.h:$(GLSRC)gsdevice.h
+$(GLSRC)gximage.h:$(GLSRC)gscpm.h
+$(GLSRC)gximage.h:$(GLSRC)gscspace.h
+$(GLSRC)gximage.h:$(GLSRC)gsgstate.h
$(GLSRC)gximage.h:$(GLSRC)gsxfont.h
-$(GLSRC)gximage.h:$(GLSRC)gsiparam.h
$(GLSRC)gximage.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gximage.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gximage.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gximage.h:$(GLSRC)gscpm.h
+$(GLSRC)gximage.h:$(GLSRC)gsiparam.h
$(GLSRC)gximage.h:$(GLSRC)gxfixed.h
-$(GLSRC)gximage.h:$(GLSRC)gsrefct.h
+$(GLSRC)gximage.h:$(GLSRC)gscompt.h
+$(GLSRC)gximage.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximage.h:$(GLSRC)gspenum.h
+$(GLSRC)gximage.h:$(GLSRC)gxhttile.h
$(GLSRC)gximage.h:$(GLSRC)gsparam.h
+$(GLSRC)gximage.h:$(GLSRC)gsrefct.h
$(GLSRC)gximage.h:$(GLSRC)gp.h
-$(GLSRC)gximage.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximage.h:$(GLSRC)memento.h
+$(GLSRC)gximage.h:$(GLSRC)memory_.h
+$(GLSRC)gximage.h:$(GLSRC)gsuid.h
$(GLSRC)gximage.h:$(GLSRC)gsstruct.h
$(GLSRC)gximage.h:$(GLSRC)gxsync.h
+$(GLSRC)gximage.h:$(GLSRC)gxbitmap.h
$(GLSRC)gximage.h:$(GLSRC)srdline.h
$(GLSRC)gximage.h:$(GLSRC)scommon.h
-$(GLSRC)gximage.h:$(GLSRC)memento.h
-$(GLSRC)gximage.h:$(GLSRC)gscsel.h
$(GLSRC)gximage.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gximage.h:$(GLSRC)gsstype.h
+$(GLSRC)gximage.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximage.h:$(GLSRC)gxarith.h
$(GLSRC)gximage.h:$(GLSRC)stat_.h
-$(GLSRC)gximage.h:$(GLSRC)gxtmap.h
-$(GLSRC)gximage.h:$(GLSRC)gsmemory.h
$(GLSRC)gximage.h:$(GLSRC)gpsync.h
-$(GLSRC)gximage.h:$(GLSRC)memory_.h
+$(GLSRC)gximage.h:$(GLSRC)gsstype.h
+$(GLSRC)gximage.h:$(GLSRC)gsmemory.h
$(GLSRC)gximage.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gximage.h:$(GLSRC)gslibctx.h
$(GLSRC)gximage.h:$(GLSRC)gscdefs.h
-$(GLSRC)gximage.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gximage.h:$(GLSRC)stdio_.h
-$(GLSRC)gximage.h:$(GLSRC)gscompt.h
+$(GLSRC)gximage.h:$(GLSRC)gslibctx.h
$(GLSRC)gximage.h:$(GLSRC)gxcindex.h
-$(GLSRC)gximage.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximage.h:$(GLSRC)stdio_.h
+$(GLSRC)gximage.h:$(GLSRC)gsccode.h
$(GLSRC)gximage.h:$(GLSRC)stdint_.h
$(GLSRC)gximage.h:$(GLSRC)gssprintf.h
-$(GLSRC)gximage.h:$(GLSRC)gsccode.h
-$(GLSRC)gximage.h:$(GLSRC)std.h
$(GLSRC)gximage.h:$(GLSRC)gstypes.h
+$(GLSRC)gximage.h:$(GLSRC)std.h
$(GLSRC)gximage.h:$(GLSRC)stdpre.h
$(GLSRC)gximage.h:$(GLGEN)arch.h
+$(GLSRC)gximage.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxhldevc.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxhldevc.h:$(GLSRC)gscms.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gscspace.h
$(GLSRC)gxhldevc.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gxarith.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gscspace.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsgstate.h
$(GLSRC)gxhldevc.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxhldevc.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gxhttile.h
$(GLSRC)gxhldevc.h:$(GLSRC)gsparam.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxhldevc.h:$(GLSRC)memento.h
$(GLSRC)gxhldevc.h:$(GLSRC)gxsync.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxhldevc.h:$(GLSRC)scommon.h
-$(GLSRC)gxhldevc.h:$(GLSRC)memento.h
$(GLSRC)gxhldevc.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gxarith.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gpsync.h
$(GLSRC)gxhldevc.h:$(GLSRC)gsstype.h
$(GLSRC)gxhldevc.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gpsync.h
$(GLSRC)gxhldevc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxhldevc.h:$(GLSRC)stdio_.h
$(GLSRC)gxhldevc.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxhldevc.h:$(GLSRC)stdio_.h
$(GLSRC)gxhldevc.h:$(GLSRC)stdint_.h
$(GLSRC)gxhldevc.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxhldevc.h:$(GLSRC)std.h
$(GLSRC)gxhldevc.h:$(GLSRC)gstypes.h
+$(GLSRC)gxhldevc.h:$(GLSRC)std.h
$(GLSRC)gxhldevc.h:$(GLSRC)stdpre.h
$(GLSRC)gxhldevc.h:$(GLGEN)arch.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsptype2.h:$(GLSRC)gsshade.h
$(GLSRC)gsptype2.h:$(GLSRC)gspath.h
$(GLSRC)gsptype2.h:$(GLSRC)gxmatrix.h
@@ -9588,477 +9601,477 @@ $(GLSRC)gsptype2.h:$(GLSRC)gscie.h
$(GLSRC)gsptype2.h:$(GLSRC)gspcolor.h
$(GLSRC)gsptype2.h:$(GLSRC)gsfunc.h
$(GLSRC)gsptype2.h:$(GLSRC)gxctable.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsuid.h
$(GLSRC)gsptype2.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxpath.h
$(GLSRC)gsptype2.h:$(GLSRC)gxfrac.h
$(GLSRC)gsptype2.h:$(GLSRC)gscms.h
-$(GLSRC)gsptype2.h:$(GLSRC)gscspace.h
-$(GLSRC)gsptype2.h:$(GLSRC)gxpath.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsdevice.h
-$(GLSRC)gsptype2.h:$(GLSRC)gxarith.h
-$(GLSRC)gsptype2.h:$(GLSRC)gspenum.h
-$(GLSRC)gsptype2.h:$(GLSRC)gxhttile.h
$(GLSRC)gsptype2.h:$(GLSRC)gsrect.h
$(GLSRC)gsptype2.h:$(GLSRC)gslparam.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gsptype2.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsdevice.h
$(GLSRC)gsptype2.h:$(GLSRC)gscpm.h
+$(GLSRC)gsptype2.h:$(GLSRC)gscspace.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsiparam.h
$(GLSRC)gsptype2.h:$(GLSRC)gxfixed.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsptype2.h:$(GLSRC)gspenum.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxhttile.h
$(GLSRC)gsptype2.h:$(GLSRC)gsparam.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsptype2.h:$(GLSRC)memento.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsuid.h
$(GLSRC)gsptype2.h:$(GLSRC)gsstruct.h
$(GLSRC)gsptype2.h:$(GLSRC)gxsync.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsptype2.h:$(GLSRC)scommon.h
-$(GLSRC)gsptype2.h:$(GLSRC)memento.h
$(GLSRC)gsptype2.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxarith.h
+$(GLSRC)gsptype2.h:$(GLSRC)gpsync.h
$(GLSRC)gsptype2.h:$(GLSRC)gsstype.h
$(GLSRC)gsptype2.h:$(GLSRC)gsmemory.h
-$(GLSRC)gsptype2.h:$(GLSRC)gpsync.h
$(GLSRC)gsptype2.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsptype2.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gsptype2.h:$(GLSRC)stdio_.h
$(GLSRC)gsptype2.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsptype2.h:$(GLSRC)stdio_.h
$(GLSRC)gsptype2.h:$(GLSRC)stdint_.h
$(GLSRC)gsptype2.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsptype2.h:$(GLSRC)std.h
$(GLSRC)gsptype2.h:$(GLSRC)gstypes.h
+$(GLSRC)gsptype2.h:$(GLSRC)std.h
$(GLSRC)gsptype2.h:$(GLSRC)stdpre.h
$(GLSRC)gsptype2.h:$(GLGEN)arch.h
+$(GLSRC)gsptype2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxtext.h
$(GLSRC)gdevddrw.h:$(GLSRC)gstext.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevddrw.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsfont.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsimage.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxdda.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxpath.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxftype.h
$(GLSRC)gdevddrw.h:$(GLSRC)gscms.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsrect.h
$(GLSRC)gdevddrw.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsgstate.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevddrw.h:$(GLSRC)gp.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevddrw.h:$(GLSRC)memento.h
+$(GLSRC)gdevddrw.h:$(GLSRC)memory_.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsuid.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevddrw.h:$(GLSRC)srdline.h
$(GLSRC)gdevddrw.h:$(GLSRC)scommon.h
-$(GLSRC)gdevddrw.h:$(GLSRC)memento.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gscsel.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxarith.h
$(GLSRC)gdevddrw.h:$(GLSRC)stat_.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevddrw.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevddrw.h:$(GLSRC)memory_.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevddrw.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevddrw.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevddrw.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevddrw.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsccode.h
$(GLSRC)gdevddrw.h:$(GLSRC)stdint_.h
$(GLSRC)gdevddrw.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevddrw.h:$(GLSRC)std.h
$(GLSRC)gdevddrw.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevddrw.h:$(GLSRC)std.h
$(GLSRC)gdevddrw.h:$(GLSRC)stdpre.h
$(GLSRC)gdevddrw.h:$(GLGEN)arch.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfill.h:$(GLSRC)gzpath.h
$(GLSRC)gxfill.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxfill.h:$(GLSRC)gxcmap.h
$(GLSRC)gxfill.h:$(GLSRC)gxtext.h
$(GLSRC)gxfill.h:$(GLSRC)gstext.h
$(GLSRC)gxfill.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxfill.h:$(GLSRC)gstparam.h
-$(GLSRC)gxfill.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxfill.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxfill.h:$(GLSRC)gsropt.h
+$(GLSRC)gxfill.h:$(GLSRC)gxfmap.h
$(GLSRC)gxfill.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxfill.h:$(GLSRC)gxcspace.h
$(GLSRC)gxfill.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxfill.h:$(GLSRC)gsuid.h
-$(GLSRC)gxfill.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxfill.h:$(GLSRC)gscsel.h
+$(GLSRC)gxfill.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxfill.h:$(GLSRC)gsfont.h
$(GLSRC)gxfill.h:$(GLSRC)gsimage.h
$(GLSRC)gxfill.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxfill.h:$(GLSRC)gxdda.h
$(GLSRC)gxfill.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxfill.h:$(GLSRC)gsfont.h
-$(GLSRC)gxfill.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxfill.h:$(GLSRC)gxftype.h
+$(GLSRC)gxfill.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxfill.h:$(GLSRC)gsropt.h
+$(GLSRC)gxfill.h:$(GLSRC)gxdda.h
+$(GLSRC)gxfill.h:$(GLSRC)gxpath.h
$(GLSRC)gxfill.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxfill.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxfill.h:$(GLSRC)gxftype.h
$(GLSRC)gxfill.h:$(GLSRC)gscms.h
-$(GLSRC)gxfill.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfill.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfill.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxfill.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxfill.h:$(GLSRC)gxarith.h
-$(GLSRC)gxfill.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfill.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfill.h:$(GLSRC)gsrect.h
$(GLSRC)gxfill.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfill.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfill.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfill.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfill.h:$(GLSRC)gsgstate.h
$(GLSRC)gxfill.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxfill.h:$(GLSRC)gsiparam.h
$(GLSRC)gxfill.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxfill.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxfill.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxfill.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfill.h:$(GLSRC)gsiparam.h
$(GLSRC)gxfill.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxfill.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfill.h:$(GLSRC)gscompt.h
+$(GLSRC)gxfill.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfill.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfill.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfill.h:$(GLSRC)gsparam.h
+$(GLSRC)gxfill.h:$(GLSRC)gsrefct.h
$(GLSRC)gxfill.h:$(GLSRC)gp.h
-$(GLSRC)gxfill.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfill.h:$(GLSRC)memento.h
+$(GLSRC)gxfill.h:$(GLSRC)memory_.h
+$(GLSRC)gxfill.h:$(GLSRC)gsuid.h
$(GLSRC)gxfill.h:$(GLSRC)gsstruct.h
$(GLSRC)gxfill.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfill.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxfill.h:$(GLSRC)srdline.h
$(GLSRC)gxfill.h:$(GLSRC)scommon.h
-$(GLSRC)gxfill.h:$(GLSRC)memento.h
-$(GLSRC)gxfill.h:$(GLSRC)gscsel.h
$(GLSRC)gxfill.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxfill.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfill.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfill.h:$(GLSRC)gxarith.h
$(GLSRC)gxfill.h:$(GLSRC)stat_.h
-$(GLSRC)gxfill.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxfill.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfill.h:$(GLSRC)gpsync.h
-$(GLSRC)gxfill.h:$(GLSRC)memory_.h
+$(GLSRC)gxfill.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfill.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfill.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxfill.h:$(GLSRC)gslibctx.h
$(GLSRC)gxfill.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxfill.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfill.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfill.h:$(GLSRC)gscompt.h
+$(GLSRC)gxfill.h:$(GLSRC)gslibctx.h
$(GLSRC)gxfill.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfill.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfill.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfill.h:$(GLSRC)gsccode.h
$(GLSRC)gxfill.h:$(GLSRC)stdint_.h
$(GLSRC)gxfill.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxfill.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfill.h:$(GLSRC)std.h
$(GLSRC)gxfill.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfill.h:$(GLSRC)std.h
$(GLSRC)gxfill.h:$(GLSRC)stdpre.h
$(GLSRC)gxfill.h:$(GLGEN)arch.h
+$(GLSRC)gxfill.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttfoutl.h:$(GLSRC)malloc_.h
$(GLSRC)ttfoutl.h:$(GLSRC)bobbin.h
$(GLSRC)ttfoutl.h:$(GLSRC)gxfcache.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gsuid.h
$(GLSRC)ttfoutl.h:$(GLSRC)gsfont.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gxftype.h
$(GLSRC)ttfoutl.h:$(GLSRC)gxbcache.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gxftype.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsgstate.h
$(GLSRC)ttfoutl.h:$(GLSRC)gsxfont.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gxbitmap.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttfoutl.h:$(GLSRC)gxfixed.h
-$(GLSRC)ttfoutl.h:$(GLSRC)scommon.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttfoutl.h:$(GLSRC)memento.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsuid.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttfoutl.h:$(GLSRC)scommon.h
$(GLSRC)ttfoutl.h:$(GLSRC)gsbitmap.h
$(GLSRC)ttfoutl.h:$(GLSRC)gsstype.h
$(GLSRC)ttfoutl.h:$(GLSRC)gsmemory.h
$(GLSRC)ttfoutl.h:$(GLSRC)gslibctx.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttfoutl.h:$(GLSRC)stdio_.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsccode.h
$(GLSRC)ttfoutl.h:$(GLSRC)stdint_.h
$(GLSRC)ttfoutl.h:$(GLSRC)gssprintf.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gsccode.h
-$(GLSRC)ttfoutl.h:$(GLSRC)std.h
$(GLSRC)ttfoutl.h:$(GLSRC)gstypes.h
+$(GLSRC)ttfoutl.h:$(GLSRC)std.h
$(GLSRC)ttfoutl.h:$(GLSRC)stdpre.h
$(GLSRC)ttfoutl.h:$(GLGEN)arch.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxttfb.h:$(GLSRC)ttfoutl.h
$(GLSRC)gxttfb.h:$(GLSRC)malloc_.h
-$(GLSRC)gxttfb.h:$(GLSRC)gxfont.h
$(GLSRC)gxttfb.h:$(GLSRC)bobbin.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxfont.h
$(GLSRC)gxttfb.h:$(GLSRC)gspath.h
-$(GLSRC)gxttfb.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxttfb.h:$(GLSRC)gsgdata.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxttfb.h:$(GLSRC)gxfapi.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsnotify.h
$(GLSRC)gxttfb.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxttfb.h:$(GLSRC)gstext.h
$(GLSRC)gxttfb.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsuid.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxttfb.h:$(GLSRC)gsfont.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxpath.h
$(GLSRC)gxttfb.h:$(GLSRC)gxftype.h
$(GLSRC)gxttfb.h:$(GLSRC)gscms.h
-$(GLSRC)gxttfb.h:$(GLSRC)gscspace.h
-$(GLSRC)gxttfb.h:$(GLSRC)gxpath.h
-$(GLSRC)gxttfb.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxttfb.h:$(GLSRC)gxarith.h
-$(GLSRC)gxttfb.h:$(GLSRC)gspenum.h
-$(GLSRC)gxttfb.h:$(GLSRC)gxhttile.h
$(GLSRC)gxttfb.h:$(GLSRC)gsrect.h
$(GLSRC)gxttfb.h:$(GLSRC)gslparam.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxttfb.h:$(GLSRC)gscpm.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxttfb.h:$(GLSRC)gscspace.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsnotify.h
$(GLSRC)gxttfb.h:$(GLSRC)gsxfont.h
$(GLSRC)gxttfb.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxttfb.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxttfb.h:$(GLSRC)gscpm.h
$(GLSRC)gxttfb.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxttfb.h:$(GLSRC)gspenum.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxhttile.h
$(GLSRC)gxttfb.h:$(GLSRC)gsparam.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxttfb.h:$(GLSRC)memento.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsuid.h
$(GLSRC)gxttfb.h:$(GLSRC)gxsync.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxttfb.h:$(GLSRC)scommon.h
-$(GLSRC)gxttfb.h:$(GLSRC)memento.h
$(GLSRC)gxttfb.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxarith.h
+$(GLSRC)gxttfb.h:$(GLSRC)gpsync.h
$(GLSRC)gxttfb.h:$(GLSRC)gsstype.h
$(GLSRC)gxttfb.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxttfb.h:$(GLSRC)gpsync.h
$(GLSRC)gxttfb.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxttfb.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxttfb.h:$(GLSRC)stdio_.h
$(GLSRC)gxttfb.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxttfb.h:$(GLSRC)stdio_.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsccode.h
$(GLSRC)gxttfb.h:$(GLSRC)stdint_.h
$(GLSRC)gxttfb.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsccode.h
-$(GLSRC)gxttfb.h:$(GLSRC)std.h
$(GLSRC)gxttfb.h:$(GLSRC)gstypes.h
+$(GLSRC)gxttfb.h:$(GLSRC)std.h
$(GLSRC)gxttfb.h:$(GLSRC)stdpre.h
$(GLSRC)gxttfb.h:$(GLGEN)arch.h
+$(GLSRC)gxttfb.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gzspotan.h:$(GLSRC)gzpath.h
$(GLSRC)gzspotan.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxcmap.h
$(GLSRC)gzspotan.h:$(GLSRC)gxtext.h
$(GLSRC)gzspotan.h:$(GLSRC)gstext.h
$(GLSRC)gzspotan.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzspotan.h:$(GLSRC)gstparam.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxfcache.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxcspace.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsropt.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxfmap.h
$(GLSRC)gzspotan.h:$(GLSRC)gsfunc.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxcspace.h
$(GLSRC)gzspotan.h:$(GLSRC)gxrplane.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsuid.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzspotan.h:$(GLSRC)gscsel.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsfont.h
$(GLSRC)gzspotan.h:$(GLSRC)gsimage.h
$(GLSRC)gzspotan.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxdda.h
$(GLSRC)gzspotan.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsfont.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxfmap.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxftype.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsropt.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxdda.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxpath.h
$(GLSRC)gzspotan.h:$(GLSRC)gxfrac.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxtmap.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxftype.h
$(GLSRC)gzspotan.h:$(GLSRC)gscms.h
-$(GLSRC)gzspotan.h:$(GLSRC)gscspace.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxpath.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxbcache.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsdevice.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxarith.h
-$(GLSRC)gzspotan.h:$(GLSRC)gspenum.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxhttile.h
$(GLSRC)gzspotan.h:$(GLSRC)gsrect.h
$(GLSRC)gzspotan.h:$(GLSRC)gslparam.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsdevice.h
+$(GLSRC)gzspotan.h:$(GLSRC)gscpm.h
+$(GLSRC)gzspotan.h:$(GLSRC)gscspace.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsgstate.h
$(GLSRC)gzspotan.h:$(GLSRC)gsxfont.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsiparam.h
$(GLSRC)gzspotan.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gzspotan.h:$(GLSRC)gscpm.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsiparam.h
$(GLSRC)gzspotan.h:$(GLSRC)gxfixed.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsrefct.h
+$(GLSRC)gzspotan.h:$(GLSRC)gscompt.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzspotan.h:$(GLSRC)gspenum.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxhttile.h
$(GLSRC)gzspotan.h:$(GLSRC)gsparam.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsrefct.h
$(GLSRC)gzspotan.h:$(GLSRC)gp.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzspotan.h:$(GLSRC)memento.h
+$(GLSRC)gzspotan.h:$(GLSRC)memory_.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsuid.h
$(GLSRC)gzspotan.h:$(GLSRC)gsstruct.h
$(GLSRC)gzspotan.h:$(GLSRC)gxsync.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxbitmap.h
$(GLSRC)gzspotan.h:$(GLSRC)srdline.h
$(GLSRC)gzspotan.h:$(GLSRC)scommon.h
-$(GLSRC)gzspotan.h:$(GLSRC)memento.h
-$(GLSRC)gzspotan.h:$(GLSRC)gscsel.h
$(GLSRC)gzspotan.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsstype.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxarith.h
$(GLSRC)gzspotan.h:$(GLSRC)stat_.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxtmap.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsmemory.h
$(GLSRC)gzspotan.h:$(GLSRC)gpsync.h
-$(GLSRC)gzspotan.h:$(GLSRC)memory_.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsstype.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsmemory.h
$(GLSRC)gzspotan.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gzspotan.h:$(GLSRC)gslibctx.h
$(GLSRC)gzspotan.h:$(GLSRC)gscdefs.h
-$(GLSRC)gzspotan.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gzspotan.h:$(GLSRC)stdio_.h
-$(GLSRC)gzspotan.h:$(GLSRC)gscompt.h
+$(GLSRC)gzspotan.h:$(GLSRC)gslibctx.h
$(GLSRC)gzspotan.h:$(GLSRC)gxcindex.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzspotan.h:$(GLSRC)stdio_.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsccode.h
$(GLSRC)gzspotan.h:$(GLSRC)stdint_.h
$(GLSRC)gzspotan.h:$(GLSRC)gssprintf.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsccode.h
-$(GLSRC)gzspotan.h:$(GLSRC)std.h
$(GLSRC)gzspotan.h:$(GLSRC)gstypes.h
+$(GLSRC)gzspotan.h:$(GLSRC)std.h
$(GLSRC)gzspotan.h:$(GLSRC)stdpre.h
$(GLSRC)gzspotan.h:$(GLGEN)arch.h
+$(GLSRC)gzspotan.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsequivc.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxcmap.h
$(GLSRC)gsequivc.h:$(GLSRC)gxtext.h
$(GLSRC)gsequivc.h:$(GLSRC)gstext.h
$(GLSRC)gsequivc.h:$(GLSRC)gsnamecl.h
$(GLSRC)gsequivc.h:$(GLSRC)gstparam.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxfcache.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxcspace.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsropt.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxfmap.h
$(GLSRC)gsequivc.h:$(GLSRC)gsfunc.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxcspace.h
$(GLSRC)gsequivc.h:$(GLSRC)gxrplane.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsuid.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxcmap.h
+$(GLSRC)gsequivc.h:$(GLSRC)gscsel.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxfcache.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsfont.h
$(GLSRC)gsequivc.h:$(GLSRC)gsimage.h
$(GLSRC)gsequivc.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxdda.h
$(GLSRC)gsequivc.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsfont.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxfmap.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxftype.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxbcache.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsropt.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxdda.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxpath.h
$(GLSRC)gsequivc.h:$(GLSRC)gxfrac.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxtmap.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxftype.h
$(GLSRC)gsequivc.h:$(GLSRC)gscms.h
-$(GLSRC)gsequivc.h:$(GLSRC)gscspace.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxpath.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxbcache.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsdevice.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxarith.h
-$(GLSRC)gsequivc.h:$(GLSRC)gspenum.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxhttile.h
$(GLSRC)gsequivc.h:$(GLSRC)gsrect.h
$(GLSRC)gsequivc.h:$(GLSRC)gslparam.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsequivc.h:$(GLSRC)gscpm.h
+$(GLSRC)gsequivc.h:$(GLSRC)gscspace.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsgstate.h
$(GLSRC)gsequivc.h:$(GLSRC)gsxfont.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsiparam.h
$(GLSRC)gsequivc.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsequivc.h:$(GLSRC)gscpm.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsiparam.h
$(GLSRC)gsequivc.h:$(GLSRC)gxfixed.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsequivc.h:$(GLSRC)gscompt.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsequivc.h:$(GLSRC)gspenum.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxhttile.h
$(GLSRC)gsequivc.h:$(GLSRC)gsparam.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsrefct.h
$(GLSRC)gsequivc.h:$(GLSRC)gp.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsequivc.h:$(GLSRC)memento.h
+$(GLSRC)gsequivc.h:$(GLSRC)memory_.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsuid.h
$(GLSRC)gsequivc.h:$(GLSRC)gsstruct.h
$(GLSRC)gsequivc.h:$(GLSRC)gxsync.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsequivc.h:$(GLSRC)srdline.h
$(GLSRC)gsequivc.h:$(GLSRC)scommon.h
-$(GLSRC)gsequivc.h:$(GLSRC)memento.h
-$(GLSRC)gsequivc.h:$(GLSRC)gscsel.h
$(GLSRC)gsequivc.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsstype.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxarith.h
$(GLSRC)gsequivc.h:$(GLSRC)stat_.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxtmap.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsmemory.h
$(GLSRC)gsequivc.h:$(GLSRC)gpsync.h
-$(GLSRC)gsequivc.h:$(GLSRC)memory_.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsstype.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsmemory.h
$(GLSRC)gsequivc.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gsequivc.h:$(GLSRC)gslibctx.h
$(GLSRC)gsequivc.h:$(GLSRC)gscdefs.h
-$(GLSRC)gsequivc.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gsequivc.h:$(GLSRC)stdio_.h
-$(GLSRC)gsequivc.h:$(GLSRC)gscompt.h
+$(GLSRC)gsequivc.h:$(GLSRC)gslibctx.h
$(GLSRC)gsequivc.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsequivc.h:$(GLSRC)stdio_.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsccode.h
$(GLSRC)gsequivc.h:$(GLSRC)stdint_.h
$(GLSRC)gsequivc.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsccode.h
-$(GLSRC)gsequivc.h:$(GLSRC)std.h
$(GLSRC)gsequivc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsequivc.h:$(GLSRC)std.h
$(GLSRC)gsequivc.h:$(GLSRC)stdpre.h
$(GLSRC)gsequivc.h:$(GLGEN)arch.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsequivc.h
+$(GLSRC)gsequivc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxblend.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsequivc.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxtext.h
$(GLSRC)gdevdevn.h:$(GLSRC)gstext.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevdevn.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsfont.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsimage.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxdda.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxpath.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxftype.h
$(GLSRC)gdevdevn.h:$(GLSRC)gscms.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsrect.h
$(GLSRC)gdevdevn.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsgstate.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevdevn.h:$(GLSRC)gp.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevdevn.h:$(GLSRC)memento.h
+$(GLSRC)gdevdevn.h:$(GLSRC)memory_.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsuid.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevdevn.h:$(GLSRC)srdline.h
$(GLSRC)gdevdevn.h:$(GLSRC)scommon.h
-$(GLSRC)gdevdevn.h:$(GLSRC)memento.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gscsel.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxarith.h
$(GLSRC)gdevdevn.h:$(GLSRC)stat_.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevdevn.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevdevn.h:$(GLSRC)memory_.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevdevn.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevdevn.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevdevn.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevdevn.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsccode.h
$(GLSRC)gdevdevn.h:$(GLSRC)stdint_.h
$(GLSRC)gdevdevn.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevdevn.h:$(GLSRC)std.h
$(GLSRC)gdevdevn.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevdevn.h:$(GLSRC)std.h
$(GLSRC)gdevdevn.h:$(GLSRC)stdpre.h
$(GLSRC)gdevdevn.h:$(GLGEN)arch.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gdevprn.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)string_.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstrtok.h
@@ -10066,1041 +10079,1041 @@ $(GLSRC)gdevdevnprn.h:$(GLSRC)gxclthrd.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclpage.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclist.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxgstate.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxline.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gstrans.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gdevp14.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxline.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsht1.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcomp.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)math_.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gdevp14.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcolor2.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevmem.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsequivc.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gx.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxblend.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclipsr.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcomp.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdcolor.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gdebug.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdcolor.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxband.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxblend.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gscolor2.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gscindex.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxmatrix.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevice.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsht.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcpath.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsht.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsequivc.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxpcache.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscindex.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsptype1.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxtext.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gscie.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxtext.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gstext.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxstate.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxstate.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gspcolor.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsropt.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsmalloc.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxctable.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsfont.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsimage.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdda.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxpath.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxiclass.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxftype.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxftype.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gscms.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxstdio.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsrect.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxstdio.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclio.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsio.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclio.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gp.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsccolor.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstruct.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)memento.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)memory_.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsutil.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsuid.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstrl.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gdbflags.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)srdline.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxsync.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gserrors.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)scommon.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)memento.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)vmsmath.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gscsel.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)srdline.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)scommon.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxarith.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)stat_.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)memory_.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsccode.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)stdint_.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)std.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)std.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)stdpre.h
$(GLSRC)gdevdevnprn.h:$(GLGEN)arch.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxtext.h
$(GLSRC)gdevoflt.h:$(GLSRC)gstext.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevoflt.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsropt.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsfont.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsimage.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxdda.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxpath.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxftype.h
$(GLSRC)gdevoflt.h:$(GLSRC)gscms.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxstdio.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsrect.h
$(GLSRC)gdevoflt.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxstdio.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsio.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevoflt.h:$(GLSRC)gp.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevoflt.h:$(GLSRC)memento.h
+$(GLSRC)gdevoflt.h:$(GLSRC)memory_.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsuid.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevoflt.h:$(GLSRC)srdline.h
$(GLSRC)gdevoflt.h:$(GLSRC)scommon.h
-$(GLSRC)gdevoflt.h:$(GLSRC)memento.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gscsel.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxarith.h
$(GLSRC)gdevoflt.h:$(GLSRC)stat_.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevoflt.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevoflt.h:$(GLSRC)memory_.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevoflt.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevoflt.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevoflt.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevoflt.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsccode.h
$(GLSRC)gdevoflt.h:$(GLSRC)stdint_.h
$(GLSRC)gdevoflt.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevoflt.h:$(GLSRC)std.h
$(GLSRC)gdevoflt.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevoflt.h:$(GLSRC)std.h
$(GLSRC)gdevoflt.h:$(GLSRC)stdpre.h
$(GLSRC)gdevoflt.h:$(GLGEN)arch.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfapi.h:$(GLSRC)gstext.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxfapi.h:$(GLSRC)gsfont.h
-$(GLSRC)gxfapi.h:$(GLSRC)gscms.h
-$(GLSRC)gxfapi.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxfapi.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxfapi.h:$(GLSRC)gxarith.h
-$(GLSRC)gxfapi.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfapi.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfapi.h:$(GLSRC)gscms.h
$(GLSRC)gxfapi.h:$(GLSRC)gsrect.h
$(GLSRC)gxfapi.h:$(GLSRC)gslparam.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfapi.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsdevice.h
$(GLSRC)gxfapi.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfapi.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsiparam.h
$(GLSRC)gxfapi.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfapi.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfapi.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfapi.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfapi.h:$(GLSRC)memento.h
$(GLSRC)gxfapi.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfapi.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxfapi.h:$(GLSRC)scommon.h
-$(GLSRC)gxfapi.h:$(GLSRC)memento.h
$(GLSRC)gxfapi.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfapi.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfapi.h:$(GLSRC)gpsync.h
$(GLSRC)gxfapi.h:$(GLSRC)gsstype.h
$(GLSRC)gxfapi.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxfapi.h:$(GLSRC)gpsync.h
$(GLSRC)gxfapi.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfapi.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfapi.h:$(GLSRC)stdio_.h
$(GLSRC)gxfapi.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfapi.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsccode.h
$(GLSRC)gxfapi.h:$(GLSRC)stdint_.h
$(GLSRC)gxfapi.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfapi.h:$(GLSRC)std.h
$(GLSRC)gxfapi.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfapi.h:$(GLSRC)std.h
$(GLSRC)gxfapi.h:$(GLSRC)stdpre.h
$(GLSRC)gxfapi.h:$(GLGEN)arch.h
+$(GLSRC)gxfapi.h:$(GLSRC)gs_dll_call.h
$(GLSRC)wrfont.h:$(GLSRC)std.h
$(GLSRC)wrfont.h:$(GLSRC)stdpre.h
$(GLSRC)wrfont.h:$(GLGEN)arch.h
$(GLSRC)write_t1.h:$(GLSRC)gxfapi.h
$(GLSRC)write_t1.h:$(GLSRC)gstext.h
-$(GLSRC)write_t1.h:$(GLSRC)gsdcolor.h
$(GLSRC)write_t1.h:$(GLSRC)gsfont.h
-$(GLSRC)write_t1.h:$(GLSRC)gscms.h
-$(GLSRC)write_t1.h:$(GLSRC)gscspace.h
+$(GLSRC)write_t1.h:$(GLSRC)gsdcolor.h
$(GLSRC)write_t1.h:$(GLSRC)gxpath.h
-$(GLSRC)write_t1.h:$(GLSRC)gsdevice.h
-$(GLSRC)write_t1.h:$(GLSRC)gxarith.h
-$(GLSRC)write_t1.h:$(GLSRC)gspenum.h
-$(GLSRC)write_t1.h:$(GLSRC)gxhttile.h
+$(GLSRC)write_t1.h:$(GLSRC)gscms.h
$(GLSRC)write_t1.h:$(GLSRC)gsrect.h
$(GLSRC)write_t1.h:$(GLSRC)gslparam.h
-$(GLSRC)write_t1.h:$(GLSRC)gsiparam.h
-$(GLSRC)write_t1.h:$(GLSRC)gxbitmap.h
-$(GLSRC)write_t1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)write_t1.h:$(GLSRC)gsdevice.h
$(GLSRC)write_t1.h:$(GLSRC)gscpm.h
+$(GLSRC)write_t1.h:$(GLSRC)gscspace.h
+$(GLSRC)write_t1.h:$(GLSRC)gsgstate.h
+$(GLSRC)write_t1.h:$(GLSRC)gsiparam.h
$(GLSRC)write_t1.h:$(GLSRC)gxfixed.h
-$(GLSRC)write_t1.h:$(GLSRC)gsrefct.h
+$(GLSRC)write_t1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)write_t1.h:$(GLSRC)gspenum.h
+$(GLSRC)write_t1.h:$(GLSRC)gxhttile.h
$(GLSRC)write_t1.h:$(GLSRC)gsparam.h
-$(GLSRC)write_t1.h:$(GLSRC)gsccolor.h
+$(GLSRC)write_t1.h:$(GLSRC)gsrefct.h
+$(GLSRC)write_t1.h:$(GLSRC)memento.h
$(GLSRC)write_t1.h:$(GLSRC)gxsync.h
+$(GLSRC)write_t1.h:$(GLSRC)gxbitmap.h
$(GLSRC)write_t1.h:$(GLSRC)scommon.h
-$(GLSRC)write_t1.h:$(GLSRC)memento.h
$(GLSRC)write_t1.h:$(GLSRC)gsbitmap.h
+$(GLSRC)write_t1.h:$(GLSRC)gsccolor.h
+$(GLSRC)write_t1.h:$(GLSRC)gxarith.h
+$(GLSRC)write_t1.h:$(GLSRC)gpsync.h
$(GLSRC)write_t1.h:$(GLSRC)gsstype.h
$(GLSRC)write_t1.h:$(GLSRC)gsmemory.h
-$(GLSRC)write_t1.h:$(GLSRC)gpsync.h
$(GLSRC)write_t1.h:$(GLSRC)gslibctx.h
-$(GLSRC)write_t1.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)write_t1.h:$(GLSRC)stdio_.h
$(GLSRC)write_t1.h:$(GLSRC)gxcindex.h
-$(GLSRC)write_t1.h:$(GLSRC)gsgstate.h
+$(GLSRC)write_t1.h:$(GLSRC)stdio_.h
+$(GLSRC)write_t1.h:$(GLSRC)gsccode.h
$(GLSRC)write_t1.h:$(GLSRC)stdint_.h
$(GLSRC)write_t1.h:$(GLSRC)gssprintf.h
-$(GLSRC)write_t1.h:$(GLSRC)gsccode.h
-$(GLSRC)write_t1.h:$(GLSRC)std.h
$(GLSRC)write_t1.h:$(GLSRC)gstypes.h
+$(GLSRC)write_t1.h:$(GLSRC)std.h
$(GLSRC)write_t1.h:$(GLSRC)stdpre.h
$(GLSRC)write_t1.h:$(GLGEN)arch.h
+$(GLSRC)write_t1.h:$(GLSRC)gs_dll_call.h
$(GLSRC)write_t2.h:$(GLSRC)gxfapi.h
$(GLSRC)write_t2.h:$(GLSRC)gstext.h
-$(GLSRC)write_t2.h:$(GLSRC)gsdcolor.h
$(GLSRC)write_t2.h:$(GLSRC)gsfont.h
-$(GLSRC)write_t2.h:$(GLSRC)gscms.h
-$(GLSRC)write_t2.h:$(GLSRC)gscspace.h
+$(GLSRC)write_t2.h:$(GLSRC)gsdcolor.h
$(GLSRC)write_t2.h:$(GLSRC)gxpath.h
-$(GLSRC)write_t2.h:$(GLSRC)gsdevice.h
-$(GLSRC)write_t2.h:$(GLSRC)gxarith.h
-$(GLSRC)write_t2.h:$(GLSRC)gspenum.h
-$(GLSRC)write_t2.h:$(GLSRC)gxhttile.h
+$(GLSRC)write_t2.h:$(GLSRC)gscms.h
$(GLSRC)write_t2.h:$(GLSRC)gsrect.h
$(GLSRC)write_t2.h:$(GLSRC)gslparam.h
-$(GLSRC)write_t2.h:$(GLSRC)gsiparam.h
-$(GLSRC)write_t2.h:$(GLSRC)gxbitmap.h
-$(GLSRC)write_t2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)write_t2.h:$(GLSRC)gsdevice.h
$(GLSRC)write_t2.h:$(GLSRC)gscpm.h
+$(GLSRC)write_t2.h:$(GLSRC)gscspace.h
+$(GLSRC)write_t2.h:$(GLSRC)gsgstate.h
+$(GLSRC)write_t2.h:$(GLSRC)gsiparam.h
$(GLSRC)write_t2.h:$(GLSRC)gxfixed.h
-$(GLSRC)write_t2.h:$(GLSRC)gsrefct.h
+$(GLSRC)write_t2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)write_t2.h:$(GLSRC)gspenum.h
+$(GLSRC)write_t2.h:$(GLSRC)gxhttile.h
$(GLSRC)write_t2.h:$(GLSRC)gsparam.h
-$(GLSRC)write_t2.h:$(GLSRC)gsccolor.h
+$(GLSRC)write_t2.h:$(GLSRC)gsrefct.h
+$(GLSRC)write_t2.h:$(GLSRC)memento.h
$(GLSRC)write_t2.h:$(GLSRC)gxsync.h
+$(GLSRC)write_t2.h:$(GLSRC)gxbitmap.h
$(GLSRC)write_t2.h:$(GLSRC)scommon.h
-$(GLSRC)write_t2.h:$(GLSRC)memento.h
$(GLSRC)write_t2.h:$(GLSRC)gsbitmap.h
+$(GLSRC)write_t2.h:$(GLSRC)gsccolor.h
+$(GLSRC)write_t2.h:$(GLSRC)gxarith.h
+$(GLSRC)write_t2.h:$(GLSRC)gpsync.h
$(GLSRC)write_t2.h:$(GLSRC)gsstype.h
$(GLSRC)write_t2.h:$(GLSRC)gsmemory.h
-$(GLSRC)write_t2.h:$(GLSRC)gpsync.h
$(GLSRC)write_t2.h:$(GLSRC)gslibctx.h
-$(GLSRC)write_t2.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)write_t2.h:$(GLSRC)stdio_.h
$(GLSRC)write_t2.h:$(GLSRC)gxcindex.h
-$(GLSRC)write_t2.h:$(GLSRC)gsgstate.h
+$(GLSRC)write_t2.h:$(GLSRC)stdio_.h
+$(GLSRC)write_t2.h:$(GLSRC)gsccode.h
$(GLSRC)write_t2.h:$(GLSRC)stdint_.h
$(GLSRC)write_t2.h:$(GLSRC)gssprintf.h
-$(GLSRC)write_t2.h:$(GLSRC)gsccode.h
-$(GLSRC)write_t2.h:$(GLSRC)std.h
$(GLSRC)write_t2.h:$(GLSRC)gstypes.h
+$(GLSRC)write_t2.h:$(GLSRC)std.h
$(GLSRC)write_t2.h:$(GLSRC)stdpre.h
$(GLSRC)write_t2.h:$(GLGEN)arch.h
+$(GLSRC)write_t2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)claptrap.h:$(GLSRC)gsmemory.h
$(GLSRC)claptrap.h:$(GLSRC)gslibctx.h
-$(GLSRC)claptrap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)claptrap.h:$(GLSRC)stdio_.h
$(GLSRC)claptrap.h:$(GLSRC)gssprintf.h
-$(GLSRC)claptrap.h:$(GLSRC)std.h
$(GLSRC)claptrap.h:$(GLSRC)gstypes.h
+$(GLSRC)claptrap.h:$(GLSRC)std.h
$(GLSRC)claptrap.h:$(GLSRC)stdpre.h
$(GLSRC)claptrap.h:$(GLGEN)arch.h
+$(GLSRC)claptrap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ets.h:$(GLSRC)stdpre.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxgetbit.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxcmap.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxtext.h
$(GLSRC)gxdownscale.h:$(GLSRC)gstext.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdownscale.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxfmap.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsuid.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsfont.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsimage.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxdda.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsfont.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxftype.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxpath.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxftype.h
$(GLSRC)gxdownscale.h:$(GLSRC)gscms.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsrect.h
$(GLSRC)gxdownscale.h:$(GLSRC)gslparam.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxhttile.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsrefct.h
$(GLSRC)gxdownscale.h:$(GLSRC)gp.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdownscale.h:$(GLSRC)memento.h
+$(GLSRC)gxdownscale.h:$(GLSRC)memory_.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsuid.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxsync.h
-$(GLSRC)gxdownscale.h:$(GLSRC)srdline.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxdownscale.h:$(GLSRC)claptrap.h
+$(GLSRC)gxdownscale.h:$(GLSRC)srdline.h
$(GLSRC)gxdownscale.h:$(GLSRC)scommon.h
-$(GLSRC)gxdownscale.h:$(GLSRC)memento.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gscsel.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxarith.h
$(GLSRC)gxdownscale.h:$(GLSRC)stat_.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdownscale.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdownscale.h:$(GLSRC)memory_.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdownscale.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdownscale.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdownscale.h:$(GLSRC)ctype_.h
-$(GLSRC)gxdownscale.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gscompt.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdownscale.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsccode.h
$(GLSRC)gxdownscale.h:$(GLSRC)stdint_.h
$(GLSRC)gxdownscale.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdownscale.h:$(GLSRC)std.h
$(GLSRC)gxdownscale.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdownscale.h:$(GLSRC)std.h
$(GLSRC)gxdownscale.h:$(GLSRC)stdpre.h
$(GLSRC)gxdownscale.h:$(GLGEN)arch.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gs_dll_call.h
$(GLSRC)strmio.h:$(GLSRC)scommon.h
$(GLSRC)strmio.h:$(GLSRC)gsstype.h
$(GLSRC)strmio.h:$(GLSRC)gsmemory.h
$(GLSRC)strmio.h:$(GLSRC)gslibctx.h
-$(GLSRC)strmio.h:$(GLSRC)gs_dll_call.h
$(GLSRC)strmio.h:$(GLSRC)stdio_.h
$(GLSRC)strmio.h:$(GLSRC)stdint_.h
$(GLSRC)strmio.h:$(GLSRC)gssprintf.h
-$(GLSRC)strmio.h:$(GLSRC)std.h
$(GLSRC)strmio.h:$(GLSRC)gstypes.h
+$(GLSRC)strmio.h:$(GLSRC)std.h
$(GLSRC)strmio.h:$(GLSRC)stdpre.h
$(GLSRC)strmio.h:$(GLGEN)arch.h
+$(GLSRC)strmio.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sdcparam.h:$(GLSRC)sdct.h
$(GLSRC)sdcparam.h:$(GLSRC)setjmp_.h
$(GLSRC)sdcparam.h:$(GLSRC)strimpl.h
$(GLSRC)sdcparam.h:$(GLSRC)gscms.h
-$(GLSRC)sdcparam.h:$(GLSRC)gscspace.h
$(GLSRC)sdcparam.h:$(GLSRC)gsdevice.h
+$(GLSRC)sdcparam.h:$(GLSRC)gscspace.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsgstate.h
$(GLSRC)sdcparam.h:$(GLSRC)gsiparam.h
-$(GLSRC)sdcparam.h:$(GLSRC)gxbitmap.h
$(GLSRC)sdcparam.h:$(GLSRC)gsmatrix.h
-$(GLSRC)sdcparam.h:$(GLSRC)gsrefct.h
$(GLSRC)sdcparam.h:$(GLSRC)gsparam.h
-$(GLSRC)sdcparam.h:$(GLSRC)gsccolor.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsrefct.h
+$(GLSRC)sdcparam.h:$(GLSRC)memento.h
$(GLSRC)sdcparam.h:$(GLSRC)gsstruct.h
$(GLSRC)sdcparam.h:$(GLSRC)gxsync.h
+$(GLSRC)sdcparam.h:$(GLSRC)gxbitmap.h
$(GLSRC)sdcparam.h:$(GLSRC)scommon.h
-$(GLSRC)sdcparam.h:$(GLSRC)memento.h
$(GLSRC)sdcparam.h:$(GLSRC)gsbitmap.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsccolor.h
+$(GLSRC)sdcparam.h:$(GLSRC)gpsync.h
$(GLSRC)sdcparam.h:$(GLSRC)gsstype.h
$(GLSRC)sdcparam.h:$(GLSRC)gsmemory.h
-$(GLSRC)sdcparam.h:$(GLSRC)gpsync.h
$(GLSRC)sdcparam.h:$(GLSRC)gslibctx.h
-$(GLSRC)sdcparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sdcparam.h:$(GLSRC)stdio_.h
-$(GLSRC)sdcparam.h:$(GLSRC)gsgstate.h
$(GLSRC)sdcparam.h:$(GLSRC)stdint_.h
$(GLSRC)sdcparam.h:$(GLSRC)gssprintf.h
-$(GLSRC)sdcparam.h:$(GLSRC)std.h
$(GLSRC)sdcparam.h:$(GLSRC)gstypes.h
+$(GLSRC)sdcparam.h:$(GLSRC)std.h
$(GLSRC)sdcparam.h:$(GLSRC)stdpre.h
$(GLSRC)sdcparam.h:$(GLGEN)arch.h
+$(GLSRC)sdcparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ssha2.h:$(GLSRC)sha2.h
$(GLSRC)ssha2.h:$(GLSRC)scommon.h
$(GLSRC)ssha2.h:$(GLSRC)gsstype.h
$(GLSRC)ssha2.h:$(GLSRC)gsmemory.h
$(GLSRC)ssha2.h:$(GLSRC)gslibctx.h
-$(GLSRC)ssha2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ssha2.h:$(GLSRC)stdio_.h
$(GLSRC)ssha2.h:$(GLSRC)stdint_.h
$(GLSRC)ssha2.h:$(GLSRC)gssprintf.h
-$(GLSRC)ssha2.h:$(GLSRC)std.h
$(GLSRC)ssha2.h:$(GLSRC)gstypes.h
+$(GLSRC)ssha2.h:$(GLSRC)std.h
$(GLSRC)ssha2.h:$(GLSRC)stdpre.h
$(GLSRC)ssha2.h:$(GLGEN)arch.h
+$(GLSRC)ssha2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevprn.h:$(GLSRC)string_.h
$(GLSRC)gdevprn.h:$(GLSRC)gsstrtok.h
$(GLSRC)gdevprn.h:$(GLSRC)gxclthrd.h
$(GLSRC)gdevprn.h:$(GLSRC)gxclpage.h
$(GLSRC)gdevprn.h:$(GLSRC)gxclist.h
$(GLSRC)gdevprn.h:$(GLSRC)gxgstate.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxline.h
$(GLSRC)gdevprn.h:$(GLSRC)gstrans.h
+$(GLSRC)gdevprn.h:$(GLSRC)gdevp14.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxline.h
$(GLSRC)gdevprn.h:$(GLSRC)gsht1.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcomp.h
$(GLSRC)gdevprn.h:$(GLSRC)math_.h
-$(GLSRC)gdevprn.h:$(GLSRC)gdevp14.h
$(GLSRC)gdevprn.h:$(GLSRC)gxcolor2.h
$(GLSRC)gdevprn.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxdevmem.h
$(GLSRC)gdevprn.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsequivc.h
$(GLSRC)gdevprn.h:$(GLSRC)gx.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxblend.h
$(GLSRC)gdevprn.h:$(GLSRC)gxclipsr.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxcomp.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxdcolor.h
$(GLSRC)gdevprn.h:$(GLSRC)gdebug.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gdevprn.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxdcolor.h
$(GLSRC)gdevprn.h:$(GLSRC)gxband.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxblend.h
$(GLSRC)gdevprn.h:$(GLSRC)gscolor2.h
-$(GLSRC)gdevprn.h:$(GLSRC)gscindex.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxmatrix.h
$(GLSRC)gdevprn.h:$(GLSRC)gxdevice.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsht.h
$(GLSRC)gdevprn.h:$(GLSRC)gxcpath.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsht.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsequivc.h
$(GLSRC)gdevprn.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevprn.h:$(GLSRC)gxpcache.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscindex.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevprn.h:$(GLSRC)gsptype1.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxtext.h
$(GLSRC)gdevprn.h:$(GLSRC)gscie.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxtext.h
$(GLSRC)gdevprn.h:$(GLSRC)gstext.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxstate.h
$(GLSRC)gdevprn.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevprn.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxstate.h
$(GLSRC)gdevprn.h:$(GLSRC)gspcolor.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsropt.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevprn.h:$(GLSRC)gsmalloc.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevprn.h:$(GLSRC)gxctable.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsfont.h
$(GLSRC)gdevprn.h:$(GLSRC)gsimage.h
$(GLSRC)gdevprn.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxdda.h
$(GLSRC)gdevprn.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxpath.h
$(GLSRC)gdevprn.h:$(GLSRC)gxiclass.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxftype.h
$(GLSRC)gdevprn.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxftype.h
$(GLSRC)gdevprn.h:$(GLSRC)gscms.h
-$(GLSRC)gdevprn.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxstdio.h
-$(GLSRC)gdevprn.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevprn.h:$(GLSRC)gsrect.h
$(GLSRC)gdevprn.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxstdio.h
$(GLSRC)gdevprn.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxclio.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevprn.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevprn.h:$(GLSRC)gsio.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevprn.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevprn.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxclio.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevprn.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevprn.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevprn.h:$(GLSRC)gp.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsccolor.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsstruct.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevprn.h:$(GLSRC)memento.h
+$(GLSRC)gdevprn.h:$(GLSRC)memory_.h
$(GLSRC)gdevprn.h:$(GLSRC)gsutil.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsuid.h
$(GLSRC)gdevprn.h:$(GLSRC)gsstrl.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevprn.h:$(GLSRC)gdbflags.h
-$(GLSRC)gdevprn.h:$(GLSRC)srdline.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxsync.h
$(GLSRC)gdevprn.h:$(GLSRC)gserrors.h
-$(GLSRC)gdevprn.h:$(GLSRC)scommon.h
-$(GLSRC)gdevprn.h:$(GLSRC)memento.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevprn.h:$(GLSRC)vmsmath.h
-$(GLSRC)gdevprn.h:$(GLSRC)gscsel.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevprn.h:$(GLSRC)srdline.h
+$(GLSRC)gdevprn.h:$(GLSRC)scommon.h
$(GLSRC)gdevprn.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxarith.h
$(GLSRC)gdevprn.h:$(GLSRC)stat_.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevprn.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevprn.h:$(GLSRC)memory_.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevprn.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevprn.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevprn.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevprn.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevprn.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevprn.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevprn.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevprn.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevprn.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsccode.h
$(GLSRC)gdevprn.h:$(GLSRC)stdint_.h
$(GLSRC)gdevprn.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevprn.h:$(GLSRC)std.h
$(GLSRC)gdevprn.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevprn.h:$(GLSRC)std.h
$(GLSRC)gdevprn.h:$(GLSRC)stdpre.h
$(GLSRC)gdevprn.h:$(GLGEN)arch.h
+$(GLSRC)gdevprn.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxtext.h
$(GLSRC)gdevmplt.h:$(GLSRC)gstext.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevmplt.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsropt.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsfont.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsimage.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxdda.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxpath.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxftype.h
$(GLSRC)gdevmplt.h:$(GLSRC)gscms.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxstdio.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsrect.h
$(GLSRC)gdevmplt.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxstdio.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsio.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevmplt.h:$(GLSRC)gp.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevmplt.h:$(GLSRC)memento.h
+$(GLSRC)gdevmplt.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsuid.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevmplt.h:$(GLSRC)srdline.h
$(GLSRC)gdevmplt.h:$(GLSRC)scommon.h
-$(GLSRC)gdevmplt.h:$(GLSRC)memento.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gscsel.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxarith.h
$(GLSRC)gdevmplt.h:$(GLSRC)stat_.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmplt.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevmplt.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmplt.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevmplt.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevmplt.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmplt.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsccode.h
$(GLSRC)gdevmplt.h:$(GLSRC)stdint_.h
$(GLSRC)gdevmplt.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevmplt.h:$(GLSRC)std.h
$(GLSRC)gdevmplt.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevmplt.h:$(GLSRC)std.h
$(GLSRC)gdevmplt.h:$(GLSRC)stdpre.h
$(GLSRC)gdevmplt.h:$(GLGEN)arch.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevppla.h:$(GLSRC)gxdevbuf.h
$(GLSRC)gdevppla.h:$(GLSRC)gxband.h
$(GLSRC)gdevppla.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevppla.h:$(GLSRC)gxtext.h
$(GLSRC)gdevppla.h:$(GLSRC)gstext.h
$(GLSRC)gdevppla.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevppla.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevppla.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevppla.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevppla.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsfont.h
$(GLSRC)gdevppla.h:$(GLSRC)gsimage.h
$(GLSRC)gdevppla.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxdda.h
$(GLSRC)gdevppla.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxpath.h
$(GLSRC)gdevppla.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxftype.h
$(GLSRC)gdevppla.h:$(GLSRC)gscms.h
-$(GLSRC)gdevppla.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevppla.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevppla.h:$(GLSRC)gsrect.h
$(GLSRC)gdevppla.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevppla.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevppla.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsgstate.h
$(GLSRC)gdevppla.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxclio.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevppla.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevppla.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevppla.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxclio.h
+$(GLSRC)gdevppla.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevppla.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevppla.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevppla.h:$(GLSRC)gp.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevppla.h:$(GLSRC)memento.h
+$(GLSRC)gdevppla.h:$(GLSRC)memory_.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsuid.h
$(GLSRC)gdevppla.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevppla.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevppla.h:$(GLSRC)srdline.h
$(GLSRC)gdevppla.h:$(GLSRC)scommon.h
-$(GLSRC)gdevppla.h:$(GLSRC)memento.h
-$(GLSRC)gdevppla.h:$(GLSRC)gscsel.h
$(GLSRC)gdevppla.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxarith.h
$(GLSRC)gdevppla.h:$(GLSRC)stat_.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevppla.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevppla.h:$(GLSRC)memory_.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevppla.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevppla.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevppla.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevppla.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevppla.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevppla.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevppla.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevppla.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevppla.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsccode.h
$(GLSRC)gdevppla.h:$(GLSRC)stdint_.h
$(GLSRC)gdevppla.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevppla.h:$(GLSRC)std.h
$(GLSRC)gdevppla.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevppla.h:$(GLSRC)std.h
$(GLSRC)gdevppla.h:$(GLSRC)stdpre.h
$(GLSRC)gdevppla.h:$(GLGEN)arch.h
+$(GLSRC)gdevppla.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsiparm3.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsiparm3.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsiparm3.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsiparm3.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsiparm3.h:$(GLSRC)scommon.h
$(GLSRC)gsiparm3.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gsccolor.h
$(GLSRC)gsiparm3.h:$(GLSRC)gsstype.h
$(GLSRC)gsiparm3.h:$(GLSRC)gsmemory.h
$(GLSRC)gsiparm3.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsiparm3.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsiparm3.h:$(GLSRC)stdio_.h
$(GLSRC)gsiparm3.h:$(GLSRC)stdint_.h
$(GLSRC)gsiparm3.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsiparm3.h:$(GLSRC)std.h
$(GLSRC)gsiparm3.h:$(GLSRC)gstypes.h
+$(GLSRC)gsiparm3.h:$(GLSRC)std.h
$(GLSRC)gsiparm3.h:$(GLSRC)stdpre.h
$(GLSRC)gsiparm3.h:$(GLGEN)arch.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsiparm4.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsiparm4.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsiparm4.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsiparm4.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsiparm4.h:$(GLSRC)scommon.h
$(GLSRC)gsiparm4.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gsccolor.h
$(GLSRC)gsiparm4.h:$(GLSRC)gsstype.h
$(GLSRC)gsiparm4.h:$(GLSRC)gsmemory.h
$(GLSRC)gsiparm4.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsiparm4.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsiparm4.h:$(GLSRC)stdio_.h
$(GLSRC)gsiparm4.h:$(GLSRC)stdint_.h
$(GLSRC)gsiparm4.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsiparm4.h:$(GLSRC)std.h
$(GLSRC)gsiparm4.h:$(GLSRC)gstypes.h
+$(GLSRC)gsiparm4.h:$(GLSRC)std.h
$(GLSRC)gsiparm4.h:$(GLSRC)stdpre.h
$(GLSRC)gsiparm4.h:$(GLGEN)arch.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gximage3.h:$(GLSRC)gsiparm3.h
$(GLSRC)gximage3.h:$(GLSRC)gxiparam.h
$(GLSRC)gximage3.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gximage3.h:$(GLSRC)gxcmap.h
$(GLSRC)gximage3.h:$(GLSRC)gxtext.h
$(GLSRC)gximage3.h:$(GLSRC)gstext.h
$(GLSRC)gximage3.h:$(GLSRC)gsnamecl.h
$(GLSRC)gximage3.h:$(GLSRC)gstparam.h
-$(GLSRC)gximage3.h:$(GLSRC)gxfcache.h
-$(GLSRC)gximage3.h:$(GLSRC)gxcspace.h
-$(GLSRC)gximage3.h:$(GLSRC)gsropt.h
+$(GLSRC)gximage3.h:$(GLSRC)gxfmap.h
$(GLSRC)gximage3.h:$(GLSRC)gsfunc.h
+$(GLSRC)gximage3.h:$(GLSRC)gxcspace.h
$(GLSRC)gximage3.h:$(GLSRC)gxrplane.h
-$(GLSRC)gximage3.h:$(GLSRC)gsuid.h
-$(GLSRC)gximage3.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximage3.h:$(GLSRC)gscsel.h
+$(GLSRC)gximage3.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximage3.h:$(GLSRC)gsfont.h
$(GLSRC)gximage3.h:$(GLSRC)gsimage.h
$(GLSRC)gximage3.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gximage3.h:$(GLSRC)gxdda.h
$(GLSRC)gximage3.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gximage3.h:$(GLSRC)gsfont.h
-$(GLSRC)gximage3.h:$(GLSRC)gxfmap.h
-$(GLSRC)gximage3.h:$(GLSRC)gxftype.h
+$(GLSRC)gximage3.h:$(GLSRC)gxbcache.h
+$(GLSRC)gximage3.h:$(GLSRC)gsropt.h
+$(GLSRC)gximage3.h:$(GLSRC)gxdda.h
+$(GLSRC)gximage3.h:$(GLSRC)gxpath.h
$(GLSRC)gximage3.h:$(GLSRC)gxfrac.h
+$(GLSRC)gximage3.h:$(GLSRC)gxtmap.h
+$(GLSRC)gximage3.h:$(GLSRC)gxftype.h
$(GLSRC)gximage3.h:$(GLSRC)gscms.h
-$(GLSRC)gximage3.h:$(GLSRC)gscspace.h
-$(GLSRC)gximage3.h:$(GLSRC)gxpath.h
-$(GLSRC)gximage3.h:$(GLSRC)gxbcache.h
-$(GLSRC)gximage3.h:$(GLSRC)gsdevice.h
-$(GLSRC)gximage3.h:$(GLSRC)gxarith.h
-$(GLSRC)gximage3.h:$(GLSRC)gspenum.h
-$(GLSRC)gximage3.h:$(GLSRC)gxhttile.h
$(GLSRC)gximage3.h:$(GLSRC)gsrect.h
$(GLSRC)gximage3.h:$(GLSRC)gslparam.h
+$(GLSRC)gximage3.h:$(GLSRC)gsdevice.h
+$(GLSRC)gximage3.h:$(GLSRC)gscpm.h
+$(GLSRC)gximage3.h:$(GLSRC)gscspace.h
+$(GLSRC)gximage3.h:$(GLSRC)gsgstate.h
$(GLSRC)gximage3.h:$(GLSRC)gsxfont.h
-$(GLSRC)gximage3.h:$(GLSRC)gsiparam.h
$(GLSRC)gximage3.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gximage3.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gximage3.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gximage3.h:$(GLSRC)gscpm.h
+$(GLSRC)gximage3.h:$(GLSRC)gsiparam.h
$(GLSRC)gximage3.h:$(GLSRC)gxfixed.h
-$(GLSRC)gximage3.h:$(GLSRC)gsrefct.h
+$(GLSRC)gximage3.h:$(GLSRC)gscompt.h
+$(GLSRC)gximage3.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximage3.h:$(GLSRC)gspenum.h
+$(GLSRC)gximage3.h:$(GLSRC)gxhttile.h
$(GLSRC)gximage3.h:$(GLSRC)gsparam.h
+$(GLSRC)gximage3.h:$(GLSRC)gsrefct.h
$(GLSRC)gximage3.h:$(GLSRC)gp.h
-$(GLSRC)gximage3.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximage3.h:$(GLSRC)memento.h
+$(GLSRC)gximage3.h:$(GLSRC)memory_.h
+$(GLSRC)gximage3.h:$(GLSRC)gsuid.h
$(GLSRC)gximage3.h:$(GLSRC)gsstruct.h
$(GLSRC)gximage3.h:$(GLSRC)gxsync.h
+$(GLSRC)gximage3.h:$(GLSRC)gxbitmap.h
$(GLSRC)gximage3.h:$(GLSRC)srdline.h
$(GLSRC)gximage3.h:$(GLSRC)scommon.h
-$(GLSRC)gximage3.h:$(GLSRC)memento.h
-$(GLSRC)gximage3.h:$(GLSRC)gscsel.h
$(GLSRC)gximage3.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gximage3.h:$(GLSRC)gsstype.h
+$(GLSRC)gximage3.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximage3.h:$(GLSRC)gxarith.h
$(GLSRC)gximage3.h:$(GLSRC)stat_.h
-$(GLSRC)gximage3.h:$(GLSRC)gxtmap.h
-$(GLSRC)gximage3.h:$(GLSRC)gsmemory.h
$(GLSRC)gximage3.h:$(GLSRC)gpsync.h
-$(GLSRC)gximage3.h:$(GLSRC)memory_.h
+$(GLSRC)gximage3.h:$(GLSRC)gsstype.h
+$(GLSRC)gximage3.h:$(GLSRC)gsmemory.h
$(GLSRC)gximage3.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gximage3.h:$(GLSRC)gslibctx.h
$(GLSRC)gximage3.h:$(GLSRC)gscdefs.h
-$(GLSRC)gximage3.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gximage3.h:$(GLSRC)stdio_.h
-$(GLSRC)gximage3.h:$(GLSRC)gscompt.h
+$(GLSRC)gximage3.h:$(GLSRC)gslibctx.h
$(GLSRC)gximage3.h:$(GLSRC)gxcindex.h
-$(GLSRC)gximage3.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximage3.h:$(GLSRC)stdio_.h
+$(GLSRC)gximage3.h:$(GLSRC)gsccode.h
$(GLSRC)gximage3.h:$(GLSRC)stdint_.h
$(GLSRC)gximage3.h:$(GLSRC)gssprintf.h
-$(GLSRC)gximage3.h:$(GLSRC)gsccode.h
-$(GLSRC)gximage3.h:$(GLSRC)std.h
$(GLSRC)gximage3.h:$(GLSRC)gstypes.h
+$(GLSRC)gximage3.h:$(GLSRC)std.h
$(GLSRC)gximage3.h:$(GLSRC)stdpre.h
$(GLSRC)gximage3.h:$(GLGEN)arch.h
+$(GLSRC)gximage3.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcldev.h:$(GLSRC)gxdht.h
$(GLSRC)gxcldev.h:$(GLSRC)srlx.h
$(GLSRC)gxcldev.h:$(GLSRC)gxht.h
$(GLSRC)gxcldev.h:$(GLSRC)gxhttype.h
$(GLSRC)gxcldev.h:$(GLSRC)gxclist.h
$(GLSRC)gxcldev.h:$(GLSRC)gxgstate.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxline.h
$(GLSRC)gxcldev.h:$(GLSRC)gstrans.h
+$(GLSRC)gxcldev.h:$(GLSRC)gdevp14.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxline.h
$(GLSRC)gxcldev.h:$(GLSRC)gsht1.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcomp.h
$(GLSRC)gxcldev.h:$(GLSRC)math_.h
$(GLSRC)gxcldev.h:$(GLSRC)scfx.h
-$(GLSRC)gxcldev.h:$(GLSRC)gdevp14.h
$(GLSRC)gxcldev.h:$(GLSRC)gxcolor2.h
$(GLSRC)gxcldev.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxcldev.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsequivc.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxblend.h
$(GLSRC)gxcldev.h:$(GLSRC)gxclipsr.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxcomp.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxdcolor.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxcldev.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxdcolor.h
$(GLSRC)gxcldev.h:$(GLSRC)gxband.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxblend.h
$(GLSRC)gxcldev.h:$(GLSRC)shc.h
$(GLSRC)gxcldev.h:$(GLSRC)gscolor2.h
-$(GLSRC)gxcldev.h:$(GLSRC)gscindex.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxcldev.h:$(GLSRC)gxdevice.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsht.h
$(GLSRC)gxcldev.h:$(GLSRC)gxcpath.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsht.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsequivc.h
$(GLSRC)gxcldev.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxcldev.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscindex.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcmap.h
$(GLSRC)gxcldev.h:$(GLSRC)gsptype1.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxtext.h
$(GLSRC)gxcldev.h:$(GLSRC)gscie.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxtext.h
$(GLSRC)gxcldev.h:$(GLSRC)gstext.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxstate.h
$(GLSRC)gxcldev.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxcldev.h:$(GLSRC)gstparam.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxstate.h
$(GLSRC)gxcldev.h:$(GLSRC)gspcolor.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsropt.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxfmap.h
$(GLSRC)gxcldev.h:$(GLSRC)gsmalloc.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcspace.h
$(GLSRC)gxcldev.h:$(GLSRC)gxctable.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsuid.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxcmap.h
$(GLSRC)gxcldev.h:$(GLSRC)strimpl.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscsel.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsfont.h
$(GLSRC)gxcldev.h:$(GLSRC)gsimage.h
$(GLSRC)gxcldev.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxdda.h
$(GLSRC)gxcldev.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsfont.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsropt.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxdda.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxpath.h
$(GLSRC)gxcldev.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxftype.h
$(GLSRC)gxcldev.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxftype.h
$(GLSRC)gxcldev.h:$(GLSRC)gscms.h
-$(GLSRC)gxcldev.h:$(GLSRC)gscspace.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxpath.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxarith.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxstdio.h
-$(GLSRC)gxcldev.h:$(GLSRC)gspenum.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxhttile.h
$(GLSRC)gxcldev.h:$(GLSRC)gsrect.h
$(GLSRC)gxcldev.h:$(GLSRC)gslparam.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscpm.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxstdio.h
$(GLSRC)gxcldev.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxclio.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsiparam.h
$(GLSRC)gxcldev.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxcldev.h:$(GLSRC)gsio.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxcldev.h:$(GLSRC)gscpm.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsiparam.h
$(GLSRC)gxcldev.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxclio.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscompt.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcldev.h:$(GLSRC)gspenum.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxhttile.h
$(GLSRC)gxcldev.h:$(GLSRC)gsparam.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsrefct.h
$(GLSRC)gxcldev.h:$(GLSRC)gp.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcldev.h:$(GLSRC)memento.h
+$(GLSRC)gxcldev.h:$(GLSRC)memory_.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsuid.h
$(GLSRC)gxcldev.h:$(GLSRC)gsstruct.h
$(GLSRC)gxcldev.h:$(GLSRC)gxsync.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcldev.h:$(GLSRC)vmsmath.h
$(GLSRC)gxcldev.h:$(GLSRC)srdline.h
$(GLSRC)gxcldev.h:$(GLSRC)scommon.h
-$(GLSRC)gxcldev.h:$(GLSRC)memento.h
-$(GLSRC)gxcldev.h:$(GLSRC)vmsmath.h
-$(GLSRC)gxcldev.h:$(GLSRC)gscsel.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxcldev.h:$(GLSRC)gsfname.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxarith.h
$(GLSRC)gxcldev.h:$(GLSRC)stat_.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcldev.h:$(GLSRC)gpsync.h
-$(GLSRC)gxcldev.h:$(GLSRC)memory_.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcldev.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxcldev.h:$(GLSRC)gslibctx.h
$(GLSRC)gxcldev.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxcldev.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxcldev.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcldev.h:$(GLSRC)gscompt.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsbittab.h
+$(GLSRC)gxcldev.h:$(GLSRC)gslibctx.h
$(GLSRC)gxcldev.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcldev.h:$(GLSRC)stdio_.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsccode.h
$(GLSRC)gxcldev.h:$(GLSRC)stdint_.h
$(GLSRC)gxcldev.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsccode.h
-$(GLSRC)gxcldev.h:$(GLSRC)std.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsbittab.h
$(GLSRC)gxcldev.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcldev.h:$(GLSRC)std.h
$(GLSRC)gxcldev.h:$(GLSRC)stdpre.h
$(GLSRC)gxcldev.h:$(GLGEN)arch.h
+$(GLSRC)gxcldev.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxclpage.h:$(GLSRC)gxclist.h
$(GLSRC)gxclpage.h:$(GLSRC)gxgstate.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxline.h
$(GLSRC)gxclpage.h:$(GLSRC)gstrans.h
+$(GLSRC)gxclpage.h:$(GLSRC)gdevp14.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxline.h
$(GLSRC)gxclpage.h:$(GLSRC)gsht1.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcomp.h
$(GLSRC)gxclpage.h:$(GLSRC)math_.h
-$(GLSRC)gxclpage.h:$(GLSRC)gdevp14.h
$(GLSRC)gxclpage.h:$(GLSRC)gxcolor2.h
$(GLSRC)gxclpage.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxclpage.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsequivc.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxblend.h
$(GLSRC)gxclpage.h:$(GLSRC)gxclipsr.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxcomp.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxdcolor.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxclpage.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxdcolor.h
$(GLSRC)gxclpage.h:$(GLSRC)gxband.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxblend.h
$(GLSRC)gxclpage.h:$(GLSRC)gscolor2.h
-$(GLSRC)gxclpage.h:$(GLSRC)gscindex.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxclpage.h:$(GLSRC)gxdevice.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsht.h
$(GLSRC)gxclpage.h:$(GLSRC)gxcpath.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsht.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsequivc.h
$(GLSRC)gxclpage.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclpage.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscindex.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcmap.h
$(GLSRC)gxclpage.h:$(GLSRC)gsptype1.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxtext.h
$(GLSRC)gxclpage.h:$(GLSRC)gscie.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxtext.h
$(GLSRC)gxclpage.h:$(GLSRC)gstext.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxstate.h
$(GLSRC)gxclpage.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclpage.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxstate.h
$(GLSRC)gxclpage.h:$(GLSRC)gspcolor.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsropt.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxfmap.h
$(GLSRC)gxclpage.h:$(GLSRC)gsmalloc.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclpage.h:$(GLSRC)gxctable.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsuid.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsfont.h
$(GLSRC)gxclpage.h:$(GLSRC)gsimage.h
$(GLSRC)gxclpage.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxdda.h
$(GLSRC)gxclpage.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsfont.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxpath.h
$(GLSRC)gxclpage.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxftype.h
$(GLSRC)gxclpage.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxftype.h
$(GLSRC)gxclpage.h:$(GLSRC)gscms.h
-$(GLSRC)gxclpage.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxstdio.h
-$(GLSRC)gxclpage.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclpage.h:$(GLSRC)gsrect.h
$(GLSRC)gxclpage.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxstdio.h
$(GLSRC)gxclpage.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxclio.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclpage.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxclpage.h:$(GLSRC)gsio.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxclpage.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclpage.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxclio.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclpage.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclpage.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsrefct.h
$(GLSRC)gxclpage.h:$(GLSRC)gp.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclpage.h:$(GLSRC)memento.h
+$(GLSRC)gxclpage.h:$(GLSRC)memory_.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsuid.h
$(GLSRC)gxclpage.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclpage.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclpage.h:$(GLSRC)vmsmath.h
$(GLSRC)gxclpage.h:$(GLSRC)srdline.h
$(GLSRC)gxclpage.h:$(GLSRC)scommon.h
-$(GLSRC)gxclpage.h:$(GLSRC)memento.h
-$(GLSRC)gxclpage.h:$(GLSRC)vmsmath.h
-$(GLSRC)gxclpage.h:$(GLSRC)gscsel.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxclpage.h:$(GLSRC)gsfname.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxarith.h
$(GLSRC)gxclpage.h:$(GLSRC)stat_.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclpage.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclpage.h:$(GLSRC)memory_.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclpage.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxclpage.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclpage.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxclpage.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclpage.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclpage.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclpage.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclpage.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclpage.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsccode.h
$(GLSRC)gxclpage.h:$(GLSRC)stdint_.h
$(GLSRC)gxclpage.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclpage.h:$(GLSRC)std.h
$(GLSRC)gxclpage.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclpage.h:$(GLSRC)std.h
$(GLSRC)gxclpage.h:$(GLSRC)stdpre.h
$(GLSRC)gxclpage.h:$(GLGEN)arch.h
+$(GLSRC)gxclpage.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxclpath.h:$(GLSRC)gxcldev.h
$(GLSRC)gxclpath.h:$(GLSRC)gxdht.h
$(GLSRC)gxclpath.h:$(GLSRC)srlx.h
@@ -11108,268 +11121,268 @@ $(GLSRC)gxclpath.h:$(GLSRC)gxht.h
$(GLSRC)gxclpath.h:$(GLSRC)gxhttype.h
$(GLSRC)gxclpath.h:$(GLSRC)gxclist.h
$(GLSRC)gxclpath.h:$(GLSRC)gxgstate.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxline.h
$(GLSRC)gxclpath.h:$(GLSRC)gstrans.h
+$(GLSRC)gxclpath.h:$(GLSRC)gdevp14.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxline.h
$(GLSRC)gxclpath.h:$(GLSRC)gsht1.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcomp.h
$(GLSRC)gxclpath.h:$(GLSRC)math_.h
$(GLSRC)gxclpath.h:$(GLSRC)scfx.h
-$(GLSRC)gxclpath.h:$(GLSRC)gdevp14.h
$(GLSRC)gxclpath.h:$(GLSRC)gxcolor2.h
$(GLSRC)gxclpath.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxclpath.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsequivc.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxblend.h
$(GLSRC)gxclpath.h:$(GLSRC)gxclipsr.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxcomp.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxdcolor.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxclpath.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxdcolor.h
$(GLSRC)gxclpath.h:$(GLSRC)gxband.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxblend.h
$(GLSRC)gxclpath.h:$(GLSRC)shc.h
$(GLSRC)gxclpath.h:$(GLSRC)gscolor2.h
-$(GLSRC)gxclpath.h:$(GLSRC)gscindex.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxclpath.h:$(GLSRC)gxdevice.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsht.h
$(GLSRC)gxclpath.h:$(GLSRC)gxcpath.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsht.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsequivc.h
$(GLSRC)gxclpath.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclpath.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscindex.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcmap.h
$(GLSRC)gxclpath.h:$(GLSRC)gsptype1.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxtext.h
$(GLSRC)gxclpath.h:$(GLSRC)gscie.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxtext.h
$(GLSRC)gxclpath.h:$(GLSRC)gstext.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxstate.h
$(GLSRC)gxclpath.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclpath.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxstate.h
$(GLSRC)gxclpath.h:$(GLSRC)gspcolor.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsropt.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxfmap.h
$(GLSRC)gxclpath.h:$(GLSRC)gsmalloc.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclpath.h:$(GLSRC)gxctable.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsuid.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxcmap.h
$(GLSRC)gxclpath.h:$(GLSRC)strimpl.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsfont.h
$(GLSRC)gxclpath.h:$(GLSRC)gsimage.h
$(GLSRC)gxclpath.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxdda.h
$(GLSRC)gxclpath.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsfont.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxpath.h
$(GLSRC)gxclpath.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxftype.h
$(GLSRC)gxclpath.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxftype.h
$(GLSRC)gxclpath.h:$(GLSRC)gscms.h
-$(GLSRC)gxclpath.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxstdio.h
-$(GLSRC)gxclpath.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclpath.h:$(GLSRC)gsrect.h
$(GLSRC)gxclpath.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxstdio.h
$(GLSRC)gxclpath.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxclio.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclpath.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxclpath.h:$(GLSRC)gsio.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxclpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsiparam.h
$(GLSRC)gxclpath.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxclio.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxhttile.h
$(GLSRC)gxclpath.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsrefct.h
$(GLSRC)gxclpath.h:$(GLSRC)gp.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclpath.h:$(GLSRC)memento.h
+$(GLSRC)gxclpath.h:$(GLSRC)memory_.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsuid.h
$(GLSRC)gxclpath.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclpath.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclpath.h:$(GLSRC)vmsmath.h
$(GLSRC)gxclpath.h:$(GLSRC)srdline.h
$(GLSRC)gxclpath.h:$(GLSRC)scommon.h
-$(GLSRC)gxclpath.h:$(GLSRC)memento.h
-$(GLSRC)gxclpath.h:$(GLSRC)vmsmath.h
-$(GLSRC)gxclpath.h:$(GLSRC)gscsel.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxclpath.h:$(GLSRC)gsfname.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxarith.h
$(GLSRC)gxclpath.h:$(GLSRC)stat_.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclpath.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclpath.h:$(GLSRC)memory_.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclpath.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxclpath.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclpath.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxclpath.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclpath.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclpath.h:$(GLSRC)gscompt.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsbittab.h
+$(GLSRC)gxclpath.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclpath.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclpath.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsccode.h
$(GLSRC)gxclpath.h:$(GLSRC)stdint_.h
$(GLSRC)gxclpath.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclpath.h:$(GLSRC)std.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsbittab.h
$(GLSRC)gxclpath.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclpath.h:$(GLSRC)std.h
$(GLSRC)gxclpath.h:$(GLSRC)stdpre.h
$(GLSRC)gxclpath.h:$(GLGEN)arch.h
+$(GLSRC)gxclpath.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxclmem.h:$(GLSRC)strimpl.h
$(GLSRC)gxclmem.h:$(GLSRC)gxclio.h
$(GLSRC)gxclmem.h:$(GLSRC)gp.h
+$(GLSRC)gxclmem.h:$(GLSRC)memory_.h
$(GLSRC)gxclmem.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclmem.h:$(GLSRC)srdline.h
$(GLSRC)gxclmem.h:$(GLSRC)scommon.h
-$(GLSRC)gxclmem.h:$(GLSRC)gsstype.h
$(GLSRC)gxclmem.h:$(GLSRC)stat_.h
+$(GLSRC)gxclmem.h:$(GLSRC)gsstype.h
$(GLSRC)gxclmem.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxclmem.h:$(GLSRC)memory_.h
$(GLSRC)gxclmem.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxclmem.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclmem.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxclmem.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclmem.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclmem.h:$(GLSRC)stdio_.h
$(GLSRC)gxclmem.h:$(GLSRC)stdint_.h
$(GLSRC)gxclmem.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxclmem.h:$(GLSRC)std.h
$(GLSRC)gxclmem.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclmem.h:$(GLSRC)std.h
$(GLSRC)gxclmem.h:$(GLSRC)stdpre.h
$(GLSRC)gxclmem.h:$(GLGEN)arch.h
+$(GLSRC)gxclmem.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevvec.h:$(GLSRC)gxgstate.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxline.h
$(GLSRC)gdevvec.h:$(GLSRC)gstrans.h
+$(GLSRC)gdevvec.h:$(GLSRC)gdevp14.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxline.h
$(GLSRC)gdevvec.h:$(GLSRC)gsht1.h
-$(GLSRC)gdevvec.h:$(GLSRC)gdevbbox.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcomp.h
$(GLSRC)gdevvec.h:$(GLSRC)math_.h
-$(GLSRC)gdevvec.h:$(GLSRC)gdevp14.h
+$(GLSRC)gdevvec.h:$(GLSRC)gdevbbox.h
$(GLSRC)gdevvec.h:$(GLSRC)gxcolor2.h
$(GLSRC)gdevvec.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxdevmem.h
$(GLSRC)gdevvec.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsequivc.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxblend.h
$(GLSRC)gdevvec.h:$(GLSRC)gxclipsr.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxcomp.h
$(GLSRC)gdevvec.h:$(GLSRC)gxdcolor.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxblend.h
$(GLSRC)gdevvec.h:$(GLSRC)gscolor2.h
-$(GLSRC)gdevvec.h:$(GLSRC)gscindex.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxmatrix.h
$(GLSRC)gdevvec.h:$(GLSRC)gxdevice.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsht.h
$(GLSRC)gdevvec.h:$(GLSRC)gxcpath.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsht.h
$(GLSRC)gdevvec.h:$(GLSRC)gxiparam.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsequivc.h
$(GLSRC)gdevvec.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevvec.h:$(GLSRC)gxpcache.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscindex.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevvec.h:$(GLSRC)gsptype1.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxtext.h
$(GLSRC)gdevvec.h:$(GLSRC)gscie.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxtext.h
$(GLSRC)gdevvec.h:$(GLSRC)gstext.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxstate.h
$(GLSRC)gdevvec.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevvec.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxstate.h
$(GLSRC)gdevvec.h:$(GLSRC)gspcolor.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevvec.h:$(GLSRC)stream.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsropt.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsfunc.h
$(GLSRC)gdevvec.h:$(GLSRC)gsmalloc.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxhldevc.h
$(GLSRC)gdevvec.h:$(GLSRC)gxctable.h
$(GLSRC)gdevvec.h:$(GLSRC)gxiodev.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxcmap.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxhldevc.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsfont.h
$(GLSRC)gdevvec.h:$(GLSRC)gsimage.h
$(GLSRC)gdevvec.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxdda.h
$(GLSRC)gdevvec.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxpath.h
$(GLSRC)gdevvec.h:$(GLSRC)gxiclass.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxftype.h
$(GLSRC)gdevvec.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxftype.h
$(GLSRC)gdevvec.h:$(GLSRC)gscms.h
-$(GLSRC)gdevvec.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxstdio.h
-$(GLSRC)gdevvec.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevvec.h:$(GLSRC)gsrect.h
$(GLSRC)gdevvec.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxstdio.h
$(GLSRC)gdevvec.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevvec.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevvec.h:$(GLSRC)gsio.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevvec.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevvec.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevvec.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevvec.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevvec.h:$(GLSRC)gp.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevvec.h:$(GLSRC)memento.h
+$(GLSRC)gdevvec.h:$(GLSRC)memory_.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsuid.h
$(GLSRC)gdevvec.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevvec.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevvec.h:$(GLSRC)vmsmath.h
$(GLSRC)gdevvec.h:$(GLSRC)srdline.h
$(GLSRC)gdevvec.h:$(GLSRC)scommon.h
-$(GLSRC)gdevvec.h:$(GLSRC)memento.h
-$(GLSRC)gdevvec.h:$(GLSRC)vmsmath.h
-$(GLSRC)gdevvec.h:$(GLSRC)gscsel.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevvec.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxarith.h
$(GLSRC)gdevvec.h:$(GLSRC)stat_.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevvec.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevvec.h:$(GLSRC)memory_.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevvec.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevvec.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevvec.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevvec.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevvec.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevvec.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevvec.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevvec.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevvec.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsccode.h
$(GLSRC)gdevvec.h:$(GLSRC)stdint_.h
$(GLSRC)gdevvec.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevvec.h:$(GLSRC)std.h
$(GLSRC)gdevvec.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevvec.h:$(GLSRC)std.h
$(GLSRC)gdevvec.h:$(GLSRC)stdpre.h
$(GLSRC)gdevvec.h:$(GLGEN)arch.h
+$(GLSRC)gdevvec.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gshtx.h:$(GLSRC)gsht1.h
$(GLSRC)gshtx.h:$(GLSRC)gsht.h
+$(GLSRC)gshtx.h:$(GLSRC)gxtmap.h
$(GLSRC)gshtx.h:$(GLSRC)gscspace.h
+$(GLSRC)gshtx.h:$(GLSRC)gsgstate.h
$(GLSRC)gshtx.h:$(GLSRC)gsiparam.h
-$(GLSRC)gshtx.h:$(GLSRC)gxbitmap.h
$(GLSRC)gshtx.h:$(GLSRC)gsmatrix.h
$(GLSRC)gshtx.h:$(GLSRC)gsrefct.h
-$(GLSRC)gshtx.h:$(GLSRC)gsccolor.h
-$(GLSRC)gshtx.h:$(GLSRC)scommon.h
$(GLSRC)gshtx.h:$(GLSRC)memento.h
+$(GLSRC)gshtx.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gshtx.h:$(GLSRC)scommon.h
$(GLSRC)gshtx.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gshtx.h:$(GLSRC)gsccolor.h
$(GLSRC)gshtx.h:$(GLSRC)gsstype.h
-$(GLSRC)gshtx.h:$(GLSRC)gxtmap.h
$(GLSRC)gshtx.h:$(GLSRC)gsmemory.h
$(GLSRC)gshtx.h:$(GLSRC)gslibctx.h
-$(GLSRC)gshtx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gshtx.h:$(GLSRC)stdio_.h
-$(GLSRC)gshtx.h:$(GLSRC)gsgstate.h
$(GLSRC)gshtx.h:$(GLSRC)stdint_.h
$(GLSRC)gshtx.h:$(GLSRC)gssprintf.h
-$(GLSRC)gshtx.h:$(GLSRC)std.h
$(GLSRC)gshtx.h:$(GLSRC)gstypes.h
+$(GLSRC)gshtx.h:$(GLSRC)std.h
$(GLSRC)gshtx.h:$(GLSRC)stdpre.h
$(GLSRC)gshtx.h:$(GLGEN)arch.h
+$(GLSRC)gshtx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxttf.h:$(GLSRC)stdpre.h
$(GLSRC)ttfsfnt.h:$(GLSRC)tttypes.h
$(GLSRC)ttfsfnt.h:$(GLSRC)ttconfig.h
@@ -11383,40 +11396,40 @@ $(GLSRC)ttfinp.h:$(GLSRC)ttfoutl.h
$(GLSRC)ttfinp.h:$(GLSRC)malloc_.h
$(GLSRC)ttfinp.h:$(GLSRC)bobbin.h
$(GLSRC)ttfinp.h:$(GLSRC)gxfcache.h
-$(GLSRC)ttfinp.h:$(GLSRC)gsuid.h
$(GLSRC)ttfinp.h:$(GLSRC)gsfont.h
-$(GLSRC)ttfinp.h:$(GLSRC)gxftype.h
$(GLSRC)ttfinp.h:$(GLSRC)gxbcache.h
+$(GLSRC)ttfinp.h:$(GLSRC)gxftype.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsgstate.h
$(GLSRC)ttfinp.h:$(GLSRC)gsxfont.h
-$(GLSRC)ttfinp.h:$(GLSRC)gxbitmap.h
-$(GLSRC)ttfinp.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttfinp.h:$(GLSRC)gxfixed.h
-$(GLSRC)ttfinp.h:$(GLSRC)scommon.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttfinp.h:$(GLSRC)memento.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsuid.h
+$(GLSRC)ttfinp.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttfinp.h:$(GLSRC)scommon.h
$(GLSRC)ttfinp.h:$(GLSRC)gsbitmap.h
$(GLSRC)ttfinp.h:$(GLSRC)gsstype.h
$(GLSRC)ttfinp.h:$(GLSRC)gsmemory.h
$(GLSRC)ttfinp.h:$(GLSRC)gslibctx.h
-$(GLSRC)ttfinp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttfinp.h:$(GLSRC)stdio_.h
-$(GLSRC)ttfinp.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsccode.h
$(GLSRC)ttfinp.h:$(GLSRC)stdint_.h
$(GLSRC)ttfinp.h:$(GLSRC)gssprintf.h
-$(GLSRC)ttfinp.h:$(GLSRC)gsccode.h
-$(GLSRC)ttfinp.h:$(GLSRC)std.h
$(GLSRC)ttfinp.h:$(GLSRC)gstypes.h
+$(GLSRC)ttfinp.h:$(GLSRC)std.h
$(GLSRC)ttfinp.h:$(GLSRC)stdpre.h
$(GLSRC)ttfinp.h:$(GLGEN)arch.h
+$(GLSRC)ttfinp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttfmemd.h:$(GLSRC)gsstype.h
$(GLSRC)ttfmemd.h:$(GLSRC)gsmemory.h
$(GLSRC)ttfmemd.h:$(GLSRC)gslibctx.h
-$(GLSRC)ttfmemd.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttfmemd.h:$(GLSRC)stdio_.h
$(GLSRC)ttfmemd.h:$(GLSRC)gssprintf.h
-$(GLSRC)ttfmemd.h:$(GLSRC)std.h
$(GLSRC)ttfmemd.h:$(GLSRC)gstypes.h
+$(GLSRC)ttfmemd.h:$(GLSRC)std.h
$(GLSRC)ttfmemd.h:$(GLSRC)stdpre.h
$(GLSRC)ttfmemd.h:$(GLGEN)arch.h
+$(GLSRC)ttfmemd.h:$(GLSRC)gs_dll_call.h
$(GLSRC)tttype.h:$(GLSRC)std.h
$(GLSRC)tttype.h:$(GLSRC)stdpre.h
$(GLSRC)tttype.h:$(GLGEN)arch.h
@@ -11436,6 +11449,7 @@ $(GLSRC)ttmisc.h:$(GLSRC)tttype.h
$(GLSRC)ttmisc.h:$(GLSRC)gx.h
$(GLSRC)ttmisc.h:$(GLSRC)ttconf.h
$(GLSRC)ttmisc.h:$(GLSRC)gdebug.h
+$(GLSRC)ttmisc.h:$(GLSRC)gsgstate.h
$(GLSRC)ttmisc.h:$(GLSRC)gsio.h
$(GLSRC)ttmisc.h:$(GLSRC)gsstrl.h
$(GLSRC)ttmisc.h:$(GLSRC)gdbflags.h
@@ -11443,14 +11457,13 @@ $(GLSRC)ttmisc.h:$(GLSRC)gserrors.h
$(GLSRC)ttmisc.h:$(GLSRC)vmsmath.h
$(GLSRC)ttmisc.h:$(GLSRC)gsmemory.h
$(GLSRC)ttmisc.h:$(GLSRC)gslibctx.h
-$(GLSRC)ttmisc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttmisc.h:$(GLSRC)stdio_.h
-$(GLSRC)ttmisc.h:$(GLSRC)gsgstate.h
$(GLSRC)ttmisc.h:$(GLSRC)gssprintf.h
-$(GLSRC)ttmisc.h:$(GLSRC)std.h
$(GLSRC)ttmisc.h:$(GLSRC)gstypes.h
+$(GLSRC)ttmisc.h:$(GLSRC)std.h
$(GLSRC)ttmisc.h:$(GLSRC)stdpre.h
$(GLSRC)ttmisc.h:$(GLGEN)arch.h
+$(GLSRC)ttmisc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)tttables.h:$(GLSRC)tttypes.h
$(GLSRC)tttables.h:$(GLSRC)ttconfig.h
$(GLSRC)tttables.h:$(GLSRC)tttype.h
@@ -11469,30 +11482,30 @@ $(GLSRC)ttobjs.h:$(GLSRC)ttconfig.h
$(GLSRC)ttobjs.h:$(GLSRC)tttype.h
$(GLSRC)ttobjs.h:$(GLSRC)ttconf.h
$(GLSRC)ttobjs.h:$(GLSRC)gxfcache.h
-$(GLSRC)ttobjs.h:$(GLSRC)gsuid.h
$(GLSRC)ttobjs.h:$(GLSRC)gsfont.h
-$(GLSRC)ttobjs.h:$(GLSRC)gxftype.h
$(GLSRC)ttobjs.h:$(GLSRC)gxbcache.h
+$(GLSRC)ttobjs.h:$(GLSRC)gxftype.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsgstate.h
$(GLSRC)ttobjs.h:$(GLSRC)gsxfont.h
-$(GLSRC)ttobjs.h:$(GLSRC)gxbitmap.h
-$(GLSRC)ttobjs.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttobjs.h:$(GLSRC)gxfixed.h
-$(GLSRC)ttobjs.h:$(GLSRC)scommon.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttobjs.h:$(GLSRC)memento.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsuid.h
+$(GLSRC)ttobjs.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttobjs.h:$(GLSRC)scommon.h
$(GLSRC)ttobjs.h:$(GLSRC)gsbitmap.h
$(GLSRC)ttobjs.h:$(GLSRC)gsstype.h
$(GLSRC)ttobjs.h:$(GLSRC)gsmemory.h
$(GLSRC)ttobjs.h:$(GLSRC)gslibctx.h
-$(GLSRC)ttobjs.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttobjs.h:$(GLSRC)stdio_.h
-$(GLSRC)ttobjs.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsccode.h
$(GLSRC)ttobjs.h:$(GLSRC)stdint_.h
$(GLSRC)ttobjs.h:$(GLSRC)gssprintf.h
-$(GLSRC)ttobjs.h:$(GLSRC)gsccode.h
-$(GLSRC)ttobjs.h:$(GLSRC)std.h
$(GLSRC)ttobjs.h:$(GLSRC)gstypes.h
+$(GLSRC)ttobjs.h:$(GLSRC)std.h
$(GLSRC)ttobjs.h:$(GLSRC)stdpre.h
$(GLSRC)ttobjs.h:$(GLGEN)arch.h
+$(GLSRC)ttobjs.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttcalc.h:$(GLSRC)ttcommon.h
$(GLSRC)ttcalc.h:$(GLSRC)tttypes.h
$(GLSRC)ttcalc.h:$(GLSRC)ttconfig.h
@@ -11513,30 +11526,30 @@ $(GLSRC)ttinterp.h:$(GLSRC)ttconfig.h
$(GLSRC)ttinterp.h:$(GLSRC)tttype.h
$(GLSRC)ttinterp.h:$(GLSRC)ttconf.h
$(GLSRC)ttinterp.h:$(GLSRC)gxfcache.h
-$(GLSRC)ttinterp.h:$(GLSRC)gsuid.h
$(GLSRC)ttinterp.h:$(GLSRC)gsfont.h
-$(GLSRC)ttinterp.h:$(GLSRC)gxftype.h
$(GLSRC)ttinterp.h:$(GLSRC)gxbcache.h
+$(GLSRC)ttinterp.h:$(GLSRC)gxftype.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsgstate.h
$(GLSRC)ttinterp.h:$(GLSRC)gsxfont.h
-$(GLSRC)ttinterp.h:$(GLSRC)gxbitmap.h
-$(GLSRC)ttinterp.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttinterp.h:$(GLSRC)gxfixed.h
-$(GLSRC)ttinterp.h:$(GLSRC)scommon.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttinterp.h:$(GLSRC)memento.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsuid.h
+$(GLSRC)ttinterp.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttinterp.h:$(GLSRC)scommon.h
$(GLSRC)ttinterp.h:$(GLSRC)gsbitmap.h
$(GLSRC)ttinterp.h:$(GLSRC)gsstype.h
$(GLSRC)ttinterp.h:$(GLSRC)gsmemory.h
$(GLSRC)ttinterp.h:$(GLSRC)gslibctx.h
-$(GLSRC)ttinterp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttinterp.h:$(GLSRC)stdio_.h
-$(GLSRC)ttinterp.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsccode.h
$(GLSRC)ttinterp.h:$(GLSRC)stdint_.h
$(GLSRC)ttinterp.h:$(GLSRC)gssprintf.h
-$(GLSRC)ttinterp.h:$(GLSRC)gsccode.h
-$(GLSRC)ttinterp.h:$(GLSRC)std.h
$(GLSRC)ttinterp.h:$(GLSRC)gstypes.h
+$(GLSRC)ttinterp.h:$(GLSRC)std.h
$(GLSRC)ttinterp.h:$(GLSRC)stdpre.h
$(GLSRC)ttinterp.h:$(GLGEN)arch.h
+$(GLSRC)ttinterp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttload.h:$(GLSRC)ttobjs.h
$(GLSRC)ttload.h:$(GLSRC)ttfoutl.h
$(GLSRC)ttload.h:$(GLSRC)malloc_.h
@@ -11549,308 +11562,310 @@ $(GLSRC)ttload.h:$(GLSRC)ttconfig.h
$(GLSRC)ttload.h:$(GLSRC)tttype.h
$(GLSRC)ttload.h:$(GLSRC)ttconf.h
$(GLSRC)ttload.h:$(GLSRC)gxfcache.h
-$(GLSRC)ttload.h:$(GLSRC)gsuid.h
$(GLSRC)ttload.h:$(GLSRC)gsfont.h
-$(GLSRC)ttload.h:$(GLSRC)gxftype.h
$(GLSRC)ttload.h:$(GLSRC)gxbcache.h
+$(GLSRC)ttload.h:$(GLSRC)gxftype.h
+$(GLSRC)ttload.h:$(GLSRC)gsgstate.h
$(GLSRC)ttload.h:$(GLSRC)gsxfont.h
-$(GLSRC)ttload.h:$(GLSRC)gxbitmap.h
-$(GLSRC)ttload.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttload.h:$(GLSRC)gxfixed.h
-$(GLSRC)ttload.h:$(GLSRC)scommon.h
+$(GLSRC)ttload.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttload.h:$(GLSRC)memento.h
+$(GLSRC)ttload.h:$(GLSRC)gsuid.h
+$(GLSRC)ttload.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttload.h:$(GLSRC)scommon.h
$(GLSRC)ttload.h:$(GLSRC)gsbitmap.h
$(GLSRC)ttload.h:$(GLSRC)gsstype.h
$(GLSRC)ttload.h:$(GLSRC)gsmemory.h
$(GLSRC)ttload.h:$(GLSRC)gslibctx.h
-$(GLSRC)ttload.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttload.h:$(GLSRC)stdio_.h
-$(GLSRC)ttload.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttload.h:$(GLSRC)gsccode.h
$(GLSRC)ttload.h:$(GLSRC)stdint_.h
$(GLSRC)ttload.h:$(GLSRC)gssprintf.h
-$(GLSRC)ttload.h:$(GLSRC)gsccode.h
-$(GLSRC)ttload.h:$(GLSRC)std.h
$(GLSRC)ttload.h:$(GLSRC)gstypes.h
+$(GLSRC)ttload.h:$(GLSRC)std.h
$(GLSRC)ttload.h:$(GLSRC)stdpre.h
$(GLSRC)ttload.h:$(GLGEN)arch.h
+$(GLSRC)ttload.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxhintn.h:$(GLSRC)gxfont1.h
$(GLSRC)gxhintn.h:$(GLSRC)gstype1.h
$(GLSRC)gxhintn.h:$(GLSRC)gxfont42.h
$(GLSRC)gxhintn.h:$(GLSRC)gxfont.h
$(GLSRC)gxhintn.h:$(GLSRC)gspath.h
-$(GLSRC)gxhintn.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxhintn.h:$(GLSRC)gsgdata.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxhintn.h:$(GLSRC)gxfapi.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsnotify.h
$(GLSRC)gxhintn.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxhintn.h:$(GLSRC)gstext.h
$(GLSRC)gxhintn.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsuid.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxhintn.h:$(GLSRC)gsfont.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxpath.h
$(GLSRC)gxhintn.h:$(GLSRC)gxftype.h
$(GLSRC)gxhintn.h:$(GLSRC)gscms.h
-$(GLSRC)gxhintn.h:$(GLSRC)gscspace.h
-$(GLSRC)gxhintn.h:$(GLSRC)gxpath.h
-$(GLSRC)gxhintn.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxhintn.h:$(GLSRC)gxarith.h
-$(GLSRC)gxhintn.h:$(GLSRC)gspenum.h
-$(GLSRC)gxhintn.h:$(GLSRC)gxhttile.h
$(GLSRC)gxhintn.h:$(GLSRC)gsrect.h
$(GLSRC)gxhintn.h:$(GLSRC)gslparam.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxhintn.h:$(GLSRC)gscpm.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxhintn.h:$(GLSRC)gscspace.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsnotify.h
$(GLSRC)gxhintn.h:$(GLSRC)gsxfont.h
$(GLSRC)gxhintn.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxhintn.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxhintn.h:$(GLSRC)gscpm.h
$(GLSRC)gxhintn.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxhintn.h:$(GLSRC)gspenum.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxhttile.h
$(GLSRC)gxhintn.h:$(GLSRC)gsparam.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxhintn.h:$(GLSRC)memento.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsuid.h
$(GLSRC)gxhintn.h:$(GLSRC)gxsync.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxhintn.h:$(GLSRC)scommon.h
-$(GLSRC)gxhintn.h:$(GLSRC)memento.h
$(GLSRC)gxhintn.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxarith.h
+$(GLSRC)gxhintn.h:$(GLSRC)gpsync.h
$(GLSRC)gxhintn.h:$(GLSRC)gsstype.h
$(GLSRC)gxhintn.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxhintn.h:$(GLSRC)gpsync.h
$(GLSRC)gxhintn.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxhintn.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxhintn.h:$(GLSRC)stdio_.h
$(GLSRC)gxhintn.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxhintn.h:$(GLSRC)stdio_.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsccode.h
$(GLSRC)gxhintn.h:$(GLSRC)stdint_.h
$(GLSRC)gxhintn.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsccode.h
-$(GLSRC)gxhintn.h:$(GLSRC)std.h
$(GLSRC)gxhintn.h:$(GLSRC)gstypes.h
+$(GLSRC)gxhintn.h:$(GLSRC)std.h
$(GLSRC)gxhintn.h:$(GLSRC)stdpre.h
$(GLSRC)gxhintn.h:$(GLGEN)arch.h
+$(GLSRC)gxhintn.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcid.h:$(GLSRC)gsstype.h
$(GLSRC)gxcid.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcid.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxcid.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcid.h:$(GLSRC)stdio_.h
$(GLSRC)gxcid.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxcid.h:$(GLSRC)std.h
$(GLSRC)gxcid.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcid.h:$(GLSRC)std.h
$(GLSRC)gxcid.h:$(GLSRC)stdpre.h
$(GLSRC)gxcid.h:$(GLGEN)arch.h
+$(GLSRC)gxcid.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfcid.h:$(GLSRC)gstype1.h
$(GLSRC)gxfcid.h:$(GLSRC)gxfont42.h
$(GLSRC)gxfcid.h:$(GLSRC)gxfont.h
$(GLSRC)gxfcid.h:$(GLSRC)gspath.h
-$(GLSRC)gxfcid.h:$(GLSRC)gxcid.h
-$(GLSRC)gxfcid.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxfcid.h:$(GLSRC)gsgdata.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxfcid.h:$(GLSRC)gxfapi.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfcid.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxfcid.h:$(GLSRC)gstext.h
$(GLSRC)gxfcid.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsuid.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxfcid.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxpath.h
$(GLSRC)gxfcid.h:$(GLSRC)gxftype.h
$(GLSRC)gxfcid.h:$(GLSRC)gscms.h
-$(GLSRC)gxfcid.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfcid.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfcid.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxfcid.h:$(GLSRC)gxarith.h
-$(GLSRC)gxfcid.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfcid.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfcid.h:$(GLSRC)gsrect.h
$(GLSRC)gxfcid.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfcid.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfcid.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfcid.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxcid.h
$(GLSRC)gxfcid.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfcid.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxfcid.h:$(GLSRC)gscpm.h
$(GLSRC)gxfcid.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfcid.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfcid.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfcid.h:$(GLSRC)memento.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsuid.h
$(GLSRC)gxfcid.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxfcid.h:$(GLSRC)scommon.h
-$(GLSRC)gxfcid.h:$(GLSRC)memento.h
$(GLSRC)gxfcid.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfcid.h:$(GLSRC)gpsync.h
$(GLSRC)gxfcid.h:$(GLSRC)gsstype.h
$(GLSRC)gxfcid.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxfcid.h:$(GLSRC)gpsync.h
$(GLSRC)gxfcid.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfcid.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfcid.h:$(GLSRC)stdio_.h
$(GLSRC)gxfcid.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfcid.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsccode.h
$(GLSRC)gxfcid.h:$(GLSRC)stdint_.h
$(GLSRC)gxfcid.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfcid.h:$(GLSRC)std.h
$(GLSRC)gxfcid.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfcid.h:$(GLSRC)std.h
$(GLSRC)gxfcid.h:$(GLSRC)stdpre.h
$(GLSRC)gxfcid.h:$(GLGEN)arch.h
-$(GLSRC)gxfcmap.h:$(GLSRC)gxcid.h
+$(GLSRC)gxfcid.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfcmap.h:$(GLSRC)gsfcmap.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gxcid.h
$(GLSRC)gxfcmap.h:$(GLSRC)gsuid.h
$(GLSRC)gxfcmap.h:$(GLSRC)gsstype.h
$(GLSRC)gxfcmap.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfcmap.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfcmap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfcmap.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfcmap.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfcmap.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfcmap.h:$(GLSRC)std.h
+$(GLSRC)gxfcmap.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfcmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfcmap.h:$(GLSRC)std.h
$(GLSRC)gxfcmap.h:$(GLSRC)stdpre.h
$(GLSRC)gxfcmap.h:$(GLGEN)arch.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gxfcmap.h
-$(GLSRC)gxfcmap1.h:$(GLSRC)gxcid.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gsfcmap.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gxcid.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gsuid.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gsstype.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfcmap1.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfcmap1.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfcmap1.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfcmap1.h:$(GLSRC)std.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)std.h
$(GLSRC)gxfcmap1.h:$(GLSRC)stdpre.h
$(GLSRC)gxfcmap1.h:$(GLGEN)arch.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxfont0.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxfcid.h
$(GLSRC)gxfont0c.h:$(GLSRC)gstype1.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxfont42.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxfont.h
$(GLSRC)gxfont0c.h:$(GLSRC)gspath.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gxcid.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsgdata.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxfapi.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxfont0c.h:$(GLSRC)gstext.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsuid.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxpath.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxftype.h
$(GLSRC)gxfont0c.h:$(GLSRC)gscms.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gxarith.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsrect.h
$(GLSRC)gxfont0c.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxcid.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gscpm.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont0c.h:$(GLSRC)memento.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsuid.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxfont0c.h:$(GLSRC)scommon.h
-$(GLSRC)gxfont0c.h:$(GLSRC)memento.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsstype.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont0c.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfont0c.h:$(GLSRC)stdio_.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont0c.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsccode.h
$(GLSRC)gxfont0c.h:$(GLSRC)stdint_.h
$(GLSRC)gxfont0c.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfont0c.h:$(GLSRC)std.h
$(GLSRC)gxfont0c.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfont0c.h:$(GLSRC)std.h
$(GLSRC)gxfont0c.h:$(GLSRC)stdpre.h
$(GLSRC)gxfont0c.h:$(GLGEN)arch.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscrypt1.h:$(GLSRC)stdpre.h
$(GLSRC)gstype1.h:$(GLSRC)gspath.h
-$(GLSRC)gstype1.h:$(GLSRC)gxmatrix.h
$(GLSRC)gstype1.h:$(GLSRC)gsgdata.h
-$(GLSRC)gstype1.h:$(GLSRC)gsgcache.h
+$(GLSRC)gstype1.h:$(GLSRC)gxmatrix.h
$(GLSRC)gstype1.h:$(GLSRC)gsfont.h
-$(GLSRC)gstype1.h:$(GLSRC)gspenum.h
-$(GLSRC)gstype1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstype1.h:$(GLSRC)gsgcache.h
+$(GLSRC)gstype1.h:$(GLSRC)gsgstate.h
$(GLSRC)gstype1.h:$(GLSRC)gxfixed.h
+$(GLSRC)gstype1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstype1.h:$(GLSRC)gspenum.h
$(GLSRC)gstype1.h:$(GLSRC)scommon.h
$(GLSRC)gstype1.h:$(GLSRC)gsstype.h
$(GLSRC)gstype1.h:$(GLSRC)gsmemory.h
$(GLSRC)gstype1.h:$(GLSRC)gslibctx.h
-$(GLSRC)gstype1.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gstype1.h:$(GLSRC)stdio_.h
-$(GLSRC)gstype1.h:$(GLSRC)gsgstate.h
$(GLSRC)gstype1.h:$(GLSRC)stdint_.h
$(GLSRC)gstype1.h:$(GLSRC)gssprintf.h
-$(GLSRC)gstype1.h:$(GLSRC)std.h
$(GLSRC)gstype1.h:$(GLSRC)gstypes.h
+$(GLSRC)gstype1.h:$(GLSRC)std.h
$(GLSRC)gstype1.h:$(GLSRC)stdpre.h
$(GLSRC)gstype1.h:$(GLGEN)arch.h
+$(GLSRC)gstype1.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfont1.h:$(GLSRC)gstype1.h
$(GLSRC)gxfont1.h:$(GLSRC)gxfont.h
$(GLSRC)gxfont1.h:$(GLSRC)gspath.h
-$(GLSRC)gxfont1.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxfont1.h:$(GLSRC)gsgdata.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxfont1.h:$(GLSRC)gxfapi.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfont1.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxfont1.h:$(GLSRC)gstext.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsuid.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxfont1.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxpath.h
$(GLSRC)gxfont1.h:$(GLSRC)gxftype.h
$(GLSRC)gxfont1.h:$(GLSRC)gscms.h
-$(GLSRC)gxfont1.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfont1.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxfont1.h:$(GLSRC)gxarith.h
-$(GLSRC)gxfont1.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfont1.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfont1.h:$(GLSRC)gsrect.h
$(GLSRC)gxfont1.h:$(GLSRC)gslparam.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfont1.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsdevice.h
$(GLSRC)gxfont1.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont1.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsnotify.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsiparam.h
$(GLSRC)gxfont1.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont1.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxhttile.h
$(GLSRC)gxfont1.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont1.h:$(GLSRC)memento.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsuid.h
$(GLSRC)gxfont1.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxfont1.h:$(GLSRC)scommon.h
-$(GLSRC)gxfont1.h:$(GLSRC)memento.h
$(GLSRC)gxfont1.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont1.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont1.h:$(GLSRC)gsstype.h
$(GLSRC)gxfont1.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxfont1.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont1.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfont1.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfont1.h:$(GLSRC)stdio_.h
$(GLSRC)gxfont1.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont1.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsccode.h
$(GLSRC)gxfont1.h:$(GLSRC)stdint_.h
$(GLSRC)gxfont1.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfont1.h:$(GLSRC)std.h
$(GLSRC)gxfont1.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfont1.h:$(GLSRC)std.h
$(GLSRC)gxfont1.h:$(GLSRC)stdpre.h
$(GLSRC)gxfont1.h:$(GLGEN)arch.h
+$(GLSRC)gxfont1.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxtype1.h:$(GLSRC)gxhintn.h
$(GLSRC)gxtype1.h:$(GLSRC)gxfont1.h
$(GLSRC)gxtype1.h:$(GLSRC)gzpath.h
@@ -11859,558 +11874,558 @@ $(GLSRC)gxtype1.h:$(GLSRC)gxfont42.h
$(GLSRC)gxtype1.h:$(GLSRC)gscrypt1.h
$(GLSRC)gxtype1.h:$(GLSRC)gxfont.h
$(GLSRC)gxtype1.h:$(GLSRC)gspath.h
-$(GLSRC)gxtype1.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxtype1.h:$(GLSRC)gsgdata.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxtype1.h:$(GLSRC)gxfapi.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsnotify.h
$(GLSRC)gxtype1.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxtype1.h:$(GLSRC)gstext.h
$(GLSRC)gxtype1.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsuid.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxtype1.h:$(GLSRC)gsfont.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxpath.h
$(GLSRC)gxtype1.h:$(GLSRC)gxftype.h
$(GLSRC)gxtype1.h:$(GLSRC)gscms.h
-$(GLSRC)gxtype1.h:$(GLSRC)gscspace.h
-$(GLSRC)gxtype1.h:$(GLSRC)gxpath.h
-$(GLSRC)gxtype1.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxtype1.h:$(GLSRC)gxarith.h
-$(GLSRC)gxtype1.h:$(GLSRC)gspenum.h
-$(GLSRC)gxtype1.h:$(GLSRC)gxhttile.h
$(GLSRC)gxtype1.h:$(GLSRC)gsrect.h
$(GLSRC)gxtype1.h:$(GLSRC)gslparam.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxtype1.h:$(GLSRC)gscpm.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxtype1.h:$(GLSRC)gscspace.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsnotify.h
$(GLSRC)gxtype1.h:$(GLSRC)gsxfont.h
$(GLSRC)gxtype1.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxtype1.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxtype1.h:$(GLSRC)gscpm.h
$(GLSRC)gxtype1.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxtype1.h:$(GLSRC)gspenum.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxhttile.h
$(GLSRC)gxtype1.h:$(GLSRC)gsparam.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxtype1.h:$(GLSRC)memento.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsuid.h
$(GLSRC)gxtype1.h:$(GLSRC)gxsync.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxtype1.h:$(GLSRC)scommon.h
-$(GLSRC)gxtype1.h:$(GLSRC)memento.h
$(GLSRC)gxtype1.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxarith.h
+$(GLSRC)gxtype1.h:$(GLSRC)gpsync.h
$(GLSRC)gxtype1.h:$(GLSRC)gsstype.h
$(GLSRC)gxtype1.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxtype1.h:$(GLSRC)gpsync.h
$(GLSRC)gxtype1.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxtype1.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxtype1.h:$(GLSRC)stdio_.h
$(GLSRC)gxtype1.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxtype1.h:$(GLSRC)stdio_.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsccode.h
$(GLSRC)gxtype1.h:$(GLSRC)stdint_.h
$(GLSRC)gxtype1.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsccode.h
-$(GLSRC)gxtype1.h:$(GLSRC)std.h
$(GLSRC)gxtype1.h:$(GLSRC)gstypes.h
+$(GLSRC)gxtype1.h:$(GLSRC)std.h
$(GLSRC)gxtype1.h:$(GLSRC)stdpre.h
$(GLSRC)gxtype1.h:$(GLGEN)arch.h
+$(GLSRC)gxtype1.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsdsrc.h:$(GLSRC)gsstruct.h
$(GLSRC)gsdsrc.h:$(GLSRC)scommon.h
$(GLSRC)gsdsrc.h:$(GLSRC)gsstype.h
$(GLSRC)gsdsrc.h:$(GLSRC)gsmemory.h
$(GLSRC)gsdsrc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsdsrc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsdsrc.h:$(GLSRC)stdio_.h
$(GLSRC)gsdsrc.h:$(GLSRC)stdint_.h
$(GLSRC)gsdsrc.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsdsrc.h:$(GLSRC)std.h
$(GLSRC)gsdsrc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsdsrc.h:$(GLSRC)std.h
$(GLSRC)gsdsrc.h:$(GLSRC)stdpre.h
$(GLSRC)gsdsrc.h:$(GLGEN)arch.h
+$(GLSRC)gsdsrc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfunc.h:$(GLSRC)gsdsrc.h
$(GLSRC)gsfunc.h:$(GLSRC)gsparam.h
+$(GLSRC)gsfunc.h:$(GLSRC)memento.h
$(GLSRC)gsfunc.h:$(GLSRC)gsstruct.h
$(GLSRC)gsfunc.h:$(GLSRC)scommon.h
-$(GLSRC)gsfunc.h:$(GLSRC)memento.h
$(GLSRC)gsfunc.h:$(GLSRC)gsstype.h
$(GLSRC)gsfunc.h:$(GLSRC)gsmemory.h
$(GLSRC)gsfunc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsfunc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfunc.h:$(GLSRC)stdio_.h
$(GLSRC)gsfunc.h:$(GLSRC)stdint_.h
$(GLSRC)gsfunc.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsfunc.h:$(GLSRC)std.h
$(GLSRC)gsfunc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfunc.h:$(GLSRC)std.h
$(GLSRC)gsfunc.h:$(GLSRC)stdpre.h
$(GLSRC)gsfunc.h:$(GLGEN)arch.h
+$(GLSRC)gsfunc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfunc0.h:$(GLSRC)gsfunc.h
$(GLSRC)gsfunc0.h:$(GLSRC)gsdsrc.h
$(GLSRC)gsfunc0.h:$(GLSRC)gsparam.h
+$(GLSRC)gsfunc0.h:$(GLSRC)memento.h
$(GLSRC)gsfunc0.h:$(GLSRC)gsstruct.h
$(GLSRC)gsfunc0.h:$(GLSRC)scommon.h
-$(GLSRC)gsfunc0.h:$(GLSRC)memento.h
$(GLSRC)gsfunc0.h:$(GLSRC)gsstype.h
$(GLSRC)gsfunc0.h:$(GLSRC)gsmemory.h
$(GLSRC)gsfunc0.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsfunc0.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfunc0.h:$(GLSRC)stdio_.h
$(GLSRC)gsfunc0.h:$(GLSRC)stdint_.h
$(GLSRC)gsfunc0.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsfunc0.h:$(GLSRC)std.h
$(GLSRC)gsfunc0.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfunc0.h:$(GLSRC)std.h
$(GLSRC)gsfunc0.h:$(GLSRC)stdpre.h
$(GLSRC)gsfunc0.h:$(GLGEN)arch.h
+$(GLSRC)gsfunc0.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfunc.h:$(GLSRC)gsfunc.h
$(GLSRC)gxfunc.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxfunc.h:$(GLSRC)gsparam.h
+$(GLSRC)gxfunc.h:$(GLSRC)memento.h
$(GLSRC)gxfunc.h:$(GLSRC)gsstruct.h
$(GLSRC)gxfunc.h:$(GLSRC)scommon.h
-$(GLSRC)gxfunc.h:$(GLSRC)memento.h
$(GLSRC)gxfunc.h:$(GLSRC)gsstype.h
$(GLSRC)gxfunc.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfunc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfunc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfunc.h:$(GLSRC)stdio_.h
$(GLSRC)gxfunc.h:$(GLSRC)stdint_.h
$(GLSRC)gxfunc.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxfunc.h:$(GLSRC)std.h
$(GLSRC)gxfunc.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfunc.h:$(GLSRC)std.h
$(GLSRC)gxfunc.h:$(GLSRC)stdpre.h
$(GLSRC)gxfunc.h:$(GLGEN)arch.h
+$(GLSRC)gxfunc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfunc4.h:$(GLSRC)gsfunc.h
$(GLSRC)gsfunc4.h:$(GLSRC)gsdsrc.h
$(GLSRC)gsfunc4.h:$(GLSRC)gsparam.h
+$(GLSRC)gsfunc4.h:$(GLSRC)memento.h
$(GLSRC)gsfunc4.h:$(GLSRC)gsstruct.h
$(GLSRC)gsfunc4.h:$(GLSRC)scommon.h
-$(GLSRC)gsfunc4.h:$(GLSRC)memento.h
$(GLSRC)gsfunc4.h:$(GLSRC)gsstype.h
$(GLSRC)gsfunc4.h:$(GLSRC)gsmemory.h
$(GLSRC)gsfunc4.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsfunc4.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfunc4.h:$(GLSRC)stdio_.h
$(GLSRC)gsfunc4.h:$(GLSRC)stdint_.h
$(GLSRC)gsfunc4.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsfunc4.h:$(GLSRC)std.h
$(GLSRC)gsfunc4.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfunc4.h:$(GLSRC)std.h
$(GLSRC)gsfunc4.h:$(GLSRC)stdpre.h
$(GLSRC)gsfunc4.h:$(GLGEN)arch.h
+$(GLSRC)gsfunc4.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscpixel.h:$(GLSRC)gscspace.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsgstate.h
$(GLSRC)gscpixel.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscpixel.h:$(GLSRC)gxbitmap.h
$(GLSRC)gscpixel.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscpixel.h:$(GLSRC)gsrefct.h
-$(GLSRC)gscpixel.h:$(GLSRC)gsccolor.h
-$(GLSRC)gscpixel.h:$(GLSRC)scommon.h
$(GLSRC)gscpixel.h:$(GLSRC)memento.h
+$(GLSRC)gscpixel.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscpixel.h:$(GLSRC)scommon.h
$(GLSRC)gscpixel.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsccolor.h
$(GLSRC)gscpixel.h:$(GLSRC)gsstype.h
$(GLSRC)gscpixel.h:$(GLSRC)gsmemory.h
$(GLSRC)gscpixel.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscpixel.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscpixel.h:$(GLSRC)stdio_.h
-$(GLSRC)gscpixel.h:$(GLSRC)gsgstate.h
$(GLSRC)gscpixel.h:$(GLSRC)stdint_.h
$(GLSRC)gscpixel.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscpixel.h:$(GLSRC)std.h
$(GLSRC)gscpixel.h:$(GLSRC)gstypes.h
+$(GLSRC)gscpixel.h:$(GLSRC)std.h
$(GLSRC)gscpixel.h:$(GLSRC)stdpre.h
$(GLSRC)gscpixel.h:$(GLGEN)arch.h
-$(GLSRC)gscms.h:$(GLSRC)gscspace.h
+$(GLSRC)gscpixel.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscms.h:$(GLSRC)gsdevice.h
+$(GLSRC)gscms.h:$(GLSRC)gscspace.h
+$(GLSRC)gscms.h:$(GLSRC)gsgstate.h
$(GLSRC)gscms.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscms.h:$(GLSRC)gxbitmap.h
$(GLSRC)gscms.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gscms.h:$(GLSRC)gsrefct.h
$(GLSRC)gscms.h:$(GLSRC)gsparam.h
-$(GLSRC)gscms.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscms.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscms.h:$(GLSRC)memento.h
$(GLSRC)gscms.h:$(GLSRC)gxsync.h
+$(GLSRC)gscms.h:$(GLSRC)gxbitmap.h
$(GLSRC)gscms.h:$(GLSRC)scommon.h
-$(GLSRC)gscms.h:$(GLSRC)memento.h
$(GLSRC)gscms.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscms.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscms.h:$(GLSRC)gpsync.h
$(GLSRC)gscms.h:$(GLSRC)gsstype.h
$(GLSRC)gscms.h:$(GLSRC)gsmemory.h
-$(GLSRC)gscms.h:$(GLSRC)gpsync.h
$(GLSRC)gscms.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscms.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscms.h:$(GLSRC)stdio_.h
-$(GLSRC)gscms.h:$(GLSRC)gsgstate.h
$(GLSRC)gscms.h:$(GLSRC)stdint_.h
$(GLSRC)gscms.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscms.h:$(GLSRC)std.h
$(GLSRC)gscms.h:$(GLSRC)gstypes.h
+$(GLSRC)gscms.h:$(GLSRC)std.h
$(GLSRC)gscms.h:$(GLSRC)stdpre.h
$(GLSRC)gscms.h:$(GLGEN)arch.h
+$(GLSRC)gscms.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gxcvalue.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gscms.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gscspace.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gscspace.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gsrefct.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gsparam.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)memento.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gxsync.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsicc_cms.h:$(GLSRC)scommon.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)memento.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gsstype.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gsmemory.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_cms.h:$(GLSRC)stdio_.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_cms.h:$(GLSRC)stdint_.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)std.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)std.h
$(GLSRC)gsicc_cms.h:$(GLSRC)stdpre.h
$(GLSRC)gsicc_cms.h:$(GLGEN)arch.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gsicc_cms.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gxcvalue.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gscms.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gscspace.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gscspace.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gsrefct.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gsparam.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)memento.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gxsync.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsicc_manage.h:$(GLSRC)scommon.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)memento.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gsstype.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gsmemory.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_manage.h:$(GLSRC)stdio_.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_manage.h:$(GLSRC)stdint_.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)std.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)std.h
$(GLSRC)gsicc_manage.h:$(GLSRC)stdpre.h
$(GLSRC)gsicc_manage.h:$(GLGEN)arch.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gxcvalue.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gscms.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gscspace.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gscspace.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gsrefct.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gsparam.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)memento.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gxsync.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsicc_cache.h:$(GLSRC)scommon.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)memento.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gsstype.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gsmemory.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_cache.h:$(GLSRC)stdio_.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_cache.h:$(GLSRC)stdint_.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)std.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)std.h
$(GLSRC)gsicc_cache.h:$(GLSRC)stdpre.h
$(GLSRC)gsicc_cache.h:$(GLGEN)arch.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gscms.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gscspace.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gscspace.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsrefct.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsparam.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)memento.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gxsync.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)scommon.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)memento.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsstype.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsmemory.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)stdio_.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)stdint_.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)std.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)std.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)stdpre.h
$(GLSRC)gsicc_profilecache.h:$(GLGEN)arch.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gstrap.h:$(GLSRC)gspath.h
$(GLSRC)gstrap.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gstrap.h:$(GLSRC)gspenum.h
-$(GLSRC)gstrap.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstrap.h:$(GLSRC)gsgstate.h
$(GLSRC)gstrap.h:$(GLSRC)gxfixed.h
+$(GLSRC)gstrap.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstrap.h:$(GLSRC)gspenum.h
$(GLSRC)gstrap.h:$(GLSRC)gsparam.h
$(GLSRC)gstrap.h:$(GLSRC)scommon.h
$(GLSRC)gstrap.h:$(GLSRC)gsstype.h
$(GLSRC)gstrap.h:$(GLSRC)gsmemory.h
$(GLSRC)gstrap.h:$(GLSRC)gslibctx.h
-$(GLSRC)gstrap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gstrap.h:$(GLSRC)stdio_.h
-$(GLSRC)gstrap.h:$(GLSRC)gsgstate.h
$(GLSRC)gstrap.h:$(GLSRC)stdint_.h
$(GLSRC)gstrap.h:$(GLSRC)gssprintf.h
-$(GLSRC)gstrap.h:$(GLSRC)std.h
$(GLSRC)gstrap.h:$(GLSRC)gstypes.h
+$(GLSRC)gstrap.h:$(GLSRC)std.h
$(GLSRC)gstrap.h:$(GLSRC)stdpre.h
$(GLSRC)gstrap.h:$(GLGEN)arch.h
+$(GLSRC)gstrap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsipar3x.h:$(GLSRC)gsiparm3.h
$(GLSRC)gsipar3x.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsipar3x.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsipar3x.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsipar3x.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsipar3x.h:$(GLSRC)scommon.h
$(GLSRC)gsipar3x.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gsccolor.h
$(GLSRC)gsipar3x.h:$(GLSRC)gsstype.h
$(GLSRC)gsipar3x.h:$(GLSRC)gsmemory.h
$(GLSRC)gsipar3x.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsipar3x.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsipar3x.h:$(GLSRC)stdio_.h
$(GLSRC)gsipar3x.h:$(GLSRC)stdint_.h
$(GLSRC)gsipar3x.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsipar3x.h:$(GLSRC)std.h
$(GLSRC)gsipar3x.h:$(GLSRC)gstypes.h
+$(GLSRC)gsipar3x.h:$(GLSRC)std.h
$(GLSRC)gsipar3x.h:$(GLSRC)stdpre.h
$(GLSRC)gsipar3x.h:$(GLGEN)arch.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gximag3x.h:$(GLSRC)gsipar3x.h
$(GLSRC)gximag3x.h:$(GLSRC)gsiparm3.h
$(GLSRC)gximag3x.h:$(GLSRC)gxiparam.h
$(GLSRC)gximag3x.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxcmap.h
$(GLSRC)gximag3x.h:$(GLSRC)gxtext.h
$(GLSRC)gximag3x.h:$(GLSRC)gstext.h
$(GLSRC)gximag3x.h:$(GLSRC)gsnamecl.h
$(GLSRC)gximag3x.h:$(GLSRC)gstparam.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxfcache.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxcspace.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsropt.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxfmap.h
$(GLSRC)gximag3x.h:$(GLSRC)gsfunc.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxcspace.h
$(GLSRC)gximag3x.h:$(GLSRC)gxrplane.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsuid.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximag3x.h:$(GLSRC)gscsel.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsfont.h
$(GLSRC)gximag3x.h:$(GLSRC)gsimage.h
$(GLSRC)gximag3x.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxdda.h
$(GLSRC)gximag3x.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsfont.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxfmap.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxftype.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxbcache.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsropt.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxdda.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxpath.h
$(GLSRC)gximag3x.h:$(GLSRC)gxfrac.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxtmap.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxftype.h
$(GLSRC)gximag3x.h:$(GLSRC)gscms.h
-$(GLSRC)gximag3x.h:$(GLSRC)gscspace.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxpath.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxbcache.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsdevice.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxarith.h
-$(GLSRC)gximag3x.h:$(GLSRC)gspenum.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxhttile.h
$(GLSRC)gximag3x.h:$(GLSRC)gsrect.h
$(GLSRC)gximag3x.h:$(GLSRC)gslparam.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsdevice.h
+$(GLSRC)gximag3x.h:$(GLSRC)gscpm.h
+$(GLSRC)gximag3x.h:$(GLSRC)gscspace.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsgstate.h
$(GLSRC)gximag3x.h:$(GLSRC)gsxfont.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsiparam.h
$(GLSRC)gximag3x.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gximag3x.h:$(GLSRC)gscpm.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsiparam.h
$(GLSRC)gximag3x.h:$(GLSRC)gxfixed.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsrefct.h
+$(GLSRC)gximag3x.h:$(GLSRC)gscompt.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximag3x.h:$(GLSRC)gspenum.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxhttile.h
$(GLSRC)gximag3x.h:$(GLSRC)gsparam.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsrefct.h
$(GLSRC)gximag3x.h:$(GLSRC)gp.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximag3x.h:$(GLSRC)memento.h
+$(GLSRC)gximag3x.h:$(GLSRC)memory_.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsuid.h
$(GLSRC)gximag3x.h:$(GLSRC)gsstruct.h
$(GLSRC)gximag3x.h:$(GLSRC)gxsync.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxbitmap.h
$(GLSRC)gximag3x.h:$(GLSRC)srdline.h
$(GLSRC)gximag3x.h:$(GLSRC)scommon.h
-$(GLSRC)gximag3x.h:$(GLSRC)memento.h
-$(GLSRC)gximag3x.h:$(GLSRC)gscsel.h
$(GLSRC)gximag3x.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsstype.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxarith.h
$(GLSRC)gximag3x.h:$(GLSRC)stat_.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxtmap.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsmemory.h
$(GLSRC)gximag3x.h:$(GLSRC)gpsync.h
-$(GLSRC)gximag3x.h:$(GLSRC)memory_.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsstype.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsmemory.h
$(GLSRC)gximag3x.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gximag3x.h:$(GLSRC)gslibctx.h
$(GLSRC)gximag3x.h:$(GLSRC)gscdefs.h
-$(GLSRC)gximag3x.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gximag3x.h:$(GLSRC)stdio_.h
-$(GLSRC)gximag3x.h:$(GLSRC)gscompt.h
+$(GLSRC)gximag3x.h:$(GLSRC)gslibctx.h
$(GLSRC)gximag3x.h:$(GLSRC)gxcindex.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximag3x.h:$(GLSRC)stdio_.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsccode.h
$(GLSRC)gximag3x.h:$(GLSRC)stdint_.h
$(GLSRC)gximag3x.h:$(GLSRC)gssprintf.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsccode.h
-$(GLSRC)gximag3x.h:$(GLSRC)std.h
$(GLSRC)gximag3x.h:$(GLSRC)gstypes.h
+$(GLSRC)gximag3x.h:$(GLSRC)std.h
$(GLSRC)gximag3x.h:$(GLSRC)stdpre.h
$(GLSRC)gximag3x.h:$(GLGEN)arch.h
+$(GLSRC)gximag3x.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxblend.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxblend.h:$(GLSRC)gxcmap.h
$(GLSRC)gxblend.h:$(GLSRC)gxtext.h
$(GLSRC)gxblend.h:$(GLSRC)gstext.h
$(GLSRC)gxblend.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxblend.h:$(GLSRC)gstparam.h
-$(GLSRC)gxblend.h:$(GLSRC)gxfcache.h
-$(GLSRC)gxblend.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxblend.h:$(GLSRC)gsropt.h
+$(GLSRC)gxblend.h:$(GLSRC)gxfmap.h
$(GLSRC)gxblend.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxblend.h:$(GLSRC)gxcspace.h
$(GLSRC)gxblend.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxblend.h:$(GLSRC)gsuid.h
-$(GLSRC)gxblend.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxblend.h:$(GLSRC)gscsel.h
+$(GLSRC)gxblend.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxblend.h:$(GLSRC)gsfont.h
$(GLSRC)gxblend.h:$(GLSRC)gsimage.h
$(GLSRC)gxblend.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxblend.h:$(GLSRC)gxdda.h
$(GLSRC)gxblend.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxblend.h:$(GLSRC)gsfont.h
-$(GLSRC)gxblend.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxblend.h:$(GLSRC)gxftype.h
+$(GLSRC)gxblend.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxblend.h:$(GLSRC)gsropt.h
+$(GLSRC)gxblend.h:$(GLSRC)gxdda.h
+$(GLSRC)gxblend.h:$(GLSRC)gxpath.h
$(GLSRC)gxblend.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxblend.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxblend.h:$(GLSRC)gxftype.h
$(GLSRC)gxblend.h:$(GLSRC)gscms.h
-$(GLSRC)gxblend.h:$(GLSRC)gscspace.h
-$(GLSRC)gxblend.h:$(GLSRC)gxpath.h
-$(GLSRC)gxblend.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxblend.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxblend.h:$(GLSRC)gxarith.h
-$(GLSRC)gxblend.h:$(GLSRC)gspenum.h
-$(GLSRC)gxblend.h:$(GLSRC)gxhttile.h
$(GLSRC)gxblend.h:$(GLSRC)gsrect.h
$(GLSRC)gxblend.h:$(GLSRC)gslparam.h
+$(GLSRC)gxblend.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxblend.h:$(GLSRC)gscpm.h
+$(GLSRC)gxblend.h:$(GLSRC)gscspace.h
+$(GLSRC)gxblend.h:$(GLSRC)gsgstate.h
$(GLSRC)gxblend.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxblend.h:$(GLSRC)gsiparam.h
$(GLSRC)gxblend.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxblend.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxblend.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxblend.h:$(GLSRC)gscpm.h
+$(GLSRC)gxblend.h:$(GLSRC)gsiparam.h
$(GLSRC)gxblend.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxblend.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxblend.h:$(GLSRC)gscompt.h
+$(GLSRC)gxblend.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxblend.h:$(GLSRC)gspenum.h
+$(GLSRC)gxblend.h:$(GLSRC)gxhttile.h
$(GLSRC)gxblend.h:$(GLSRC)gsparam.h
+$(GLSRC)gxblend.h:$(GLSRC)gsrefct.h
$(GLSRC)gxblend.h:$(GLSRC)gp.h
-$(GLSRC)gxblend.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxblend.h:$(GLSRC)memento.h
+$(GLSRC)gxblend.h:$(GLSRC)memory_.h
+$(GLSRC)gxblend.h:$(GLSRC)gsuid.h
$(GLSRC)gxblend.h:$(GLSRC)gsstruct.h
$(GLSRC)gxblend.h:$(GLSRC)gxsync.h
+$(GLSRC)gxblend.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxblend.h:$(GLSRC)srdline.h
$(GLSRC)gxblend.h:$(GLSRC)scommon.h
-$(GLSRC)gxblend.h:$(GLSRC)memento.h
-$(GLSRC)gxblend.h:$(GLSRC)gscsel.h
$(GLSRC)gxblend.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxblend.h:$(GLSRC)gsstype.h
+$(GLSRC)gxblend.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxblend.h:$(GLSRC)gxarith.h
$(GLSRC)gxblend.h:$(GLSRC)stat_.h
-$(GLSRC)gxblend.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxblend.h:$(GLSRC)gsmemory.h
$(GLSRC)gxblend.h:$(GLSRC)gpsync.h
-$(GLSRC)gxblend.h:$(GLSRC)memory_.h
+$(GLSRC)gxblend.h:$(GLSRC)gsstype.h
+$(GLSRC)gxblend.h:$(GLSRC)gsmemory.h
$(GLSRC)gxblend.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxblend.h:$(GLSRC)gslibctx.h
$(GLSRC)gxblend.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxblend.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxblend.h:$(GLSRC)stdio_.h
-$(GLSRC)gxblend.h:$(GLSRC)gscompt.h
+$(GLSRC)gxblend.h:$(GLSRC)gslibctx.h
$(GLSRC)gxblend.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxblend.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxblend.h:$(GLSRC)stdio_.h
+$(GLSRC)gxblend.h:$(GLSRC)gsccode.h
$(GLSRC)gxblend.h:$(GLSRC)stdint_.h
$(GLSRC)gxblend.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxblend.h:$(GLSRC)gsccode.h
-$(GLSRC)gxblend.h:$(GLSRC)std.h
$(GLSRC)gxblend.h:$(GLSRC)gstypes.h
+$(GLSRC)gxblend.h:$(GLSRC)std.h
$(GLSRC)gxblend.h:$(GLSRC)stdpre.h
$(GLSRC)gxblend.h:$(GLGEN)arch.h
+$(GLSRC)gxblend.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevp14.h:$(GLSRC)gxcolor2.h
$(GLSRC)gdevp14.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxdevmem.h
$(GLSRC)gdevp14.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsequivc.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxblend.h
$(GLSRC)gdevp14.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxblend.h
$(GLSRC)gdevp14.h:$(GLSRC)gscolor2.h
-$(GLSRC)gdevp14.h:$(GLSRC)gscindex.h
$(GLSRC)gdevp14.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevp14.h:$(GLSRC)gxcpath.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsequivc.h
$(GLSRC)gdevp14.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevp14.h:$(GLSRC)gxpcache.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscindex.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevp14.h:$(GLSRC)gsptype1.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxtext.h
$(GLSRC)gdevp14.h:$(GLSRC)gscie.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxtext.h
$(GLSRC)gdevp14.h:$(GLSRC)gstext.h
$(GLSRC)gdevp14.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevp14.h:$(GLSRC)gstparam.h
$(GLSRC)gdevp14.h:$(GLSRC)gspcolor.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxfcache.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsropt.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxfmap.h
$(GLSRC)gdevp14.h:$(GLSRC)gsmalloc.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevp14.h:$(GLSRC)gxctable.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsuid.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsfont.h
$(GLSRC)gdevp14.h:$(GLSRC)gsimage.h
$(GLSRC)gdevp14.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxdda.h
$(GLSRC)gdevp14.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsfont.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxpath.h
$(GLSRC)gdevp14.h:$(GLSRC)gxiclass.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxftype.h
$(GLSRC)gdevp14.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxftype.h
$(GLSRC)gdevp14.h:$(GLSRC)gscms.h
-$(GLSRC)gdevp14.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxstdio.h
-$(GLSRC)gdevp14.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevp14.h:$(GLSRC)gsrect.h
$(GLSRC)gdevp14.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxstdio.h
$(GLSRC)gdevp14.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevp14.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevp14.h:$(GLSRC)gsio.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevp14.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsiparam.h
$(GLSRC)gdevp14.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevp14.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxhttile.h
$(GLSRC)gdevp14.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsrefct.h
$(GLSRC)gdevp14.h:$(GLSRC)gp.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevp14.h:$(GLSRC)memento.h
+$(GLSRC)gdevp14.h:$(GLSRC)memory_.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsuid.h
$(GLSRC)gdevp14.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevp14.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxbitmap.h
$(GLSRC)gdevp14.h:$(GLSRC)srdline.h
$(GLSRC)gdevp14.h:$(GLSRC)scommon.h
-$(GLSRC)gdevp14.h:$(GLSRC)memento.h
-$(GLSRC)gdevp14.h:$(GLSRC)gscsel.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevp14.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxarith.h
$(GLSRC)gdevp14.h:$(GLSRC)stat_.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevp14.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevp14.h:$(GLSRC)memory_.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevp14.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gdevp14.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevp14.h:$(GLSRC)gscdefs.h
-$(GLSRC)gdevp14.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevp14.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevp14.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevp14.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevp14.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevp14.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsccode.h
$(GLSRC)gdevp14.h:$(GLSRC)stdint_.h
$(GLSRC)gdevp14.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevp14.h:$(GLSRC)std.h
$(GLSRC)gdevp14.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevp14.h:$(GLSRC)std.h
$(GLSRC)gdevp14.h:$(GLSRC)stdpre.h
$(GLSRC)gdevp14.h:$(GLGEN)arch.h
+$(GLSRC)gdevp14.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscolor3.h:$(GLSRC)gsshade.h
$(GLSRC)gscolor3.h:$(GLSRC)gspath.h
$(GLSRC)gscolor3.h:$(GLSRC)gxmatrix.h
@@ -12418,83 +12433,83 @@ $(GLSRC)gscolor3.h:$(GLSRC)gscie.h
$(GLSRC)gscolor3.h:$(GLSRC)gsfunc.h
$(GLSRC)gscolor3.h:$(GLSRC)gxctable.h
$(GLSRC)gscolor3.h:$(GLSRC)gxfrac.h
-$(GLSRC)gscolor3.h:$(GLSRC)gscspace.h
$(GLSRC)gscolor3.h:$(GLSRC)gsdevice.h
-$(GLSRC)gscolor3.h:$(GLSRC)gspenum.h
-$(GLSRC)gscolor3.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscolor3.h:$(GLSRC)gscspace.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsgstate.h
$(GLSRC)gscolor3.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gscolor3.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gscolor3.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsiparam.h
$(GLSRC)gscolor3.h:$(GLSRC)gxfixed.h
-$(GLSRC)gscolor3.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscolor3.h:$(GLSRC)gspenum.h
$(GLSRC)gscolor3.h:$(GLSRC)gsparam.h
-$(GLSRC)gscolor3.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscolor3.h:$(GLSRC)memento.h
$(GLSRC)gscolor3.h:$(GLSRC)gsstruct.h
+$(GLSRC)gscolor3.h:$(GLSRC)gxbitmap.h
$(GLSRC)gscolor3.h:$(GLSRC)scommon.h
-$(GLSRC)gscolor3.h:$(GLSRC)memento.h
$(GLSRC)gscolor3.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsccolor.h
$(GLSRC)gscolor3.h:$(GLSRC)gsstype.h
$(GLSRC)gscolor3.h:$(GLSRC)gsmemory.h
$(GLSRC)gscolor3.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscolor3.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscolor3.h:$(GLSRC)stdio_.h
-$(GLSRC)gscolor3.h:$(GLSRC)gsgstate.h
$(GLSRC)gscolor3.h:$(GLSRC)stdint_.h
$(GLSRC)gscolor3.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscolor3.h:$(GLSRC)std.h
$(GLSRC)gscolor3.h:$(GLSRC)gstypes.h
+$(GLSRC)gscolor3.h:$(GLSRC)std.h
$(GLSRC)gscolor3.h:$(GLSRC)stdpre.h
$(GLSRC)gscolor3.h:$(GLGEN)arch.h
+$(GLSRC)gscolor3.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfunc3.h:$(GLSRC)gsfunc.h
$(GLSRC)gsfunc3.h:$(GLSRC)gsdsrc.h
$(GLSRC)gsfunc3.h:$(GLSRC)gsparam.h
+$(GLSRC)gsfunc3.h:$(GLSRC)memento.h
$(GLSRC)gsfunc3.h:$(GLSRC)gsstruct.h
$(GLSRC)gsfunc3.h:$(GLSRC)scommon.h
-$(GLSRC)gsfunc3.h:$(GLSRC)memento.h
$(GLSRC)gsfunc3.h:$(GLSRC)gsstype.h
$(GLSRC)gsfunc3.h:$(GLSRC)gsmemory.h
$(GLSRC)gsfunc3.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsfunc3.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfunc3.h:$(GLSRC)stdio_.h
$(GLSRC)gsfunc3.h:$(GLSRC)stdint_.h
$(GLSRC)gsfunc3.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsfunc3.h:$(GLSRC)std.h
$(GLSRC)gsfunc3.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfunc3.h:$(GLSRC)std.h
$(GLSRC)gsfunc3.h:$(GLSRC)stdpre.h
$(GLSRC)gsfunc3.h:$(GLGEN)arch.h
+$(GLSRC)gsfunc3.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsshade.h:$(GLSRC)gspath.h
$(GLSRC)gsshade.h:$(GLSRC)gxmatrix.h
$(GLSRC)gsshade.h:$(GLSRC)gscie.h
$(GLSRC)gsshade.h:$(GLSRC)gsfunc.h
$(GLSRC)gsshade.h:$(GLSRC)gxctable.h
$(GLSRC)gsshade.h:$(GLSRC)gxfrac.h
-$(GLSRC)gsshade.h:$(GLSRC)gscspace.h
$(GLSRC)gsshade.h:$(GLSRC)gsdevice.h
-$(GLSRC)gsshade.h:$(GLSRC)gspenum.h
-$(GLSRC)gsshade.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsshade.h:$(GLSRC)gscspace.h
+$(GLSRC)gsshade.h:$(GLSRC)gsgstate.h
$(GLSRC)gsshade.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gsshade.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gsshade.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsshade.h:$(GLSRC)gsiparam.h
$(GLSRC)gsshade.h:$(GLSRC)gxfixed.h
-$(GLSRC)gsshade.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsshade.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsshade.h:$(GLSRC)gspenum.h
$(GLSRC)gsshade.h:$(GLSRC)gsparam.h
-$(GLSRC)gsshade.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsshade.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsshade.h:$(GLSRC)memento.h
$(GLSRC)gsshade.h:$(GLSRC)gsstruct.h
+$(GLSRC)gsshade.h:$(GLSRC)gxbitmap.h
$(GLSRC)gsshade.h:$(GLSRC)scommon.h
-$(GLSRC)gsshade.h:$(GLSRC)memento.h
$(GLSRC)gsshade.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsshade.h:$(GLSRC)gsccolor.h
$(GLSRC)gsshade.h:$(GLSRC)gsstype.h
$(GLSRC)gsshade.h:$(GLSRC)gsmemory.h
$(GLSRC)gsshade.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsshade.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsshade.h:$(GLSRC)stdio_.h
-$(GLSRC)gsshade.h:$(GLSRC)gsgstate.h
$(GLSRC)gsshade.h:$(GLSRC)stdint_.h
$(GLSRC)gsshade.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsshade.h:$(GLSRC)std.h
$(GLSRC)gsshade.h:$(GLSRC)gstypes.h
+$(GLSRC)gsshade.h:$(GLSRC)std.h
$(GLSRC)gsshade.h:$(GLSRC)stdpre.h
$(GLSRC)gsshade.h:$(GLGEN)arch.h
+$(GLSRC)gsshade.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxshade.h:$(GLSRC)gsshade.h
$(GLSRC)gxshade.h:$(GLSRC)gspath.h
$(GLSRC)gxshade.h:$(GLSRC)gxmatrix.h
@@ -12506,121 +12521,121 @@ $(GLSRC)gxshade.h:$(GLSRC)gxiodev.h
$(GLSRC)gxshade.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxshade.h:$(GLSRC)gxfrac.h
$(GLSRC)gxshade.h:$(GLSRC)gscms.h
-$(GLSRC)gxshade.h:$(GLSRC)gscspace.h
$(GLSRC)gxshade.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxshade.h:$(GLSRC)gxarith.h
-$(GLSRC)gxshade.h:$(GLSRC)gspenum.h
-$(GLSRC)gxshade.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxshade.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxshade.h:$(GLSRC)gscspace.h
+$(GLSRC)gxshade.h:$(GLSRC)gsgstate.h
$(GLSRC)gxshade.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxshade.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxshade.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxshade.h:$(GLSRC)gsiparam.h
$(GLSRC)gxshade.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxshade.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxshade.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxshade.h:$(GLSRC)gspenum.h
+$(GLSRC)gxshade.h:$(GLSRC)gxhttile.h
$(GLSRC)gxshade.h:$(GLSRC)gsparam.h
+$(GLSRC)gxshade.h:$(GLSRC)gsrefct.h
$(GLSRC)gxshade.h:$(GLSRC)gp.h
-$(GLSRC)gxshade.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxshade.h:$(GLSRC)memento.h
+$(GLSRC)gxshade.h:$(GLSRC)memory_.h
$(GLSRC)gxshade.h:$(GLSRC)gsstruct.h
$(GLSRC)gxshade.h:$(GLSRC)gxsync.h
+$(GLSRC)gxshade.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxshade.h:$(GLSRC)srdline.h
$(GLSRC)gxshade.h:$(GLSRC)scommon.h
-$(GLSRC)gxshade.h:$(GLSRC)memento.h
-$(GLSRC)gxshade.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxshade.h:$(GLSRC)gsfname.h
-$(GLSRC)gxshade.h:$(GLSRC)gsstype.h
+$(GLSRC)gxshade.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxshade.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxshade.h:$(GLSRC)gxarith.h
$(GLSRC)gxshade.h:$(GLSRC)stat_.h
-$(GLSRC)gxshade.h:$(GLSRC)gsmemory.h
$(GLSRC)gxshade.h:$(GLSRC)gpsync.h
-$(GLSRC)gxshade.h:$(GLSRC)memory_.h
+$(GLSRC)gxshade.h:$(GLSRC)gsstype.h
+$(GLSRC)gxshade.h:$(GLSRC)gsmemory.h
$(GLSRC)gxshade.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxshade.h:$(GLSRC)gslibctx.h
$(GLSRC)gxshade.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxshade.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxshade.h:$(GLSRC)stdio_.h
+$(GLSRC)gxshade.h:$(GLSRC)gslibctx.h
$(GLSRC)gxshade.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxshade.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxshade.h:$(GLSRC)stdio_.h
$(GLSRC)gxshade.h:$(GLSRC)stdint_.h
$(GLSRC)gxshade.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxshade.h:$(GLSRC)std.h
$(GLSRC)gxshade.h:$(GLSRC)gstypes.h
+$(GLSRC)gxshade.h:$(GLSRC)std.h
$(GLSRC)gxshade.h:$(GLSRC)stdpre.h
$(GLSRC)gxshade.h:$(GLGEN)arch.h
+$(GLSRC)gxshade.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxshade4.h:$(GLSRC)gxshade.h
$(GLSRC)gxshade4.h:$(GLSRC)gsshade.h
$(GLSRC)gxshade4.h:$(GLSRC)gscicach.h
$(GLSRC)gxshade4.h:$(GLSRC)gspath.h
$(GLSRC)gxshade4.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxshade4.h:$(GLSRC)gxdevcli.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxtext.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxcmap.h
$(GLSRC)gxshade4.h:$(GLSRC)gscie.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxtext.h
$(GLSRC)gxshade4.h:$(GLSRC)gstext.h
$(GLSRC)gxshade4.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxshade4.h:$(GLSRC)gstparam.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxfmap.h
$(GLSRC)gxshade4.h:$(GLSRC)stream.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsropt.h
$(GLSRC)gxshade4.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxcspace.h
$(GLSRC)gxshade4.h:$(GLSRC)gxctable.h
$(GLSRC)gxshade4.h:$(GLSRC)gxiodev.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsuid.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscsel.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsfont.h
$(GLSRC)gxshade4.h:$(GLSRC)gsimage.h
$(GLSRC)gxshade4.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxdda.h
$(GLSRC)gxshade4.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsfont.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxftype.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsropt.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxdda.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxpath.h
$(GLSRC)gxshade4.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxftype.h
$(GLSRC)gxshade4.h:$(GLSRC)gscms.h
-$(GLSRC)gxshade4.h:$(GLSRC)gscspace.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxpath.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxarith.h
-$(GLSRC)gxshade4.h:$(GLSRC)gspenum.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxhttile.h
$(GLSRC)gxshade4.h:$(GLSRC)gsrect.h
$(GLSRC)gxshade4.h:$(GLSRC)gslparam.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscpm.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscspace.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsgstate.h
$(GLSRC)gxshade4.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsiparam.h
$(GLSRC)gxshade4.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxshade4.h:$(GLSRC)gscpm.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsiparam.h
$(GLSRC)gxshade4.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscompt.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxshade4.h:$(GLSRC)gspenum.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxhttile.h
$(GLSRC)gxshade4.h:$(GLSRC)gsparam.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsrefct.h
$(GLSRC)gxshade4.h:$(GLSRC)gp.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxshade4.h:$(GLSRC)memento.h
+$(GLSRC)gxshade4.h:$(GLSRC)memory_.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsuid.h
$(GLSRC)gxshade4.h:$(GLSRC)gsstruct.h
$(GLSRC)gxshade4.h:$(GLSRC)gxsync.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxshade4.h:$(GLSRC)srdline.h
$(GLSRC)gxshade4.h:$(GLSRC)scommon.h
-$(GLSRC)gxshade4.h:$(GLSRC)memento.h
-$(GLSRC)gxshade4.h:$(GLSRC)gscsel.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxshade4.h:$(GLSRC)gsfname.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsstype.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxarith.h
$(GLSRC)gxshade4.h:$(GLSRC)stat_.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsmemory.h
$(GLSRC)gxshade4.h:$(GLSRC)gpsync.h
-$(GLSRC)gxshade4.h:$(GLSRC)memory_.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsstype.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsmemory.h
$(GLSRC)gxshade4.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gxshade4.h:$(GLSRC)gslibctx.h
$(GLSRC)gxshade4.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxshade4.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxshade4.h:$(GLSRC)stdio_.h
-$(GLSRC)gxshade4.h:$(GLSRC)gscompt.h
+$(GLSRC)gxshade4.h:$(GLSRC)gslibctx.h
$(GLSRC)gxshade4.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxshade4.h:$(GLSRC)stdio_.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsccode.h
$(GLSRC)gxshade4.h:$(GLSRC)stdint_.h
$(GLSRC)gxshade4.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsccode.h
-$(GLSRC)gxshade4.h:$(GLSRC)std.h
$(GLSRC)gxshade4.h:$(GLSRC)gstypes.h
+$(GLSRC)gxshade4.h:$(GLSRC)std.h
$(GLSRC)gxshade4.h:$(GLSRC)stdpre.h
$(GLSRC)gxshade4.h:$(GLGEN)arch.h
+$(GLSRC)gxshade4.h:$(GLSRC)gs_dll_call.h
diff --git a/base/locale_.h b/base/locale_.h
index 832935f3..9bfeaf9a 100644
--- a/base/locale_.h
+++ b/base/locale_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/lwf_jp2.mak b/base/lwf_jp2.mak
index 0905efca..bfe67747 100644
--- a/base/lwf_jp2.mak
+++ b/base/lwf_jp2.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/malloc_.h b/base/malloc_.h
index 86493a4d..0bc61776 100644
--- a/base/malloc_.h
+++ b/base/malloc_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -27,25 +27,21 @@
#include "bobbin.h"
#include "memento.h"
-#ifdef __TURBOC__
-# include <alloc.h>
-#else
-# if defined(BSD4_2) || defined(apollo) || defined(vax) || defined(sequent) || defined(UTEK)
-# if defined(_POSIX_SOURCE) || (defined(__STDC__) && (!defined(sun) || defined(__svr4__))) /* >>> */
-# include <stdlib.h>
-# else /* Ancient breakage */
+#if defined(BSD4_2) || defined(apollo) || defined(vax) || defined(sequent) || defined(UTEK)
+# if defined(_POSIX_SOURCE) || (defined(__STDC__) && (!defined(sun) || defined(__svr4__))) /* >>> */
+# include <stdlib.h>
+# else /* Ancient breakage */
extern char *malloc();
extern void free();
-# endif
+# endif
+#else
+# if defined(_HPUX_SOURCE) || defined(__CONVEX__) || defined(__convex__) || defined(__OSF__) || defined(__386BSD__) || defined(_POSIX_SOURCE) || defined(__STDC__) || defined(VMS)
+# include <stdlib.h>
# else
-# if defined(_HPUX_SOURCE) || defined(__CONVEX__) || defined(__convex__) || defined(__OSF__) || defined(__386BSD__) || defined(_POSIX_SOURCE) || defined(__STDC__) || defined(VMS)
-# include <stdlib.h>
-# else
-# include <malloc.h>
-# endif /* !_HPUX_SOURCE, ... */
-# endif /* !BSD4_2, ... */
-#endif /* !__TURBOC__ */
+# include <malloc.h>
+# endif /* !_HPUX_SOURCE, ... */
+#endif /* !BSD4_2, ... */
/* (At least some versions of) Linux don't have a working realloc.... */
#ifdef linux
diff --git a/base/math_.h b/base/math_.h
index 0b6c8b1b..34af3f8d 100644
--- a/base/math_.h
+++ b/base/math_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/memento.c b/base/memento.c
index 50eed104..ff37b492 100644
--- a/base/memento.c
+++ b/base/memento.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2009-2018 Artifex Software, Inc.
+/* Copyright (C) 2009-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/memento.h b/base/memento.h
index b822479f..d4ff811d 100644
--- a/base/memento.h
+++ b/base/memento.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2009-2018 Artifex Software, Inc.
+/* Copyright (C) 2009-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/memory_.h b/base/memory_.h
index a9a1d829..7fb6f7ab 100644
--- a/base/memory_.h
+++ b/base/memory_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -27,53 +27,44 @@
****** unlike memcmp which returns -1, 0, or 1.
******/
-#ifdef __TURBOC__
-/* Define inline functions */
-# ifdef __WIN32__
-# define memcmp_inline(b1,b2,len) memcmp(b1,b2,len)
-# else
-# define memcmp_inline(b1,b2,len) __memcmp__(b1,b2,len)
-# endif
-# include <mem.h>
+#define memcmp_inline(b1,b2,len) memcmp(b1,b2,len)
+
+/*
+ * Apparently the newer VMS compilers include prototypes
+ * for the mem... routines in <string.h>. Unfortunately,
+ * gcc lies on Sun systems: it defines __STDC__ even if
+ * the header files in /usr/include are broken.
+ * However, Solaris systems, which define __svr4__, do have
+ * correct header files.
+ */
+/*
+ * The exceptions vastly outnumber the BSD4_2 "rule":
+ * these tests should be the other way around....
+ */
+
+#if defined(VMS) || defined(_POSIX_SOURCE) || (defined(__STDC__) && (!defined(sun) || defined(__svr4__))) || defined(_HPUX_SOURCE) || defined(__WATCOMC__) || defined(THINK_C) || defined(bsdi) || defined(__FreeBSD) || (defined(_MSC_VER) && _MSC_VER >= 1000)
+# include <string.h>
#else
- /* Not Turbo C, no inline functions */
-# define memcmp_inline(b1,b2,len) memcmp(b1,b2,len)
- /*
- * Apparently the newer VMS compilers include prototypes
- * for the mem... routines in <string.h>. Unfortunately,
- * gcc lies on Sun systems: it defines __STDC__ even if
- * the header files in /usr/include are broken.
- * However, Solaris systems, which define __svr4__, do have
- * correct header files.
- */
- /*
- * The exceptions vastly outnumber the BSD4_2 "rule":
- * these tests should be the other way around....
- */
-# if defined(VMS) || defined(_POSIX_SOURCE) || (defined(__STDC__) && (!defined(sun) || defined(__svr4__))) || defined(_HPUX_SOURCE) || defined(__WATCOMC__) || defined(THINK_C) || defined(bsdi) || defined(__FreeBSD) || (defined(_MSC_VER) && _MSC_VER >= 1000)
-# include <string.h>
-# else
-# if defined(BSD4_2) || defined(UTEK)
+# if defined(BSD4_2) || defined(UTEK)
extern bcopy(), bcmp(), bzero();
-# define memcpy(dest,src,len) bcopy(src,dest,len)
-# define memcmp(b1,b2,len) bcmp(b1,b2,len)
- /* Define our own versions of missing routines (in gsmisc.c). */
-# define MEMORY__NEED_MEMMOVE
-# include <sys/types.h> /* for size_t */
-# define MEMORY__NEED_MEMSET
-# if defined(UTEK)
-# define MEMORY__NEED_MEMCHR
-# endif /* UTEK */
-# else
-# include <memory.h>
-# if defined(__SVR3) || defined(sun) /* Not sure this is right.... */
-# define MEMORY__NEED_MEMMOVE
-# include <sys/types.h> /* for size_t */
-# endif /* __SVR3 or sun */
-# endif /* BSD4_2 or UTEK */
-# endif /* VMS, POSIX, ... */
-#endif /* !__TURBOC__ */
+# define memcpy(dest,src,len) bcopy(src,dest,len)
+# define memcmp(b1,b2,len) bcmp(b1,b2,len)
+ /* Define our own versions of missing routines (in gsmisc.c). */
+# define MEMORY__NEED_MEMMOVE
+# include <sys/types.h> /* for size_t */
+# define MEMORY__NEED_MEMSET
+# if defined(UTEK)
+# define MEMORY__NEED_MEMCHR
+# endif /* UTEK */
+# else
+# include <memory.h>
+# if defined(__SVR3) || defined(sun) /* Not sure this is right.... */
+# define MEMORY__NEED_MEMMOVE
+# include <sys/types.h> /* for size_t */
+# endif /* __SVR3 or sun */
+# endif /* BSD4_2 or UTEK */
+#endif /* VMS, POSIX, ... */
/*
* If we are profiling, substitute our own versions of memset, memcpy,
diff --git a/base/mkromfs.c b/base/mkromfs.c
index 54e33f28..7a04139e 100644
--- a/base/mkromfs.c
+++ b/base/mkromfs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -161,6 +161,18 @@ int gp_stat_impl(const gs_memory_t *mem, const char *path, struct _stat64 *buf)
}
#endif
+int
+gs_add_control_path_flags(const gs_memory_t *mem, gs_path_control_t type, const char *path, int flags)
+{
+ return 0;
+}
+
+int
+gs_remove_control_path_flags(const gs_memory_t *mem, gs_path_control_t type, const char *path, int flags)
+{
+ return 0;
+}
+
/*******************************************************************************
* The following are non-redirected printing functions to avoid the need for
* these included from gsmisc.c (unix gp_ functions, among others, use if_debug).
@@ -178,7 +190,7 @@ int outprintf(const gs_memory_t *mem, const char *fmt, ...)
va_start(args, fmt);
count = vsnprintf(buf, sizeof(buf), fmt, args);
- if (count >= sizeof(buf) || count < 0) { /* C99 || MSVC */
+ if (count < 0 || count >= sizeof(buf)) { /* MSVC || C99 */
fwrite(buf, 1, sizeof(buf) - 1, stdout);
fwrite(msg_truncated, 1, sizeof(msg_truncated) - 1, stdout);
} else {
@@ -197,7 +209,7 @@ int errprintf_nomem(const char *fmt, ...)
va_start(args, fmt);
count = vsnprintf(buf, sizeof(buf), fmt, args);
- if (count >= sizeof(buf) || count < 0) { /* C99 || MSVC */
+ if (count < 0 || count >= sizeof(buf)) { /* MSVC || C99 */
fwrite(buf, 1, sizeof(buf) - 1, stderr);
fwrite(msg_truncated, 1, sizeof(msg_truncated) - 1, stderr);
} else {
@@ -216,7 +228,7 @@ int errprintf(const gs_memory_t *mem, const char *fmt, ...)
va_start(args, fmt);
count = vsnprintf(buf, sizeof(buf), fmt, args);
- if (count >= sizeof(buf) || count < 0) { /* C99 || MSVC */
+ if (count < 0 || count >= sizeof(buf)) { /* MSVC || C99 */
fwrite(buf, 1, sizeof(buf) - 1, stderr);
fwrite(msg_truncated, 1, sizeof(msg_truncated) - 1, stderr);
} else {
@@ -521,6 +533,9 @@ static void
prepare_splits(split_data *splits)
{
if (splits->num_splits) {
+ /* Limit splits->num_splits to something merely insane to avoid overflow. */
+ if (splits->num_splits > (1<<(8*sizeof(int)-2))/sizeof(unsigned long))
+ splits->num_splits = (1<<(8*sizeof(int)-2))/sizeof(unsigned long);
/* Make sure we have a properly sized size array. */
if (splits->num_splits > splits->max_splits) {
unsigned long *sizes = realloc(splits->sizes, sizeof(unsigned long) * splits->num_splits);
@@ -1139,8 +1154,8 @@ static unsigned long pscompact_getcompactedblock(pscompstate *psc, unsigned char
switch (psc->state) {
case PSC_BufferIn:
c = psc->pgetc(psc->file);
- if ((c <= 32) || (c == EOF)) {
- /* Whitespace */
+ if (c <= 32) {
+ /* Whitespace (or EOF) */
if (psc->inpos == 0) {
/* Leading whitespace, just bin it */
break;
@@ -1393,6 +1408,7 @@ static unsigned long pscompact_getcompactedblock(pscompstate *psc, unsigned char
{
unsigned char c = psc->bufferout[psc->outpos++];
if (psc->noescape) {
+ /* No change */
} else if ((c == 10) && (psc->outpos < psc->outend)) {
if (!psc->escaping) {
c = '\\';
diff --git a/base/msvccmd.mak b/base/msvccmd.mak
index da0d8c2c..7d5980e8 100644
--- a/base/msvccmd.mak
+++ b/base/msvccmd.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -234,6 +234,7 @@ GENOPT=$(CP) $(CD) $(CT) $(CS) $(WARNOPT) $(VC8WARN) /nologo $(CMT)
CCFLAGS=$(PLATOPT) $(FPFLAGS) $(CPFLAGS) $(CFLAGS) $(XCFLAGS) $(MSINCFLAGS) $(SBRFLAGS)
CC=$(COMP) /c $(CCFLAGS) $(COMPILE_FULL_OPTIMIZED) @$(GLGENDIR)\ccf32.tr
+CXX=$(CXX) /c $(CCFLAGS) $(COMPILE_FULL_OPTIMIZED) @$(GLGENDIR)\ccf32.tr
CPP=$(COMPCPP) /c $(CCFLAGS) @$(GLGENDIR)\ccf32.tr
!if $(MAKEDLL)
WX=$(COMPILE_FOR_DLL)
diff --git a/base/msvclib.mak b/base/msvclib.mak
index 5b1894b2..c0396232 100644
--- a/base/msvclib.mak
+++ b/base/msvclib.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -584,6 +584,35 @@ MSVC_VERSION=15
# VS2019 (Toolset v142)
MSVC_VERSION=16
!endif
+!if "$(_NMAKE_VER)" == "14.24.28315.0"
+# VS2019 (Toolset v142 - update)
+MSVC_VERSION=16
+MS_TOOLSET_VERSION=14.24.28315
+!endif
+!if "$(_NMAKE_VER)" == "14.24.28316.0"
+# VS2019 (Toolset v142 - update)
+MSVC_VERSION=16
+MS_TOOLSET_VERSION=14.24.28316
+!endif
+!if "$(_NMAKE_VER)" == "14.25.28614.0"
+# VS2019 (Toolset v142 - update)
+MSVC_VERSION=16
+MS_TOOLSET_VERSION=14.25.28614
+!endif
+!if "$(_NMAKE_VER)" == "14.26.28805.0"
+# VS2019 (Toolset v142 - update)
+MSVC_VERSION=16
+MS_TOOLSET_VERSION=14.26.28805
+!endif
+!if "$(_NMAKE_VER)" == "14.26.28806.0"
+# VS2019 (Toolset v142 - update)
+MSVC_VERSION=16
+MS_TOOLSET_VERSION=14.26.28806
+!endif
+!if "$(_NMAKE_VER)" == "14.27.29111.0"
+# VS2019 (Toolset v142)
+MSVC_VERSION=16
+!endif
!endif
!ifndef MSVC_VERSION
diff --git a/base/msvctail.mak b/base/msvctail.mak
index 4650eaa2..9f6f2c5e 100644
--- a/base/msvctail.mak
+++ b/base/msvctail.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/ocr.mak b/base/ocr.mak
new file mode 100644
index 00000000..9d58d008
--- /dev/null
+++ b/base/ocr.mak
@@ -0,0 +1,46 @@
+# Copyright (C) 2001-2020 Artifex Software, Inc.
+# 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.
+#
+# Refer to licensing information at http://www.artifex.com or contact
+# Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+# CA 94945, U.S.A., +1(415)492-9861, for further information.
+#
+# makefile for OCR code.
+# Users of this makefile must define the following:
+# LEPTONICALIBDIR - the leptonica source directory
+# TESSERACTLIBDIR - the tesseract source directory
+# OCR_VERSION - which OCR implementation are we using.
+
+# Define the name of this makefile.
+LIBOCR_MAK=$(GLSRC)ocr.mak $(TOP_MAKEFILES)
+
+$(GLGEN)libocr.dev : $(LIBOCR_MAK) $(ECHOGS_XE)$(MAKEDIRS)\
+ $(GLGEN)libocr_$(OCR_VERSION).dev
+ $(CP_) $(GLGEN)libocr_$(OCR_VERSION).dev $(GLGEN)libocr.dev
+
+# Tesseract veneer.
+$(GLGEN)tessocr.$(OBJ) : $(GLSRC)tessocr.cpp $(GLSRC)tessocr.h $(LIBOCR_MAK) \
+ $(gsmemory_h) $(gxiodev_h) $(stream_h) $(TESSDEPS)
+ $(GLCC) $(D_)LEPTONICA_INTERCEPT_MALLOC=1$(_D) $(TESSINCLUDES) $(I_)$(LEPTONICADIR)$(D)src$(_I) $(GLO_)tessocr.$(OBJ) $(C_) $(GLSRC)tessocr.cpp
+
+# 0 = No version.
+
+# 1 = Tesseract/Leptonica
+$(GLGEN)libocr_1.dev : $(LIBOCR_MAK) $(ECHOGS_XE) $(MAKEDIRS) \
+ $(GLGEN)tessocr.$(OBJ) $(LEPTONICA_OBJS) $(TESSERACT_OBJS_1) \
+ $(TESSERACT_OBJS_2) $(TESSERACT_OBJS_3) $(TESSERACT_OBJS_4) \
+ $(TESSERACT_LEGACY)
+ $(SETMOD) $(GLGEN)libocr_1 $(GLGEN)tessocr.$(OBJ)
+ $(ADDMOD) $(GLGEN)libocr_1 $(LEPTONICA_OBJS)
+ $(ADDMOD) $(GLGEN)libocr_1 $(TESSERACT_OBJS_1)
+ $(ADDMOD) $(GLGEN)libocr_1 $(TESSERACT_OBJS_2)
+ $(ADDMOD) $(GLGEN)libocr_1 $(TESSERACT_OBJS_3)
+ $(ADDMOD) $(GLGEN)libocr_1 $(TESSERACT_OBJS_4)
+ $(ADDMOD) $(GLGEN)libocr_1 $(TESSERACT_LEGACY)
diff --git a/base/openjpeg.mak b/base/openjpeg.mak
index f02bd3fb..bb75f0f9 100644
--- a/base/openjpeg.mak
+++ b/base/openjpeg.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/openvms.mak b/base/openvms.mak
index a3cab814..8152b944 100644
--- a/base/openvms.mak
+++ b/base/openvms.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/openvms.mmk b/base/openvms.mmk
index 61c53821..65c2c65f 100644
--- a/base/openvms.mmk
+++ b/base/openvms.mmk
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/pack_ps.c b/base/pack_ps.c
index 764ae3b3..2ab4117c 100644
--- a/base/pack_ps.c
+++ b/base/pack_ps.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/pcwin.mak b/base/pcwin.mak
index 535b6403..462db460 100644
--- a/base/pcwin.mak
+++ b/base/pcwin.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/pipe_.h b/base/pipe_.h
index 41a640a8..e6dce031 100644
--- a/base/pipe_.h
+++ b/base/pipe_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/png.mak b/base/png.mak
index 899e1785..2d7b3806 100644
--- a/base/png.mak
+++ b/base/png.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/png_.h b/base/png_.h
index c9933526..836f6e83 100644
--- a/base/png_.h
+++ b/base/png_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ramfs.c b/base/ramfs.c
index b8198b78..66893075 100644
--- a/base/ramfs.c
+++ b/base/ramfs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ramfs.h b/base/ramfs.h
index 4ff228b2..09816ba1 100644
--- a/base/ramfs.h
+++ b/base/ramfs.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sa85d.c b/base/sa85d.c
index 659b4290..f9fa57fe 100644
--- a/base/sa85d.c
+++ b/base/sa85d.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sa85d.h b/base/sa85d.h
index 6e746224..32efeb8d 100644
--- a/base/sa85d.h
+++ b/base/sa85d.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -41,7 +41,14 @@ typedef struct stream_A85D_state_s {
(ss)->min_left = 1; \
(ss)->word = 0; \
(ss)->odd = 0; \
- /* pdf_rules should not be initialized here */ \
+ /* pdf_rules should not be initialized here. This flag is initialised in\
+ * zA85D to either true or false, and this inline function is called *after*\
+ * that in s_A85D_init to do the remaining initialisation. However, this\
+ * inline function is also called from gs_scan_token to handle inline\
+ * ASCII85 strings. These are not to be interpreted using PDF rules\
+ * and so we must not set the flag here, but in the relevant calling\
+ * functions.\
+ */ \
(ss)->require_eod=false; \
END
extern const stream_template s_A85D_template;
diff --git a/base/sa85x.h b/base/sa85x.h
index 97abe27d..aec328c1 100644
--- a/base/sa85x.h
+++ b/base/sa85x.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/saes.c b/base/saes.c
index 31286d53..c580b849 100644
--- a/base/saes.c
+++ b/base/saes.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/saes.h b/base/saes.h
index 0c25ef63..7cf9a5b7 100644
--- a/base/saes.h
+++ b/base/saes.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sarc4.c b/base/sarc4.c
index d9b80fce..12c9fe59 100644
--- a/base/sarc4.c
+++ b/base/sarc4.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sarc4.h b/base/sarc4.h
index 0c4a86bc..75decd14 100644
--- a/base/sarc4.h
+++ b/base/sarc4.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sbcp.c b/base/sbcp.c
index 6b0383ca..f61db1b1 100644
--- a/base/sbcp.c
+++ b/base/sbcp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sbcp.h b/base/sbcp.h
index 60ae9ba6..2c20e1f1 100644
--- a/base/sbcp.h
+++ b/base/sbcp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sbtx.h b/base/sbtx.h
index 493eddb8..82850766 100644
--- a/base/sbtx.h
+++ b/base/sbtx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/scanchar.h b/base/scanchar.h
index fe7b243d..ca5ec289 100644
--- a/base/scanchar.h
+++ b/base/scanchar.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/scantab.c b/base/scantab.c
index 1c275df8..7240d736 100644
--- a/base/scantab.c
+++ b/base/scantab.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/scf.h b/base/scf.h
index 14798439..9ee9fa45 100644
--- a/base/scf.h
+++ b/base/scf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/scfd.c b/base/scfd.c
index 00a74205..97fa96b6 100644
--- a/base/scfd.c
+++ b/base/scfd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -305,9 +305,9 @@ s_CFD_process(stream_state * st, stream_cursor_read * pr,
(void)rlimit;
if_debug8m('w', ss->memory,
"[w]CFD_process top: eol_count=%d, k_left=%d, rows_left=%d\n"
- " bits=0x%lx, bits_left=%d, read %u, wrote %u%s\n",
+ " bits="PRI_INTPTR", bits_left=%d, read %u, wrote %u%s\n",
eol_count, k_left, rows_left,
- (ulong) bits, bits_left,
+ (intptr_t) bits, bits_left,
(uint) (p - rstart), (uint) (pw->ptr - wstart),
(ss->skipping_damage ? ", skipping damage" : ""));
}
diff --git a/base/scfdgen.c b/base/scfdgen.c
index f1ac37b6..ff67c6a5 100644
--- a/base/scfdgen.c
+++ b/base/scfdgen.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/scfdtab.c b/base/scfdtab.c
index 72e882ab..a3d14d2f 100644
--- a/base/scfdtab.c
+++ b/base/scfdtab.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/scfe.c b/base/scfe.c
index fbb3bde6..43723520 100644
--- a/base/scfe.c
+++ b/base/scfe.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -212,9 +212,9 @@ s_CFE_process(stream_state * st, stream_cursor_read * pr,
if_debug2m('w', ss->memory, "[w]CFE: read_count = %d, write_count=%d,\n",
ss->read_count, ss->write_count);
- if_debug6m('w', ss->memory, " pr = 0x%lx(%d)0x%lx, pw = 0x%lx(%d)0x%lx\n",
- (ulong) pr->ptr, (int)(rlimit - pr->ptr), (ulong) rlimit,
- (ulong) pw->ptr, (int)(wlimit - pw->ptr), (ulong) wlimit);
+ if_debug6m('w', ss->memory, " pr = "PRI_INTPTR"(%d)"PRI_INTPTR", pw = "PRI_INTPTR"(%d)"PRI_INTPTR"\n",
+ (intptr_t) pr->ptr, (int)(rlimit - pr->ptr), (intptr_t) rlimit,
+ (intptr_t) pw->ptr, (int)(wlimit - pw->ptr), (intptr_t) wlimit);
if (ss->write_count) {
/* Copy more of an encoded line to the caller. */
int wcount = wlimit - pw->ptr;
@@ -360,10 +360,11 @@ s_CFE_process(stream_state * st, stream_cursor_read * pr,
pw->ptr = hc_put_last_bits((stream_hc_state *) ss, q);
}
out:
- if_debug9m('w', ss->memory, "[w]CFE exit %d: read_count = %d, write_count = %d,\n pr = 0x%lx(%d)0x%lx; pw = 0x%lx(%d)0x%lx\n",
+ if_debug9m('w', ss->memory, "[w]CFE exit %d: read_count = %d, write_count = %d,\n"
+ " pr = "PRI_INTPTR"(%d)"PRI_INTPTR"; pw = "PRI_INTPTR"(%d)"PRI_INTPTR"\n",
status, ss->read_count, ss->write_count,
- (ulong) pr->ptr, (int)(rlimit - pr->ptr), (ulong) rlimit,
- (ulong) pw->ptr, (int)(wlimit - pw->ptr), (ulong) wlimit);
+ (intptr_t) pr->ptr, (int)(rlimit - pr->ptr), (intptr_t) rlimit,
+ (intptr_t) pw->ptr, (int)(wlimit - pw->ptr), (intptr_t) wlimit);
#if defined(DEBUG) && !defined(GS_THREADSAFE)
if (pr->ptr > rlimit || pw->ptr > wlimit) {
lprintf("Pointer overrun!\n");
diff --git a/base/scfetab.c b/base/scfetab.c
index 12377e9c..d0501030 100644
--- a/base/scfetab.c
+++ b/base/scfetab.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/scfparam.c b/base/scfparam.c
index 8f095233..559bbe51 100644
--- a/base/scfparam.c
+++ b/base/scfparam.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/scfx.h b/base/scfx.h
index 359967a0..5efd021a 100644
--- a/base/scfx.h
+++ b/base/scfx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/scommon.h b/base/scommon.h
index c37b8b35..6e41259b 100644
--- a/base/scommon.h
+++ b/base/scommon.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sdcparam.c b/base/sdcparam.c
index 3cca1893..a4ae9048 100644
--- a/base/sdcparam.c
+++ b/base/sdcparam.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sdcparam.h b/base/sdcparam.h
index 6392378e..722a9eb2 100644
--- a/base/sdcparam.h
+++ b/base/sdcparam.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sdct.h b/base/sdct.h
index 9e69663f..57e9e87a 100644
--- a/base/sdct.h
+++ b/base/sdct.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sdctc.c b/base/sdctc.c
index 32525f4e..5a1679d3 100644
--- a/base/sdctc.c
+++ b/base/sdctc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sdctd.c b/base/sdctd.c
index 8fdf4c2c..ec54a9e2 100644
--- a/base/sdctd.c
+++ b/base/sdctd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sdcte.c b/base/sdcte.c
index a9e43327..ecbaf655 100644
--- a/base/sdcte.c
+++ b/base/sdcte.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sddparam.c b/base/sddparam.c
index d5b690dd..deff93b9 100644
--- a/base/sddparam.c
+++ b/base/sddparam.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sdeparam.c b/base/sdeparam.c
index 8e591660..5d269028 100644
--- a/base/sdeparam.c
+++ b/base/sdeparam.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/seexec.c b/base/seexec.c
index 9729af0b..4f86d554 100644
--- a/base/seexec.c
+++ b/base/seexec.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -185,7 +185,7 @@ hp: r = *pr;
if (count) {
--p;
status = 0; /* reprocess error next time */
- } else if (*p == '%')
+ } else if (p > pr->ptr && p < pr->limit && *p == '%')
goto hp; /* ignore % */
}
p = q;
diff --git a/base/setjmp_.h b/base/setjmp_.h
index 07251b71..4ba2faa9 100644
--- a/base/setjmp_.h
+++ b/base/setjmp_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sfilter.h b/base/sfilter.h
index dc95fb0d..4ba8dd63 100644
--- a/base/sfilter.h
+++ b/base/sfilter.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sfilter1.c b/base/sfilter1.c
index a7c237e4..c6fac79e 100644
--- a/base/sfilter1.c
+++ b/base/sfilter1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sfilter2.c b/base/sfilter2.c
index ee348476..86be1d86 100644
--- a/base/sfilter2.c
+++ b/base/sfilter2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sfxboth.c b/base/sfxboth.c
index f09a6f00..02982ab3 100644
--- a/base/sfxboth.c
+++ b/base/sfxboth.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sfxcommon.c b/base/sfxcommon.c
index 002651ba..bc2285d9 100644
--- a/base/sfxcommon.c
+++ b/base/sfxcommon.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sfxfd.c b/base/sfxfd.c
index 599b1d4c..7f9d204c 100644
--- a/base/sfxfd.c
+++ b/base/sfxfd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -123,8 +123,8 @@ sread_fileno(register stream * s, gp_file * file, byte * buf, uint len)
s_std_init(s, buf, len, &p,
(seekable ? s_mode_read + s_mode_seek : s_mode_read));
- if_debug2m('s', s->memory, "[s]read file=0x%lx, fd=%d\n", (ulong) file,
- fileno(file));
+ if_debug2m('s', s->memory, "[s]read file="PRI_INTPTR", fd=%d\n",
+ (intptr_t) file, fileno(file));
s->file = file;
s->file_modes = s->modes;
s->file_offset = 0;
@@ -264,8 +264,8 @@ swrite_fileno(register stream * s, gp_file * file, byte * buf, uint len)
s_std_init(s, buf, len, &p,
(file == stdout ? s_mode_write : s_mode_write + s_mode_seek));
- if_debug2m('s', s->memory, "[s]write file=0x%lx, fd=%d\n", (ulong) file,
- fileno(file));
+ if_debug2m('s', s->memory, "[s]write file="PRI_INTPTR", fd=%d\n",
+ (intptr_t) file, fileno(file));
s->file = file;
s->file_modes = s->modes;
s->file_offset = 0; /* in case we switch to reading later */
@@ -353,8 +353,8 @@ s_fileno_switch(stream * s, bool writing)
if (!(s->file_modes & s_mode_write))
return ERRC;
pos = stell(s);
- if_debug2m('s', s->memory, "[s]switch 0x%lx to write at %ld\n",
- (ulong) s, pos);
+ if_debug2m('s', s->memory, "[s]switch "PRI_INTPTR" to write at %ld\n",
+ (intptr_t)s, pos);
lseek(fd, pos, SEEK_SET); /* pacify OS */
if (modes & s_mode_append) {
sappend_file(s, s->file, s->cbuf, s->cbsize); /* sets position */
@@ -367,8 +367,8 @@ s_fileno_switch(stream * s, bool writing)
if (!(s->file_modes & s_mode_read))
return ERRC;
pos = stell(s);
- if_debug2m('s', s->memory, "[s]switch 0x%lx to read at %ld\n",
- (ulong) s, pos);
+ if_debug2m('s', s->memory, "[s]switch "PRI_INTPTR" to read at %ld\n",
+ (intptr_t) s, pos);
if (sflush(s) < 0)
return ERRC;
lseek(fd, 0L, SEEK_CUR); /* pacify OS */
diff --git a/base/sfxstdio.c b/base/sfxstdio.c
index 7db18944..6201ddf9 100644
--- a/base/sfxstdio.c
+++ b/base/sfxstdio.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -66,7 +66,7 @@ sread_file(register stream * s, gp_file * file, byte * buf, uint len)
gp_clearerr(file);
s_std_init(s, buf, len, &p,
(seekable ? s_mode_read + s_mode_seek : s_mode_read));
- if_debug1m('s', s->memory, "[s]read file=0x%lx\n", (ulong) file);
+ if_debug1m('s', s->memory, "[s]read file="PRI_INTPTR"\n", (intptr_t)file);
s->file = file;
s->file_modes = s->modes;
s->file_offset = 0;
@@ -192,7 +192,7 @@ swrite_file(register stream * s, gp_file * file, byte * buf, uint len)
s_std_init(s, buf, len, &p,
(gp_get_file(file) == stdout ? s_mode_write : s_mode_write + s_mode_seek));
- if_debug1m('s', s->memory, "[s]write file=0x%lx\n", (ulong) file);
+ if_debug1m('s', s->memory, "[s]write file="PRI_INTPTR"\n", (intptr_t) file);
s->file = file;
s->file_modes = s->modes;
s->file_offset = 0; /* in case we switch to reading later */
diff --git a/base/shc.c b/base/shc.c
index ae84d157..60b117dd 100644
--- a/base/shc.c
+++ b/base/shc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/shc.h b/base/shc.h
index 23ab529d..36dcf1a0 100644
--- a/base/shc.h
+++ b/base/shc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sidscale.c b/base/sidscale.c
index 264c5336..9415d854 100644
--- a/base/sidscale.c
+++ b/base/sidscale.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -255,14 +255,14 @@ s_ISpecialDownScale_init(stream_state * st)
/* create intermediate image to hold horizontal zoom */
ss->tmp =
- gs_alloc_byte_array(mem, ss->params.WidthOut * ss->params.spp_interp,
+ gs_alloc_byte_array(mem, (size_t)ss->params.WidthOut * ss->params.spp_interp,
ss->sizeofPixelIn, "image_scale tmp");
/* Allocate buffers for 1 row of source and destination. */
ss->dst =
- gs_alloc_byte_array(mem, ss->params.WidthOut * ss->params.spp_interp,
+ gs_alloc_byte_array(mem, (size_t)ss->params.WidthOut * ss->params.spp_interp,
ss->sizeofPixelOut, "image_scale dst");
ss->src =
- gs_alloc_byte_array(mem, ss->params.WidthIn * ss->params.spp_interp,
+ gs_alloc_byte_array(mem, (size_t)ss->params.WidthIn * ss->params.spp_interp,
ss->sizeofPixelIn, "image_scale src");
if (ss->tmp == 0 || ss->dst == 0 || ss->src == 0) {
s_ISpecialDownScale_release(st);
diff --git a/base/sidscale.h b/base/sidscale.h
index 55514b0c..e74fb399 100644
--- a/base/sidscale.h
+++ b/base/sidscale.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/siinterp.c b/base/siinterp.c
index 435efe0e..591de4c8 100644
--- a/base/siinterp.c
+++ b/base/siinterp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/siinterp.h b/base/siinterp.h
index 9621ebf4..84dc76d3 100644
--- a/base/siinterp.h
+++ b/base/siinterp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/simscale.c b/base/simscale.c
index 76bb3969..e01b352c 100644
--- a/base/simscale.c
+++ b/base/simscale.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -14,7 +14,6 @@
*/
-/* $Id: simscale.c 6651 2006-03-13 16:18:19Z raph $ */
/* Image mask interpolation filter */
#include "memory_.h"
@@ -22,8204 +21,7 @@
#include "strimpl.h"
#include "sisparam.h"
#include "simscale.h"
-
-/* The 4x4 window lookup table. If code segment space is scarce, this
- would obviously compress really well; for example, it could be stored
- in the "file system" and loaded once per image. */
-const byte imasktab[] = {
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
- 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x10, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
- 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
- 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x10, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
- 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
- 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
- 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x10, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x10, 0x10, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x10, 0x10, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x13, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x10, 0x33, 0x10, 0x10, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x10, 0x10, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x10, 0x10, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x13, 0x13, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x13, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x37, 0x7f, 0x37, 0x37, 0x33, 0x33,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x10, 0x10, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x10, 0x10, 0x33, 0x33, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x80, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
- 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
- 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x33, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0x80, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0x8c, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0x8c, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xce, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xff, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xcc, 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0x80, 0xcc,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x13, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x8c, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x37, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0x37, 0x37, 0x7f, 0x7f, 0x37, 0x37, 0x37, 0x37,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xf7, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xf7,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0x33, 0x33, 0x33, 0x33, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xcc, 0xcc, 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0xcc, 0xcc, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x73, 0x73,
- 0x33, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0x88, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0x8c, 0x8c, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0x88, 0xcc, 0xcc, 0xec, 0xcc,
- 0xcc, 0x8c, 0x8c, 0x8c, 0xcc, 0xcc, 0xec, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 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, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xce, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xce, 0xce, 0xce, 0xce, 0xef, 0xef, 0xce, 0xce,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x37, 0x7f, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0x7f, 0x37, 0x33, 0x33, 0x7f, 0x7f, 0x33, 0x33,
- 0xce, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x08, 0x08, 0x09, 0x08,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0x33, 0x37, 0x33, 0x33, 0x37, 0x37, 0x33, 0x33,
- 0xef, 0xef, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xef, 0xce, 0xef, 0xef, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xce, 0xce, 0xce, 0xce, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
-};
+#include "simscale_foo.h"
gs_private_st_ptrs2(st_imscale_state, stream_imscale_state,
"ImscaleDecode state",
@@ -8249,66 +51,107 @@ s_imscale_init(stream_state *st)
ss->src_y = 0;
ss->src_offset = 0;
ss->src_size = bytesin;
- ss->dst_y = 0;
- ss->dst_size = bytesout;
+ ss->src_line_padded = bytesin + 10;
+
+ ss->dst_line_padded = bytesout + 10; /* to compensate for overshoots in zoom() */
+ ss->dst_line_size = bytesout;
+ ss->dst_size = bytesout*4;
ss->dst_offset = ss->dst_size;
- ss->window = (byte *)gs_alloc_byte_array(mem,
- bytesin + 2, 4,
- "imscale window");
- ss->dst = (byte *)gs_alloc_bytes(mem, bytesout + 1, "imscale dst");
- memset(ss->window, 0xff, (bytesin + 2) * 4);
+ ss->dst_togo = (long long)ss->dst_size * ss->params.HeightIn;
+ ss->window = (byte *)gs_alloc_byte_array(mem, ss->src_line_padded, 5, "imscale window");
+ ss->dst = (byte *)gs_alloc_bytes(mem, ss->dst_line_padded * 4, "imscale dst");
+ memset(ss->window, 0xff, ss->src_line_padded * 5);
return 0;
}
static void
-zoom_line(stream_imscale_state *ss)
-{
- uint w = ss->src_size + 2;
- byte *window = ss->window;
- byte *dst = ss->dst;
- int y = (ss->dst_y + 2) & 3;
- int i;
-
- for (i = 0; i < ss->dst_size + 1; i++) {
- int iw = (i + 3) >> 2;
- int iwshift = 11 - ((i + 3) & 3) * 2;
- int oshift;
- byte l0, l1, l2, l3;
- byte t0, t1;
-
- if (y < 2) {
- l3 = (((window[iw] << 8) | window[iw + 1]) >> iwshift) & 0x1f;
- l2 = (((window[w + iw] << 8) |
- window[w + iw + 1]) >> iwshift) & 0x1f;
- l1 = (((window[w * 2 + iw] << 8) |
- window[w * 2 + iw + 1]) >> iwshift) & 0x1f;
- l0 = (((window[w * 3 + iw] << 8) |
- window[w * 3 + iw + 1]) >> iwshift) & 0x1f;
- oshift = 4 * (1 - y);
- } else {
- l0 = (((window[iw] << 8) | window[iw + 1]) >> iwshift) & 0x1f;
- l1 = (((window[w + iw] << 8) |
- window[w + iw + 1]) >> iwshift) & 0x1f;
- l2 = (((window[w * 2 + iw] << 8) |
- window[w * 2 + iw + 1]) >> iwshift) & 0x1f;
- l3 = (((window[w * 3 + iw] << 8) |
- window[w * 3 + iw + 1]) >> iwshift) & 0x1f;
- oshift = 4 * (y & 1);
- }
- t0 = imasktab[((l0 & 0x1e) << 11) |
- ((l1 & 0x1e) << 7) |
- ((l2 & 0x1e) << 3) |
- ((l3 & 0x1e) >> 1)];
- t1 = imasktab[((l0 & 0xf) << 12) |
- ((l1 & 0xf) << 8) |
- ((l2 & 0xf) << 4) |
- (l3 & 0xf)];
- dst[i] = (((t0 >> oshift) & 0xf) << 4) + ((t1 >> oshift) & 0xf);
+zoom_line(stream_imscale_state *ss) {
+ /* src_y is 2 scan lines ahead of dst_y/4, although the latter counter is implicit.
+ * For instance, during the 1st call to this function, src_y == 2, dst_y == 0.
+ * (src_y + 3) % 5 == 0 and points to the beginning of the window.
+ * (src_y + 4) % 5 == 1 and points to the next line.
+ * (src_y ) % 5 == 2 and points to the last scanned line.
+ * The next 2 lines in the window correspond to the blank lines above the first
+ * line of the image.
+ */
+ unsigned char * const p0 = ss->window + (ss->src_line_padded * ((ss->src_y + 1) % 5));
+ unsigned char * const p1 = ss->window + (ss->src_line_padded * ((ss->src_y + 2) % 5));
+ unsigned char * const p2 = ss->window + (ss->src_line_padded * ((ss->src_y + 3) % 5));
+ unsigned char * const p3 = ss->window + (ss->src_line_padded * ((ss->src_y + 4) % 5));
+ unsigned char * const p4 = ss->window + (ss->src_line_padded * ((ss->src_y ) % 5));
+
+ /* Pointers to the lines in the destination buffer. */
+ unsigned char * const dst0 = ss->dst;
+ unsigned char * const dst1 = ss->dst + ss->dst_line_padded;
+ unsigned char * const dst2 = ss->dst + 2*ss->dst_line_padded;
+ unsigned char * const dst3 = ss->dst + 3*ss->dst_line_padded;
+ unsigned int i;
+
+ /* r0..r4 are shift registers that contain 5x5 bit matrix and serve
+ * as buffers for byte-based access to memory. The registers have
+ * the following structure and initial content.
+ * r0: ........ ........ ......11 XXXxxxxx
+ * r1: ........ ........ .11XXXxx xxx00000
+ * r2: ........ ....11XX Xxxxxxyy yyyyyy00
+ * r3: .......1 1XXXxxxx xyyyyyyy y0000000
+ * r3: ..11XXXx xxxxyyyy yyyyzzzz zzzz0000
+ * where
+ * '.' denotes an unused bit
+ * '1' denotes the initial blank bits that precede leading bits of every line
+ * 'X' denotes leading bits of the 1st byte. '1' and 'X' belong to 5x5 bit matrix
+ * 'x' denotes remaining bits of the 1st byte
+ * 'y','z' denote the positions of the following bytes
+ * '0' denotes the initial empty bits
+ */
+ uint32_t r0 = 0x300 | p0[0];
+ uint32_t r1 = 0x6000 | p1[0] << 5;
+ uint32_t r2 = 0xc0000 | p2[0] << 10 | p2[1] << 2;
+ uint32_t r3 = 0x1800000 | p3[0] << 15 | p3[1] << 7;
+ uint32_t r4 = 0x30000000 | p4[0] << 20 | p4[1] << 12 | p4[2] << 4;
+
+#define ZOOM(r0, r1, r2, r3, r4) imscale_foo((r0 & 0x3e0) | (r1 & 0x7c00) | (r2 & 0xf8000) | (r3 & 0x1f00000) | (r4 & 0x3e000000))
+#define SHIFT(r0, r1, r2, r3, r4) r0 <<= 1, r1 <<= 1, r2 <<= 1, r3 <<= 1, r4 <<= 1
+#define LOAD(n,i) r##n |= p##n[i]
+#define STORE(i) dst0[i] = out, dst1[i] = out >> 8, dst2[i] = out >> 16, dst3[i] = out >> 24
+
+ /* Possible improvement: buffer output in a 64-bit accumulator and write 16-bit chunks. */
+ /* Unfortunately in this case big- and little-endian systems need different code. */
+ for (i=0; i < ss->src_size; i++) {
+ uint32_t out; /* 0 5 2 7 4 : number of empty bits in r0..r4 */
+
+ out = ZOOM(r0, r1, r2, r3, r4) << 4;
+ SHIFT(r0, r1, r2, r3, r4); /* 1 6 3 8 5 : every counter increases by 1 */
+ LOAD(3, i+2); /* 1 6 3 0 5 : load r3 because it has 8 empty bits */
+ out |= ZOOM(r0, r1, r2, r3, r4);
+ SHIFT(r0, r1, r2, r3, r4); /* 2 7 4 1 6 : and so on */
+ STORE(4*i);
+ out = ZOOM(r0, r1, r2, r3, r4) << 4;
+ SHIFT(r0, r1, r2, r3, r4); /* 3 8 5 2 7 */
+ LOAD(1, i+1); /* 3 0 5 2 7 */
+ out |= ZOOM(r0, r1, r2, r3, r4);
+ SHIFT(r0, r1, r2, r3, r4); /* 4 1 6 3 8 */
+ STORE(4*i+1);
+ LOAD(4, i+3); /* 4 1 6 3 0 */
+ out = ZOOM(r0, r1, r2, r3, r4) << 4;
+ SHIFT(r0, r1, r2, r3, r4); /* 5 2 7 4 1 */
+ out |= ZOOM(r0, r1, r2, r3, r4);
+ STORE(4*i+2);
+ SHIFT(r0, r1, r2, r3, r4); /* 6 3 8 5 2 */
+ LOAD(2, i+2); /* 6 3 0 5 2 */
+ out = ZOOM(r0, r1, r2, r3, r4) << 4;
+ SHIFT(r0, r1, r2, r3, r4); /* 7 4 1 6 3 */
+ out |= ZOOM(r0, r1, r2, r3, r4);
+ STORE(4*i+3);
+ SHIFT(r0, r1, r2, r3, r4); /* 8 5 2 7 4 */
+ LOAD(0, i+1); /* 0 5 2 7 4 */
}
- for (i = 0; i < ss->dst_size; i++)
- dst[i] = (dst[i] << 2) + (dst[i + 1] >> 6);
+#undef ZOOM
+#undef SHIFT
+#undef LOAD
+#undef STORE
}
+
static int
s_imscale_process(stream_state *st, stream_cursor_read *pr,
stream_cursor_write *pw, bool last)
@@ -8316,29 +159,41 @@ s_imscale_process(stream_state *st, stream_cursor_read *pr,
stream_imscale_state *const ss = (stream_imscale_state *) st;
while (1) {
- /* deliver data from dst buffer */
+ if (ss->dst_togo <= 0)
+ return EOFC;
+ /* deliver data from dst buffer */
if (ss->dst_offset < ss->dst_size) {
- uint ncopy = min(pw->limit - pw->ptr,
- ss->dst_size - ss->dst_offset);
+ uint ncopy = min(pw->limit - pw->ptr, ss->dst_size - ss->dst_offset);
if (ncopy == 0)
return 1;
- memcpy(pw->ptr + 1, (byte *)ss->dst + ss->dst_offset, ncopy);
- pw->ptr += ncopy;
- ss->dst_offset += ncopy;
+ ss->dst_togo -= ncopy;
+
+ while (ncopy) {
+ int line = ss->dst_offset / ss->dst_line_size;
+ int offset = ss->dst_offset % ss->dst_line_size;
+ int linecopy = min(ncopy, ss->dst_line_size - offset);
+
+ memcpy(pw->ptr + 1, (byte *)ss->dst + line * ss->dst_line_padded + offset, linecopy);
+ pw->ptr += linecopy;
+ ss->dst_offset += linecopy;
+ ncopy -= linecopy;
+ }
}
/* output a row, if possible */
- if (ss->dst_offset == ss->dst_size &&
- ss->dst_y < ss->src_y * 4 - 6) {
- zoom_line(ss);
- ss->dst_offset = 0;
- ss->dst_y += 1;
+ if (ss->dst_offset == ss->dst_size && /* dst is empty */
+ ss->src_offset == ss->src_size) { /* src is full */
+ if (ss->src_y >= 2) {
+ zoom_line(ss);
+ ss->dst_offset = 0;
+ }
+ ss->src_offset = 0;
+ ss->src_y += 1;
}
/* input into window */
- if (ss->dst_y >= ss->src_y * 4 - 6) {
- int w = ss->src_size + 2;
+ if (ss->src_offset < ss->src_size) {
uint rleft = pr->limit - pr->ptr;
uint ncopy = min(rleft, ss->src_size - ss->src_offset);
@@ -8348,27 +203,14 @@ s_imscale_process(stream_state *st, stream_cursor_read *pr,
}
if (rleft == 0 && !last)
return 0; /* need more input */
- /* if (rleft == 0)
- return EOFC; */ /* end of file. pass along in stream */
- if (ss->src_offset == 0) {
- /* could maintain window as ring (y mod 4 addressing),
- but this is simpler */
- memmove(ss->window, ss->window + w, 3 * w);
- }
if (ncopy) {
- memcpy(ss->window + 3 * w + ss->src_offset + 1,
- pr->ptr + 1,
- ncopy);
+ memcpy(ss->window + ss->src_line_padded * (ss->src_y % 5) + ss->src_offset, pr->ptr + 1, ncopy);
ss->src_offset += ncopy;
pr->ptr += ncopy;
} else {
- memset(ss->window + 3 * w, 0xff, w);
+ memset(ss->window + ss->src_line_padded * (ss->src_y % 5) + ss->src_offset, 0xff, ss->src_size - ss->src_offset);
ss->src_offset = ss->src_size;
}
- if (ss->src_offset == ss->src_size) {
- ss->src_offset = 0;
- ss->src_y += 1;
- }
}
}
}
diff --git a/base/simscale.h b/base/simscale.h
index 65989581..e6ad7e46 100644
--- a/base/simscale.h
+++ b/base/simscale.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -14,7 +14,6 @@
*/
-/* $Id: simscale.h 6651 2006-03-13 16:18:19Z raph $ */
/* Definitions for image mask interpolation filter */
/* Requires scommon.h; strimpl.h if any templates are referenced */
@@ -32,11 +31,14 @@ struct stream_imscale_state_s {
int src_y;
int src_offset;
int src_size;
+ int src_line_padded;
byte *dst;
- int dst_y;
+ int64_t dst_togo; /* down-counter of output bytes */
int dst_offset;
int dst_size;
+ int dst_line_size;
+ int dst_line_padded;
};
extern const stream_template s_imscale_template;
diff --git a/base/simscale_foo.c b/base/simscale_foo.c
new file mode 100644
index 00000000..bae9d5c7
--- /dev/null
+++ b/base/simscale_foo.c
@@ -0,0 +1,2507 @@
+/* Copyright (C) 2020 Artifex Software, Inc.
+ 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.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+/* Pixel stretching function for image mask interpolation filter */
+
+#include "simscale_foo.h"
+
+#define a 5 /* top row */
+#define b 6
+#define c 7
+#define d 8
+#define e 9
+
+#define f 10 /* edge */
+#define g 14
+
+#define h 15 /* edge */
+#define i 19
+
+#define j 20 /* edge */
+#define k 24
+
+#define l 25 /* bottom row */
+#define m 26
+#define n 27
+#define o 28
+#define p 29
+
+#define V0 0x0
+#define V1 0x8
+#define V2 0x1
+#define V3 0x9
+#define V4 0x80e
+#define V5 0x107
+#define V6 0x8080c
+#define V7 0xc0e0e
+#define V8 0x60600
+#define V9 0x6060f
+#define V10 0x60e0c
+#define V11 0x60e0f
+#define V12 0x60703
+#define V13 0x6070f
+#define V14 0x60f0f
+#define V15 0x10103
+#define V16 0x30707
+#define V17 0x8000000
+#define V18 0x8000008
+#define V19 0x8000001
+#define V20 0x80e0e08
+#define V21 0x80e0e0c
+#define V22 0x80e0e0f
+#define V23 0x80e0f0f
+#define V24 0xc080800
+#define V25 0xc0e0600
+#define V26 0xc0e0e08
+#define V27 0xc0e0e0c
+#define V28 0xc0e0e0f
+#define V29 0xc0e0f0f
+#define V30 0xe080000
+#define V31 0xe0e0c00
+#define V32 0x1000000
+#define V33 0x1000008
+#define V34 0x1000001
+#define V35 0x1070701
+#define V36 0x1070703
+#define V37 0x107070f
+#define V38 0x1070f0f
+#define V39 0x9000000
+#define V40 0x3010100
+#define V41 0x3070600
+#define V42 0x3070701
+#define V43 0x3070703
+#define V44 0x307070f
+#define V45 0x3070f0f
+#define V46 0x7010000
+#define V47 0x7070300
+#define V48 0xf060600
+#define V49 0xf0e0600
+#define V50 0xf0e0e08
+#define V51 0xf0e0e0c
+#define V52 0xf070600
+#define V53 0xf070701
+#define V54 0xf070703
+#define V55 0xf0f0600
+#define V56 0xf0f0e08
+#define V57 0xf0f0e0c
+#define V58 0xf0f0701
+#define V59 0xf0f0703
+#define V60 0xf0f0f0f
+
+#define T(t0) ((x & (1ULL<<(t0+32))) == 0)
+#define TT(t0,t1) ((x & (1ULL<<(t0+32) | 1ULL<<(t1+32))) == 0)
+#define F(f0) ((x & (1ULL<<f0)) == 0)
+#define TF(t0, f0) ((x & (1ULL<<(t0+32) | 1ULL<<f0)) == 0)
+#define TTF(t0, t1, f0) ((x & (1ULL<<(t0+32) | 1ULL<<(t1+32) | 1ULL<<f0)) == 0)
+#define TFF(t0, f0, f1) ((x & (1ULL<<(t0+32) | 1ULL<<f0 | 1ULL<<f1)) == 0)
+#define TTFF(t0, t1, f0, f1) ((x & (1ULL<<(t0+32) | 1ULL<<(t1+32) | 1ULL<<f0 | 1ULL<<f1)) == 0)
+#define ANYTTFF(t0, t1, f0, f1) (x & ((1ULL<<t0) | (1ULL<<t1) | (1ULL<<(f0+32)) | (1ULL<<(f1+32))))
+
+/* Find the value of a 4x4 pixel cluster in a given 5x5 context.*/
+/* Checked by electronics against the full 5x5 table. */
+unsigned int imscale_foo(unsigned int v5x5) {
+ int v3x3 = ((v5x5 >> 11) & 07) | ((v5x5 >> 13) & 070) | ((v5x5 >> 15) & 0700);
+ unsigned long long x = ~(unsigned long long)v5x5 << 32 | v5x5;
+
+#if 0
+ /* Extracted lines of the 5x5 matrix for convenient viewing. */
+ unsigned int r0 = ( v5x5 >> 5 ) & 0x1f;
+ unsigned int r1 = ( v5x5 >> 10 ) & 0x1f;
+ unsigned int r2 = ( v5x5 >> 15 ) & 0x1f;
+ unsigned int r3 = ( v5x5 >> 20 ) & 0x1f;
+ unsigned int r4 = ( v5x5 >> 25 ) & 0x1f;
+#endif
+
+ switch(v3x3) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ return V0;
+ case 11:
+ return V2;
+ case 12:
+ case 13:
+ case 14:
+ return V0;
+ case 15:
+ /* abcdefghijklmnop */
+ /* ------1-1------- V2 */
+ /* --------0------- V5 */
+ /* ------0--------- V5 */
+ if (TT(g,i))
+ return V2;
+ else
+ return V5;
+ case 16:
+ return V60;
+ case 17:
+ /* abcdefghijklmnop */
+ /* 10---0---------- V25 */
+ /* 11---0---------- V27 */
+ /* 10---1---------- V55 */
+ /* 0--------------- V57 */
+ /* -1---1---------- V57 */
+ if (TF(a,f)) {
+ if (T(b))
+ return V27;
+ else
+ return V25;
+ } else {
+ if (TTF(a,f,b))
+ return V55;
+ else
+ return V57;
+ }
+ case 18:
+ /* abcdefghijklmnop */
+ /* 0111000--------- V9 */
+ /* 0110-0---------- V28 */
+ /* 011-10---------- V28 */
+ /* 011--01--------- V28 */
+ /* -0110-0--------- V44 */
+ /* 1-110-0--------- V44 */
+ /* --11010--------- V44 */
+ /* --0------------- V60 */
+ /* -0-0------------ V60 */
+ /* 1--0------------ V60 */
+ /* -0--1----------- V60 */
+ /* 1---1----------- V60 */
+ /* ---0-1---------- V60 */
+ /* ----11---------- V60 */
+ /* -0----1--------- V60 */
+ /* 1-----1--------- V60 */
+ /* -----11--------- V60 */
+ if (TTFF(b,c,a,f)) {
+ if (TFF(d,e,g))
+ return V9;
+ else
+ return V28;
+ } else {
+ if (TTFF(c,d,e,g))
+ return V44;
+ else
+ return V60;
+ }
+ case 19:
+ /* abcdefghijklmnop */
+ /* 1-11000--------- V13 */
+ /* 0-110-0--------- V44 */
+ /* --11010--------- V44 */
+ /* 1--0-0---------- V29 */
+ /* 1-0--0---------- V29 */
+ /* 1---10---------- V29 */
+ /* 1----01--------- V29 */
+ /* 0--0------------ V60 */
+ /* 0-0------------- V60 */
+ /* 0---1----------- V60 */
+ /* ---0-1---------- V60 */
+ /* --0--1---------- V60 */
+ /* ----11---------- V60 */
+ /* 0-----1--------- V60 */
+ /* -----11--------- V60 */
+ if (TTFF(c,d,e,g)) {
+ if (TF(a,f))
+ return V13;
+ else
+ return V44;
+ } else {
+ if (TF(a,f))
+ return V29;
+ else
+ return V60;
+ }
+ case 20:
+ /* abcdefghijklmnop */
+ /* ---01-0--------- V41 */
+ /* ---11-0--------- V43 */
+ /* ---01-1--------- V55 */
+ /* ----0----------- V59 */
+ /* ---1--1--------- V59 */
+ if (TF(e,g)) {
+ if (T(d))
+ return V43;
+ else
+ return V41;
+ } else {
+ if (TTF(e,g,d))
+ return V55;
+ else
+ return V59;
+ }
+ case 21:
+ /* abcdefghijklmnop */
+ /* 1---100--------- V8 */
+ /* 1---00---------- V25 */
+ /* 1----01--------- V25 */
+ /* 0---1-0--------- V41 */
+ /* ----110--------- V41 */
+ /* 0---0----------- V55 */
+ /* ----01---------- V55 */
+ /* 0-----1--------- V55 */
+ /* -----11--------- V55 */
+ if (TF(a,f)) {
+ if (TF(e,g))
+ return V8;
+ else
+ return V25;
+ } else {
+ if (TF(e,g))
+ return V41;
+ else
+ return V55;
+ }
+ case 22:
+ /* abcdefghijklmnop */
+ /* 011-100--------- V11 */
+ /* 011-00---------- V28 */
+ /* 011--01--------- V28 */
+ /* --0-1-0--------- V45 */
+ /* -0--1-0--------- V45 */
+ /* 1---1-0--------- V45 */
+ /* ----110--------- V45 */
+ /* --0-0----------- V60 */
+ /* -0--0----------- V60 */
+ /* 1---0----------- V60 */
+ /* ----01---------- V60 */
+ /* --0---1--------- V60 */
+ /* -0----1--------- V60 */
+ /* 1-----1--------- V60 */
+ /* -----11--------- V60 */
+ if (TTFF(b,c,a,f)) {
+ if (TF(e,g))
+ return V11;
+ else
+ return V28;
+ } else {
+ if (TF(e,g))
+ return V45;
+ else
+ return V60;
+ }
+ case 23:
+ /* abcdefghijklmnop */
+ /* 1---100--------- V14 */
+ /* 1---00---------- V29 */
+ /* 1----01--------- V29 */
+ /* 0---1-0--------- V45 */
+ /* ----110--------- V45 */
+ /* 0---0----------- V60 */
+ /* ----01---------- V60 */
+ /* 0-----1--------- V60 */
+ /* -----11--------- V60 */
+ if (TF(a,f)) {
+ if (TF(e,g))
+ return V14;
+ else
+ return V29;
+ } else {
+ if (TF(e,g))
+ return V45;
+ else
+ return V60;
+ }
+ case 24:
+ /* abcdefghijklmnop */
+ /* 00---1-1-1-00--- V35 */
+ /* -----0-1-1-00--- V38 */
+ /* 1------1-1-00--- V38 */
+ /* -1-----1-1-00--- V38 */
+ /* 00---1-1-0------ V58 */
+ /* 00---1-1---1---- V58 */
+ /* 00---1-1----1--- V58 */
+ /* -------0-------- V60 */
+ /* -----0---0------ V60 */
+ /* 1--------0------ V60 */
+ /* -1-------0------ V60 */
+ /* -----0-----1---- V60 */
+ /* 1----------1---- V60 */
+ /* -1---------1---- V60 */
+ /* -----0------1--- V60 */
+ /* 1-----------1--- V60 */
+ /* -1----------1--- V60 */
+ if (TTFF(h,j,l,m)) {
+ if (TFF(f,a,b))
+ return V35;
+ else
+ return V38;
+ } else {
+ if (TTFF(f,h,a,b))
+ return V58;
+ else
+ return V60;
+ }
+ case 25:
+ /* abcdefghijklmnop */
+ /* 10-----1-1-00--- V36 */
+ /* 0------1-1-00--- V38 */
+ /* -1-----1-1-00--- V38 */
+ /* 10-------0------ V59 */
+ /* 10-----0-------- V59 */
+ /* 10---------1---- V59 */
+ /* 10----------1--- V59 */
+ /* 0--------0------ V60 */
+ /* -1-----0-------- V60 */
+ /* -1-------0------ V60 */
+ /* 0------0-------- V60 */
+ /* 0----------1---- V60 */
+ /* -1---------1---- V60 */
+ /* 0-----------1--- V60 */
+ /* -1----------1--- V60 */
+ if (TTFF(h,j,l,m)) {
+ if (TF(a,b))
+ return V36;
+ else
+ return V38;
+ } else {
+ if (TF(a,b))
+ return V59;
+ else
+ return V60;
+ }
+ case 26:
+ /* abcdefghijklmnop */
+ /* --110-01-1-00--- V37 */
+ /* ---0---1-1-00--- V38 */
+ /* --0----1-1-00--- V38 */
+ /* ----1--1-1-00--- V38 */
+ /* ------11-1-00--- V38 */
+ /* --110-0--0------ V44 */
+ /* --110-00-------- V44 */
+ /* --110-0----1---- V44 */
+ /* --110-0-----1--- V44 */
+ /* ---0-----0------ V60 */
+ /* --0----0-------- V60 */
+ /* ----1----0------ V60 */
+ /* ------10-------- V60 */
+ /* --0------0------ V60 */
+ /* ------1--0------ V60 */
+ /* ---0---0-------- V60 */
+ /* ----1--0-------- V60 */
+ /* ---0-------1---- V60 */
+ /* --0--------1---- V60 */
+ /* ----1------1---- V60 */
+ /* ------1----1---- V60 */
+ /* ---0--------1--- V60 */
+ /* --0---------1--- V60 */
+ /* ----1-------1--- V60 */
+ /* ------1-----1--- V60 */
+ if (TTFF(h,j,l,m)) {
+ if (TTFF(c,d,e,g))
+ return V37;
+ else
+ return V38;
+ } else {
+ if (TTFF(c,d,e,g))
+ return V44;
+ else
+ return V60;
+ }
+ case 27:
+ /* abcdefghijklmnop */
+ /* --110-01-1-00--- V37 */
+ /* ---0---1-1-00--- V38 */
+ /* --0----1-1-00--- V38 */
+ /* ----1--1-1-00--- V38 */
+ /* ------11-1-00--- V38 */
+ /* --110-0--0------ V44 */
+ /* --110-00-------- V44 */
+ /* --110-0----1---- V44 */
+ /* --110-0-----1--- V44 */
+ /* ---0-----0------ V60 */
+ /* --0----0-------- V60 */
+ /* ----1----0------ V60 */
+ /* ------10-------- V60 */
+ /* --0------0------ V60 */
+ /* ------1--0------ V60 */
+ /* ---0---0-------- V60 */
+ /* ----1--0-------- V60 */
+ /* ---0-------1---- V60 */
+ /* --0--------1---- V60 */
+ /* ----1------1---- V60 */
+ /* ------1----1---- V60 */
+ /* ---0--------1--- V60 */
+ /* --0---------1--- V60 */
+ /* ----1-------1--- V60 */
+ /* ------1-----1--- V60 */
+ if (TTFF(h,j,l,m)) {
+ if (TTFF(c,d,e,g))
+ return V37;
+ else
+ return V38;
+ } else {
+ if (TTFF(c,d,e,g))
+ return V44;
+ else
+ return V60;
+ }
+ case 28:
+ /* abcdefghijklmnop */
+ /* -------1-1-00--- V36 */
+ /* ----1-0--0------ V43 */
+ /* ----1-00-------- V43 */
+ /* ----1-0----1---- V43 */
+ /* ----1-0-----1--- V43 */
+ /* ----0----0------ V59 */
+ /* ------10-------- V59 */
+ /* ------1--0------ V59 */
+ /* ----0--0-------- V59 */
+ /* ----0------1---- V59 */
+ /* ------1----1---- V59 */
+ /* ----0-------1--- V59 */
+ /* ------1-----1--- V59 */
+ /* pass through */
+ case 29:
+ /* abcdefghijklmnop */
+ /* -------1-1-00--- V36 */
+ /* ----1-0--0------ V43 */
+ /* ----1-00-------- V43 */
+ /* ----1-0----1---- V43 */
+ /* ----1-0-----1--- V43 */
+ /* ----0----0------ V59 */
+ /* ------10-------- V59 */
+ /* ------1--0------ V59 */
+ /* ----0--0-------- V59 */
+ /* ----0------1---- V59 */
+ /* ------1----1---- V59 */
+ /* ----0-------1--- V59 */
+ /* ------1-----1--- V59 */
+ if (TTFF(h,j,l,m))
+ return V36;
+ else if(TF(e,g))
+ return V43;
+ else
+ return V59;
+ case 30:
+ /* abcdefghijklmnop */
+ /* ------1-10------ V60 */
+ /* ------101------- V60 */
+ /* ------1-1--1---- V60 */
+ /* ------1-1---1--- V60 */
+ /* --------0------- V38 */
+ /* ------0--------- V38 */
+ /* -------1-1-00--- V38 */
+ /* pass through */
+ case 31:
+ /* abcdefghijklmnop */
+ /* ------1-10------ V60 */
+ /* ------101------- V60 */
+ /* ------1-1--1---- V60 */
+ /* ------1-1---1--- V60 */
+ /* --------0------- V38 */
+ /* ------0--------- V38 */
+ /* -------1-1-00--- V38 */
+ if (TT(g,i) && ANYTTFF(l,m,h,j))
+ return V60;
+ else
+ return V38;
+ case 32:
+ case 33:
+ case 34:
+ case 35:
+ case 36:
+ case 37:
+ return V0;
+ case 38:
+ return V1;
+ case 39:
+ /* abcdefghijklmnop */
+ /* -----1-1-------- V1 */
+ /* -------0-------- V4 */
+ /* -----0---------- V4 */
+ if (TT(f,h))
+ return V1;
+ else
+ return V4;
+ case 40:
+ case 41:
+ case 42:
+ return V0;
+ case 43:
+ return V2;
+ case 44:
+ case 45:
+ return V0;
+ case 46:
+ return V1;
+ case 47:
+ /* abcdefghijklmnop */
+ /* ---------00----- V0 */
+ /* ---------01----- V1 */
+ /* ---------10----- V2 */
+ /* ---------11----- V3 */
+ if (T(j)) {
+ if (T(k))
+ return V3;
+ else
+ return V2;
+ } else {
+ if (T(k))
+ return V1;
+ else
+ return V0;
+ }
+ case 48:
+ /* abcdefghijklmnop */
+ /* ---00-1-1-1---00 V20 */
+ /* ------0-1-1---00 V23 */
+ /* ---1----1-1---00 V23 */
+ /* ----1---1-1---00 V23 */
+ /* ---00-1-1-0----- V56 */
+ /* ---00-1-1-----1- V56 */
+ /* ---00-1-1------1 V56 */
+ /* --------0------- V60 */
+ /* ------0---0----- V60 */
+ /* ---1------0----- V60 */
+ /* ----1-----0----- V60 */
+ /* ------0-------1- V60 */
+ /* ---1----------1- V60 */
+ /* ----1---------1- V60 */
+ /* ------0--------1 V60 */
+ /* ---1-----------1 V60 */
+ /* ----1----------1 V60 */
+ if (TTFF(i,k,o,p)) {
+ if (TFF(g,d,e))
+ return V20;
+ else
+ return V23;
+ } else {
+ if (TTFF(g,i,d,e))
+ return V56;
+ else
+ return V60;
+ }
+ case 49:
+ /* abcdefghijklmnop */
+ /* --------1-1---00 V21 */
+ /* 1----0----0----- V27 */
+ /* 1----0--0------- V27 */
+ /* 1----0--------1- V27 */
+ /* 1----0---------1 V27 */
+ /* 0---------0----- V57 */
+ /* -----1--0------- V57 */
+ /* -----1----0----- V57 */
+ /* 0-------0------- V57 */
+ /* 0-------------1- V57 */
+ /* -----1--------1- V57 */
+ /* 0--------------1 V57 */
+ /* -----1---------1 V57 */
+ if (TTFF(i,k,o,p))
+ return V21;
+ else if(TF(a,f))
+ return V27;
+ else
+ return V57;
+ case 50:
+ /* abcdefghijklmnop */
+ /* 011--0--1-1---00 V22 */
+ /* --0-----1-1---00 V23 */
+ /* -0------1-1---00 V23 */
+ /* 1-------1-1---00 V23 */
+ /* -----1--1-1---00 V23 */
+ /* 011--0----0----- V28 */
+ /* 011--0--0------- V28 */
+ /* 011--0--------1- V28 */
+ /* 011--0---------1 V28 */
+ /* --0-------0----- V60 */
+ /* -0------0------- V60 */
+ /* 1---------0----- V60 */
+ /* -----1--0------- V60 */
+ /* -0--------0----- V60 */
+ /* -----1----0----- V60 */
+ /* --0-----0------- V60 */
+ /* 1-------0------- V60 */
+ /* --0-----------1- V60 */
+ /* -0------------1- V60 */
+ /* 1-------------1- V60 */
+ /* -----1--------1- V60 */
+ /* --0------------1 V60 */
+ /* -0-------------1 V60 */
+ /* 1--------------1 V60 */
+ /* -----1---------1 V60 */
+ if (TTFF(i,k,o,p)) {
+ if (TTFF(b,c,a,f))
+ return V22;
+ else
+ return V23;
+ } else {
+ if (TTFF(b,c,a,f))
+ return V28;
+ else
+ return V60;
+ }
+ case 51:
+ /* abcdefghijklmnop */
+ /* -----1-1--0----- V60 */
+ /* -----1-10------- V60 */
+ /* -----1-1------1- V60 */
+ /* -----1-1-------1 V60 */
+ /* -------0-------- V23 */
+ /* -----0---------- V23 */
+ /* --------1-1---00 V23 */
+ if (TT(f,h) && ANYTTFF(o,p,i,k))
+ return V60;
+ else
+ return V23;
+ case 52:
+ /* abcdefghijklmnop */
+ /* ---01---1-1---00 V21 */
+ /* ----0---1-1---00 V23 */
+ /* ---1----1-1---00 V23 */
+ /* ---01-----0----- V57 */
+ /* ---01---0------- V57 */
+ /* ---01---------1- V57 */
+ /* ---01----------1 V57 */
+ /* ----0-----0----- V60 */
+ /* ---1----0------- V60 */
+ /* ---1------0----- V60 */
+ /* ----0---0------- V60 */
+ /* ----0---------1- V60 */
+ /* ---1----------1- V60 */
+ /* ----0----------1 V60 */
+ /* ---1-----------1 V60 */
+ if (TTFF(i,k,o,p)) {
+ if (TF(e,d))
+ return V21;
+ else
+ return V23;
+ } else {
+ if (TF(e,d))
+ return V57;
+ else
+ return V60;
+ }
+ case 53:
+ /* abcdefghijklmnop */
+ /* --------1-1---00 V21 */
+ /* 1----0----0----- V27 */
+ /* 1----0--0------- V27 */
+ /* 1----0--------1- V27 */
+ /* 1----0---------1 V27 */
+ /* 0---------0----- V57 */
+ /* -----1--0------- V57 */
+ /* -----1----0----- V57 */
+ /* 0-------0------- V57 */
+ /* 0-------------1- V57 */
+ /* -----1--------1- V57 */
+ /* 0--------------1 V57 */
+ /* -----1---------1 V57 */
+ if (TTFF(i,k,o,p))
+ return V21;
+ else if(TF(a,f))
+ return V27;
+ else
+ return V57;
+ case 54:
+ /* abcdefghijklmnop */
+ /* 011--0--1-1---00 V22 */
+ /* --0-----1-1---00 V23 */
+ /* -0------1-1---00 V23 */
+ /* 1-------1-1---00 V23 */
+ /* -----1--1-1---00 V23 */
+ /* 011--0----0----- V28 */
+ /* 011--0--0------- V28 */
+ /* 011--0--------1- V28 */
+ /* 011--0---------1 V28 */
+ /* --0-------0----- V60 */
+ /* -0------0------- V60 */
+ /* 1---------0----- V60 */
+ /* -----1--0------- V60 */
+ /* -0--------0----- V60 */
+ /* -----1----0----- V60 */
+ /* --0-----0------- V60 */
+ /* 1-------0------- V60 */
+ /* --0-----------1- V60 */
+ /* -0------------1- V60 */
+ /* 1-------------1- V60 */
+ /* -----1--------1- V60 */
+ /* --0------------1 V60 */
+ /* -0-------------1 V60 */
+ /* 1--------------1 V60 */
+ /* -----1---------1 V60 */
+ if (TTFF(i,k,o,p)) {
+ if (TTFF(b,c,a,f))
+ return V22;
+ else
+ return V23;
+ } else {
+ if (TTFF(b,c,a,f))
+ return V28;
+ else
+ return V60;
+ }
+ case 55:
+ /* abcdefghijklmnop */
+ /* -----1-1--0----- V60 */
+ /* -----1-10------- V60 */
+ /* -----1-1------1- V60 */
+ /* -----1-1-------1 V60 */
+ /* -------0-------- V23 */
+ /* -----0---------- V23 */
+ /* --------1-1---00 V23 */
+ if (TT(f,h) && ANYTTFF(o,p,i,k))
+ return V60;
+ else
+ return V23;
+ case 56:
+ case 57:
+ case 58:
+ case 59:
+ case 60:
+ case 61:
+ case 62:
+ case 63:
+ return V60;
+ case 64:
+ case 65:
+ case 66:
+ case 67:
+ case 68:
+ case 69:
+ case 70:
+ case 71:
+ case 72:
+ case 73:
+ case 74:
+ return V0;
+ case 75:
+ /* abcdefghijklmnop */
+ /* ------------11-- V2 */
+ /* -------------0-- V15 */
+ /* ------------0--- V15 */
+ if (TT(m,n))
+ return V2;
+ else
+ return V15;
+ case 76:
+ case 77:
+ case 78:
+ case 79:
+ return V0;
+ case 80:
+ /* abcdefghijklmnop */
+ /* ---------0-10--- V10 */
+ /* ---------1-10--- V14 */
+ /* ---------0-11--- V27 */
+ /* -----------0---- V29 */
+ /* ---------1--1--- V29 */
+ if (TF(l,m)) {
+ if (T(j))
+ return V14;
+ else
+ return V10;
+ } else {
+ if (TTF(l,m,j))
+ return V27;
+ else
+ return V29;
+ }
+ case 81:
+ /* abcdefghijklmnop */
+ /* 10---------10--- V8 */
+ /* 0----------10--- V10 */
+ /* -1---------10--- V10 */
+ /* 10---------0---- V25 */
+ /* 10----------1--- V25 */
+ /* 0----------0---- V27 */
+ /* -1---------0---- V27 */
+ /* 0-----------1--- V27 */
+ /* -1----------1--- V27 */
+ if (TF(a,b)) {
+ if (TF(l,m))
+ return V8;
+ else
+ return V25;
+ } else {
+ if (TF(l,m))
+ return V10;
+ else
+ return V27;
+ }
+ case 82:
+ /* abcdefghijklmnop */
+ /* --110-0--------- V13 */
+ /* ---0-------10--- V14 */
+ /* --0--------10--- V14 */
+ /* ----1------10--- V14 */
+ /* ------1----10--- V14 */
+ /* ---0-------0---- V29 */
+ /* --0--------0---- V29 */
+ /* ----1------0---- V29 */
+ /* ------1----0---- V29 */
+ /* ---0--------1--- V29 */
+ /* --0---------1--- V29 */
+ /* ----1-------1--- V29 */
+ /* ------1-----1--- V29 */
+ /* pass through */
+ case 83:
+ /* abcdefghijklmnop */
+ /* --110-0--------- V13 */
+ /* ---0-------10--- V14 */
+ /* --0--------10--- V14 */
+ /* ----1------10--- V14 */
+ /* ------1----10--- V14 */
+ /* ---0-------0---- V29 */
+ /* --0--------0---- V29 */
+ /* ----1------0---- V29 */
+ /* ------1----0---- V29 */
+ /* ---0--------1--- V29 */
+ /* --0---------1--- V29 */
+ /* ----1-------1--- V29 */
+ /* ------1-----1--- V29 */
+ if (TTFF(c,d,e,g))
+ return V13;
+ else if (TF(l,m))
+ return V14;
+ else
+ return V29;
+ case 84:
+ return V8;
+ case 85:
+ return V8;
+ case 86:
+ return V14;
+ case 87:
+ return V14;
+ case 88:
+ /* abcdefghijklmnop */
+ /* 00---1-1---10--- V42 */
+ /* 00---1-1---0---- V58 */
+ /* 00---1-1----1--- V58 */
+ /* -------0---10--- V45 */
+ /* -----0-----10--- V45 */
+ /* 1----------10--- V45 */
+ /* -1---------10--- V45 */
+ /* -------0---0---- V60 */
+ /* -----0-----0---- V60 */
+ /* 1----------0---- V60 */
+ /* -1---------0---- V60 */
+ /* -------0----1--- V60 */
+ /* -----0------1--- V60 */
+ /* 1-----------1--- V60 */
+ /* -1----------1--- V60 */
+ if (TTFF(f,h,a,b)) {
+ if (TF(l,m))
+ return V42;
+ else
+ return V58;
+ } else {
+ if (TF(l,m))
+ return V45;
+ else
+ return V60;
+ }
+ case 89:
+ /* abcdefghijklmnop */
+ /* 10---------10--- V43 */
+ /* 0----------10--- V45 */
+ /* -1---------10--- V45 */
+ /* 10---------0---- V59 */
+ /* 10----------1--- V59 */
+ /* 0----------0---- V60 */
+ /* -1---------0---- V60 */
+ /* 0-----------1--- V60 */
+ /* -1----------1--- V60 */
+ if (TF(l,m)) {
+ if (TF(a,b))
+ return V43;
+ else
+ return V45;
+ } else {
+ if (TF(a,b))
+ return V59;
+ else
+ return V60;
+ }
+ case 90:
+ /* abcdefghijklmnop */
+ /* ---0--------11-- V60 */
+ /* --0---------11-- V60 */
+ /* ----1-------11-- V60 */
+ /* ------1-----11-- V60 */
+ /* -------------0-- V44 */
+ /* ------------0--- V44 */
+ /* --110-0--------- V44 */
+ /* pass through */
+ case 91:
+ /* abcdefghijklmnop */
+ /* ---0--------11-- V60 */
+ /* --0---------11-- V60 */
+ /* ----1-------11-- V60 */
+ /* ------1-----11-- V60 */
+ /* -------------0-- V44 */
+ /* ------------0--- V44 */
+ /* --110-0--------- V44 */
+ if (TT(m,n) && ANYTTFF(e,g,c,d))
+ return V60;
+ else
+ return V44;
+ case 92:
+ case 93:
+ return V43;
+ case 94:
+ case 95:
+ return V45;
+ case 96:
+ case 97:
+ case 98:
+ case 99:
+ case 100:
+ case 101:
+ return V0;
+ case 102:
+ return V1;
+ case 103:
+ /* abcdefghijklmnop */
+ /* -----1-1-------- V1 */
+ /* -------0-------- V4 */
+ /* -----0---------- V4 */
+ if (TT(f,h))
+ return V1;
+ else
+ return V4;
+ case 104:
+ case 105:
+ case 106:
+ return V0;
+ case 107:
+ return V15;
+ case 108:
+ case 109:
+ return V0;
+ case 110:
+ return V1;
+ case 111:
+ /* abcdefghijklmnop */
+ /* ----------0----- V0 */
+ /* ----------1----- V1 */
+ if (T(k))
+ return V1;
+ else
+ return V0;
+ case 112:
+ /* abcdefghijklmnop */
+ /* ---00-1-1------- V26 */
+ /* --------00-1---- V27 */
+ /* ------0--0-1---- V27 */
+ /* ---1-----0-1---- V27 */
+ /* ----1----0-1---- V27 */
+ /* --------0--0---- V29 */
+ /* ------0----0---- V29 */
+ /* ---1-------0---- V29 */
+ /* ----1------0---- V29 */
+ /* --------01------ V29 */
+ /* ------0--1------ V29 */
+ /* ---1-----1------ V29 */
+ /* ----1----1------ V29 */
+ if (TTFF(g,i,d,e))
+ return V26;
+ else if(TF(l,j))
+ return V27;
+ else
+ return V29;
+ case 113:
+ return V27;
+ case 114:
+ /* abcdefghijklmnop */
+ /* -------0-1--10-- V60 */
+ /* ------------0--- V29 */
+ /* ---------0------ V29 */
+ /* -------1-------- V29 */
+ /* -------------1-- V29 */
+ if (TTFF(j,m,h,n))
+ return V60;
+ else
+ return V29;
+ case 115:
+ return V23;
+ case 116:
+ case 117:
+ return V27;
+ case 118:
+ /* abcdefghijklmnop */
+ /* ---------0---0-- V29 */
+ /* ------------00-- V29 */
+ /* -------0-1--10-- V60 */
+ /* -------1-----1-- V7 */
+ /* -------1-----0-- V29 */
+ /* -------0-----1-- V29 */
+ if (TTFF(j,m,h,n))
+ return V60;
+ else if (TT(h,n))
+ return V7;
+ else
+ return V29;
+ case 119:
+ return V23;
+ case 120:
+ case 121:
+ case 122:
+ case 123:
+ case 124:
+ case 125:
+ case 126:
+ case 127:
+ return V60;
+ case 128:
+ case 129:
+ case 130:
+ case 131:
+ case 132:
+ case 133:
+ case 134:
+ case 135:
+ case 136:
+ case 137:
+ case 138:
+ return V0;
+ case 139:
+ return V2;
+ case 140:
+ case 141:
+ case 142:
+ return V0;
+ case 143:
+ return V5;
+ case 144:
+ /* abcdefghijklmnop */
+ /* ---------0001110 V48 */
+ /* ---------0-0110- V51 */
+ /* ---------01011-- V51 */
+ /* ---------0-011-1 V51 */
+ /* ----------0-0110 V54 */
+ /* ---------10--110 V54 */
+ /* ----------01-110 V54 */
+ /* -------------0-- V60 */
+ /* ------------0-0- V60 */
+ /* ---------1----0- V60 */
+ /* -----------1--0- V60 */
+ /* ----------1-0--- V60 */
+ /* ---------11----- V60 */
+ /* ----------11---- V60 */
+ /* ------------0--1 V60 */
+ /* ---------1-----1 V60 */
+ /* -----------1---1 V60 */
+ if (TTFF(m,n,j,l)) {
+ if (TFF(o,k,p))
+ return V48;
+ else
+ return V51;
+ } else {
+ if (TTFF(n,o,k,p))
+ return V54;
+ else
+ return V60;
+ }
+ case 145:
+ /* abcdefghijklmnop */
+ /* ----------0--110 V52 */
+ /* 10------------0- V55 */
+ /* 10-----------0-- V55 */
+ /* 10--------1----- V55 */
+ /* 10-------------1 V55 */
+ /* 0-------------0- V57 */
+ /* -1-----------0-- V57 */
+ /* -1------------0- V57 */
+ /* 0------------0-- V57 */
+ /* 0---------1----- V57 */
+ /* -1--------1----- V57 */
+ /* 0--------------1 V57 */
+ /* -1-------------1 V57 */
+ if (TTFF(n,o,k,p))
+ return V52;
+ else if(TF(a,b))
+ return V55;
+ else
+ return V57;
+ case 146:
+ case 147:
+ return V60;
+ case 148:
+ /* abcdefghijklmnop */
+ /* ---------0-011-- V49 */
+ /* ---01--------0-- V55 */
+ /* ---01-------0--- V55 */
+ /* ---01----1------ V55 */
+ /* ---01------1---- V55 */
+ /* ----0--------0-- V59 */
+ /* ---1--------0--- V59 */
+ /* ---1---------0-- V59 */
+ /* ----0-------0--- V59 */
+ /* ----0----1------ V59 */
+ /* ---1-----1------ V59 */
+ /* ----0------1---- V59 */
+ /* ---1-------1---- V59 */
+ if (TTFF(m,n,j,l))
+ return V49;
+ else if(TF(e,d))
+ return V55;
+ else
+ return V59;
+ case 149:
+ return V55;
+ case 150:
+ case 151:
+ return V60;
+ case 152:
+ /* abcdefghijklmnop */
+ /* 00---1-1--0--110 V53 */
+ /* -------0--0--110 V54 */
+ /* -----0----0--110 V54 */
+ /* 1---------0--110 V54 */
+ /* -1--------0--110 V54 */
+ /* 00---1-1------0- V58 */
+ /* 00---1-1-----0-- V58 */
+ /* 00---1-1--1----- V58 */
+ /* 00---1-1-------1 V58 */
+ /* -------0------0- V60 */
+ /* -----0-------0-- V60 */
+ /* 1-------------0- V60 */
+ /* -1-----------0-- V60 */
+ /* -----0--------0- V60 */
+ /* -1------------0- V60 */
+ /* -------0-----0-- V60 */
+ /* 1------------0-- V60 */
+ /* -------0--1----- V60 */
+ /* -----0----1----- V60 */
+ /* 1---------1----- V60 */
+ /* -1--------1----- V60 */
+ /* -------0-------1 V60 */
+ /* -----0---------1 V60 */
+ /* 1--------------1 V60 */
+ /* -1-------------1 V60 */
+ if (TTFF(n,o,k,p)) {
+ if (TTFF(f,h,a,b))
+ return V53;
+ else
+ return V54;
+ } else {
+ if (TTFF(f,h,a,b))
+ return V58;
+ else
+ return V60;
+ }
+ case 153:
+ /* abcdefghijklmnop */
+ /* -11-----------0- V60 */
+ /* -11----------0-- V60 */
+ /* -11-------1----- V60 */
+ /* -11------------1 V60 */
+ /* --0------------- V54 */
+ /* -0-------------- V54 */
+ /* ----------0--110 V54 */
+ if (TT(b,c) && ANYTTFF(k,p,n,o))
+ return V60;
+ else
+ return V54;
+ case 154:
+ case 155:
+ return V60;
+ case 156:
+ /* abcdefghijklmnop */
+ /* --01--1-0------- V60 */
+ /* ------0--------- V59 */
+ /* ---0------------ V59 */
+ /* --1------------- V59 */
+ /* --------1------- V59 */
+ if (TTFF(d,g,c,i))
+ return V60;
+ else
+ return V59;
+ case 157:
+ return V54;
+ case 158:
+ case 159:
+ return V60;
+ case 160:
+ case 161:
+ case 162:
+ case 163:
+ case 164:
+ case 165:
+ return V0;
+ case 166:
+ return V1;
+ case 167:
+ return V4;
+ case 168:
+ case 169:
+ case 170:
+ return V0;
+ case 171:
+ return V2;
+ case 172:
+ case 173:
+ return V0;
+ case 174:
+ return V1;
+ case 175:
+ return V3;
+ case 176:
+ /* abcdefghijklmnop */
+ /* ---00-1-10-011-- V50 */
+ /* --------00-011-- V51 */
+ /* ------0--0-011-- V51 */
+ /* ---1-----0-011-- V51 */
+ /* ----1----0-011-- V51 */
+ /* ---00-1-1----0-- V56 */
+ /* ---00-1-1---0--- V56 */
+ /* ---00-1-11------ V56 */
+ /* ---00-1-1--1---- V56 */
+ /* --------0----0-- V60 */
+ /* ------0-----0--- V60 */
+ /* ---1---------0-- V60 */
+ /* ----1-------0--- V60 */
+ /* ------0------0-- V60 */
+ /* ----1--------0-- V60 */
+ /* --------0---0--- V60 */
+ /* ---1--------0--- V60 */
+ /* --------01------ V60 */
+ /* ------0--1------ V60 */
+ /* ---1-----1------ V60 */
+ /* ----1----1------ V60 */
+ /* --------0--1---- V60 */
+ /* ------0----1---- V60 */
+ /* ---1-------1---- V60 */
+ /* ----1------1---- V60 */
+ if (TTFF(m,n,j,l)) {
+ if (TTFF(g,i,d,e))
+ return V50;
+ else
+ return V51;
+ } else {
+ if (TTFF(g,i,d,e))
+ return V56;
+ else
+ return V60;
+ }
+ case 177:
+ /* abcdefghijklmnop */
+ /* -10--1-0-------- V60 */
+ /* -----0---------- V57 */
+ /* -0-------------- V57 */
+ /* --1------------- V57 */
+ /* -------1-------- V57 */
+ if (TTFF(b,f,c,h))
+ return V60;
+ else
+ return V57;
+ case 178:
+ case 179:
+ return V60;
+ case 180:
+ /* abcdefghijklmnop */
+ /* --11---------0-- V60 */
+ /* --11--------0--- V60 */
+ /* --11-----1------ V60 */
+ /* --11-------1---- V60 */
+ /* ---0------------ V51 */
+ /* --0------------- V51 */
+ /* ---------0-011-- V51 */
+ if (TT(c,d) && ANYTTFF(j,l,m,n))
+ return V60;
+ else
+ return V51;
+ case 181:
+ return V51;
+ case 182:
+ case 183:
+ case 184:
+ case 185:
+ case 186:
+ case 187:
+ case 188:
+ case 189:
+ case 190:
+ case 191:
+ return V60;
+ case 192:
+ case 193:
+ case 194:
+ case 195:
+ case 196:
+ case 197:
+ case 198:
+ case 199:
+ return V0;
+ case 200:
+ return V32;
+ case 201:
+ /* abcdefghijklmnop */
+ /* -11------------- V32 */
+ /* --0------------- V40 */
+ /* -0-------------- V40 */
+ if (TT(b,c))
+ return V32;
+ else
+ return V40;
+ case 202:
+ return V32;
+ case 203:
+ /* abcdefghijklmnop */
+ /* ---0----------0- V0 */
+ /* ---1----------0- V2 */
+ /* ---0----------1- V32 */
+ /* ---1----------1- V34 */
+ if (T(o)) {
+ if (T(d))
+ return V34;
+ else
+ return V32;
+ } else {
+ if (T(d))
+ return V2;
+ else
+ return V0;
+ }
+ case 204:
+ return V32;
+ case 205:
+ /* abcdefghijklmnop */
+ /* -11------------- V32 */
+ /* --0------------- V40 */
+ /* -0-------------- V40 */
+ if (TT(b,c))
+ return V32;
+ else
+ return V40;
+ case 206:
+ return V32;
+ case 207:
+ /* abcdefghijklmnop */
+ /* --------------0- V0 */
+ /* --------------1- V32 */
+ if (F(o))
+ return V0;
+ else
+ return V32;
+ case 208:
+ /* abcdefghijklmnop */
+ /* ---------001-110 V52 */
+ /* ----------00-110 V54 */
+ /* ---------10--110 V54 */
+ /* ---------0-1--0- V57 */
+ /* ---------0-1-0-- V57 */
+ /* ---------011---- V57 */
+ /* ---------0-1---1 V57 */
+ /* -----------0--0- V60 */
+ /* ---------1---0-- V60 */
+ /* ---------1----0- V60 */
+ /* -----------0-0-- V60 */
+ /* ----------10---- V60 */
+ /* ---------11----- V60 */
+ /* -----------0---1 V60 */
+ /* ---------1-----1 V60 */
+ if (TTFF(n,o,k,p)) {
+ if (TF(l,j))
+ return V52;
+ else
+ return V54;
+ } else {
+ if (TF(l,j))
+ return V57;
+ else
+ return V60;
+ }
+ case 209:
+ /* abcdefghijklmnop */
+ /* ----------0--110 V52 */
+ /* 10------------0- V55 */
+ /* 10-----------0-- V55 */
+ /* 10--------1----- V55 */
+ /* 10-------------1 V55 */
+ /* 0-------------0- V57 */
+ /* -1-----------0-- V57 */
+ /* -1------------0- V57 */
+ /* 0------------0-- V57 */
+ /* 0---------1----- V57 */
+ /* -1--------1----- V57 */
+ /* 0--------------1 V57 */
+ /* -1-------------1 V57 */
+ if (TTFF(n,o,k,p))
+ return V52;
+ else if (TF(a,b))
+ return V55;
+ else
+ return V57;
+ case 210:
+ case 211:
+ return V60;
+ case 212:
+ case 213:
+ return V55;
+ case 214:
+ case 215:
+ return V60;
+ case 216:
+ /* abcdefghijklmnop */
+ /* 00---1-1--0--110 V53 */
+ /* -------0--0--110 V54 */
+ /* -----0----0--110 V54 */
+ /* 1---------0--110 V54 */
+ /* -1--------0--110 V54 */
+ /* 00---1-1------0- V58 */
+ /* 00---1-1-----0-- V58 */
+ /* 00---1-1--1----- V58 */
+ /* 00---1-1-------1 V58 */
+ /* -------0------0- V60 */
+ /* -----0-------0-- V60 */
+ /* 1-------------0- V60 */
+ /* -1-----------0-- V60 */
+ /* -----0--------0- V60 */
+ /* -1------------0- V60 */
+ /* -------0-----0-- V60 */
+ /* 1------------0-- V60 */
+ /* -------0--1----- V60 */
+ /* -----0----1----- V60 */
+ /* 1---------1----- V60 */
+ /* -1--------1----- V60 */
+ /* -------0-------1 V60 */
+ /* -----0---------1 V60 */
+ /* 1--------------1 V60 */
+ /* -1-------------1 V60 */
+ if (TTFF(n,o,k,p)) {
+ if (TTFF(f,h,a,b))
+ return V53;
+ else
+ return V54;
+ } else {
+ if (TTFF(f,h,a,b))
+ return V58;
+ else
+ return V60;
+ }
+ case 217:
+ /* abcdefghijklmnop */
+ /* -11-----------0- V60 */
+ /* -11----------0-- V60 */
+ /* -11-------1----- V60 */
+ /* -11------------1 V60 */
+ /* --0------------- V54 */
+ /* -0-------------- V54 */
+ /* ----------0--110 V54 */
+ if (TT(b,c) && ANYTTFF(k,p,n,o))
+ return V60;
+ else
+ return V54;
+ case 218:
+ return V60;
+ case 219:
+ return V60;
+ case 220:
+ /* abcdefghijklmnop */
+ /* ---0----0------- V59 */
+ /* ------0-0------- V59 */
+ /* --01--1-0------- V60 */
+ /* --1-----1------- V47 */
+ /* --1-----0------- V59 */
+ /* --0-----1------- V59 */
+ if (TT(c,i))
+ return V47;
+ else if(TTFF(d,g,c,i))
+ return V60;
+ else
+ return V59;
+ case 221:
+ return V54;
+ case 222:
+ case 223:
+ return V60;
+ case 224:
+ case 225:
+ case 226:
+ case 227:
+ case 228:
+ case 229:
+ return V0;
+ case 230:
+ return V1;
+ case 231:
+ return V4;
+ case 232:
+ return V32;
+ case 233:
+ return V40;
+ case 234:
+ return V32;
+ case 235:
+ return V34;
+ case 236:
+ return V32;
+ case 237:
+ return V40;
+ case 238:
+ case 239:
+ return V33;
+ case 240:
+ /* abcdefghijklmnop */
+ /* -------101------ V60 */
+ /* ------01-1------ V60 */
+ /* ---1---1-1------ V60 */
+ /* ----1--1-1------ V60 */
+ /* ---------0------ V56 */
+ /* -------0-------- V56 */
+ /* ---00-1-1------- V56 */
+ if (TT(h,j) && ANYTTFF(d,e,g,i))
+ return V60;
+ else
+ return V56;
+ case 241:
+ return V56;
+ case 242:
+ case 243:
+ return V60;
+ case 244:
+ case 245:
+ return V57;
+ case 246:
+ case 247:
+ case 248:
+ case 249:
+ case 250:
+ case 251:
+ case 252:
+ case 253:
+ case 254:
+ case 255:
+ return V60;
+ case 256:
+ case 257:
+ case 258:
+ case 259:
+ case 260:
+ case 261:
+ case 262:
+ case 263:
+ case 264:
+ case 265:
+ case 266:
+ return V0;
+ case 267:
+ return V2;
+ case 268:
+ case 269:
+ case 270:
+ return V0;
+ case 271:
+ /* abcdefghijklmnop */
+ /* ------1-1------- V2 */
+ /* --------0------- V5 */
+ /* ------0--------- V5 */
+ if (TT(g,i))
+ return V2;
+ else
+ return V5;
+ case 272:
+ /* abcdefghijklmnop */
+ /* ----------0---01 V12 */
+ /* ----------1---01 V14 */
+ /* ----------0---11 V43 */
+ /* ---------------0 V45 */
+ /* ----------1---1- V45 */
+ if (TF(p,o)) {
+ if (T(k))
+ return V14;
+ else
+ return V12;
+ } else {
+ if (TTF(o,p,k))
+ return V43;
+ else
+ return V45;
+ }
+ case 273:
+ return V8;
+ case 274:
+ /* abcdefghijklmnop */
+ /* 011--0---------- V11 */
+ /* --0-----------01 V14 */
+ /* -0------------01 V14 */
+ /* 1-------------01 V14 */
+ /* -----1--------01 V14 */
+ /* --0------------0 V45 */
+ /* -0-------------0 V45 */
+ /* 1--------------0 V45 */
+ /* -----1---------0 V45 */
+ /* --0-----------1- V45 */
+ /* -0------------1- V45 */
+ /* 1-------------1- V45 */
+ /* -----1--------1- V45 */
+ if (TTFF(b,c,a,f))
+ return V11;
+ else if (TF(p,o))
+ return V14;
+ else
+ return V45;
+ case 275:
+ return V14;
+ case 276:
+ /* abcdefghijklmnop */
+ /* ---01---------01 V8 */
+ /* ----0---------01 V12 */
+ /* ---1----------01 V12 */
+ /* ---01----------0 V41 */
+ /* ---01---------1- V41 */
+ /* ----0----------0 V43 */
+ /* ---1-----------0 V43 */
+ /* ----0---------1- V43 */
+ /* ---1----------1- V43 */
+ if (TF(p,o)) {
+ if (TF(e,d))
+ return V8;
+ else
+ return V12;
+ } else {
+ if (TF(e,d))
+ return V41;
+ else
+ return V43;
+ }
+ case 277:
+ return V8;
+ case 278:
+ /* abcdefghijklmnop */
+ /* 011--0---------- V11 */
+ /* --0-----------01 V14 */
+ /* -0------------01 V14 */
+ /* 1-------------01 V14 */
+ /* -----1--------01 V14 */
+ /* --0------------0 V45 */
+ /* -0-------------0 V45 */
+ /* 1--------------0 V45 */
+ /* -----1---------0 V45 */
+ /* --0-----------1- V45 */
+ /* -0------------1- V45 */
+ /* 1-------------1- V45 */
+ /* -----1--------1- V45 */
+ if (TTFF(b,c,a,f))
+ return V11;
+ else if (TF(p,o))
+ return V14;
+ else
+ return V45;
+ case 279:
+ return V14;
+ case 280:
+ /* abcdefghijklmnop */
+ /* 00---1-1-------- V42 */
+ /* -------0--0----1 V43 */
+ /* -----0----0----1 V43 */
+ /* 1---------0----1 V43 */
+ /* -1--------0----1 V43 */
+ /* -------0-------0 V45 */
+ /* -----0---------0 V45 */
+ /* 1--------------0 V45 */
+ /* -1-------------0 V45 */
+ /* -------0--1----- V45 */
+ /* -----0----1----- V45 */
+ /* 1---------1----- V45 */
+ /* -1--------1----- V45 */
+ if (TTFF(f,h,a,b))
+ return V42;
+ else if (TF(p,k))
+ return V43;
+ else
+ return V45;
+ case 281:
+ return V43;
+ case 282:
+ /* abcdefghijklmnop */
+ /* --------0-1--01- V60 */
+ /* --------------0- V45 */
+ /* ----------0----- V45 */
+ /* --------1------- V45 */
+ /* -------------1-- V45 */
+ if (TTFF(k,o,i,n))
+ return V60;
+ else
+ return V45;
+ case 283:
+ /* abcdefghijklmnop */
+ /* ----------0--0-- V45 */
+ /* -------------00- V45 */
+ /* --------0-1--01- V60 */
+ /* --------1----1-- V16 */
+ /* --------0----1-- V45 */
+ /* --------1----0-- V45 */
+ if (TTFF(k,o,i,n))
+ return V60;
+ else if(TT(i,n))
+ return V16;
+ else
+ return V45;
+ case 284:
+ case 285:
+ return V43;
+ case 286:
+ case 287:
+ return V38;
+ case 288:
+ case 289:
+ case 290:
+ case 291:
+ case 292:
+ case 293:
+ return V0;
+ case 294:
+ /* abcdefghijklmnop */
+ /* -------------11- V1 */
+ /* --------------0- V6 */
+ /* -------------0-- V6 */
+ if (TT(n,o))
+ return V1;
+ else
+ return V6;
+ case 295:
+ case 296:
+ case 297:
+ case 298:
+ return V0;
+ case 299:
+ return V2;
+ case 300:
+ case 301:
+ return V0;
+ case 302:
+ return V6;
+ case 303:
+ /* abcdefghijklmnop */
+ /* ---------0------ V0 */
+ /* ---------1------ V2 */
+ if (T(j))
+ return V2;
+ else
+ return V0;
+ case 304:
+ /* abcdefghijklmnop */
+ /* ---00-1-1-----01 V26 */
+ /* ---00-1-1------0 V56 */
+ /* ---00-1-1-----1- V56 */
+ /* --------0-----01 V29 */
+ /* ------0-------01 V29 */
+ /* ---1----------01 V29 */
+ /* ----1---------01 V29 */
+ /* --------0------0 V60 */
+ /* ------0--------0 V60 */
+ /* ---1-----------0 V60 */
+ /* ----1----------0 V60 */
+ /* --------0-----1- V60 */
+ /* ------0-------1- V60 */
+ /* ---1----------1- V60 */
+ /* ----1---------1- V60 */
+ if (TTFF(g,i,d,e)) {
+ if (TF(p,o))
+ return V26;
+ else
+ return V56;
+ } else {
+ if (TF(p,o))
+ return V29;
+ else
+ return V60;
+ }
+ case 305:
+ return V27;
+ case 306:
+ /* abcdefghijklmnop */
+ /* --0----------11- V60 */
+ /* -0-----------11- V60 */
+ /* 1------------11- V60 */
+ /* -----1-------11- V60 */
+ /* --------------0- V28 */
+ /* -------------0-- V28 */
+ /* 011--0---------- V28 */
+ if (TT(n,o) && ANYTTFF(a,f,b,c))
+ return V60;
+ else
+ return V28;
+ case 307:
+ return V29;
+ case 308:
+ /* abcdefghijklmnop */
+ /* ---01---------01 V27 */
+ /* ----0---------01 V29 */
+ /* ---1----------01 V29 */
+ /* ---01----------0 V57 */
+ /* ---01---------1- V57 */
+ /* ----0----------0 V60 */
+ /* ---1-----------0 V60 */
+ /* ----0---------1- V60 */
+ /* ---1----------1- V60 */
+ if (TF(p,o)) {
+ if (TF(e,d))
+ return V27;
+ else
+ return V29;
+ } else {
+ if (TF(e,d))
+ return V57;
+ else
+ return V60;
+ }
+ case 309:
+ return V27;
+ case 310:
+ /* abcdefghijklmnop */
+ /* --0----------11- V60 */
+ /* -0-----------11- V60 */
+ /* 1------------11- V60 */
+ /* -----1-------11- V60 */
+ /* --------------0- V28 */
+ /* -------------0-- V28 */
+ /* 011--0---------- V28 */
+ if (TT(n,o) && ANYTTFF(a,f,b,c))
+ return V60;
+ else
+ return V28;
+ case 311:
+ return V29;
+ case 312:
+ case 313:
+ case 314:
+ case 315:
+ case 316:
+ case 317:
+ case 318:
+ case 319:
+ return V60;
+ case 320:
+ case 321:
+ case 322:
+ case 323:
+ case 324:
+ case 325:
+ case 326:
+ case 327:
+ case 328:
+ case 329:
+ case 330:
+ return V0;
+ case 331:
+ /* abcdefghijklmnop */
+ /* ------------11-- V2 */
+ /* -------------0-- V15 */
+ /* ------------0--- V15 */
+ if (TT(m,n))
+ return V2;
+ else
+ return V15;
+ case 332:
+ case 333:
+ case 334:
+ case 335:
+ return V0;
+ case 336:
+ /* abcdefghijklmnop */
+ /* ---------001---1 V8 */
+ /* ---------0-1---0 V10 */
+ /* ---------011---- V10 */
+ /* ----------00---1 V12 */
+ /* ---------10----1 V12 */
+ /* -----------0---0 V14 */
+ /* ---------1-----0 V14 */
+ /* ----------10---- V14 */
+ /* ---------11----- V14 */
+ if (TF(l,j)) {
+ if (TF(p,k))
+ return V8;
+ else
+ return V10;
+ } else {
+ if (TF(p,k))
+ return V12;
+ else
+ return V14;
+ }
+ case 337:
+ return V8;
+ case 338:
+ case 339:
+ return V14;
+ case 340:
+ return V8;
+ case 341:
+ return V60;
+ case 342:
+ case 343:
+ return V14;
+ case 344:
+ /* abcdefghijklmnop */
+ /* 00---1-1-------- V42 */
+ /* -------0--0----1 V43 */
+ /* -----0----0----1 V43 */
+ /* 1---------0----1 V43 */
+ /* -1--------0----1 V43 */
+ /* -------0-------0 V45 */
+ /* -----0---------0 V45 */
+ /* 1--------------0 V45 */
+ /* -1-------------0 V45 */
+ /* -------0--1----- V45 */
+ /* -----0----1----- V45 */
+ /* 1---------1----- V45 */
+ /* -1--------1----- V45 */
+ if (TTFF(f,h,a,b))
+ return V42;
+ else if (TF(p,k))
+ return V43;
+ else
+ return V45;
+ case 345:
+ return V43;
+ case 346:
+ case 347:
+ return V44;
+ case 348:
+ case 349:
+ return V43;
+ case 350:
+ case 351:
+ return V45;
+ case 352:
+ case 353:
+ case 354:
+ case 355:
+ case 356:
+ case 357:
+ return V0;
+ case 358:
+ /* abcdefghijklmnop */
+ /* -------------11- V1 */
+ /* --------------0- V6 */
+ /* -------------0-- V6 */
+ if (TT(n,o))
+ return V1;
+ else
+ return V6;
+ case 359:
+ case 360:
+ case 361:
+ case 362:
+ return V0;
+ case 363:
+ return V15;
+ case 364:
+ case 365:
+ return V0;
+ case 366:
+ return V6;
+ case 367:
+ return V0;
+ case 368:
+ /* abcdefghijklmnop */
+ /* ---00-1-1------- V26 */
+ /* --------00-1---- V27 */
+ /* ------0--0-1---- V27 */
+ /* ---1-----0-1---- V27 */
+ /* ----1----0-1---- V27 */
+ /* --------0--0---- V29 */
+ /* ------0----0---- V29 */
+ /* ---1-------0---- V29 */
+ /* ----1------0---- V29 */
+ /* --------01------ V29 */
+ /* ------0--1------ V29 */
+ /* ---1-----1------ V29 */
+ /* ----1----1------ V29 */
+ if (TTFF(g,i,d,e))
+ return V26;
+ else if (TF(l,j))
+ return V27;
+ else
+ return V29;
+ case 369:
+ return V27;
+ case 370:
+ return V28;
+ case 371:
+ return V29;
+ case 372:
+ case 373:
+ return V27;
+ case 374:
+ return V28;
+ case 375:
+ return V29;
+ case 376:
+ case 377:
+ case 378:
+ case 379:
+ case 380:
+ case 381:
+ case 382:
+ case 383:
+ return V60;
+ case 384:
+ case 385:
+ case 386:
+ case 387:
+ case 388:
+ case 389:
+ case 390:
+ case 391:
+ case 392:
+ case 393:
+ case 394:
+ return V0;
+ case 395:
+ return V2;
+ case 396:
+ case 397:
+ case 398:
+ return V0;
+ case 399:
+ return V5;
+ case 400:
+ /* abcdefghijklmnop */
+ /* ---------00011-1 V49 */
+ /* ---------0-011-0 V51 */
+ /* ---------01011-- V51 */
+ /* ----------0--0-1 V59 */
+ /* ----------0-0--1 V59 */
+ /* ---------10----1 V59 */
+ /* ----------01---1 V59 */
+ /* -------------0-0 V60 */
+ /* ------------0--0 V60 */
+ /* ---------1-----0 V60 */
+ /* -----------1---0 V60 */
+ /* ----------1--0-- V60 */
+ /* ----------1-0--- V60 */
+ /* ---------11----- V60 */
+ /* ----------11---- V60 */
+ if (TTFF(m,n,j,l)) {
+ if (TF(p,k))
+ return V49;
+ else
+ return V51;
+ } else {
+ if (TF(p,k))
+ return V59;
+ else
+ return V60;
+ }
+ case 401:
+ return V55;
+ case 402:
+ case 403:
+ return V60;
+ case 404:
+ /* abcdefghijklmnop */
+ /* ---------0-011-- V49 */
+ /* ---01--------0-- V55 */
+ /* ---01-------0--- V55 */
+ /* ---01----1------ V55 */
+ /* ---01------1---- V55 */
+ /* ----0--------0-- V59 */
+ /* ---1--------0--- V59 */
+ /* ---1---------0-- V59 */
+ /* ----0-------0--- V59 */
+ /* ----0----1------ V59 */
+ /* ---1-----1------ V59 */
+ /* ----0------1---- V59 */
+ /* ---1-------1---- V59 */
+ if (TTFF(m,n,j,l))
+ return V49;
+ else if (TF(e,d))
+ return V55;
+ else
+ return V59;
+ case 405:
+ return V55;
+ case 406:
+ case 407:
+ return V60;
+ case 408:
+ /* abcdefghijklmnop */
+ /* -------01-1----- V60 */
+ /* -----0--1-1----- V60 */
+ /* 1-------1-1----- V60 */
+ /* -1------1-1----- V60 */
+ /* ----------0----- V58 */
+ /* --------0------- V58 */
+ /* 00---1-1-------- V58 */
+ if (TT(i,k) && ANYTTFF(a,b,f,h))
+ return V60;
+ else
+ return V58;
+ case 409:
+ return V59;
+ case 410:
+ case 411:
+ return V60;
+ case 412:
+ return V58;
+ case 413:
+ return V59;
+ case 414:
+ case 415:
+ return V60;
+ case 416:
+ case 417:
+ case 418:
+ case 419:
+ return V17;
+ case 420:
+ /* abcdefghijklmnop */
+ /* --11------------ V17 */
+ /* ---0------------ V24 */
+ /* --0------------- V24 */
+ /* pass through */
+ case 421:
+ /* abcdefghijklmnop */
+ /* --11------------ V17 */
+ /* ---0------------ V24 */
+ /* --0------------- V24 */
+ if (TT(c,d))
+ return V17;
+ else
+ return V24;
+ case 422:
+ /* abcdefghijklmnop */
+ /* -0----------0--- V0 */
+ /* -1----------0--- V1 */
+ /* -0----------1--- V17 */
+ /* -1----------1--- V18 */
+ if (T(m)) {
+ if (T(b))
+ return V18;
+ else
+ return V17;
+ } else {
+ if (T(b))
+ return V1;
+ else
+ return V0;
+ }
+ case 423:
+ /* abcdefghijklmnop */
+ /* ------------0--- V0 */
+ /* ------------1--- V17 */
+ if (T(m))
+ return V17;
+ else
+ return V0;
+ case 424:
+ case 425:
+ case 426:
+ return V17;
+ case 427:
+ return V19;
+ case 428:
+ case 429:
+ return V24;
+ case 430:
+ return V18;
+ case 431:
+ return V19;
+ case 432:
+ /* abcdefghijklmnop */
+ /* ---00-1-10-011-- V50 */
+ /* --------00-011-- V51 */
+ /* ------0--0-011-- V51 */
+ /* ---1-----0-011-- V51 */
+ /* ----1----0-011-- V51 */
+ /* ---00-1-1----0-- V56 */
+ /* ---00-1-1---0--- V56 */
+ /* ---00-1-11------ V56 */
+ /* ---00-1-1--1---- V56 */
+ /* --------0----0-- V60 */
+ /* ------0-----0--- V60 */
+ /* ---1---------0-- V60 */
+ /* ----1-------0--- V60 */
+ /* ------0------0-- V60 */
+ /* ----1--------0-- V60 */
+ /* --------0---0--- V60 */
+ /* ---1--------0--- V60 */
+ /* --------01------ V60 */
+ /* ------0--1------ V60 */
+ /* ---1-----1------ V60 */
+ /* ----1----1------ V60 */
+ /* --------0--1---- V60 */
+ /* ------0----1---- V60 */
+ /* ---1-------1---- V60 */
+ /* ----1------1---- V60 */
+ if (TTFF(m,n,j,l)) {
+ if (TTFF(g,i,d,e))
+ return V50;
+ else
+ return V51;
+ } else {
+ if (TTFF(g,i,d,e))
+ return V56;
+ else
+ return V60;
+ }
+ case 433:
+ /* abcdefghijklmnop */
+ /* -0-----0-------- V57 */
+ /* -----0-0-------- V57 */
+ /* -10--1-0-------- V60 */
+ /* --1----1-------- V31 */
+ /* --1----0-------- V57 */
+ /* --0----1-------- V57 */
+ if (TTFF(b,f,c,h))
+ return V60;
+ else if (TT(c,h))
+ return V31;
+ else
+ return V57;
+ case 434:
+ case 435:
+ return V60;
+ case 436:
+ /* abcdefghijklmnop */
+ /* --11---------0-- V60 */
+ /* --11--------0--- V60 */
+ /* --11-----1------ V60 */
+ /* --11-------1---- V60 */
+ /* ---0------------ V51 */
+ /* --0------------- V51 */
+ /* ---------0-011-- V51 */
+ if (TT(c,d) && ANYTTFF(j,l,m,n))
+ return V60;
+ else
+ return V51;
+ case 437:
+ return V51;
+ case 438:
+ case 439:
+ case 440:
+ case 441:
+ case 442:
+ case 443:
+ case 444:
+ case 445:
+ case 446:
+ case 447:
+ return V60;
+ case 448:
+ case 449:
+ case 450:
+ case 451:
+ case 452:
+ case 453:
+ case 454:
+ case 455:
+ return V0;
+ case 456:
+ /* abcdefghijklmnop */
+ /* --------1-1----- V32 */
+ /* ----------0----- V46 */
+ /* --------0------- V46 */
+ if (TT(i,k))
+ return V32;
+ else
+ return V46;
+ case 457:
+ return V0;
+ case 458:
+ return V46;
+ case 459:
+ /* abcdefghijklmnop */
+ /* ---0------------ V0 */
+ /* ---1------------ V2 */
+ if (T(d))
+ return V2;
+ else
+ return V0;
+ case 460:
+ /* abcdefghijklmnop */
+ /* --------1-1----- V32 */
+ /* ----------0----- V46 */
+ /* --------0------- V46 */
+ if (TT(i,k))
+ return V32;
+ else
+ return V46;
+ case 461:
+ return V0;
+ case 462:
+ return V46;
+ case 463:
+ return V0;
+ case 464:
+ /* abcdefghijklmnop */
+ /* ---------001---1 V55 */
+ /* ---------0-1---0 V57 */
+ /* ---------011---- V57 */
+ /* ----------00---1 V59 */
+ /* ---------10----1 V59 */
+ /* -----------0---0 V60 */
+ /* ---------1-----0 V60 */
+ /* ----------10---- V60 */
+ /* ---------11----- V60 */
+ if (TF(l,j)) {
+ if (TF(p,k))
+ return V55;
+ else
+ return V57;
+ } else {
+ if (TF(p,k))
+ return V59;
+ else
+ return V60;
+ }
+ case 465:
+ return V55;
+ case 466:
+ case 467:
+ return V60;
+ case 468:
+ case 469:
+ return V55;
+ case 470:
+ case 471:
+ return V60;
+ case 472:
+ /* abcdefghijklmnop */
+ /* -------01-1----- V60 */
+ /* -----0--1-1----- V60 */
+ /* 1-------1-1----- V60 */
+ /* -1------1-1----- V60 */
+ /* ----------0----- V58 */
+ /* --------0------- V58 */
+ /* 00---1-1-------- V58 */
+ if (TT(i,k) && ANYTTFF(a,b,f,h))
+ return V60;
+ else
+ return V58;
+ case 473:
+ return V59;
+ case 474:
+ case 475:
+ return V60;
+ case 476:
+ return V58;
+ case 477:
+ return V59;
+ case 478:
+ case 479:
+ return V60;
+ case 480:
+ /* abcdefghijklmnop */
+ /* -------1-1------ V17 */
+ /* ---------0------ V30 */
+ /* -------0-------- V30 */
+ /* pass through */
+ case 481:
+ /* abcdefghijklmnop */
+ /* -------1-1------ V17 */
+ /* ---------0------ V30 */
+ /* -------0-------- V30 */
+ if (TT(h,j))
+ return V17;
+ else
+ return V30;
+ case 482:
+ case 483:
+ return V30;
+ case 484:
+ case 485:
+ return V0;
+ case 486:
+ /* abcdefghijklmnop */
+ /* -0-------------- V0 */
+ /* -1-------------- V1 */
+ if (T(b))
+ return V1;
+ else
+ return V0;
+ case 487:
+ return V0;
+ case 488:
+ /* abcdefghijklmnop */
+ /* -----00--------- V0 */
+ /* -----01--------- V17 */
+ /* -----10--------- V32 */
+ /* -----11--------- V39 */
+ if (T(f)) {
+ if (T(g))
+ return V39;
+ else
+ return V32;
+ } else {
+ if (T(g))
+ return V17;
+ else
+ return V0;
+ }
+ case 489:
+ /* abcdefghijklmnop */
+ /* ------0--------- V0 */
+ /* ------1--------- V17 */
+ if (T(g))
+ return V17;
+ else
+ return V0;
+ case 490:
+ return V39;
+ case 491:
+ return V19;
+ case 492:
+ /* abcdefghijklmnop */
+ /* -----0---------- V0 */
+ /* -----1---------- V32 */
+ if (T(f))
+ return V32;
+ else
+ return V0;
+ case 493:
+ return V0;
+ case 494:
+ return V33;
+ case 495:
+ return V0;
+ case 496:
+ /* abcdefghijklmnop */
+ /* -------101------ V60 */
+ /* ------01-1------ V60 */
+ /* ---1---1-1------ V60 */
+ /* ----1--1-1------ V60 */
+ /* ---------0------ V56 */
+ /* -------0-------- V56 */
+ /* ---00-1-1------- V56 */
+ if (TT(h,j) && ANYTTFF(d,e,g,i))
+ return V60;
+ else
+ return V56;
+ case 497:
+ return V56;
+ case 498:
+ case 499:
+ return V60;
+ case 500:
+ case 501:
+ return V57;
+ case 502:
+ case 503:
+ case 504:
+ case 505:
+ case 506:
+ case 507:
+ case 508:
+ case 509:
+ case 510:
+ case 511:
+ return V60;
+ }
+ /* Unreachable, returning an impossible value to irk the unit test. */
+ return 3;
+}
diff --git a/base/gsalpha.h b/base/simscale_foo.h
index 31c1b766..8d52a139 100644
--- a/base/gsalpha.h
+++ b/base/simscale_foo.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -13,22 +13,12 @@
CA 94945, U.S.A., +1(415)492-9861, for further information.
*/
+/* Pixel stretching function for image mask interpolation filter */
-/* API for alpha value in graphics state */
+#ifndef simscale_foo_INCLUDED
+# define simscale_foo_INCLUDED
-#ifndef gsalpha_INCLUDED
-# define gsalpha_INCLUDED
+unsigned int imscale_foo(unsigned int v5x5);
-#include "gsgstate.h"
+#endif /* simscale_foo_INCLUDED */
-/*
- * This tiny little file is separate so that it can be included by
- * gsstate.c for initializing the alpha value, even in configurations
- * that don't have full alpha support.
- */
-
-/* Set/read alpha value. */
-int gs_setalpha(gs_gstate *, double);
-float gs_currentalpha(const gs_gstate *);
-
-#endif /* gsalpha_INCLUDED */
diff --git a/base/siscale.c b/base/siscale.c
index 88268ee5..cc575d20 100644
--- a/base/siscale.c
+++ b/base/siscale.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -966,10 +966,10 @@ do_init(stream_state *st,
sizeof(CONTRIB), "image_scale contrib_dst[*]");
/* Allocate buffers for 1 row of source and destination. */
ss->dst =
- gs_alloc_byte_array(mem, limited_WidthOut * ss->params.spp_interp,
+ gs_alloc_byte_array(mem, (size_t)limited_WidthOut * ss->params.spp_interp,
ss->sizeofPixelOut, "image_scale dst");
ss->src =
- gs_alloc_byte_array(mem, ss->params.WidthIn * ss->params.spp_interp,
+ gs_alloc_byte_array(mem, (size_t)ss->params.WidthIn * ss->params.spp_interp,
ss->sizeofPixelIn, "image_scale src");
if (ss->tmp == 0 || ss->contrib == 0 || ss->items == 0 ||
ss->dst_items == 0 || ss->dst == 0 || ss->src == 0
diff --git a/base/siscale.h b/base/siscale.h
index 4ac61e8f..3f691471 100644
--- a/base/siscale.h
+++ b/base/siscale.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/siscale_cal.c b/base/siscale_cal.c
index 2546264e..0bb68181 100644
--- a/base/siscale_cal.c
+++ b/base/siscale_cal.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2017 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sisparam.h b/base/sisparam.h
index 8082270b..69713797 100644
--- a/base/sisparam.h
+++ b/base/sisparam.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sjbig2.c b/base/sjbig2.c
index 6a573d6c..55b39356 100644
--- a/base/sjbig2.c
+++ b/base/sjbig2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -42,7 +42,7 @@ private_st_jbig2decode_state(); /* creates a gc object for our state, defined in
/* error callback for jbig2 decoder */
static void
s_jbig2decode_error(void *callback_data, const char *msg, Jbig2Severity severity,
- int32_t seg_idx)
+ uint32_t seg_idx)
{
s_jbig2_callback_data_t *error_data = (s_jbig2_callback_data_t *)callback_data;
const char *type;
@@ -62,7 +62,7 @@ s_jbig2decode_error(void *callback_data, const char *msg, Jbig2Severity severity
break;;
default: type = "unknown message:"; break;;
}
- if (seg_idx == -1) segment[0] = '\0';
+ if (seg_idx == JBIG2_UNKNOWN_SEGMENT_NUMBER) segment[0] = '\0';
else gs_sprintf(segment, "(segment 0x%02x)", seg_idx);
if (error_data)
@@ -170,9 +170,9 @@ s_jbig2decode_flush_errors(void *callback_data)
/* jbig2 and postscript have different senses of what pixel
value is black, so we must invert the image */
static void
-s_jbig2decode_invert_buffer(unsigned char *buf, int length)
+s_jbig2decode_invert_buffer(unsigned char *buf, size_t length)
{
- int i;
+ size_t i;
for (i = 0; i < length; i++)
*buf++ ^= 0xFF;
@@ -347,8 +347,8 @@ s_jbig2decode_process(stream_state * ss, stream_cursor_read * pr,
{
stream_jbig2decode_state *const state = (stream_jbig2decode_state *) ss;
Jbig2Image *image = state->image;
- long in_size = pr->limit - pr->ptr;
- long out_size = pw->limit - pw->ptr;
+ size_t in_size = pr->limit - pr->ptr;
+ size_t out_size = pw->limit - pw->ptr;
int status = 0;
/* there will only be a single page image,
@@ -377,8 +377,8 @@ s_jbig2decode_process(stream_state * ss, stream_cursor_read * pr,
}
if (image != NULL) {
/* copy data out of the decoded image, if any */
- long image_size = image->height*image->stride;
- long usable = min(image_size - state->offset, out_size);
+ size_t image_size = (size_t)image->height*image->stride;
+ size_t usable = min(image_size - state->offset, out_size);
memcpy(pw->ptr + 1, image->data + state->offset, usable);
s_jbig2decode_invert_buffer(pw->ptr + 1, usable);
state->offset += usable;
diff --git a/base/sjbig2.h b/base/sjbig2.h
index 3b63808f..4c6e7032 100644
--- a/base/sjbig2.h
+++ b/base/sjbig2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -47,7 +47,7 @@ typedef struct stream_jbig2decode_state_s
Jbig2GlobalCtx *global_ctx;
Jbig2Ctx *decode_ctx;
Jbig2Image *image;
- long offset; /* offset into the image bitmap of the next byte to be returned */
+ size_t offset; /* offset into the image bitmap of the next byte to be returned */
s_jbig2_callback_data_t *callback_data; /* is allocated in non-gc memory */
}
stream_jbig2decode_state;
diff --git a/base/sjbig2_luratech.c b/base/sjbig2_luratech.c
index f8a78157..9a3e0c54 100644
--- a/base/sjbig2_luratech.c
+++ b/base/sjbig2_luratech.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sjbig2_luratech.h b/base/sjbig2_luratech.h
index 9581b54a..0c0bcd2a 100644
--- a/base/sjbig2_luratech.h
+++ b/base/sjbig2_luratech.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sjpeg.h b/base/sjpeg.h
index 09d5e89e..1a0877f9 100644
--- a/base/sjpeg.h
+++ b/base/sjpeg.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sjpegc.c b/base/sjpegc.c
index a54cc933..bea397a3 100644
--- a/base/sjpegc.c
+++ b/base/sjpegc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sjpegd.c b/base/sjpegd.c
index d7cb2f9b..16b71df6 100644
--- a/base/sjpegd.c
+++ b/base/sjpegd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sjpege.c b/base/sjpege.c
index 34e68a1d..9663ca85 100644
--- a/base/sjpege.c
+++ b/base/sjpege.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sjpx_luratech.c b/base/sjpx_luratech.c
index 0314fbf4..aa0d1131 100644
--- a/base/sjpx_luratech.c
+++ b/base/sjpx_luratech.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sjpx_luratech.h b/base/sjpx_luratech.h
index a2f4db4d..92c66c49 100644
--- a/base/sjpx_luratech.h
+++ b/base/sjpx_luratech.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sjpx_none.c b/base/sjpx_none.c
index 27cc230a..38767618 100644
--- a/base/sjpx_none.c
+++ b/base/sjpx_none.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sjpx_openjpeg.c b/base/sjpx_openjpeg.c
index a4d7884e..f0db34e1 100644
--- a/base/sjpx_openjpeg.c
+++ b/base/sjpx_openjpeg.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -471,7 +471,7 @@ static int decode_image(stream_jpxd_state * const state)
/* calculate total data */
rowbytes = (state->width*state->bpp*state->out_numcomps+7)/8;
- state->totalbytes = rowbytes*state->height;
+ state->totalbytes = (ulong)rowbytes*state->height;
state->pdata = (int **)gs_alloc_byte_array(state->memory->non_gc_memory, sizeof(int*)*state->image->numcomps, 1, "decode_image(pdata)");
if (!state->pdata)
@@ -503,7 +503,8 @@ static int process_one_trunk(stream_jpxd_state * const state, stream_cursor_writ
int shift_bit = state->bpp-state->image->comps[0].prec; /*difference between input and output bit-depth*/
int img_numcomps = min(state->out_numcomps, state->image->numcomps); /* the actual number of channel data used */
int compno;
- unsigned long i;
+ unsigned long il;
+ int i;
int b;
byte *row;
unsigned int x_offset;
@@ -649,12 +650,12 @@ static int process_one_trunk(stream_jpxd_state * const state, stream_cursor_writ
}
pw->ptr++;
- i = (write_size > (unsigned long)(row_size - x_offset)) ? (row_size - x_offset) : (unsigned int)write_size;
- memcpy(pw->ptr, &state->row_data[x_offset], i);
- pw->ptr += i;
+ il = (write_size > (unsigned long)(row_size - x_offset)) ? (row_size - x_offset) : (unsigned int)write_size;
+ memcpy(pw->ptr, &state->row_data[x_offset], il);
+ pw->ptr += il;
pw->ptr--;
- state->out_offset += i;
- write_size -= i;
+ state->out_offset += il;
+ write_size -= il;
if (write_size == 0)
break;
}
diff --git a/base/sjpx_openjpeg.h b/base/sjpx_openjpeg.h
index a55620d2..be129983 100644
--- a/base/sjpx_openjpeg.h
+++ b/base/sjpx_openjpeg.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/slzwc.c b/base/slzwc.c
index a1859df5..91b2ec5c 100644
--- a/base/slzwc.c
+++ b/base/slzwc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/slzwd.c b/base/slzwd.c
index 9048798a..25ffd0dc 100644
--- a/base/slzwd.c
+++ b/base/slzwd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/slzwe.c b/base/slzwe.c
index 1e582b29..aab5091d 100644
--- a/base/slzwe.c
+++ b/base/slzwe.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/slzwx.h b/base/slzwx.h
index 7274bebb..889950d3 100644
--- a/base/slzwx.h
+++ b/base/slzwx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/smd5.c b/base/smd5.c
index 99820dc7..a4f70572 100644
--- a/base/smd5.c
+++ b/base/smd5.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/smd5.h b/base/smd5.h
index e623a943..a7df7463 100644
--- a/base/smd5.h
+++ b/base/smd5.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/smtf.h b/base/smtf.h
index 99fce9fc..83074a3d 100644
--- a/base/smtf.h
+++ b/base/smtf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/spdiff.c b/base/spdiff.c
index 44d239d0..7ffc8aa9 100644
--- a/base/spdiff.c
+++ b/base/spdiff.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/spdiffx.h b/base/spdiffx.h
index 7226679d..fa3c59d4 100644
--- a/base/spdiffx.h
+++ b/base/spdiffx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/spngp.c b/base/spngp.c
index 909f27e4..bc0d73ad 100644
--- a/base/spngp.c
+++ b/base/spngp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/spngpx.h b/base/spngpx.h
index de45dfba..ae75d0e3 100644
--- a/base/spngpx.h
+++ b/base/spngpx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/spprint.c b/base/spprint.c
index cc12d397..a72a0c30 100644
--- a/base/spprint.c
+++ b/base/spprint.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -156,7 +156,7 @@ pprintg6(stream * s, const char *format, double v1, double v2, double v3,
/* Print a long value using a format. */
const char *
-pprintld1(stream * s, const char *format, long v)
+pprintld1(stream *s, const char *format, long v)
{
const char *fp = pprintf_scan(s, format);
char str[25];
@@ -170,16 +170,80 @@ pprintld1(stream * s, const char *format, long v)
return pprintf_scan(s, fp + 3);
}
const char *
-pprintld2(stream * s, const char *format, long v1, long v2)
+pprintld2(stream *s, const char *format, long v1, long v2)
{
return pprintld1(s, pprintld1(s, format, v1), v2);
}
const char *
-pprintld3(stream * s, const char *format, long v1, long v2, long v3)
+pprintld3(stream *s, const char *format, long v1, long v2, long v3)
{
return pprintld2(s, pprintld1(s, format, v1), v2, v3);
}
+/* Print a size_t value using a format. */
+const char *
+pprintzd1(stream *s, const char *format, size_t v)
+{
+ const char *fp = pprintf_scan(s, format);
+ char str[25];
+ const size_t z = strlen("%"PRIdSIZE);
+
+#ifdef DEBUG
+ size_t i;
+
+ for (i = 0; i < z; i++)
+ if (fp[i] != ("%"PRIdSIZE)[i])
+ break;
+ if (i != z)
+ lprintf1("Bad format in pprintzd: %s\n", format);
+#endif
+ gs_sprintf(str, "%"PRIdSIZE, v);
+ pputs_short(s, str);
+ return pprintf_scan(s, fp + z);
+}
+const char *
+pprintzd2(stream *s, const char *format, size_t v1, size_t v2)
+{
+ return pprintzd1(s, pprintzd1(s, format, v1), v2);
+}
+const char *
+pprintzd3(stream *s, const char *format, size_t v1, size_t v2, size_t v3)
+{
+ return pprintzd2(s, pprintzd1(s, format, v1), v2, v3);
+}
+
+/* Print an int64_t value using a format. */
+const char *
+pprinti64d1(stream *s, const char *format, int64_t v)
+{
+ const char *fp = pprintf_scan(s, format);
+ char str[25];
+ const size_t z = strlen("%"PRId64);
+
+#ifdef DEBUG
+ size_t i;
+
+ for (i = 0; i < z; i++)
+ if (fp[i] != ("%"PRId64)[i])
+ break;
+ if (i != z)
+ lprintf1("Bad format in pprinti64d: %s\n", format);
+#endif
+ gs_sprintf(str, "%"PRId64, v);
+ pputs_short(s, str);
+ return pprintf_scan(s, fp + z);
+}
+const char *
+pprinti64d2(stream *s, const char *format, int64_t v1, int64_t v2)
+{
+ return pprinti64d1(s, pprinti64d1(s, format, v1), v2);
+}
+const char *
+pprinti64d3(stream *s, const char *format, int64_t v1, int64_t v2, int64_t v3)
+{
+ return pprinti64d2(s, pprinti64d1(s, format, v1), v2, v3);
+}
+
/* Print (a) string(s) using a format. */
const char *
pprints1(stream * s, const char *format, const char *str)
diff --git a/base/spprint.h b/base/spprint.h
index 3e5f57a4..a6ee7605 100644
--- a/base/spprint.h
+++ b/base/spprint.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -67,6 +67,18 @@ const char *pprintld2(stream * s, const char *format, long v1, long v2);
const char *pprintld3(stream * s, const char *format,
long v1, long v2, long v3);
+/* Print a size_t value using a format. */
+const char *pprintzd1(stream *s, const char *format, size_t v);
+const char *pprintzd2(stream *s, const char *format, size_t v1, size_t v2);
+const char *pprintzd3(stream *s, const char *format,
+ size_t v1, size_t v2, size_t v3);
+
+/* Print an int64_t value using a format. */
+const char *pprinti64d1(stream *s, const char *format, int64_t v);
+const char *pprinti64d2(stream *s, const char *format, int64_t v1, int64_t v2);
+const char *pprinti64d3(stream *s, const char *format,
+ int64_t v1, int64_t v2, int64_t v3);
+
/* Print (a) string(s) using a format. */
const char *pprints1(stream * s, const char *format, const char *str);
const char *pprints2(stream * s, const char *format,
diff --git a/base/spsdf.c b/base/spsdf.c
index 2f2a3f78..9751fa3f 100644
--- a/base/spsdf.c
+++ b/base/spsdf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -213,7 +213,13 @@ param_print_typed(gs_param_list * plist, gs_param_name pkey,
pprintd1(s, " %d", pvalue->value.i);
break;
case gs_param_type_long:
- pprintld1(s, " %l", pvalue->value.l);
+ pprintld1(s, " %ld", pvalue->value.l);
+ break;
+ case gs_param_type_size_t:
+ pprintzd1(s, " %"PRIdSIZE, pvalue->value.z);
+ break;
+ case gs_param_type_i64:
+ pprinti64d1(s, " %"PRId64, pvalue->value.i64);
break;
case gs_param_type_float:
pprintg1(s, " %g", pvalue->value.f);
diff --git a/base/spsdf.h b/base/spsdf.h
index e9a077b5..421155f1 100644
--- a/base/spsdf.h
+++ b/base/spsdf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/srdline.h b/base/srdline.h
index 17b82339..d9229267 100644
--- a/base/srdline.h
+++ b/base/srdline.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/srld.c b/base/srld.c
index e661f7ed..f2aea0d3 100644
--- a/base/srld.c
+++ b/base/srld.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/srle.c b/base/srle.c
index 21b729f3..c54be127 100644
--- a/base/srle.c
+++ b/base/srle.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/srlx.h b/base/srlx.h
index 98309dbd..d015d073 100644
--- a/base/srlx.h
+++ b/base/srlx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ssha2.c b/base/ssha2.c
index 05c25500..896f44e7 100644
--- a/base/ssha2.c
+++ b/base/ssha2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ssha2.h b/base/ssha2.h
index 5c0e450c..7495c565 100644
--- a/base/ssha2.h
+++ b/base/ssha2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sstring.c b/base/sstring.c
index 18ca77f2..8edcc235 100644
--- a/base/sstring.c
+++ b/base/sstring.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/sstring.h b/base/sstring.h
index 0085e167..28e5eae7 100644
--- a/base/sstring.h
+++ b/base/sstring.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/stat_.h b/base/stat_.h
index 43d49dd1..5389e0d0 100644
--- a/base/stat_.h
+++ b/base/stat_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/std.h b/base/std.h
index 9c9e817f..aec4b42c 100644
--- a/base/std.h
+++ b/base/std.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -40,6 +40,7 @@
#define ARCH_SIZEOF_LONG (1 << ARCH_LOG2_SIZEOF_LONG)
#define ARCH_SIZEOF_LONG_LONG (1 << ARCH_LOG2_SIZEOF_LONG_LONG)
#define ARCH_INTS_ARE_SHORT (ARCH_SIZEOF_INT == ARCH_SIZEOF_SHORT)
+#define ARCH_SIZEOF_INT64_T 8
/* Define whether we are on a large- or small-memory machine. */
/* Currently, we assume small memory and 16-bit ints are synonymous. */
diff --git a/base/stdint_.h b/base/stdint_.h
index 39ab5ac4..537824bd 100644
--- a/base/stdint_.h
+++ b/base/stdint_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -173,6 +173,10 @@ typedef unsigned long long uint64_t;
# define PRIu32 "u"
# endif
+# ifndef PRIx32
+# define PRIx32 "x"
+# endif
+
# ifndef PRIu64
# define PRIu64 "llu"
# endif
@@ -232,4 +236,16 @@ typedef unsigned long long uint64_t;
# endif
# endif
+/* Pointers are hard to do in pure PRIxPTR style, as some platforms
+ * add 0x before the pointer, and others don't. To be consistent, we
+ * therefore roll our own. The difference here is that we always
+ * include the 0x and the % ourselves, and require the arg to be
+ * cast to an intptr_t.
+*/
+# if ARCH_SIZEOF_SIZE_T == 4
+# define PRI_INTPTR "0x%" PRIx32
+# else
+# define PRI_INTPTR "0x%" PRIx64
+# endif
+
#endif /* stdint__INCLUDED */
diff --git a/base/stdio_.h b/base/stdio_.h
index 0e422d78..034d56ad 100644
--- a/base/stdio_.h
+++ b/base/stdio_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/stdpre.h b/base/stdpre.h
index 5dd068d9..84b4e40e 100644
--- a/base/stdpre.h
+++ b/base/stdpre.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -42,11 +42,13 @@ typedef struct gp_file_s gp_file;
* Here we deal with the vagaries of various C compilers. We assume that:
* ANSI-standard Unix compilers define __STDC__.
* gcc defines __GNUC__.
- * Borland Turbo C and Turbo C++ define __MSDOS__ and __TURBOC__.
- * Borland C++ defines __BORLANDC__, __MSDOS__, and __TURBOC__.
* Microsoft C/C++ defines _MSC_VER and _MSDOS.
+ *
+ * The following are compilers we no longer support:
* Watcom C defines __WATCOMC__ and MSDOS.
* MetroWerks C defines __MWERKS__.
+ * Borland Turbo C and Turbo C++ define __MSDOS__ and __TURBOC__.
+ * Borland C++ defines __BORLANDC__, __MSDOS__, and __TURBOC__.
*
* We arrange to define __MSDOS__ on all the MS-DOS platforms.
*/
@@ -378,18 +380,12 @@ typedef int bool;
/*
* Define the type to be used for ordering pointers (<, >=, etc.).
- * The Borland and Microsoft large models only compare the offset part
- * of segmented pointers. Semantically, the right type to use for the
- * comparison is char huge *, but we have no idea how expensive comparing
- * such pointers is, and any type that compares all the bits of the pointer,
- * gives the right result for pointers in the same segment, and keeps
- * different segments disjoint will do.
+ * This used to have 'unsigned long' for comparison of segment+offset,
+ * but that hasn't been an issue for YEARS. The old version was not
+ * compatible with 64-bit.
*/
-#if defined(__TURBOC__) || defined(_MSC_VER)
-typedef unsigned long ptr_ord_t;
-#else
typedef const char *ptr_ord_t;
-#endif
+
/* Define all the pointer comparison operations. */
#define _PTR_CMP(p1, rel, p2) ((ptr_ord_t)(p1) rel (ptr_ord_t)(p2))
#define PTR_LE(p1, p2) _PTR_CMP(p1, <=, p2)
diff --git a/base/stream.c b/base/stream.c
index e8140014..30648bd5 100644
--- a/base/stream.c
+++ b/base/stream.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -79,11 +79,11 @@ stream_finalize(const gs_memory_t *cmem, void *vptr)
stream *const st = vptr;
(void)cmem; /* unused */
- if_debug2m('u', st->memory, "[u]%s 0x%lx\n",
+ if_debug2m('u', st->memory, "[u]%s "PRI_INTPTR"\n",
(!s_is_valid(st) ? "already closed:" :
st->is_temp ? "is_temp set:" :
st->file == 0 ? "not file:" :
- "closing file:"), (ulong) st);
+ "closing file:"), (intptr_t) st);
if (s_is_valid(st) && !st->is_temp && st->file != 0) {
/* Prevent any attempt to free the buffer. */
st->cbuf = 0;
@@ -118,8 +118,8 @@ s_alloc(gs_memory_t * mem, client_name_t cname)
{
stream *s = gs_alloc_struct(mem, stream, &st_stream, cname);
- if_debug2m('s', mem, "[s]alloc(%s) = 0x%lx\n",
- client_name_string(cname), (ulong) s);
+ if_debug2m('s', mem, "[s]alloc(%s) = "PRI_INTPTR"\n",
+ client_name_string(cname), (intptr_t) s);
if (s == 0)
return 0;
s_init(s, mem);
@@ -143,10 +143,10 @@ s_alloc_state(gs_memory_t * mem, gs_memory_type_ptr_t stype,
{
stream_state *st = gs_alloc_struct(mem, stream_state, stype, cname);
- if_debug3m('s', mem, "[s]alloc_state %s(%s) = 0x%lx\n",
+ if_debug3m('s', mem, "[s]alloc_state %s(%s) = "PRI_INTPTR"\n",
client_name_string(cname),
client_name_string(stype->sname),
- (ulong) st);
+ (intptr_t) st);
if (st)
s_init_state(st, NULL, mem);
return st;
@@ -175,8 +175,8 @@ s_std_init(register stream * s, byte * ptr, uint len, const stream_procs * pp,
s->file_name.data = 0; /* in case stream is on stack */
s->file_name.size = 0;
if (s->memory) {
- if_debug4m('s', s->memory, "[s]init 0x%lx, buf=0x%lx, len=%u, modes=%d\n",
- (ulong) s, (ulong) ptr, len, modes);
+ if_debug4m('s', s->memory, "[s]init "PRI_INTPTR", buf="PRI_INTPTR", len=%u, modes=%d\n",
+ (intptr_t) s, (intptr_t) ptr, len, modes);
}
}
@@ -316,7 +316,7 @@ s_disable(register stream * s)
}
/****** SHOULD DO MORE THAN THIS ******/
if (s->memory) {
- if_debug1m('s', s->memory, "[s]disable 0x%lx\n", (ulong) s);
+ if_debug1m('s', s->memory, "[s]disable "PRI_INTPTR"\n", (intptr_t) s);
}
}
@@ -816,14 +816,14 @@ sreadbuf(stream * s, stream_cursor_write * pbuf)
eof = strm->end_status == EOFC;
}
pw = (prev == 0 ? pbuf : &curr->cursor.w);
- if_debug4m('s', s->memory, "[s]read process 0x%lx, nr=%u, nw=%u, eof=%d\n",
- (ulong) curr, (uint) (pr->limit - pr->ptr),
+ if_debug4m('s', s->memory, "[s]read process "PRI_INTPTR", nr=%u, nw=%u, eof=%d\n",
+ (intptr_t) curr, (uint) (pr->limit - pr->ptr),
(uint) (pw->limit - pw->ptr), eof);
oldpos = pw->ptr;
status = (*curr->procs.process) (curr->state, pr, pw, eof);
pr->limit += left;
- if_debug5m('s', s->memory, "[s]after read 0x%lx, nr=%u, nw=%u, status=%d, position=%"PRId64"\n",
- (ulong) curr, (uint) (pr->limit - pr->ptr),
+ if_debug5m('s', s->memory, "[s]after read "PRI_INTPTR", nr=%u, nw=%u, status=%d, position=%"PRId64"\n",
+ (intptr_t) curr, (uint) (pr->limit - pr->ptr),
(uint) (pw->limit - pw->ptr), status, s->position);
if (strm == 0 || status != 0)
break;
@@ -900,8 +900,8 @@ swritebuf(stream * s, stream_cursor_read * pbuf, bool last)
else
pr = &curr->cursor.r;
if_debug5m('s', s->memory,
- "[s]write process 0x%lx(%s), nr=%u, nw=%u, end=%d\n",
- (ulong)curr,
+ "[s]write process "PRI_INTPTR"(%s), nr=%u, nw=%u, end=%d\n",
+ (intptr_t)curr,
gs_struct_type_name(curr->state->templat->stype),
(uint)(pr->limit - pr->ptr),
(uint)(pw->limit - pw->ptr), end);
@@ -909,8 +909,8 @@ swritebuf(stream * s, stream_cursor_read * pbuf, bool last)
if (status >= 0) {
status = (*curr->procs.process)(curr->state, pr, pw, end);
if_debug5m('s', s->memory,
- "[s]after write 0x%lx, nr=%u, nw=%u, end=%d, status=%d\n",
- (ulong) curr, (uint) (pr->limit - pr->ptr),
+ "[s]after write "PRI_INTPTR", nr=%u, nw=%u, end=%d, status=%d\n",
+ (intptr_t) curr, (uint) (pr->limit - pr->ptr),
(uint) (pw->limit - pw->ptr), end, status);
if (status == 0 && end)
status = EOFC;
diff --git a/base/stream.h b/base/stream.h
index 2d2ad8d2..a9fcf100 100644
--- a/base/stream.h
+++ b/base/stream.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -422,7 +422,7 @@ extern const stream_procs s_filter_read_procs, s_filter_write_procs;
*/
int s_init_filter(stream *fs, stream_state *fss, byte *buf, uint bsize,
stream *target);
-stream *s_add_filter(stream **ps, const stream_template *template,
+stream *s_add_filter(stream **ps, const stream_template *template_,
stream_state *ss, gs_memory_t *mem);
/*
diff --git a/base/strimpl.h b/base/strimpl.h
index 168490b0..166bccf4 100644
--- a/base/strimpl.h
+++ b/base/strimpl.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/string_.h b/base/string_.h
index 9c8ddbcc..c4d56599 100644
--- a/base/string_.h
+++ b/base/string_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/strmio.c b/base/strmio.c
index fbbfe871..aed84fb2 100644
--- a/base/strmio.c
+++ b/base/strmio.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -202,7 +202,7 @@ s_stdin_read_process(stream_state * st, stream_cursor_read * ignore_pr,
/* do the callout */
if (core->stdin_fn)
count = (*core->stdin_fn)
- (core->caller_handle, (char *)pw->ptr + 1,
+ (core->std_caller_handle, (char *)pw->ptr + 1,
core->stdin_is_interactive ? 1 : wcount);
else
count = gp_stdin_read((char *)pw->ptr + 1, wcount,
diff --git a/base/strmio.h b/base/strmio.h
index 09eba8e3..5b43e00a 100644
--- a/base/strmio.h
+++ b/base/strmio.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/stub.mak b/base/stub.mak
index da885ee3..b09a30fa 100644
--- a/base/stub.mak
+++ b/base/stub.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/szlibc.c b/base/szlibc.c
index c2624982..ee123fa1 100644
--- a/base/szlibc.c
+++ b/base/szlibc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -110,7 +110,7 @@ s_zlib_free(void *zmem, void *data)
gs_free_object(mem, data, "s_zlib_free(data)");
for (; ; block = block->next) {
if (block == 0) {
- lprintf1("Freeing unrecorded data 0x%lx!\n", (ulong)data);
+ lprintf1("Freeing unrecorded data "PRI_INTPTR"!\n", (intptr_t)data);
return;
}
if (block->data == data)
diff --git a/base/szlibd.c b/base/szlibd.c
index 375be919..b0f15a4c 100644
--- a/base/szlibd.c
+++ b/base/szlibd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/szlibe.c b/base/szlibe.c
index 4073dfc9..028ed5e6 100644
--- a/base/szlibe.c
+++ b/base/szlibe.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/szlibx.h b/base/szlibx.h
index ccc4ed9f..76a5aef0 100644
--- a/base/szlibx.h
+++ b/base/szlibx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/szlibxx.h b/base/szlibxx.h
index da5bcd8b..eae78b9f 100644
--- a/base/szlibxx.h
+++ b/base/szlibxx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/tess_version.h b/base/tess_version.h
new file mode 100644
index 00000000..53ce9407
--- /dev/null
+++ b/base/tess_version.h
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////
+// File: version.h
+// Description: Version information
+//
+// (C) Copyright 2018, Google Inc.
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+///////////////////////////////////////////////////////////////////////
+
+#ifndef TESSERACT_API_VERSION_H_
+#define TESSERACT_API_VERSION_H_
+
+#define TESSERACT_MAJOR_VERSION 4
+#define TESSERACT_MINOR_VERSION 1
+#define TESSERACT_MICRO_VERSION 1
+#define TESSERACT_VERSION \
+ (TESSERACT_MAJOR_VERSION << 16 | \
+ TESSERACT_MINOR_VERSION << 8 | \
+ TESSERACT_MICRO_VERSION)
+#define TESSERACT_VERSION_STR "4.1.1-3-ge6cc2"
+
+#endif // TESSERACT_API_VERSION_H_
diff --git a/base/tesseract.mak b/base/tesseract.mak
new file mode 100644
index 00000000..3dcc3ff0
--- /dev/null
+++ b/base/tesseract.mak
@@ -0,0 +1,1173 @@
+TESSINCLUDES=\
+ $(I_)$(TESSERACTDIR)$(_I)\
+ $(I_)$(TESSERACTDIR)/include$(_I)\
+ $(I_)$(TESSERACTDIR)/src/api$(_I)\
+ $(I_)$(TESSERACTDIR)/src/arch$(_I)\
+ $(I_)$(TESSERACTDIR)/src/ccmain$(_I)\
+ $(I_)$(TESSERACTDIR)/src/ccstruct$(_I)\
+ $(I_)$(TESSERACTDIR)/src/ccutil$(_I)\
+ $(I_)$(TESSERACTDIR)/src/classify$(_I)\
+ $(I_)$(TESSERACTDIR)/src/cutil$(_I)\
+ $(I_)$(TESSERACTDIR)/src/dict$(_I)\
+ $(I_)$(TESSERACTDIR)/src/lstm$(_I)\
+ $(I_)$(TESSERACTDIR)/src/opencl$(_I)\
+ $(I_)$(TESSERACTDIR)/src/textord$(_I)\
+ $(I_)$(TESSERACTDIR)/src/training$(_I)\
+ $(I_)$(TESSERACTDIR)/src/viewer$(_I)\
+ $(I_)$(TESSERACTDIR)/src/wordrec$(_I)\
+ $(I_)$(LEPTONICADIR)/src$(_I)\
+ $(I_)$(GLSRCDIR)$(_I)\
+ $(I_)$(GLGENDIR)$(_I)
+
+# If we wanted to disable the legacy mode in tesseract, which is supposedly
+# unused, we'd:
+# add -DDISABLED_LEGACY_ENGINE to TESSCXX
+# empty TESSERACT_LEGACY
+
+TESSCXX = $(CXX) $(TESSINCLUDES) $(TESSCXXFLAGS) $(CCFLAGS) -DTESSERACT_IMAGEDATA_AS_PIX -DTESSERACT_DISABLE_DEBUG_FONTS -DGRAPHICS_DISABLED -DDISABLED_LEGACY_ENGINE
+TESSOBJ = $(GLOBJDIR)$(D)tesseract_
+TESSO_ = $(O_)$(TESSOBJ)
+
+TESSDEPS=\
+ $(arch_h)\
+ $(GLSRCDIR)/tesseract.mak\
+ $(GLGENDIR)/tesseract/version.h\
+ $(TESSERACTDIR)/include/tesseract/apitypes.h\
+ $(TESSERACTDIR)/include/tesseract/baseapi.h\
+ $(TESSERACTDIR)/include/tesseract/capi.h\
+ $(TESSERACTDIR)/include/tesseract/genericvector.h\
+ $(TESSERACTDIR)/include/tesseract/helpers.h\
+ $(TESSERACTDIR)/include/tesseract/ltrresultiterator.h\
+ $(TESSERACTDIR)/include/tesseract/ocrclass.h\
+ $(TESSERACTDIR)/include/tesseract/osdetect.h\
+ $(TESSERACTDIR)/include/tesseract/pageiterator.h\
+ $(TESSERACTDIR)/include/tesseract/platform.h\
+ $(TESSERACTDIR)/include/tesseract/publictypes.h\
+ $(TESSERACTDIR)/include/tesseract/renderer.h\
+ $(TESSERACTDIR)/include/tesseract/resultiterator.h\
+ $(TESSERACTDIR)/include/tesseract/serialis.h\
+ $(TESSERACTDIR)/include/tesseract/strngs.h\
+ $(TESSERACTDIR)/include/tesseract/thresholder.h\
+ $(TESSERACTDIR)/include/tesseract/unichar.h\
+ $(TESSERACTDIR)/src/arch/dotproduct.h\
+ $(TESSERACTDIR)/src/arch/intsimdmatrix.h\
+ $(TESSERACTDIR)/src/arch/simddetect.h\
+ $(TESSERACTDIR)/src/ccmain/control.h\
+ $(TESSERACTDIR)/src/ccmain/docqual.h\
+ $(TESSERACTDIR)/src/ccmain/equationdetect.h\
+ $(TESSERACTDIR)/src/ccmain/fixspace.h\
+ $(TESSERACTDIR)/src/ccmain/mutableiterator.h\
+ $(TESSERACTDIR)/src/ccmain/output.h\
+ $(TESSERACTDIR)/src/ccmain/paragraphs.h\
+ $(TESSERACTDIR)/src/ccmain/paragraphs_internal.h\
+ $(TESSERACTDIR)/src/ccmain/paramsd.h\
+ $(TESSERACTDIR)/src/ccmain/pgedit.h\
+ $(TESSERACTDIR)/src/ccmain/reject.h\
+ $(TESSERACTDIR)/src/ccmain/tesseractclass.h\
+ $(TESSERACTDIR)/src/ccmain/tessvars.h\
+ $(TESSERACTDIR)/src/ccmain/werdit.h\
+ $(TESSERACTDIR)/src/ccstruct/blamer.h\
+ $(TESSERACTDIR)/src/ccstruct/blobbox.h\
+ $(TESSERACTDIR)/src/ccstruct/blobs.h\
+ $(TESSERACTDIR)/src/ccstruct/blread.h\
+ $(TESSERACTDIR)/src/ccstruct/boxread.h\
+ $(TESSERACTDIR)/src/ccstruct/boxword.h\
+ $(TESSERACTDIR)/src/ccstruct/ccstruct.h\
+ $(TESSERACTDIR)/src/ccstruct/coutln.h\
+ $(TESSERACTDIR)/src/ccstruct/detlinefit.h\
+ $(TESSERACTDIR)/src/ccstruct/dppoint.h\
+ $(TESSERACTDIR)/src/ccstruct/fontinfo.h\
+ $(TESSERACTDIR)/src/ccstruct/imagedata.h\
+ $(TESSERACTDIR)/src/ccstruct/linlsq.h\
+ $(TESSERACTDIR)/src/ccstruct/matrix.h\
+ $(TESSERACTDIR)/src/ccstruct/mod128.h\
+ $(TESSERACTDIR)/src/ccstruct/normalis.h\
+ $(TESSERACTDIR)/src/ccstruct/ocrblock.h\
+ $(TESSERACTDIR)/src/ccstruct/ocrpara.h\
+ $(TESSERACTDIR)/src/ccstruct/ocrrow.h\
+ $(TESSERACTDIR)/src/ccstruct/otsuthr.h\
+ $(TESSERACTDIR)/src/ccstruct/pageres.h\
+ $(TESSERACTDIR)/src/ccstruct/params_training_featdef.h\
+ $(TESSERACTDIR)/src/ccstruct/pdblock.h\
+ $(TESSERACTDIR)/src/ccstruct/points.h\
+ $(TESSERACTDIR)/src/ccstruct/polyaprx.h\
+ $(TESSERACTDIR)/src/ccstruct/polyblk.h\
+ $(TESSERACTDIR)/src/ccstruct/quadlsq.h\
+ $(TESSERACTDIR)/src/ccstruct/quadratc.h\
+ $(TESSERACTDIR)/src/ccstruct/quspline.h\
+ $(TESSERACTDIR)/src/ccstruct/ratngs.h\
+ $(TESSERACTDIR)/src/ccstruct/rect.h\
+ $(TESSERACTDIR)/src/ccstruct/rejctmap.h\
+ $(TESSERACTDIR)/src/ccstruct/seam.h\
+ $(TESSERACTDIR)/src/ccstruct/split.h\
+ $(TESSERACTDIR)/src/ccstruct/statistc.h\
+ $(TESSERACTDIR)/src/ccstruct/stepblob.h\
+ $(TESSERACTDIR)/src/ccstruct/werd.h\
+ $(TESSERACTDIR)/src/ccutil/ambigs.h\
+ $(TESSERACTDIR)/src/ccutil/bits16.h\
+ $(TESSERACTDIR)/src/ccutil/bitvector.h\
+ $(TESSERACTDIR)/src/ccutil/ccutil.h\
+ $(TESSERACTDIR)/src/ccutil/clst.h\
+ $(TESSERACTDIR)/src/ccutil/doubleptr.h\
+ $(TESSERACTDIR)/src/ccutil/elst.h\
+ $(TESSERACTDIR)/src/ccutil/elst2.h\
+ $(TESSERACTDIR)/src/ccutil/errcode.h\
+ $(TESSERACTDIR)/src/ccutil/fileerr.h\
+ $(TESSERACTDIR)/src/ccutil/genericheap.h\
+ $(TESSERACTDIR)/src/ccutil/globaloc.h\
+ $(TESSERACTDIR)/src/ccutil/host.h\
+ $(TESSERACTDIR)/src/ccutil/indexmapbidi.h\
+ $(TESSERACTDIR)/src/ccutil/kdpair.h\
+ $(TESSERACTDIR)/src/ccutil/lsterr.h\
+ $(TESSERACTDIR)/src/ccutil/object_cache.h\
+ $(TESSERACTDIR)/src/ccutil/params.h\
+ $(TESSERACTDIR)/src/ccutil/qrsequence.h\
+ $(TESSERACTDIR)/src/ccutil/scanutils.h\
+ $(TESSERACTDIR)/src/ccutil/sorthelper.h\
+ $(TESSERACTDIR)/src/ccutil/tessdatamanager.h\
+ $(TESSERACTDIR)/src/ccutil/tprintf.h\
+ $(TESSERACTDIR)/src/ccutil/unicharcompress.h\
+ $(TESSERACTDIR)/src/ccutil/unicharmap.h\
+ $(TESSERACTDIR)/src/ccutil/unicharset.h\
+ $(TESSERACTDIR)/src/ccutil/unicity_table.h\
+ $(TESSERACTDIR)/src/ccutil/unicodes.h\
+ $(TESSERACTDIR)/src/ccutil/universalambigs.h\
+ $(TESSERACTDIR)/src/classify/adaptive.h\
+ $(TESSERACTDIR)/src/classify/blobclass.h\
+ $(TESSERACTDIR)/src/classify/classify.h\
+ $(TESSERACTDIR)/src/classify/cluster.h\
+ $(TESSERACTDIR)/src/classify/clusttool.h\
+ $(TESSERACTDIR)/src/classify/featdefs.h\
+ $(TESSERACTDIR)/src/classify/float2int.h\
+ $(TESSERACTDIR)/src/classify/fpoint.h\
+ $(TESSERACTDIR)/src/classify/intfeaturespace.h\
+ $(TESSERACTDIR)/src/classify/intfx.h\
+ $(TESSERACTDIR)/src/classify/intmatcher.h\
+ $(TESSERACTDIR)/src/classify/intproto.h\
+ $(TESSERACTDIR)/src/classify/kdtree.h\
+ $(TESSERACTDIR)/src/classify/mf.h\
+ $(TESSERACTDIR)/src/classify/mfdefs.h\
+ $(TESSERACTDIR)/src/classify/mfoutline.h\
+ $(TESSERACTDIR)/src/classify/mfx.h\
+ $(TESSERACTDIR)/src/classify/normfeat.h\
+ $(TESSERACTDIR)/src/classify/normmatch.h\
+ $(TESSERACTDIR)/src/classify/ocrfeatures.h\
+ $(TESSERACTDIR)/src/classify/outfeat.h\
+ $(TESSERACTDIR)/src/classify/picofeat.h\
+ $(TESSERACTDIR)/src/classify/protos.h\
+ $(TESSERACTDIR)/src/classify/shapeclassifier.h\
+ $(TESSERACTDIR)/src/classify/shapetable.h\
+ $(TESSERACTDIR)/src/classify/tessclassifier.h\
+ $(TESSERACTDIR)/src/classify/trainingsample.h\
+ $(TESSERACTDIR)/src/cutil/bitvec.h\
+ $(TESSERACTDIR)/src/cutil/emalloc.h\
+ $(TESSERACTDIR)/src/cutil/oldlist.h\
+ $(TESSERACTDIR)/src/dict/dawg.h\
+ $(TESSERACTDIR)/src/dict/dawg_cache.h\
+ $(TESSERACTDIR)/src/dict/dict.h\
+ $(TESSERACTDIR)/src/dict/matchdefs.h\
+ $(TESSERACTDIR)/src/dict/stopper.h\
+ $(TESSERACTDIR)/src/dict/trie.h\
+ $(TESSERACTDIR)/src/lstm/convolve.h\
+ $(TESSERACTDIR)/src/lstm/fullyconnected.h\
+ $(TESSERACTDIR)/src/lstm/functions.h\
+ $(TESSERACTDIR)/src/lstm/input.h\
+ $(TESSERACTDIR)/src/lstm/lstm.h\
+ $(TESSERACTDIR)/src/lstm/lstmrecognizer.h\
+ $(TESSERACTDIR)/src/lstm/maxpool.h\
+ $(TESSERACTDIR)/src/lstm/network.h\
+ $(TESSERACTDIR)/src/lstm/networkio.h\
+ $(TESSERACTDIR)/src/lstm/networkscratch.h\
+ $(TESSERACTDIR)/src/lstm/parallel.h\
+ $(TESSERACTDIR)/src/lstm/plumbing.h\
+ $(TESSERACTDIR)/src/lstm/recodebeam.h\
+ $(TESSERACTDIR)/src/lstm/reconfig.h\
+ $(TESSERACTDIR)/src/lstm/reversed.h\
+ $(TESSERACTDIR)/src/lstm/series.h\
+ $(TESSERACTDIR)/src/lstm/static_shape.h\
+ $(TESSERACTDIR)/src/lstm/stridemap.h\
+ $(TESSERACTDIR)/src/lstm/tfnetwork.h\
+ $(TESSERACTDIR)/src/lstm/weightmatrix.h\
+ $(TESSERACTDIR)/src/opencl/oclkernels.h\
+ $(TESSERACTDIR)/src/opencl/openclwrapper.h\
+ $(TESSERACTDIR)/src/textord/alignedblob.h\
+ $(TESSERACTDIR)/src/textord/baselinedetect.h\
+ $(TESSERACTDIR)/src/textord/bbgrid.h\
+ $(TESSERACTDIR)/src/textord/blkocc.h\
+ $(TESSERACTDIR)/src/textord/blobgrid.h\
+ $(TESSERACTDIR)/src/textord/ccnontextdetect.h\
+ $(TESSERACTDIR)/src/textord/cjkpitch.h\
+ $(TESSERACTDIR)/src/textord/colfind.h\
+ $(TESSERACTDIR)/src/textord/colpartition.h\
+ $(TESSERACTDIR)/src/textord/colpartitiongrid.h\
+ $(TESSERACTDIR)/src/textord/colpartitionset.h\
+ $(TESSERACTDIR)/src/textord/devanagari_processing.h\
+ $(TESSERACTDIR)/src/textord/drawtord.h\
+ $(TESSERACTDIR)/src/textord/edgblob.h\
+ $(TESSERACTDIR)/src/textord/edgloop.h\
+ $(TESSERACTDIR)/src/textord/equationdetectbase.h\
+ $(TESSERACTDIR)/src/textord/fpchop.h\
+ $(TESSERACTDIR)/src/textord/gap_map.h\
+ $(TESSERACTDIR)/src/textord/imagefind.h\
+ $(TESSERACTDIR)/src/textord/linefind.h\
+ $(TESSERACTDIR)/src/textord/makerow.h\
+ $(TESSERACTDIR)/src/textord/oldbasel.h\
+ $(TESSERACTDIR)/src/textord/pithsync.h\
+ $(TESSERACTDIR)/src/textord/pitsync1.h\
+ $(TESSERACTDIR)/src/textord/scanedg.h\
+ $(TESSERACTDIR)/src/textord/sortflts.h\
+ $(TESSERACTDIR)/src/textord/strokewidth.h\
+ $(TESSERACTDIR)/src/textord/tabfind.h\
+ $(TESSERACTDIR)/src/textord/tablefind.h\
+ $(TESSERACTDIR)/src/textord/tablerecog.h\
+ $(TESSERACTDIR)/src/textord/tabvector.h\
+ $(TESSERACTDIR)/src/textord/textlineprojection.h\
+ $(TESSERACTDIR)/src/textord/textord.h\
+ $(TESSERACTDIR)/src/textord/topitch.h\
+ $(TESSERACTDIR)/src/textord/tordmain.h\
+ $(TESSERACTDIR)/src/textord/tovars.h\
+ $(TESSERACTDIR)/src/textord/underlin.h\
+ $(TESSERACTDIR)/src/textord/wordseg.h\
+ $(TESSERACTDIR)/src/textord/workingpartset.h\
+ $(TESSERACTDIR)/src/viewer/scrollview.h\
+ $(TESSERACTDIR)/src/viewer/svmnode.h\
+ $(TESSERACTDIR)/src/viewer/svutil.h\
+ $(TESSERACTDIR)/src/wordrec/associate.h\
+ $(TESSERACTDIR)/src/wordrec/chop.h\
+ $(TESSERACTDIR)/src/wordrec/drawfx.h\
+ $(TESSERACTDIR)/src/wordrec/findseam.h\
+ $(TESSERACTDIR)/src/wordrec/language_model.h\
+ $(TESSERACTDIR)/src/wordrec/lm_consistency.h\
+ $(TESSERACTDIR)/src/wordrec/lm_pain_points.h\
+ $(TESSERACTDIR)/src/wordrec/lm_state.h\
+ $(TESSERACTDIR)/src/wordrec/measure.h\
+ $(TESSERACTDIR)/src/wordrec/outlines.h\
+ $(TESSERACTDIR)/src/wordrec/params_model.h\
+ $(TESSERACTDIR)/src/wordrec/plotedges.h\
+ $(TESSERACTDIR)/src/wordrec/render.h\
+ $(TESSERACTDIR)/src/wordrec/wordrec.h\
+ $(MAKEDIRS)
+
+$(GLGENDIR)/tesseract/version.h : $(ECHOGS_XE) $(GLSRCDIR)/tesseract.mak
+ -mkdir $(GLGENDIR)$(D)tesseract
+ $(ECHOGS_XE) -w $(GLGENDIR)/tesseract/version.h -x 23 define TESSERACT_VERSION_STR -x 2022 5.0.0-beta-gs -x 22
+
+
+$(TESSOBJ)api_baseapi.$(OBJ) : $(TESSERACTDIR)/src/api/baseapi.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_baseapi.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/baseapi.cpp
+
+$(TESSOBJ)api_altorenderer.$(OBJ) : $(TESSERACTDIR)/src/api/altorenderer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_altorenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/altorenderer.cpp
+
+$(TESSOBJ)api_capi.$(OBJ) : $(TESSERACTDIR)/src/api/capi.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_capi.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/capi.cpp
+
+$(TESSOBJ)api_hocrrenderer.$(OBJ) : $(TESSERACTDIR)/src/api/hocrrenderer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_hocrrenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/hocrrenderer.cpp
+
+$(TESSOBJ)api_lstmboxrenderer.$(OBJ) : $(TESSERACTDIR)/src/api/lstmboxrenderer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_lstmboxrenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/lstmboxrenderer.cpp
+
+$(TESSOBJ)api_pdfrenderer.$(OBJ) : $(TESSERACTDIR)/src/api/pdfrenderer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_pdfrenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/pdfrenderer.cpp
+
+$(TESSOBJ)api_renderer.$(OBJ) : $(TESSERACTDIR)/src/api/renderer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_renderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/renderer.cpp
+
+$(TESSOBJ)api_wordstrboxrenderer.$(OBJ) : $(TESSERACTDIR)/src/api/wordstrboxrenderer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_wordstrboxrenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/wordstrboxrenderer.cpp
+
+$(TESSOBJ)arch_intsimdmatrix.$(OBJ) : $(TESSERACTDIR)/src/arch/intsimdmatrix.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)arch_intsimdmatrix.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/intsimdmatrix.cpp
+
+$(TESSOBJ)arch_simddetect.$(OBJ) : $(TESSERACTDIR)/src/arch/simddetect.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)arch_simddetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/simddetect.cpp
+
+$(TESSOBJ)ccmain_applybox.$(OBJ) : $(TESSERACTDIR)/src/ccmain/applybox.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_applybox.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/applybox.cpp
+
+$(TESSOBJ)ccmain_control.$(OBJ) : $(TESSERACTDIR)/src/ccmain/control.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_control.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/control.cpp
+
+$(TESSOBJ)ccmain_docqual.$(OBJ) : $(TESSERACTDIR)/src/ccmain/docqual.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_docqual.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/docqual.cpp
+
+$(TESSOBJ)ccmain_equationdetect.$(OBJ) : $(TESSERACTDIR)/src/ccmain/equationdetect.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_equationdetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/equationdetect.cpp
+
+$(TESSOBJ)ccmain_linerec.$(OBJ) : $(TESSERACTDIR)/src/ccmain/linerec.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_linerec.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/linerec.cpp
+
+$(TESSOBJ)ccmain_ltrresultiterator.$(OBJ) : $(TESSERACTDIR)/src/ccmain/ltrresultiterator.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_ltrresultiterator.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/ltrresultiterator.cpp
+
+$(TESSOBJ)ccmain_mutableiterator.$(OBJ) : $(TESSERACTDIR)/src/ccmain/mutableiterator.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_mutableiterator.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/mutableiterator.cpp
+
+$(TESSOBJ)ccmain_output.$(OBJ) : $(TESSERACTDIR)/src/ccmain/output.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_output.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/output.cpp
+
+$(TESSOBJ)ccmain_osdetect.$(OBJ) : $(TESSERACTDIR)/src/ccmain/osdetect.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_osdetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/osdetect.cpp
+
+$(TESSOBJ)ccmain_pageiterator.$(OBJ) : $(TESSERACTDIR)/src/ccmain/pageiterator.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_pageiterator.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/pageiterator.cpp
+
+$(TESSOBJ)ccmain_pagesegmain.$(OBJ) : $(TESSERACTDIR)/src/ccmain/pagesegmain.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_pagesegmain.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/pagesegmain.cpp
+
+$(TESSOBJ)ccmain_pagewalk.$(OBJ) : $(TESSERACTDIR)/src/ccmain/pagewalk.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_pagewalk.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/pagewalk.cpp
+
+$(TESSOBJ)ccmain_paragraphs.$(OBJ) : $(TESSERACTDIR)/src/ccmain/paragraphs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_paragraphs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/paragraphs.cpp
+
+$(TESSOBJ)ccmain_paramsd.$(OBJ) : $(TESSERACTDIR)/src/ccmain/paramsd.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_paramsd.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/paramsd.cpp
+
+$(TESSOBJ)ccmain_par_control.$(OBJ) : $(TESSERACTDIR)/src/ccmain/par_control.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_par_control.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/par_control.cpp
+
+$(TESSOBJ)ccmain_pgedit.$(OBJ) : $(TESSERACTDIR)/src/ccmain/pgedit.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_pgedit.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/pgedit.cpp
+
+$(TESSOBJ)ccmain_reject.$(OBJ) : $(TESSERACTDIR)/src/ccmain/reject.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_reject.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/reject.cpp
+
+$(TESSOBJ)ccmain_resultiterator.$(OBJ) : $(TESSERACTDIR)/src/ccmain/resultiterator.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_resultiterator.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/resultiterator.cpp
+
+$(TESSOBJ)ccmain_superscript.$(OBJ) : $(TESSERACTDIR)/src/ccmain/superscript.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_superscript.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/superscript.cpp
+
+$(TESSOBJ)ccmain_tessbox.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tessbox.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_tessbox.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tessbox.cpp
+
+$(TESSOBJ)ccmain_tessedit.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tessedit.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_tessedit.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tessedit.cpp
+
+$(TESSOBJ)ccmain_tesseractclass.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tesseractclass.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_tesseractclass.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tesseractclass.cpp
+
+$(TESSOBJ)ccmain_tessvars.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tessvars.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_tessvars.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tessvars.cpp
+
+$(TESSOBJ)ccmain_tfacepp.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tfacepp.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_tfacepp.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tfacepp.cpp
+
+$(TESSOBJ)ccmain_thresholder.$(OBJ) : $(TESSERACTDIR)/src/ccmain/thresholder.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_thresholder.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/thresholder.cpp
+
+$(TESSOBJ)ccmain_werdit.$(OBJ) : $(TESSERACTDIR)/src/ccmain/werdit.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_werdit.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/werdit.cpp
+
+$(TESSOBJ)ccmain_adaptions.$(OBJ) : $(TESSERACTDIR)/src/ccmain/adaptions.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_adaptions.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/adaptions.cpp
+
+$(TESSOBJ)ccmain_fixspace.$(OBJ) : $(TESSERACTDIR)/src/ccmain/fixspace.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_fixspace.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/fixspace.cpp
+
+$(TESSOBJ)ccmain_fixxht.$(OBJ) : $(TESSERACTDIR)/src/ccmain/fixxht.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_fixxht.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/fixxht.cpp
+
+$(TESSOBJ)ccmain_recogtraining.$(OBJ) : $(TESSERACTDIR)/src/ccmain/recogtraining.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_recogtraining.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/recogtraining.cpp
+
+$(TESSOBJ)ccstruct_blamer.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/blamer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_blamer.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/blamer.cpp
+
+$(TESSOBJ)ccstruct_blobbox.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/blobbox.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_blobbox.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/blobbox.cpp
+
+$(TESSOBJ)ccstruct_blobs.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/blobs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_blobs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/blobs.cpp
+
+$(TESSOBJ)ccstruct_blread.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/blread.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_blread.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/blread.cpp
+
+$(TESSOBJ)ccstruct_boxread.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/boxread.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_boxread.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/boxread.cpp
+
+$(TESSOBJ)ccstruct_boxword.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/boxword.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_boxword.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/boxword.cpp
+
+$(TESSOBJ)ccstruct_ccstruct.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ccstruct.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_ccstruct.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ccstruct.cpp
+
+$(TESSOBJ)ccstruct_coutln.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/coutln.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_coutln.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/coutln.cpp
+
+$(TESSOBJ)ccstruct_detlinefit.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/detlinefit.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_detlinefit.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/detlinefit.cpp
+
+$(TESSOBJ)ccstruct_dppoint.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/dppoint.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_dppoint.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/dppoint.cpp
+
+$(TESSOBJ)ccstruct_imagedata.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/imagedata.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_imagedata.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/imagedata.cpp
+
+$(TESSOBJ)ccstruct_linlsq.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/linlsq.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_linlsq.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/linlsq.cpp
+
+$(TESSOBJ)ccstruct_matrix.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/matrix.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_matrix.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/matrix.cpp
+
+$(TESSOBJ)ccstruct_mod128.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/mod128.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_mod128.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/mod128.cpp
+
+$(TESSOBJ)ccstruct_normalis.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/normalis.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_normalis.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/normalis.cpp
+
+$(TESSOBJ)ccstruct_ocrblock.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ocrblock.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_ocrblock.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ocrblock.cpp
+
+$(TESSOBJ)ccstruct_ocrpara.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ocrpara.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_ocrpara.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ocrpara.cpp
+
+$(TESSOBJ)ccstruct_ocrrow.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ocrrow.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_ocrrow.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ocrrow.cpp
+
+$(TESSOBJ)ccstruct_otsuthr.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/otsuthr.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_otsuthr.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/otsuthr.cpp
+
+$(TESSOBJ)ccstruct_pageres.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/pageres.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_pageres.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/pageres.cpp
+
+$(TESSOBJ)ccstruct_pdblock.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/pdblock.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_pdblock.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/pdblock.cpp
+
+$(TESSOBJ)ccstruct_points.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/points.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_points.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/points.cpp
+
+$(TESSOBJ)ccstruct_polyaprx.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/polyaprx.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_polyaprx.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/polyaprx.cpp
+
+$(TESSOBJ)ccstruct_polyblk.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/polyblk.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_polyblk.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/polyblk.cpp
+
+$(TESSOBJ)ccstruct_quadlsq.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/quadlsq.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_quadlsq.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/quadlsq.cpp
+
+$(TESSOBJ)ccstruct_quspline.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/quspline.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_quspline.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/quspline.cpp
+
+$(TESSOBJ)ccstruct_ratngs.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ratngs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_ratngs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ratngs.cpp
+
+$(TESSOBJ)ccstruct_rect.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/rect.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_rect.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/rect.cpp
+
+$(TESSOBJ)ccstruct_rejctmap.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/rejctmap.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_rejctmap.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/rejctmap.cpp
+
+$(TESSOBJ)ccstruct_seam.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/seam.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_seam.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/seam.cpp
+
+$(TESSOBJ)ccstruct_split.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/split.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_split.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/split.cpp
+
+$(TESSOBJ)ccstruct_statistc.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/statistc.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_statistc.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/statistc.cpp
+
+$(TESSOBJ)ccstruct_stepblob.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/stepblob.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_stepblob.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/stepblob.cpp
+
+$(TESSOBJ)ccstruct_werd.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/werd.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_werd.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/werd.cpp
+
+$(TESSOBJ)ccstruct_fontinfo.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/fontinfo.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_fontinfo.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/fontinfo.cpp
+
+$(TESSOBJ)ccstruct_params_training_featdef.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/params_training_featdef.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_params_training_featdef.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/params_training_featdef.cpp
+
+$(TESSOBJ)classify_adaptive.$(OBJ) : $(TESSERACTDIR)/src/classify/adaptive.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_adaptive.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/adaptive.cpp
+
+$(TESSOBJ)classify_adaptmatch.$(OBJ) : $(TESSERACTDIR)/src/classify/adaptmatch.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_adaptmatch.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/adaptmatch.cpp
+
+$(TESSOBJ)classify_blobclass.$(OBJ) : $(TESSERACTDIR)/src/classify/blobclass.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_blobclass.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/blobclass.cpp
+
+$(TESSOBJ)classify_classify.$(OBJ) : $(TESSERACTDIR)/src/classify/classify.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_classify.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/classify.cpp
+
+$(TESSOBJ)classify_cluster.$(OBJ) : $(TESSERACTDIR)/src/classify/cluster.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_cluster.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/cluster.cpp
+
+$(TESSOBJ)classify_clusttool.$(OBJ) : $(TESSERACTDIR)/src/classify/clusttool.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_clusttool.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/clusttool.cpp
+
+$(TESSOBJ)classify_cutoffs.$(OBJ) : $(TESSERACTDIR)/src/classify/cutoffs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_cutoffs.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/cutoffs.cpp
+
+$(TESSOBJ)classify_float2int.$(OBJ) : $(TESSERACTDIR)/src/classify/float2int.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_float2int.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/float2int.cpp
+
+$(TESSOBJ)classify_featdefs.$(OBJ) : $(TESSERACTDIR)/src/classify/featdefs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_featdefs.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/featdefs.cpp
+
+$(TESSOBJ)classify_fpoint.$(OBJ) : $(TESSERACTDIR)/src/classify/fpoint.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_fpoint.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/fpoint.cpp
+
+$(TESSOBJ)classify_intfeaturespace.$(OBJ) : $(TESSERACTDIR)/src/classify/intfeaturespace.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_intfeaturespace.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/intfeaturespace.cpp
+
+$(TESSOBJ)classify_intfx.$(OBJ) : $(TESSERACTDIR)/src/classify/intfx.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_intfx.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/intfx.cpp
+
+$(TESSOBJ)classify_intmatcher.$(OBJ) : $(TESSERACTDIR)/src/classify/intmatcher.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_intmatcher.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/intmatcher.cpp
+
+$(TESSOBJ)classify_intproto.$(OBJ) : $(TESSERACTDIR)/src/classify/intproto.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_intproto.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/intproto.cpp
+
+$(TESSOBJ)classify_kdtree.$(OBJ) : $(TESSERACTDIR)/src/classify/kdtree.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_kdtree.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/kdtree.cpp
+
+$(TESSOBJ)classify_mf.$(OBJ) : $(TESSERACTDIR)/src/classify/mf.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_mf.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/mf.cpp
+
+$(TESSOBJ)classify_mfdefs.$(OBJ) : $(TESSERACTDIR)/src/classify/mfdefs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_mfdefs.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/mfdefs.cpp
+
+$(TESSOBJ)classify_mfoutline.$(OBJ) : $(TESSERACTDIR)/src/classify/mfoutline.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_mfoutline.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/mfoutline.cpp
+
+$(TESSOBJ)classify_mfx.$(OBJ) : $(TESSERACTDIR)/src/classify/mfx.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_mfx.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/mfx.cpp
+
+$(TESSOBJ)classify_normfeat.$(OBJ) : $(TESSERACTDIR)/src/classify/normfeat.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_normfeat.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/normfeat.cpp
+
+$(TESSOBJ)classify_normmatch.$(OBJ) : $(TESSERACTDIR)/src/classify/normmatch.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_normmatch.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/normmatch.cpp
+
+$(TESSOBJ)classify_ocrfeatures.$(OBJ) : $(TESSERACTDIR)/src/classify/ocrfeatures.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_ocrfeatures.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/ocrfeatures.cpp
+
+$(TESSOBJ)classify_outfeat.$(OBJ) : $(TESSERACTDIR)/src/classify/outfeat.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_outfeat.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/outfeat.cpp
+
+$(TESSOBJ)classify_picofeat.$(OBJ) : $(TESSERACTDIR)/src/classify/picofeat.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_picofeat.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/picofeat.cpp
+
+$(TESSOBJ)classify_protos.$(OBJ) : $(TESSERACTDIR)/src/classify/protos.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_protos.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/protos.cpp
+
+$(TESSOBJ)classify_shapeclassifier.$(OBJ) : $(TESSERACTDIR)/src/classify/shapeclassifier.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_shapeclassifier.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/shapeclassifier.cpp
+
+$(TESSOBJ)classify_shapetable.$(OBJ) : $(TESSERACTDIR)/src/classify/shapetable.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_shapetable.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/shapetable.cpp
+
+$(TESSOBJ)classify_tessclassifier.$(OBJ) : $(TESSERACTDIR)/src/classify/tessclassifier.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_tessclassifier.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/tessclassifier.cpp
+
+$(TESSOBJ)classify_trainingsample.$(OBJ) : $(TESSERACTDIR)/src/classify/trainingsample.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_trainingsample.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/trainingsample.cpp
+
+$(TESSOBJ)cutil_cutil_class.$(OBJ) : $(TESSERACTDIR)/src/cutil/cutil_class.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)cutil_cutil_class.$(OBJ) $(C_) $(TESSERACTDIR)/src/cutil/cutil_class.cpp
+
+$(TESSOBJ)cutil_emalloc.$(OBJ) : $(TESSERACTDIR)/src/cutil/emalloc.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)cutil_emalloc.$(OBJ) $(C_) $(TESSERACTDIR)/src/cutil/emalloc.cpp
+
+$(TESSOBJ)cutil_oldlist.$(OBJ) : $(TESSERACTDIR)/src/cutil/oldlist.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)cutil_oldlist.$(OBJ) $(C_) $(TESSERACTDIR)/src/cutil/oldlist.cpp
+
+$(TESSOBJ)dict_context.$(OBJ) : $(TESSERACTDIR)/src/dict/context.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_context.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/context.cpp
+
+$(TESSOBJ)dict_dawg.$(OBJ) : $(TESSERACTDIR)/src/dict/dawg.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_dawg.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/dawg.cpp
+
+$(TESSOBJ)dict_dawg_cache.$(OBJ) : $(TESSERACTDIR)/src/dict/dawg_cache.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_dawg_cache.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/dawg_cache.cpp
+
+$(TESSOBJ)dict_dict.$(OBJ) : $(TESSERACTDIR)/src/dict/dict.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_dict.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/dict.cpp
+
+$(TESSOBJ)dict_permdawg.$(OBJ) : $(TESSERACTDIR)/src/dict/permdawg.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_permdawg.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/permdawg.cpp
+
+$(TESSOBJ)dict_stopper.$(OBJ) : $(TESSERACTDIR)/src/dict/stopper.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_stopper.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/stopper.cpp
+
+$(TESSOBJ)dict_trie.$(OBJ) : $(TESSERACTDIR)/src/dict/trie.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_trie.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/trie.cpp
+
+$(TESSOBJ)dict_hyphen.$(OBJ) : $(TESSERACTDIR)/src/dict/hyphen.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_hyphen.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/hyphen.cpp
+
+$(TESSOBJ)textord_alignedblob.$(OBJ) : $(TESSERACTDIR)/src/textord/alignedblob.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_alignedblob.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/alignedblob.cpp
+
+$(TESSOBJ)textord_baselinedetect.$(OBJ) : $(TESSERACTDIR)/src/textord/baselinedetect.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_baselinedetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/baselinedetect.cpp
+
+$(TESSOBJ)textord_bbgrid.$(OBJ) : $(TESSERACTDIR)/src/textord/bbgrid.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_bbgrid.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/bbgrid.cpp
+
+$(TESSOBJ)textord_blkocc.$(OBJ) : $(TESSERACTDIR)/src/textord/blkocc.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_blkocc.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/blkocc.cpp
+
+$(TESSOBJ)textord_blobgrid.$(OBJ) : $(TESSERACTDIR)/src/textord/blobgrid.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_blobgrid.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/blobgrid.cpp
+
+$(TESSOBJ)textord_ccnontextdetect.$(OBJ) : $(TESSERACTDIR)/src/textord/ccnontextdetect.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_ccnontextdetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/ccnontextdetect.cpp
+
+$(TESSOBJ)textord_cjkpitch.$(OBJ) : $(TESSERACTDIR)/src/textord/cjkpitch.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_cjkpitch.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/cjkpitch.cpp
+
+$(TESSOBJ)textord_colfind.$(OBJ) : $(TESSERACTDIR)/src/textord/colfind.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_colfind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/colfind.cpp
+
+$(TESSOBJ)textord_colpartition.$(OBJ) : $(TESSERACTDIR)/src/textord/colpartition.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_colpartition.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/colpartition.cpp
+
+$(TESSOBJ)textord_colpartitionset.$(OBJ) : $(TESSERACTDIR)/src/textord/colpartitionset.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_colpartitionset.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/colpartitionset.cpp
+
+$(TESSOBJ)textord_colpartitiongrid.$(OBJ) : $(TESSERACTDIR)/src/textord/colpartitiongrid.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_colpartitiongrid.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/colpartitiongrid.cpp
+
+$(TESSOBJ)textord_devanagari_processing.$(OBJ) : $(TESSERACTDIR)/src/textord/devanagari_processing.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_devanagari_processing.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/devanagari_processing.cpp
+
+$(TESSOBJ)textord_drawtord.$(OBJ) : $(TESSERACTDIR)/src/textord/drawtord.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_drawtord.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/drawtord.cpp
+
+$(TESSOBJ)textord_edgblob.$(OBJ) : $(TESSERACTDIR)/src/textord/edgblob.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_edgblob.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/edgblob.cpp
+
+$(TESSOBJ)textord_edgloop.$(OBJ) : $(TESSERACTDIR)/src/textord/edgloop.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_edgloop.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/edgloop.cpp
+
+$(TESSOBJ)textord_fpchop.$(OBJ) : $(TESSERACTDIR)/src/textord/fpchop.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_fpchop.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/fpchop.cpp
+
+$(TESSOBJ)textord_gap_map.$(OBJ) : $(TESSERACTDIR)/src/textord/gap_map.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_gap_map.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/gap_map.cpp
+
+$(TESSOBJ)textord_imagefind.$(OBJ) : $(TESSERACTDIR)/src/textord/imagefind.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_imagefind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/imagefind.cpp
+
+$(TESSOBJ)textord_linefind.$(OBJ) : $(TESSERACTDIR)/src/textord/linefind.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_linefind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/linefind.cpp
+
+$(TESSOBJ)textord_makerow.$(OBJ) : $(TESSERACTDIR)/src/textord/makerow.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_makerow.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/makerow.cpp
+
+$(TESSOBJ)textord_oldbasel.$(OBJ) : $(TESSERACTDIR)/src/textord/oldbasel.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_oldbasel.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/oldbasel.cpp
+
+$(TESSOBJ)textord_pithsync.$(OBJ) : $(TESSERACTDIR)/src/textord/pithsync.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_pithsync.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/pithsync.cpp
+
+$(TESSOBJ)textord_pitsync1.$(OBJ) : $(TESSERACTDIR)/src/textord/pitsync1.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_pitsync1.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/pitsync1.cpp
+
+$(TESSOBJ)textord_scanedg.$(OBJ) : $(TESSERACTDIR)/src/textord/scanedg.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_scanedg.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/scanedg.cpp
+
+$(TESSOBJ)textord_sortflts.$(OBJ) : $(TESSERACTDIR)/src/textord/sortflts.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_sortflts.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/sortflts.cpp
+
+$(TESSOBJ)textord_strokewidth.$(OBJ) : $(TESSERACTDIR)/src/textord/strokewidth.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_strokewidth.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/strokewidth.cpp
+
+$(TESSOBJ)textord_tabfind.$(OBJ) : $(TESSERACTDIR)/src/textord/tabfind.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tabfind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tabfind.cpp
+
+$(TESSOBJ)textord_tablefind.$(OBJ) : $(TESSERACTDIR)/src/textord/tablefind.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tablefind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tablefind.cpp
+
+$(TESSOBJ)textord_tabvector.$(OBJ) : $(TESSERACTDIR)/src/textord/tabvector.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tabvector.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tabvector.cpp
+
+$(TESSOBJ)textord_tablerecog.$(OBJ) : $(TESSERACTDIR)/src/textord/tablerecog.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tablerecog.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tablerecog.cpp
+
+$(TESSOBJ)textord_textlineprojection.$(OBJ) : $(TESSERACTDIR)/src/textord/textlineprojection.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_textlineprojection.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/textlineprojection.cpp
+
+$(TESSOBJ)textord_textord.$(OBJ) : $(TESSERACTDIR)/src/textord/textord.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_textord.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/textord.cpp
+
+$(TESSOBJ)textord_topitch.$(OBJ) : $(TESSERACTDIR)/src/textord/topitch.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_topitch.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/topitch.cpp
+
+$(TESSOBJ)textord_tordmain.$(OBJ) : $(TESSERACTDIR)/src/textord/tordmain.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tordmain.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tordmain.cpp
+
+$(TESSOBJ)textord_tospace.$(OBJ) : $(TESSERACTDIR)/src/textord/tospace.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tospace.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tospace.cpp
+
+$(TESSOBJ)textord_tovars.$(OBJ) : $(TESSERACTDIR)/src/textord/tovars.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tovars.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tovars.cpp
+
+$(TESSOBJ)textord_underlin.$(OBJ) : $(TESSERACTDIR)/src/textord/underlin.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_underlin.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/underlin.cpp
+
+$(TESSOBJ)textord_wordseg.$(OBJ) : $(TESSERACTDIR)/src/textord/wordseg.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_wordseg.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/wordseg.cpp
+
+$(TESSOBJ)textord_workingpartset.$(OBJ) : $(TESSERACTDIR)/src/textord/workingpartset.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_workingpartset.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/workingpartset.cpp
+
+$(TESSOBJ)textord_equationdetectbase.$(OBJ) : $(TESSERACTDIR)/src/textord/equationdetectbase.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_equationdetectbase.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/equationdetectbase.cpp
+
+$(TESSOBJ)viewer_scrollview.$(OBJ) : $(TESSERACTDIR)/src/viewer/scrollview.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)viewer_scrollview.$(OBJ) $(C_) $(TESSERACTDIR)/src/viewer/scrollview.cpp
+
+$(TESSOBJ)viewer_svmnode.$(OBJ) : $(TESSERACTDIR)/src/viewer/svmnode.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)viewer_svmnode.$(OBJ) $(C_) $(TESSERACTDIR)/src/viewer/svmnode.cpp
+
+$(TESSOBJ)viewer_svutil.$(OBJ) : $(TESSERACTDIR)/src/viewer/svutil.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)viewer_svutil.$(OBJ) $(C_) $(TESSERACTDIR)/src/viewer/svutil.cpp
+
+$(TESSOBJ)wordrec_chop.$(OBJ) : $(TESSERACTDIR)/src/wordrec/chop.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_chop.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/chop.cpp
+
+$(TESSOBJ)wordrec_chopper.$(OBJ) : $(TESSERACTDIR)/src/wordrec/chopper.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_chopper.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/chopper.cpp
+
+$(TESSOBJ)wordrec_findseam.$(OBJ) : $(TESSERACTDIR)/src/wordrec/findseam.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_findseam.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/findseam.cpp
+
+$(TESSOBJ)wordrec_gradechop.$(OBJ) : $(TESSERACTDIR)/src/wordrec/gradechop.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_gradechop.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/gradechop.cpp
+
+$(TESSOBJ)wordrec_tface.$(OBJ) : $(TESSERACTDIR)/src/wordrec/tface.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_tface.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/tface.cpp
+
+$(TESSOBJ)wordrec_wordrec.$(OBJ) : $(TESSERACTDIR)/src/wordrec/wordrec.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_wordrec.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/wordrec.cpp
+
+$(TESSOBJ)wordrec_associate.$(OBJ) : $(TESSERACTDIR)/src/wordrec/associate.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_associate.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/associate.cpp
+
+$(TESSOBJ)wordrec_drawfx.$(OBJ) : $(TESSERACTDIR)/src/wordrec/drawfx.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_drawfx.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/drawfx.cpp
+
+$(TESSOBJ)wordrec_language_model.$(OBJ) : $(TESSERACTDIR)/src/wordrec/language_model.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_language_model.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/language_model.cpp
+
+$(TESSOBJ)wordrec_lm_consistency.$(OBJ) : $(TESSERACTDIR)/src/wordrec/lm_consistency.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_lm_consistency.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/lm_consistency.cpp
+
+$(TESSOBJ)wordrec_lm_pain_points.$(OBJ) : $(TESSERACTDIR)/src/wordrec/lm_pain_points.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_lm_pain_points.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/lm_pain_points.cpp
+
+$(TESSOBJ)wordrec_lm_state.$(OBJ) : $(TESSERACTDIR)/src/wordrec/lm_state.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_lm_state.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/lm_state.cpp
+
+$(TESSOBJ)wordrec_outlines.$(OBJ) : $(TESSERACTDIR)/src/wordrec/outlines.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_outlines.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/outlines.cpp
+
+$(TESSOBJ)wordrec_pieces.$(OBJ) : $(TESSERACTDIR)/src/wordrec/pieces.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_pieces.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/pieces.cpp
+
+$(TESSOBJ)wordrec_params_model.$(OBJ) : $(TESSERACTDIR)/src/wordrec/params_model.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_params_model.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/params_model.cpp
+
+$(TESSOBJ)wordrec_plotedges.$(OBJ) : $(TESSERACTDIR)/src/wordrec/plotedges.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_plotedges.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/plotedges.cpp
+
+$(TESSOBJ)wordrec_render.$(OBJ) : $(TESSERACTDIR)/src/wordrec/render.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_render.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/render.cpp
+
+$(TESSOBJ)wordrec_segsearch.$(OBJ) : $(TESSERACTDIR)/src/wordrec/segsearch.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_segsearch.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/segsearch.cpp
+
+$(TESSOBJ)wordrec_wordclass.$(OBJ) : $(TESSERACTDIR)/src/wordrec/wordclass.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_wordclass.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/wordclass.cpp
+
+$(TESSOBJ)ccutil_ambigs.$(OBJ) : $(TESSERACTDIR)/src/ccutil/ambigs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_ambigs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/ambigs.cpp
+
+$(TESSOBJ)ccutil_ccutil.$(OBJ) : $(TESSERACTDIR)/src/ccutil/ccutil.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_ccutil.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/ccutil.cpp
+
+$(TESSOBJ)ccutil_clst.$(OBJ) : $(TESSERACTDIR)/src/ccutil/clst.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_clst.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/clst.cpp
+
+$(TESSOBJ)ccutil_elst2.$(OBJ) : $(TESSERACTDIR)/src/ccutil/elst2.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_elst2.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/elst2.cpp
+
+$(TESSOBJ)ccutil_elst.$(OBJ) : $(TESSERACTDIR)/src/ccutil/elst.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_elst.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/elst.cpp
+
+$(TESSOBJ)ccutil_errcode.$(OBJ) : $(TESSERACTDIR)/src/ccutil/errcode.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_errcode.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/errcode.cpp
+
+$(TESSOBJ)ccutil_globaloc.$(OBJ) : $(TESSERACTDIR)/src/ccutil/globaloc.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_globaloc.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/globaloc.cpp
+
+$(TESSOBJ)ccutil_mainblk.$(OBJ) : $(TESSERACTDIR)/src/ccutil/mainblk.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_mainblk.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/mainblk.cpp
+
+$(TESSOBJ)ccutil_serialis.$(OBJ) : $(TESSERACTDIR)/src/ccutil/serialis.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_serialis.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/serialis.cpp
+
+$(TESSOBJ)ccutil_strngs.$(OBJ) : $(TESSERACTDIR)/src/ccutil/strngs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_strngs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/strngs.cpp
+
+$(TESSOBJ)ccutil_scanutils.$(OBJ) : $(TESSERACTDIR)/src/ccutil/scanutils.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_scanutils.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/scanutils.cpp
+
+$(TESSOBJ)ccutil_tessdatamanager.$(OBJ) : $(TESSERACTDIR)/src/ccutil/tessdatamanager.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_tessdatamanager.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/tessdatamanager.cpp
+
+$(TESSOBJ)ccutil_tprintf.$(OBJ) : $(TESSERACTDIR)/src/ccutil/tprintf.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_tprintf.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/tprintf.cpp
+
+$(TESSOBJ)ccutil_unichar.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unichar.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_unichar.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unichar.cpp
+
+$(TESSOBJ)ccutil_unicharcompress.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unicharcompress.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_unicharcompress.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unicharcompress.cpp
+
+$(TESSOBJ)ccutil_unicharmap.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unicharmap.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_unicharmap.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unicharmap.cpp
+
+$(TESSOBJ)ccutil_unicharset.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unicharset.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_unicharset.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unicharset.cpp
+
+$(TESSOBJ)ccutil_unicodes.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unicodes.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_unicodes.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unicodes.cpp
+
+$(TESSOBJ)ccutil_params.$(OBJ) : $(TESSERACTDIR)/src/ccutil/params.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_params.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/params.cpp
+
+$(TESSOBJ)ccutil_bitvector.$(OBJ) : $(TESSERACTDIR)/src/ccutil/bitvector.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_bitvector.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/bitvector.cpp
+
+$(TESSOBJ)ccutil_indexmapbidi.$(OBJ) : $(TESSERACTDIR)/src/ccutil/indexmapbidi.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_indexmapbidi.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/indexmapbidi.cpp
+
+$(TESSOBJ)ccutil_universalambigs.$(OBJ) : $(TESSERACTDIR)/src/ccutil/universalambigs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_universalambigs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/universalambigs.cpp
+
+$(TESSOBJ)lstm_convolve.$(OBJ) : $(TESSERACTDIR)/src/lstm/convolve.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_convolve.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/convolve.cpp
+
+$(TESSOBJ)lstm_fullyconnected.$(OBJ) : $(TESSERACTDIR)/src/lstm/fullyconnected.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_fullyconnected.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/fullyconnected.cpp
+
+$(TESSOBJ)lstm_functions.$(OBJ) : $(TESSERACTDIR)/src/lstm/functions.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_functions.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/functions.cpp
+
+$(TESSOBJ)lstm_input.$(OBJ) : $(TESSERACTDIR)/src/lstm/input.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_input.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/input.cpp
+
+$(TESSOBJ)lstm_lstm.$(OBJ) : $(TESSERACTDIR)/src/lstm/lstm.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_lstm.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/lstm.cpp
+
+$(TESSOBJ)lstm_lstmrecognizer.$(OBJ) : $(TESSERACTDIR)/src/lstm/lstmrecognizer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_lstmrecognizer.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/lstmrecognizer.cpp
+
+$(TESSOBJ)lstm_maxpool.$(OBJ) : $(TESSERACTDIR)/src/lstm/maxpool.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_maxpool.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/maxpool.cpp
+
+$(TESSOBJ)lstm_network.$(OBJ) : $(TESSERACTDIR)/src/lstm/network.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_network.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/network.cpp
+
+$(TESSOBJ)lstm_networkio.$(OBJ) : $(TESSERACTDIR)/src/lstm/networkio.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_networkio.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/networkio.cpp
+
+$(TESSOBJ)lstm_parallel.$(OBJ) : $(TESSERACTDIR)/src/lstm/parallel.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_parallel.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/parallel.cpp
+
+$(TESSOBJ)lstm_plumbing.$(OBJ) : $(TESSERACTDIR)/src/lstm/plumbing.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_plumbing.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/plumbing.cpp
+
+$(TESSOBJ)lstm_recodebeam.$(OBJ) : $(TESSERACTDIR)/src/lstm/recodebeam.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_recodebeam.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/recodebeam.cpp
+
+$(TESSOBJ)lstm_reconfig.$(OBJ) : $(TESSERACTDIR)/src/lstm/reconfig.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_reconfig.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/reconfig.cpp
+
+$(TESSOBJ)lstm_reversed.$(OBJ) : $(TESSERACTDIR)/src/lstm/reversed.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_reversed.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/reversed.cpp
+
+$(TESSOBJ)lstm_series.$(OBJ) : $(TESSERACTDIR)/src/lstm/series.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_series.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/series.cpp
+
+$(TESSOBJ)lstm_stridemap.$(OBJ) : $(TESSERACTDIR)/src/lstm/stridemap.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_stridemap.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/stridemap.cpp
+
+$(TESSOBJ)lstm_tfnetwork.$(OBJ) : $(TESSERACTDIR)/src/lstm/tfnetwork.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_tfnetwork.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/tfnetwork.cpp
+
+$(TESSOBJ)lstm_weightmatrix.$(OBJ) : $(TESSERACTDIR)/src/lstm/weightmatrix.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_weightmatrix.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/weightmatrix.cpp
+
+$(TESSOBJ)arch_dotproduct.$(OBJ) : $(TESSERACTDIR)/src/arch/dotproduct.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)arch_dotproduct.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/dotproduct.cpp
+
+$(TESSOBJ)arch_dotproductavx.$(OBJ): $(TESSERACTDIR)/src/arch/dotproductavx.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSAVX) $(TESSO_)arch_dotproductavx.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/dotproductavx.cpp
+
+$(TESSOBJ)arch_dotproductfma.$(OBJ): $(TESSERACTDIR)/src/arch/dotproductfma.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSFMA) $(TESSO_)arch_dotproductfma.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/dotproductfma.cpp
+
+$(TESSOBJ)arch_dotproductsse.$(OBJ): $(TESSERACTDIR)/src/arch/dotproductsse.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSSSE41) $(TESSO_)arch_dotproductsse.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/dotproductsse.cpp
+
+$(TESSOBJ)arch_intsimdmatrixavx2.$(OBJ): $(TESSERACTDIR)/src/arch/intsimdmatrixavx2.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSAVX2) $(TESSO_)arch_intsimdmatrixavx2.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/intsimdmatrixavx2.cpp
+
+$(TESSOBJ)arch_intsimdmatrixsse.$(OBJ): $(TESSERACTDIR)/src/arch/intsimdmatrixsse.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSSSE41) $(TESSO_)arch_intsimdmatrixsse.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/intsimdmatrixsse.cpp
+
+$(TESSOBJ)arch_intsimdmatrixneon.$(OBJ): $(TESSERACTDIR)/src/arch/intsimdmatrixneon.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSNEON) $(TESSO_)arch_intsimdmatrixneon.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/intsimdmatrixneon.cpp
+
+# Targets needed for lstm engine
+TESSERACT_OBJS_1=\
+ $(TESSOBJ)api_altorenderer.$(OBJ)\
+ $(TESSOBJ)api_baseapi.$(OBJ)\
+ $(TESSOBJ)api_capi.$(OBJ)\
+ $(TESSOBJ)api_hocrrenderer.$(OBJ)\
+ $(TESSOBJ)api_lstmboxrenderer.$(OBJ)\
+ $(TESSOBJ)api_pdfrenderer.$(OBJ)\
+ $(TESSOBJ)api_renderer.$(OBJ)\
+ $(TESSOBJ)api_wordstrboxrenderer.$(OBJ)\
+ $(TESSOBJ)arch_intsimdmatrix.$(OBJ)\
+ $(TESSOBJ)arch_simddetect.$(OBJ)\
+ $(TESSOBJ)ccmain_applybox.$(OBJ)\
+ $(TESSOBJ)ccmain_control.$(OBJ)\
+ $(TESSOBJ)ccmain_linerec.$(OBJ)\
+ $(TESSOBJ)ccmain_ltrresultiterator.$(OBJ)\
+ $(TESSOBJ)ccmain_mutableiterator.$(OBJ)\
+ $(TESSOBJ)ccmain_output.$(OBJ)\
+ $(TESSOBJ)ccmain_pageiterator.$(OBJ)\
+ $(TESSOBJ)ccmain_pagesegmain.$(OBJ)\
+ $(TESSOBJ)ccmain_pagewalk.$(OBJ)\
+ $(TESSOBJ)ccmain_paragraphs.$(OBJ)\
+ $(TESSOBJ)ccmain_paramsd.$(OBJ)\
+ $(TESSOBJ)ccmain_pgedit.$(OBJ)\
+ $(TESSOBJ)ccmain_reject.$(OBJ)\
+ $(TESSOBJ)ccmain_resultiterator.$(OBJ)\
+ $(TESSOBJ)ccmain_tessedit.$(OBJ)\
+ $(TESSOBJ)ccmain_tesseractclass.$(OBJ)\
+ $(TESSOBJ)ccmain_tessvars.$(OBJ)\
+ $(TESSOBJ)ccmain_thresholder.$(OBJ)\
+ $(TESSOBJ)ccmain_werdit.$(OBJ)\
+
+
+TESSERACT_OBJS_2 = \
+ $(TESSOBJ)ccstruct_blamer.$(OBJ)\
+ $(TESSOBJ)ccstruct_blobbox.$(OBJ)\
+ $(TESSOBJ)ccstruct_blobs.$(OBJ)\
+ $(TESSOBJ)ccstruct_blread.$(OBJ)\
+ $(TESSOBJ)ccstruct_boxread.$(OBJ)\
+ $(TESSOBJ)ccstruct_boxword.$(OBJ)\
+ $(TESSOBJ)ccstruct_ccstruct.$(OBJ)\
+ $(TESSOBJ)ccstruct_coutln.$(OBJ)\
+ $(TESSOBJ)ccstruct_detlinefit.$(OBJ)\
+ $(TESSOBJ)ccstruct_dppoint.$(OBJ)\
+ $(TESSOBJ)ccstruct_imagedata.$(OBJ)\
+ $(TESSOBJ)ccstruct_linlsq.$(OBJ)\
+ $(TESSOBJ)ccstruct_matrix.$(OBJ)\
+ $(TESSOBJ)ccstruct_mod128.$(OBJ)\
+ $(TESSOBJ)ccstruct_normalis.$(OBJ)\
+ $(TESSOBJ)ccstruct_ocrblock.$(OBJ)\
+ $(TESSOBJ)ccstruct_ocrpara.$(OBJ)\
+ $(TESSOBJ)ccstruct_ocrrow.$(OBJ)\
+ $(TESSOBJ)ccstruct_otsuthr.$(OBJ)\
+ $(TESSOBJ)ccstruct_pageres.$(OBJ)\
+ $(TESSOBJ)ccstruct_pdblock.$(OBJ)\
+ $(TESSOBJ)ccstruct_points.$(OBJ)\
+ $(TESSOBJ)ccstruct_polyaprx.$(OBJ)\
+ $(TESSOBJ)ccstruct_polyblk.$(OBJ)\
+ $(TESSOBJ)ccstruct_quadlsq.$(OBJ)\
+ $(TESSOBJ)ccstruct_quspline.$(OBJ)\
+ $(TESSOBJ)ccstruct_ratngs.$(OBJ)\
+ $(TESSOBJ)ccstruct_rect.$(OBJ)\
+ $(TESSOBJ)ccstruct_rejctmap.$(OBJ)\
+ $(TESSOBJ)ccstruct_seam.$(OBJ)\
+ $(TESSOBJ)ccstruct_split.$(OBJ)\
+ $(TESSOBJ)ccstruct_statistc.$(OBJ)\
+ $(TESSOBJ)ccstruct_stepblob.$(OBJ)\
+ $(TESSOBJ)ccstruct_werd.$(OBJ)
+
+TESSERACT_OBJS_3=\
+ $(TESSOBJ)classify_classify.$(OBJ)\
+ $(TESSOBJ)dict_context.$(OBJ)\
+ $(TESSOBJ)dict_dawg.$(OBJ)\
+ $(TESSOBJ)dict_dawg_cache.$(OBJ)\
+ $(TESSOBJ)dict_dict.$(OBJ)\
+ $(TESSOBJ)dict_permdawg.$(OBJ)\
+ $(TESSOBJ)dict_stopper.$(OBJ)\
+ $(TESSOBJ)dict_trie.$(OBJ)\
+ $(TESSOBJ)textord_alignedblob.$(OBJ)\
+ $(TESSOBJ)textord_baselinedetect.$(OBJ)\
+ $(TESSOBJ)textord_bbgrid.$(OBJ)\
+ $(TESSOBJ)textord_blkocc.$(OBJ)\
+ $(TESSOBJ)textord_blobgrid.$(OBJ)\
+ $(TESSOBJ)textord_ccnontextdetect.$(OBJ)\
+ $(TESSOBJ)textord_cjkpitch.$(OBJ)\
+ $(TESSOBJ)textord_colfind.$(OBJ)\
+ $(TESSOBJ)textord_colpartition.$(OBJ)\
+ $(TESSOBJ)textord_colpartitionset.$(OBJ)\
+ $(TESSOBJ)textord_colpartitiongrid.$(OBJ)\
+ $(TESSOBJ)textord_devanagari_processing.$(OBJ)\
+ $(TESSOBJ)textord_drawtord.$(OBJ)\
+ $(TESSOBJ)textord_edgblob.$(OBJ)\
+ $(TESSOBJ)textord_edgloop.$(OBJ)\
+ $(TESSOBJ)textord_fpchop.$(OBJ)\
+ $(TESSOBJ)textord_gap_map.$(OBJ)\
+ $(TESSOBJ)textord_imagefind.$(OBJ)\
+ $(TESSOBJ)textord_linefind.$(OBJ)\
+ $(TESSOBJ)textord_makerow.$(OBJ)\
+ $(TESSOBJ)textord_oldbasel.$(OBJ)\
+ $(TESSOBJ)textord_pithsync.$(OBJ)\
+ $(TESSOBJ)textord_pitsync1.$(OBJ)\
+ $(TESSOBJ)textord_scanedg.$(OBJ)\
+ $(TESSOBJ)textord_sortflts.$(OBJ)\
+ $(TESSOBJ)textord_strokewidth.$(OBJ)\
+ $(TESSOBJ)textord_tabfind.$(OBJ)\
+ $(TESSOBJ)textord_tablefind.$(OBJ)\
+ $(TESSOBJ)textord_tabvector.$(OBJ)\
+ $(TESSOBJ)textord_tablerecog.$(OBJ)\
+ $(TESSOBJ)textord_textlineprojection.$(OBJ)\
+ $(TESSOBJ)textord_textord.$(OBJ)\
+ $(TESSOBJ)textord_topitch.$(OBJ)\
+ $(TESSOBJ)textord_tordmain.$(OBJ)\
+ $(TESSOBJ)textord_tospace.$(OBJ)\
+ $(TESSOBJ)textord_tovars.$(OBJ)\
+ $(TESSOBJ)textord_underlin.$(OBJ)\
+ $(TESSOBJ)textord_wordseg.$(OBJ)\
+ $(TESSOBJ)textord_workingpartset.$(OBJ)\
+
+TESSERACT_OBJS_4=\
+ $(TESSOBJ)viewer_scrollview.$(OBJ)\
+ $(TESSOBJ)viewer_svmnode.$(OBJ)\
+ $(TESSOBJ)viewer_svutil.$(OBJ)\
+ $(TESSOBJ)wordrec_tface.$(OBJ)\
+ $(TESSOBJ)wordrec_wordrec.$(OBJ)\
+ $(TESSOBJ)ccutil_ccutil.$(OBJ)\
+ $(TESSOBJ)ccutil_clst.$(OBJ)\
+ $(TESSOBJ)ccutil_elst2.$(OBJ)\
+ $(TESSOBJ)ccutil_elst.$(OBJ)\
+ $(TESSOBJ)ccutil_errcode.$(OBJ)\
+ $(TESSOBJ)ccutil_globaloc.$(OBJ)\
+ $(TESSOBJ)ccutil_mainblk.$(OBJ)\
+ $(TESSOBJ)ccutil_serialis.$(OBJ)\
+ $(TESSOBJ)ccutil_strngs.$(OBJ)\
+ $(TESSOBJ)ccutil_scanutils.$(OBJ)\
+ $(TESSOBJ)ccutil_tessdatamanager.$(OBJ)\
+ $(TESSOBJ)ccutil_tprintf.$(OBJ)\
+ $(TESSOBJ)ccutil_unichar.$(OBJ)\
+ $(TESSOBJ)ccutil_unicharcompress.$(OBJ)\
+ $(TESSOBJ)ccutil_unicharmap.$(OBJ)\
+ $(TESSOBJ)ccutil_unicharset.$(OBJ)\
+ $(TESSOBJ)ccutil_unicodes.$(OBJ)\
+ $(TESSOBJ)ccutil_params.$(OBJ)\
+ $(TESSOBJ)lstm_convolve.$(OBJ)\
+ $(TESSOBJ)lstm_fullyconnected.$(OBJ)\
+ $(TESSOBJ)lstm_functions.$(OBJ)\
+ $(TESSOBJ)lstm_input.$(OBJ)\
+ $(TESSOBJ)lstm_lstm.$(OBJ)\
+ $(TESSOBJ)lstm_lstmrecognizer.$(OBJ)\
+ $(TESSOBJ)lstm_maxpool.$(OBJ)\
+ $(TESSOBJ)lstm_network.$(OBJ)\
+ $(TESSOBJ)lstm_networkio.$(OBJ)\
+ $(TESSOBJ)lstm_parallel.$(OBJ)\
+ $(TESSOBJ)lstm_plumbing.$(OBJ)\
+ $(TESSOBJ)lstm_recodebeam.$(OBJ)\
+ $(TESSOBJ)lstm_reconfig.$(OBJ)\
+ $(TESSOBJ)lstm_reversed.$(OBJ)\
+ $(TESSOBJ)lstm_series.$(OBJ)\
+ $(TESSOBJ)lstm_stridemap.$(OBJ)\
+ $(TESSOBJ)lstm_tfnetwork.$(OBJ)\
+ $(TESSOBJ)lstm_weightmatrix.$(OBJ)\
+ $(TESSOBJ)arch_dotproduct.$(OBJ)\
+ $(TESSOBJ)arch_dotproductavx.$(OBJ)\
+ $(TESSOBJ)arch_intsimdmatrixavx2.$(OBJ)\
+ $(TESSOBJ)arch_dotproductfma.$(OBJ)\
+ $(TESSOBJ)arch_dotproductsse.$(OBJ)\
+ $(TESSOBJ)arch_intsimdmatrixsse.$(OBJ)\
+ $(TESSOBJ)arch_intsimdmatrixneon.$(OBJ)
+
+# Targets needed for TESSERACT_LEGACY
+TESSERACT_LEGACY_OBJS=\
+ $(TESSOBJ)ccmain_adaptions.$(OBJ)\
+ $(TESSOBJ)ccmain_docqual.$(OBJ)\
+ $(TESSOBJ)ccmain_equationdetect.$(OBJ)\
+ $(TESSOBJ)ccmain_fixspace.$(OBJ)\
+ $(TESSOBJ)ccmain_fixxht.$(OBJ)\
+ $(TESSOBJ)ccmain_osdetect.$(OBJ)\
+ $(TESSOBJ)ccmain_par_control.$(OBJ)\
+ $(TESSOBJ)ccmain_recogtraining.$(OBJ)\
+ $(TESSOBJ)ccmain_superscript.$(OBJ)\
+ $(TESSOBJ)ccmain_tessbox.$(OBJ)\
+ $(TESSOBJ)ccmain_tfacepp.$(OBJ)\
+ $(TESSOBJ)ccstruct_fontinfo.$(OBJ)\
+ $(TESSOBJ)ccstruct_params_training_featdef.$(OBJ)\
+ $(TESSOBJ)ccutil_ambigs.$(OBJ)\
+ $(TESSOBJ)ccutil_bitvector.$(OBJ)\
+ $(TESSOBJ)ccutil_indexmapbidi.$(OBJ)\
+ $(TESSOBJ)ccutil_universalambigs.$(OBJ)\
+ $(TESSOBJ)classify_adaptive.$(OBJ)\
+ $(TESSOBJ)classify_adaptmatch.$(OBJ)\
+ $(TESSOBJ)classify_blobclass.$(OBJ)\
+ $(TESSOBJ)classify_cluster.$(OBJ)\
+ $(TESSOBJ)classify_clusttool.$(OBJ)\
+ $(TESSOBJ)classify_cutoffs.$(OBJ)\
+ $(TESSOBJ)classify_featdefs.$(OBJ)\
+ $(TESSOBJ)classify_float2int.$(OBJ)\
+ $(TESSOBJ)classify_fpoint.$(OBJ)\
+ $(TESSOBJ)classify_intfeaturespace.$(OBJ)\
+ $(TESSOBJ)classify_intfx.$(OBJ)\
+ $(TESSOBJ)classify_intmatcher.$(OBJ)\
+ $(TESSOBJ)classify_intproto.$(OBJ)\
+ $(TESSOBJ)classify_kdtree.$(OBJ)\
+ $(TESSOBJ)classify_mf.$(OBJ)\
+ $(TESSOBJ)classify_mfdefs.$(OBJ)\
+ $(TESSOBJ)classify_mfoutline.$(OBJ)\
+ $(TESSOBJ)classify_mfx.$(OBJ)\
+ $(TESSOBJ)classify_normfeat.$(OBJ)\
+ $(TESSOBJ)classify_normmatch.$(OBJ)\
+ $(TESSOBJ)classify_ocrfeatures.$(OBJ)\
+ $(TESSOBJ)classify_outfeat.$(OBJ)\
+ $(TESSOBJ)classify_picofeat.$(OBJ)\
+ $(TESSOBJ)classify_protos.$(OBJ)\
+ $(TESSOBJ)classify_shapeclassifier.$(OBJ)\
+ $(TESSOBJ)classify_shapetable.$(OBJ)\
+ $(TESSOBJ)classify_tessclassifier.$(OBJ)\
+ $(TESSOBJ)classify_trainingsample.$(OBJ)\
+ $(TESSOBJ)cutil_emalloc.$(OBJ)\
+ $(TESSOBJ)cutil_oldlist.$(OBJ)\
+ $(TESSOBJ)dict_hyphen.$(OBJ)\
+ $(TESSOBJ)textord_equationdetectbase.$(OBJ)\
+ $(TESSOBJ)wordrec_associate.$(OBJ)\
+ $(TESSOBJ)wordrec_chop.$(OBJ)\
+ $(TESSOBJ)wordrec_chopper.$(OBJ)\
+ $(TESSOBJ)wordrec_drawfx.$(OBJ)\
+ $(TESSOBJ)wordrec_findseam.$(OBJ)\
+ $(TESSOBJ)wordrec_gradechop.$(OBJ)\
+ $(TESSOBJ)wordrec_language_model.$(OBJ)\
+ $(TESSOBJ)wordrec_lm_consistency.$(OBJ)\
+ $(TESSOBJ)wordrec_lm_pain_points.$(OBJ)\
+ $(TESSOBJ)wordrec_lm_state.$(OBJ)\
+ $(TESSOBJ)wordrec_outlines.$(OBJ)\
+ $(TESSOBJ)wordrec_params_model.$(OBJ)\
+ $(TESSOBJ)wordrec_pieces.$(OBJ)\
+ $(TESSOBJ)wordrec_plotedges.$(OBJ)\
+ $(TESSOBJ)wordrec_render.$(OBJ)\
+ $(TESSOBJ)wordrec_segsearch.$(OBJ)\
+ $(TESSOBJ)wordrec_wordclass.$(OBJ)
+
+
+#TESSERACT_LEGACY=$(TESSERACT_LEGACY_OBJS)
+TESSERACT_LEGACY=
+
+TESS_ROMFS_ARGS=\
+ -c -d Resource/ -P .$(D)Resource$(D) Tesseract$(D)*
diff --git a/base/tessocr.cpp b/base/tessocr.cpp
new file mode 100644
index 00000000..26e5432c
--- /dev/null
+++ b/base/tessocr.cpp
@@ -0,0 +1,443 @@
+#include "tesseract/baseapi.h"
+#include "tesseract/genericvector.h"
+#include "tesseract/serialis.h"
+
+extern "C"
+{
+
+#include "allheaders.h"
+#include "stdpre.h"
+#include "tessocr.h"
+#include "gserrors.h"
+#include "gp.h"
+#include "gssprintf.h"
+#include "gxiodev.h"
+#include "stream.h"
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#undef DEBUG_ALLOCS
+#ifdef DEBUG_ALLOCS
+#undef printf
+static int event = 0;
+#endif
+
+void *leptonica_malloc(size_t blocksize)
+{
+ void *ret = malloc(blocksize);
+#ifdef DEBUG_ALLOCS
+ printf("%d LEPTONICA_MALLOC %d -> %p\n", event++, (int)blocksize, ret);
+ fflush(stdout);
+#endif
+ return ret;
+}
+
+void *leptonica_calloc(size_t numelm, size_t elemsize)
+{
+ void *ret = calloc(numelm, elemsize);
+#ifdef DEBUG_ALLOCS
+ printf("%d LEPTONICA_CALLOC %d,%d -> %p\n", event++, (int)numelm, (int)elemsize, ret);
+ fflush(stdout);
+#endif
+ return ret;
+}
+
+void *leptonica_realloc(void *ptr, size_t blocksize)
+{
+ void *ret = realloc(ptr, blocksize);
+#ifdef DEBUG_ALLOCS
+ printf("%d LEPTONICA_REALLOC %p,%d -> %p\n", event++, ptr, (int)blocksize, ret);
+ fflush(stdout);
+#endif
+ return ret;
+}
+
+void leptonica_free(void *ptr)
+{
+#ifdef DEBUG_ALLOCS
+ printf("%d LEPTONICA_FREE %p\n", event++, ptr);
+ fflush(stdout);
+#endif
+ free(ptr);
+}
+
+/* Convert from gs format bitmaps to leptonica format bitmaps. */
+static int convert2pix(l_uint32 *data, int w, int h, int raster)
+{
+ int x;
+ int w4 = ((w+3)>>2)-1;
+ int extra = raster - w >= 4;
+ l_uint32 mask = ~(0xFFFFFFFF<<((w&3)*8));
+
+ for (; h > 0; h--) {
+ l_uint32 v;
+ for (x = w4; x > 0; x--) {
+ v = *data;
+ *data++ = (v>>24) | ((v & 0xff0000)>>8) | ((v & 0xff00)<<8) | (v<<24);
+ }
+ v = *data;
+ *data++ = (v>>24) | ((v & 0xff0000)>>8) | ((v & 0xff00)<<8) | (v<<24) | mask;
+ if (extra)
+ *data++ = 0xFFFFFFFF;
+ }
+
+ return w + extra*4;
+}
+
+static gs_memory_t *leptonica_mem;
+
+static void *my_leptonica_malloc(size_t size)
+{
+ void *ret = gs_alloc_bytes(leptonica_mem, size, "leptonica_malloc");
+#ifdef DEBUG_ALLOCS
+ printf("%d MY_LEPTONICA_MALLOC(%p) %d -> %p\n", event++, leptonica_mem, (int)size, ret);
+ fflush(stdout);
+#endif
+ return ret;
+}
+
+static void my_leptonica_free(void *ptr)
+{
+#ifdef DEBUG_ALLOCS
+ printf("%d MY_LEPTONICA_FREE(%p) %p\n", event++, leptonica_mem, ptr);
+ fflush(stdout);
+#endif
+ gs_free_object(leptonica_mem, ptr, "leptonica_free");
+}
+
+static bool
+load_file(const char* filename, GenericVector<char>* data) {
+ bool result = false;
+ gp_file *fp = gp_fopen(leptonica_mem, filename, "rb");
+ if (fp == NULL)
+ return false;
+
+ gp_fseek(fp, 0, SEEK_END);
+ int size = (int)gp_ftell(fp);
+ gp_fseek(fp, 0, SEEK_SET);
+ // Trying to open a directory on Linux sets size to LONG_MAX. Catch it here.
+ if (size > 0 && size < LONG_MAX) {
+ // reserve an extra byte in case caller wants to append a '\0' character
+ data->reserve(size + 1);
+ data->resize_no_init(size);
+ result = static_cast<long>(gp_fread(&(*data)[0], 1, size, fp)) == size;
+ }
+ gp_fclose(fp);
+ return result;
+}
+
+static bool
+tess_file_reader(const char *fname, GenericVector<char> *out)
+{
+ const char *file = fname;
+ const char *s;
+ char text[PATH_MAX];
+ int code = 0;
+ stream *ps;
+ gx_io_device *iodev;
+
+ for (s = fname; *s; s++)
+ if (*s == '\\' || *s == '/')
+ file = s+1;
+
+ /* FIXME: Try loading 'file' from gs specific paths */
+ iodev = gs_findiodevice(leptonica_mem, (const byte *)"%rom", 4);
+ gs_snprintf(text, sizeof(text), "Resource/Tesseract/%s", file);
+ if (iodev) {
+ long size;
+ long i;
+ byte *copy;
+ /* We cannot call iodev->procs.file_status here to get the
+ * length, because C and C++ differ in their definition of
+ * stat on linux. */
+ size = (long)romfs_file_len(leptonica_mem, text);
+ if (size >= 0) {
+ out->reserve(size + 1);
+ out->resize_no_init(size);
+ code = iodev->procs.open_file(iodev, text, strlen(text), "rb", &ps, leptonica_mem);
+ if (code < 0)
+ return code;
+ copy = (byte *)&(*out)[0];
+ i = 0;
+ while (i < size) {
+ long a, n = size - i;
+ s_process_read_buf(ps);
+ a = sbufavailable(ps);
+ if (n > a)
+ n = a;
+ memcpy(copy+i, sbufptr(ps), a);
+ i += a;
+ sbufskip(ps, a);
+ }
+ sclose(ps);
+ gs_free_object(leptonica_mem, ps, "stream(tess_file_reader)");
+ return true;
+ }
+ }
+
+ /* Fall back to gp_file access, first under Resource/Tesseract */
+ if (load_file(text, out))
+ return true;
+
+ /* Then under TESSDATA */
+ return load_file(fname, out);
+}
+
+int
+ocr_init_api(gs_memory_t *mem, const char *language, void **state)
+{
+ tesseract::TessBaseAPI *api;
+
+ leptonica_mem = mem->non_gc_memory;
+ setPixMemoryManager(my_leptonica_malloc, my_leptonica_free);
+ api = new tesseract::TessBaseAPI();
+
+ *state = NULL;
+
+ if (api == NULL) {
+ leptonica_mem = NULL;
+ setPixMemoryManager(malloc, free);
+ return_error(gs_error_VMerror);
+ }
+
+ // Initialize tesseract-ocr with English, without specifying tessdata path
+ if (api->Init(NULL, 0, /* data, data_size */
+ language,
+ tesseract::OcrEngineMode::OEM_DEFAULT,
+ NULL, 0, /* configs, configs_size */
+ NULL, NULL, /* vars_vec */
+ false, /* set_only_non_debug_params */
+ &tess_file_reader)) {
+ delete api;
+ leptonica_mem = NULL;
+ setPixMemoryManager(malloc, free);
+ return_error(gs_error_unknownerror);
+ }
+
+ *state = (void *)api;
+
+ return 0;
+}
+
+void
+ocr_fin_api(gs_memory_t *mem, void *api_)
+{
+ tesseract::TessBaseAPI *api = (tesseract::TessBaseAPI *)api_;
+
+ if (api == NULL)
+ return;
+
+ api->End();
+ delete api;
+ leptonica_mem = NULL;
+ setPixMemoryManager(malloc, free);
+}
+
+static Pix *
+ocr_set_image(tesseract::TessBaseAPI *api,
+ int w, int h, void *data, int xres, int yres)
+{
+ Pix *image = pixCreateHeader(w, h, 8);
+
+ if (image == NULL)
+ return NULL;
+ pixSetData(image, (l_uint32 *)data);
+ pixSetPadBits(image, 1);
+ pixSetXRes(image, xres);
+ pixSetYRes(image, yres);
+ api->SetImage(image);
+ //pixWrite("test.pnm", image, IFF_PNM);
+
+ return image;
+}
+
+static void
+ocr_clear_image(Pix *image)
+{
+ pixSetData(image, NULL);
+ pixDestroy(&image);
+}
+
+static int
+do_ocr_image(gs_memory_t *mem,
+ int w, int h, int bpp, int raster,
+ int xres, int yres, void *data, int restore,
+ int hocr, int pagecount,
+ const char *language,
+ char **out)
+{
+ char *outText;
+ tesseract::TessBaseAPI *api;
+ int code;
+ Pix *image;
+
+ *out = NULL;
+
+ if (language == NULL || *language == 0)
+ language = "eng";
+ code = ocr_init_api(mem, language, (void **)&api);
+ if (code < 0)
+ return code;
+
+ if (bpp == 8)
+ w = convert2pix((l_uint32 *)data, w, h, raster);
+
+ image = ocr_set_image(api, w, h, data, xres, yres);
+ if (image == NULL) {
+ if (restore && bpp == 8)
+ convert2pix((l_uint32 *)data, w, h, raster);
+ ocr_fin_api(mem, api);
+ return_error(gs_error_VMerror);
+ }
+
+ // Get OCR result
+ //pixWrite("test.pnm", image, IFF_PNM);
+ if (hocr) {
+ api->SetVariable("hocr_font_info", "true");
+ api->SetVariable("hocr_char_boxes", "true");
+ outText = api->GetHOCRText(pagecount);
+ }
+ else
+ outText = api->GetUTF8Text();
+
+ ocr_clear_image(image);
+
+ /* Convert the image back. */
+ if (restore && bpp == 8)
+ w = convert2pix((l_uint32 *)data, w, h, raster);
+
+ // Copy the results into a gs controlled block.
+ if (outText)
+ {
+ size_t len = strlen(outText)+1;
+ *out = (char *)(void *)gs_alloc_bytes(mem, len, "ocr_to_utf8");
+ if (*out)
+ memcpy(*out, outText, len);
+ }
+
+ delete [] outText;
+
+ // Destroy used object and release memory
+ ocr_fin_api(mem, api);
+
+ return 0;
+}
+
+int ocr_image_to_hocr(gs_memory_t *mem,
+ int w, int h, int bpp, int raster,
+ int xres, int yres, void *data, int restore,
+ int pagecount, const char *language, char **out)
+{
+ return do_ocr_image(mem, w, h, bpp, raster, xres, yres, data,
+ restore, 1, pagecount, language, out);
+}
+
+int ocr_image_to_utf8(gs_memory_t *mem,
+ int w, int h, int bpp, int raster,
+ int xres, int yres, void *data, int restore,
+ const char *language, char **out)
+{
+ return do_ocr_image(mem, w, h, bpp, raster, xres, yres, data,
+ restore, 0, 0, language, out);
+}
+
+int
+ocr_recognise(void *api_, int w, int h, void *data,
+ int xres, int yres,
+ int (*callback)(void *, const char *, const int *, const int *, const int *, int),
+ void *arg)
+{
+ tesseract::TessBaseAPI *api = (tesseract::TessBaseAPI *)api_;
+ Pix *image;
+ int code;
+ int word_bbox[4];
+ int char_bbox[4];
+ int line_bbox[4];
+ bool bold, italic, underlined, monospace, serif, smallcaps;
+ int pointsize, font_id;
+ const char* font_name;
+
+ if (api == NULL)
+ return 0;
+
+ image = ocr_set_image(api, w, h, data, xres, yres);
+ if (image == NULL)
+ return_error(gs_error_VMerror);
+
+ code = api->Recognize(NULL);
+ if (code >= 0) {
+ /* Bingo! */
+ tesseract::ResultIterator *res_it = api->GetIterator();
+
+ while (!res_it->Empty(tesseract::RIL_BLOCK)) {
+ if (res_it->Empty(tesseract::RIL_WORD)) {
+ res_it->Next(tesseract::RIL_WORD);
+ continue;
+ }
+
+ res_it->BoundingBox(tesseract::RIL_TEXTLINE,
+ line_bbox, line_bbox+1,
+ line_bbox+2, line_bbox+3);
+ res_it->BoundingBox(tesseract::RIL_WORD,
+ word_bbox, word_bbox+1,
+ word_bbox+2, word_bbox+3);
+ font_name = res_it->WordFontAttributes(&bold,
+ &italic,
+ &underlined,
+ &monospace,
+ &serif,
+ &smallcaps,
+ &pointsize,
+ &font_id);
+ do {
+ const char *graph = res_it->GetUTF8Text(tesseract::RIL_SYMBOL);
+ if (graph && graph[0] != 0) {
+ res_it->BoundingBox(tesseract::RIL_SYMBOL,
+ char_bbox, char_bbox+1,
+ char_bbox+2, char_bbox+3);
+ code = callback(arg, graph, line_bbox, word_bbox, char_bbox, pointsize);
+ if (code < 0)
+ {
+ delete res_it;
+ return code;
+ }
+ }
+ res_it->Next(tesseract::RIL_SYMBOL);
+ } while (!res_it->Empty(tesseract::RIL_BLOCK) &&
+ !res_it->IsAtBeginningOf(tesseract::RIL_WORD));
+ }
+ delete res_it;
+ code = code;
+ }
+
+ ocr_clear_image(image);
+
+ return code;
+}
+
+};
+
+/* Currently tesseract is the only C++ lib we have.
+ * We may need to revisit this if this changes.
+ */
+void *operator new(size_t size)
+{
+ return leptonica_malloc(size);
+}
+
+void operator_delete(void *ptr)
+{
+ leptonica_free(ptr);
+}
+
+void *operator new[](size_t size)
+{
+ return leptonica_malloc(size);
+}
+
+void operator delete[](void *ptr)
+{
+ leptonica_free(ptr);
+}
diff --git a/base/tessocr.h b/base/tessocr.h
new file mode 100644
index 00000000..c5e7967b
--- /dev/null
+++ b/base/tessocr.h
@@ -0,0 +1,45 @@
+/* Copyright (C) 2020 Artifex Software, Inc.
+ 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.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+
+/* Simple veneer for tesseract */
+
+#ifndef tessocr_h_INCLUDED
+# define tessocr_h_INCLUDED
+
+#include "gsmemory.h"
+
+int ocr_image_to_utf8(gs_memory_t *mem,
+ int w, int h, int bpp, int raster,
+ int xres, int yres,
+ void *data, int restore_data,
+ const char *language, char **out);
+
+int ocr_image_to_hocr(gs_memory_t *mem,
+ int w, int h, int bpp, int raster,
+ int xres, int yres, void *data, int restore,
+ int pagecount, const char *language, char **out);
+
+int ocr_init_api(gs_memory_t *mem, const char *language, void **state);
+
+void ocr_fin_api(gs_memory_t *mem, void *api_);
+
+int ocr_recognise(void *api_, int w, int h, void *data,
+ int xres, int yres,
+ int (*callback)(void *, const char *, const int *, const int *, const int *, int),
+ void *arg);
+
+#endif
+
diff --git a/base/tiff.mak b/base/tiff.mak
index dec0e65e..8345d818 100644
--- a/base/tiff.mak
+++ b/base/tiff.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -247,114 +247,114 @@ $(GLSRC)gstiffio.h:$(GLSRC)gxclthrd.h
$(GLSRC)gstiffio.h:$(GLSRC)gxclpage.h
$(GLSRC)gstiffio.h:$(GLSRC)gxclist.h
$(GLSRC)gstiffio.h:$(GLSRC)gxgstate.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxline.h
$(GLSRC)gstiffio.h:$(GLSRC)gstrans.h
+$(GLSRC)gstiffio.h:$(GLSRC)gdevp14.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxline.h
$(GLSRC)gstiffio.h:$(GLSRC)gsht1.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxcomp.h
$(GLSRC)gstiffio.h:$(GLSRC)math_.h
-$(GLSRC)gstiffio.h:$(GLSRC)gdevp14.h
$(GLSRC)gstiffio.h:$(GLSRC)gxcolor2.h
$(GLSRC)gstiffio.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxdevmem.h
$(GLSRC)gstiffio.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsequivc.h
$(GLSRC)gstiffio.h:$(GLSRC)gx.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxblend.h
$(GLSRC)gstiffio.h:$(GLSRC)gxclipsr.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxcomp.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxdcolor.h
$(GLSRC)gstiffio.h:$(GLSRC)gdebug.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gstiffio.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxdcolor.h
$(GLSRC)gstiffio.h:$(GLSRC)gxband.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxblend.h
$(GLSRC)gstiffio.h:$(GLSRC)gscolor2.h
-$(GLSRC)gstiffio.h:$(GLSRC)gscindex.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxmatrix.h
$(GLSRC)gstiffio.h:$(GLSRC)gxdevice.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsht.h
$(GLSRC)gstiffio.h:$(GLSRC)gxcpath.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsht.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsequivc.h
$(GLSRC)gstiffio.h:$(GLSRC)gxdevcli.h
$(GLSRC)gstiffio.h:$(GLSRC)gxpcache.h
+$(GLSRC)gstiffio.h:$(GLSRC)gscindex.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxcmap.h
$(GLSRC)gstiffio.h:$(GLSRC)gsptype1.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxtext.h
$(GLSRC)gstiffio.h:$(GLSRC)gscie.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxtext.h
$(GLSRC)gstiffio.h:$(GLSRC)gstext.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxstate.h
$(GLSRC)gstiffio.h:$(GLSRC)gsnamecl.h
$(GLSRC)gstiffio.h:$(GLSRC)gstparam.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxstate.h
$(GLSRC)gstiffio.h:$(GLSRC)gspcolor.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxfcache.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxcspace.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsropt.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsfunc.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxfmap.h
$(GLSRC)gstiffio.h:$(GLSRC)gsmalloc.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxrplane.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsfunc.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxcspace.h
$(GLSRC)gstiffio.h:$(GLSRC)gxctable.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsuid.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxcmap.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxrplane.h
+$(GLSRC)gstiffio.h:$(GLSRC)gscsel.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxfcache.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsfont.h
$(GLSRC)gstiffio.h:$(GLSRC)gsimage.h
$(GLSRC)gstiffio.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxdda.h
$(GLSRC)gstiffio.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsfont.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxfmap.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxbcache.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsropt.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxdda.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxpath.h
$(GLSRC)gstiffio.h:$(GLSRC)gxiclass.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxftype.h
$(GLSRC)gstiffio.h:$(GLSRC)gxfrac.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxtmap.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxftype.h
$(GLSRC)gstiffio.h:$(GLSRC)gscms.h
-$(GLSRC)gstiffio.h:$(GLSRC)gscspace.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxpath.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxbcache.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsdevice.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxarith.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxstdio.h
-$(GLSRC)gstiffio.h:$(GLSRC)gspenum.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxhttile.h
$(GLSRC)gstiffio.h:$(GLSRC)gsrect.h
$(GLSRC)gstiffio.h:$(GLSRC)gslparam.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsdevice.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gstiffio.h:$(GLSRC)gscpm.h
+$(GLSRC)gstiffio.h:$(GLSRC)gscspace.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxstdio.h
$(GLSRC)gstiffio.h:$(GLSRC)gsxfont.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxclio.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsiparam.h
$(GLSRC)gstiffio.h:$(GLSRC)gsdsrc.h
$(GLSRC)gstiffio.h:$(GLSRC)gsio.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gstiffio.h:$(GLSRC)gscpm.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsiparam.h
$(GLSRC)gstiffio.h:$(GLSRC)gxfixed.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsrefct.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxclio.h
+$(GLSRC)gstiffio.h:$(GLSRC)gscompt.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstiffio.h:$(GLSRC)gspenum.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxhttile.h
$(GLSRC)gstiffio.h:$(GLSRC)gsparam.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsrefct.h
$(GLSRC)gstiffio.h:$(GLSRC)gp.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsccolor.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsstruct.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxsync.h
+$(GLSRC)gstiffio.h:$(GLSRC)memento.h
+$(GLSRC)gstiffio.h:$(GLSRC)memory_.h
$(GLSRC)gstiffio.h:$(GLSRC)gsutil.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsuid.h
$(GLSRC)gstiffio.h:$(GLSRC)gsstrl.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsstruct.h
$(GLSRC)gstiffio.h:$(GLSRC)gdbflags.h
-$(GLSRC)gstiffio.h:$(GLSRC)srdline.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxsync.h
$(GLSRC)gstiffio.h:$(GLSRC)gserrors.h
-$(GLSRC)gstiffio.h:$(GLSRC)scommon.h
-$(GLSRC)gstiffio.h:$(GLSRC)memento.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxbitmap.h
$(GLSRC)gstiffio.h:$(GLSRC)vmsmath.h
-$(GLSRC)gstiffio.h:$(GLSRC)gscsel.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gstiffio.h:$(GLSRC)srdline.h
+$(GLSRC)gstiffio.h:$(GLSRC)scommon.h
$(GLSRC)gstiffio.h:$(GLSRC)gsfname.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsstype.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsccolor.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxarith.h
$(GLSRC)gstiffio.h:$(GLSRC)stat_.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxtmap.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsmemory.h
$(GLSRC)gstiffio.h:$(GLSRC)gpsync.h
-$(GLSRC)gstiffio.h:$(GLSRC)memory_.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsstype.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsmemory.h
$(GLSRC)gstiffio.h:$(GLSRC)gpgetenv.h
-$(GLSRC)gstiffio.h:$(GLSRC)gslibctx.h
$(GLSRC)gstiffio.h:$(GLSRC)gscdefs.h
-$(GLSRC)gstiffio.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gstiffio.h:$(GLSRC)stdio_.h
-$(GLSRC)gstiffio.h:$(GLSRC)gscompt.h
+$(GLSRC)gstiffio.h:$(GLSRC)gslibctx.h
$(GLSRC)gstiffio.h:$(GLSRC)gxcindex.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstiffio.h:$(GLSRC)stdio_.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsccode.h
$(GLSRC)gstiffio.h:$(GLSRC)stdint_.h
$(GLSRC)gstiffio.h:$(GLSRC)gssprintf.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsccode.h
-$(GLSRC)gstiffio.h:$(GLSRC)std.h
$(GLSRC)gstiffio.h:$(GLSRC)gstypes.h
+$(GLSRC)gstiffio.h:$(GLSRC)std.h
$(GLSRC)gstiffio.h:$(GLSRC)stdpre.h
$(GLSRC)gstiffio.h:$(GLGEN)arch.h
+$(GLSRC)gstiffio.h:$(GLSRC)gs_dll_call.h
diff --git a/base/time_.h b/base/time_.h
index 48052c57..25466c5e 100644
--- a/base/time_.h
+++ b/base/time_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttcalc.c b/base/ttcalc.c
index 3207809a..a8f805a1 100644
--- a/base/ttcalc.c
+++ b/base/ttcalc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttcalc.h b/base/ttcalc.h
index 113f2536..f70b983f 100644
--- a/base/ttcalc.h
+++ b/base/ttcalc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttcommon.h b/base/ttcommon.h
index 81c0ce34..7bef167a 100644
--- a/base/ttcommon.h
+++ b/base/ttcommon.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttconf.h b/base/ttconf.h
index 07638777..7dcd60aa 100644
--- a/base/ttconf.h
+++ b/base/ttconf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttconfig.h b/base/ttconfig.h
index 9d0df5de..44744097 100644
--- a/base/ttconfig.h
+++ b/base/ttconfig.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttfinp.c b/base/ttfinp.c
index 0449f279..5052bb92 100644
--- a/base/ttfinp.c
+++ b/base/ttfinp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttfinp.h b/base/ttfinp.h
index c34ab20a..0a1a5e9e 100644
--- a/base/ttfinp.h
+++ b/base/ttfinp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttfmain.c b/base/ttfmain.c
index c6210c13..2fbcacc1 100644
--- a/base/ttfmain.c
+++ b/base/ttfmain.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -493,7 +493,6 @@ static FontError ttfOutliner__BuildGlyphOutlineAux(ttfOutliner *self, int glyphI
short count;
unsigned int i;
unsigned short nAdvance;
- unsigned int nNextGlyphPtr = 0;
unsigned int nPosBeg;
TExecution_Context *exec = pFont->exec;
TGlyph_Zone *pts = &exec->pts;
@@ -605,11 +604,10 @@ retry:
e->flags = flags;
nUsage++;
} while (flags & MORE_COMPONENTS);
- /* Some fonts have bad WE_HAVE_INSTRUCTIONS, so use nNextGlyphPtr : */
if (r->Error(r))
goto errex;
nPos = r->Tell(r);
- n_ins = ((!r->Eof(r) && (bHaveInstructions || nPos < nNextGlyphPtr)) ? ttfReader__UShort(r) : 0);
+ n_ins = ((!r->Eof(r) && (bHaveInstructions)) ? ttfReader__UShort(r) : 0);
nPos = r->Tell(r);
r->ReleaseGlyph(r, glyphIndex);
glyph = NULL;
@@ -722,7 +720,7 @@ retry:
Clear_CodeRange(exec, TT_CodeRange_Glyph);
}
} else if (gOutline->contourCount > 0) {
- uint16 i;
+ int i;
bool bInsOK;
byte *onCurve, *stop, flag;
short *endPoints;
@@ -796,7 +794,7 @@ retry:
MoveGlyphOutline(pts, 0, gOutline, m_orig);
self->nContoursTotal += gOutline->contourCount;
self->nPointsTotal += nPoints;
- if (execute_bytecode && !skip_instructions &&
+ if (execute_bytecode && !skip_instructions &&
!r->Error(r) && n_ins && bInsOK && !(pFont->inst->GS.instruct_control & 1)) {
TGlyph_Zone *pts = &exec->pts;
int k;
@@ -848,7 +846,6 @@ ex:;
if (error == fBadInstruction && execute_bytecode) {
/* reset a load of stuff so we can try again without hinting */
- nNextGlyphPtr = 0;
exec = pFont->exec;
pts = &exec->pts;
usage = tti->usage + tti->usage_top;
diff --git a/base/ttfmemd.c b/base/ttfmemd.c
index 2999d55e..04e63075 100644
--- a/base/ttfmemd.c
+++ b/base/ttfmemd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttfmemd.h b/base/ttfmemd.h
index 69cc95eb..bde57a47 100644
--- a/base/ttfmemd.h
+++ b/base/ttfmemd.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttfoutl.h b/base/ttfoutl.h
index b1a1e6ff..507b2720 100644
--- a/base/ttfoutl.h
+++ b/base/ttfoutl.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttfsfnt.h b/base/ttfsfnt.h
index 41fdb5ce..78c02646 100644
--- a/base/ttfsfnt.h
+++ b/base/ttfsfnt.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttinterp.c b/base/ttinterp.c
index cf2fd4b9..125dc582 100644
--- a/base/ttinterp.c
+++ b/base/ttinterp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttinterp.h b/base/ttinterp.h
index e4d8242e..c1c8efaf 100644
--- a/base/ttinterp.h
+++ b/base/ttinterp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttload.c b/base/ttload.c
index c7b8f278..42c71973 100644
--- a/base/ttload.c
+++ b/base/ttload.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttload.h b/base/ttload.h
index 057d4eee..76799b32 100644
--- a/base/ttload.h
+++ b/base/ttload.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttmisc.h b/base/ttmisc.h
index b857e306..c26450d9 100644
--- a/base/ttmisc.h
+++ b/base/ttmisc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttobjs.c b/base/ttobjs.c
index 523489ae..e01b99b1 100644
--- a/base/ttobjs.c
+++ b/base/ttobjs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ttobjs.h b/base/ttobjs.h
index f19707bc..fa7dd09f 100644
--- a/base/ttobjs.h
+++ b/base/ttobjs.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/tttables.h b/base/tttables.h
index b2ee990f..2ceeb2f6 100644
--- a/base/tttables.h
+++ b/base/tttables.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/tttype.h b/base/tttype.h
index 7ee4334d..80c5036e 100644
--- a/base/tttype.h
+++ b/base/tttype.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/tttypes.h b/base/tttypes.h
index 05a9e751..aa26d20e 100644
--- a/base/tttypes.h
+++ b/base/tttypes.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/ugcclib.mak b/base/ugcclib.mak
index e2660682..423903bb 100644
--- a/base/ugcclib.mak
+++ b/base/ugcclib.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/unistd_.h b/base/unistd_.h
index 71e2ecc3..a1bdbc0a 100644
--- a/base/unistd_.h
+++ b/base/unistd_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/unix-aux.mak b/base/unix-aux.mak
index 187308de..3532091e 100644
--- a/base/unix-aux.mak
+++ b/base/unix-aux.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/unix-dll.mak b/base/unix-dll.mak
index 0f9fd94c..64b7ca09 100644
--- a/base/unix-dll.mak
+++ b/base/unix-dll.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/unix-end.mak b/base/unix-end.mak
index 40980ddb..011ed2d4 100644
--- a/base/unix-end.mak
+++ b/base/unix-end.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/unix-gcc.mak b/base/unix-gcc.mak
index c27d0e3b..39685d2a 100644
--- a/base/unix-gcc.mak
+++ b/base/unix-gcc.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -560,7 +560,7 @@ GS_DEV_DEFAULT="x11alpha bbox"
DISPLAY_DEV=$(DD)bbox.dev
# Choose the device(s) to include. See devs.mak for details,
-# devs.mak and contrib.mak for the list of available devices.
+# devs.mak and dcontrib.mak for the list of available devices.
# DEVICE_DEVS=$(DISPLAY_DEV) $(DD)x11.dev $(DD)x11_.dev $(DD)x11alpha.dev $(DD)x11alt_.dev $(DD)x11cmyk.dev $(DD)x11cmyk2.dev $(DD)x11cmyk4.dev $(DD)x11cmyk8.dev $(DD)x11gray2.dev $(DD)x11gray4.dev $(DD)x11mono.dev $(DD)x11rg16x.dev $(DD)x11rg32x.dev
DEVICE_DEVS=$(DISPLAY_DEV)
DEVICE_DEVS1=$(DD)bit.dev $(DD)bitcmyk.dev $(DD)bitrgb.dev $(DD)bitrgbtags.dev $(DD)bmp16.dev $(DD)bmp16m.dev $(DD)bmp256.dev $(DD)bmp32b.dev $(DD)bmpgray.dev $(DD)bmpmono.dev $(DD)bmpsep1.dev $(DD)bmpsep8.dev $(DD)ccr.dev $(DD)cif.dev $(DD)devicen.dev $(DD)eps2write.dev $(DD)fpng.dev $(DD)inferno.dev $(DD)ink_cov.dev $(DD)inkcov.dev $(DD)jpeg.dev $(DD)jpegcmyk.dev $(DD)jpeggray.dev $(DD)mgr4.dev $(DD)mgr8.dev $(DD)mgrgray2.dev $(DD)mgrgray4.dev $(DD)mgrgray8.dev $(DD)mgrmono.dev $(DD)miff24.dev $(DD)pam.dev $(DD)pamcmyk32.dev $(DD)pamcmyk4.dev $(DD)pbm.dev $(DD)pbmraw.dev $(DD)pcx16.dev $(DD)pcx24b.dev $(DD)pcx256.dev $(DD)pcxcmyk.dev $(DD)pcxgray.dev $(DD)pcxmono.dev $(DD)pdfwrite.dev $(DD)pgm.dev $(DD)pgmraw.dev $(DD)pgnm.dev $(DD)pgnmraw.dev $(DD)pkm.dev $(DD)pkmraw.dev $(DD)pksm.dev $(DD)pksmraw.dev $(DD)plan.dev $(DD)plan9bm.dev $(DD)planc.dev $(DD)plang.dev $(DD)plank.dev $(DD)planm.dev $(DD)plank.dev $(DD)plib.dev $(DD)plibc.dev $(DD)plibg.dev $(DD)plibk.dev $(DD)plibm.dev $(DD)pnm.dev $(DD)pnmraw.dev $(DD)ppm.dev $(DD)ppmraw.dev $(DD)ps2write.dev $(DD)psdcmyk.dev $(DD)psdcmykog.dev $(DD)psdf.dev $(DD)psdrgb.dev $(DD)spotcmyk.dev $(DD)txtwrite.dev $(DD)xcf.dev $(DD)psdcmyk16.dev $(DD)psdrgb16.dev
@@ -667,6 +667,7 @@ include $(GLSRCDIR)/ldf_jb2.mak
include $(GLSRCDIR)/lwf_jp2.mak
include $(GLSRCDIR)/openjpeg.mak
include $(GLSRCDIR)/cal.mak
+include $(GLSRCDIR)/ocr.mak
include $(GLSRCDIR)/jpegxr.mak
include $(GLSRCDIR)/expat.mak
@@ -676,7 +677,7 @@ include $(GLSRCDIR)/ijs.mak
include $(DEVSRCDIR)/devs.mak
-include $(DEVSRCDIR)/contrib.mak
+include $(DEVSRCDIR)/dcontrib.mak
include $(GLSRCDIR)/unix-aux.mak
include $(GLSRCDIR)/unixlink.mak
include $(GLSRCDIR)/unix-dll.mak
diff --git a/base/unixansi.mak b/base/unixansi.mak
index 283552ba..093e617e 100644
--- a/base/unixansi.mak
+++ b/base/unixansi.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/unixhead.mak b/base/unixhead.mak
index 0ede8ec4..adb430f1 100644
--- a/base/unixhead.mak
+++ b/base/unixhead.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/unixinst.mak b/base/unixinst.mak
index 099d9f2b..74bff55d 100644
--- a/base/unixinst.mak
+++ b/base/unixinst.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/unixlink.mak b/base/unixlink.mak
index 23d730f4..3f11e3a3 100644
--- a/base/unixlink.mak
+++ b/base/unixlink.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/valgrind.h b/base/valgrind.h
index 03b72656..387e4855 100644
--- a/base/valgrind.h
+++ b/base/valgrind.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/version.mak b/base/version.mak
index a5694e28..23098685 100644
--- a/base/version.mak
+++ b/base/version.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -12,14 +12,13 @@
#
# Makefile fragment containing the current revision identification.
-# Major and minor version numbers.
-# MINOR0 is different from MINOR only if MINOR is a single digit.
+# Major, minor and patch version numbers.
GS_VERSION_MAJOR=9
-GS_VERSION_MINOR=52
-GS_VERSION_MINOR0=52
+GS_VERSION_MINOR=53
+GS_VERSION_PATCH=0
# Revision date: year x 10000 + month x 100 + day.
-GS_REVISIONDATE=20200319
+GS_REVISIONDATE=20200910
# Derived values
-GS_VERSION=$(GS_VERSION_MAJOR)$(GS_VERSION_MINOR0)
-GS_DOT_VERSION=$(GS_VERSION_MAJOR).$(GS_VERSION_MINOR0)
+GS_VERSION=$(GS_VERSION_MAJOR)$(GS_VERSION_MINOR)$(GS_VERSION_PATCH)
+GS_DOT_VERSION=$(GS_VERSION_MAJOR).$(GS_VERSION_MINOR).$(GS_VERSION_PATCH)
GS_REVISION=$(GS_VERSION)
diff --git a/base/vms_x_fix.h b/base/vms_x_fix.h
index b8aa4c44..2cacff54 100644
--- a/base/vms_x_fix.h
+++ b/base/vms_x_fix.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/vmsmath.h b/base/vmsmath.h
index 12117ce5..a8744d49 100644
--- a/base/vmsmath.h
+++ b/base/vmsmath.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/windows_.h b/base/windows_.h
index 61009b28..c1f25578 100644
--- a/base/windows_.h
+++ b/base/windows_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/winlib.mak b/base/winlib.mak
index 7767b633..ece84f2d 100644
--- a/base/winlib.mak
+++ b/base/winlib.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -135,6 +135,12 @@ BEGINFILES=$(GLGENDIR)\ccf32.tr\
#!include $(COMMONDIR)/pcdefs.mak
#!include $(COMMONDIR)/generic.mak
!include $(GLSRCDIR)\gs.mak
+
+!if "$(OCR_VERSION)"=="1"
+!include $(GLSRCDIR)\leptonica.mak
+!include $(GLSRCDIR)\tesseract.mak
+!endif
+
!include $(GLSRCDIR)\lib.mak
!include $(GLSRCDIR)\freetype.mak
!if "$(UFST_BRIDGE)"=="1"
@@ -150,6 +156,7 @@ BEGINFILES=$(GLGENDIR)\ccf32.tr\
!include $(GLSRCDIR)\lwf_jp2.mak
!include $(GLSRCDIR)\openjpeg.mak
!include $(GLSRCDIR)\cal.mak
+!include $(GLSRCDIR)\ocr.mak
!include $(GLSRCDIR)\expat.mak
!include $(GLSRCDIR)\jpegxr.mak
@@ -159,7 +166,7 @@ BEGINFILES=$(GLGENDIR)\ccf32.tr\
!include $(GLSRCDIR)\lcups.mak
!include $(GLSRCDIR)\lcupsi.mak
!include $(DEVSRCDIR)\devs.mak
-!include $(DEVSRCDIR)\contrib.mak
+!include $(DEVSRCDIR)\dcontrib.mak
!include $(CONTRIBDIR)\contrib.mak
# Define the compilation rule for Windows devices.
@@ -201,7 +208,7 @@ $(GLOBJ)gp_mswin.$(OBJ): $(GLSRC)gp_mswin.c $(AK) $(gp_mswin_h) \
$(GLOBJ)gp_winfs.$(OBJ): $(GLSRC)gp_winfs.c $(AK) $(gp_mswin_h) \
$(memory__h) $(stdio__h) $(windows__h) $(gp_h) $(gserrors_h) \
- $(WINLIB_MAK)
+ $(gserrors_h) $(WINLIB_MAK)
$(GLCCWIN) $(GLO_)gp_winfs.$(OBJ) $(C_) $(GLSRC)gp_winfs.c
$(AUX)gp_winfs.$(OBJ): $(GLSRC)gp_winfs.c $(AK) $(gp_mswin_h) \
diff --git a/base/winplat.mak b/base/winplat.mak
index c8fb509f..4c42a53b 100644
--- a/base/winplat.mak
+++ b/base/winplat.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/base/winrtsup.cpp b/base/winrtsup.cpp
index 7dfacf83..c5104e52 100644
--- a/base/winrtsup.cpp
+++ b/base/winrtsup.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/winrtsup.h b/base/winrtsup.h
index d4c1dec3..80a3169f 100644
--- a/base/winrtsup.h
+++ b/base/winrtsup.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/wrfont.c b/base/wrfont.c
index e077e881..d117e75a 100644
--- a/base/wrfont.c
+++ b/base/wrfont.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/wrfont.h b/base/wrfont.h
index 02d779ae..d8c2a06c 100644
--- a/base/wrfont.h
+++ b/base/wrfont.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/write_t1.c b/base/write_t1.c
index 224429ce..ae0d6eea 100644
--- a/base/write_t1.c
+++ b/base/write_t1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -28,39 +28,49 @@ Public structures and functions in this file are prefixed with FF_ because they
the FAPI FreeType implementation.
*/
-static void
+static int
write_word_entry(gs_fapi_font * a_fapi_font, WRF_output * a_output,
const char *a_name, int a_index, int a_divisor)
{
short x;
+ int code;
WRF_wbyte(a_fapi_font->memory, a_output, '/');
WRF_wstring(a_fapi_font->memory, a_output, a_name);
WRF_wbyte(a_fapi_font->memory, a_output, ' ');
+
/* Get the value and convert it from unsigned to signed by assigning it to a short. */
- x = a_fapi_font->get_word(a_fapi_font, a_index, 0);
+ code = a_fapi_font->get_word(a_fapi_font, a_index, 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
/* Divide by the divisor to bring it back to font units. */
x = (short)(x / a_divisor);
WRF_wint(a_fapi_font->memory, a_output, x);
WRF_wstring(a_fapi_font->memory, a_output, " def\n");
+
+ return 0;
}
-static void
+static int
write_array_entry_with_count(gs_fapi_font * a_fapi_font,
WRF_output * a_output, const char *a_name,
int a_index, int a_count, int a_divisor)
{
- int i;
+ int i, code;;
if (a_count <= 0)
- return;
+ return 0;
WRF_wbyte(a_fapi_font->memory, a_output, '/');
WRF_wstring(a_fapi_font->memory, a_output, a_name);
WRF_wstring(a_fapi_font->memory, a_output, " [");
for (i = 0; i < a_count; i++) {
/* Get the value and convert it from unsigned to signed by assigning it to a short. */
- short x = a_fapi_font->get_word(a_fapi_font, a_index, i);
+ short x;
+ code = a_fapi_font->get_word(a_fapi_font, a_index, i, (unsigned short *)&x);
+ if (code < 0)
+ return code;
/* Divide by the divisor to bring it back to font units. */
x = (short)(x / a_divisor);
@@ -68,135 +78,183 @@ write_array_entry_with_count(gs_fapi_font * a_fapi_font,
WRF_wbyte(a_fapi_font->memory, a_output, (byte) (i == a_count - 1 ? ']' : ' '));
}
WRF_wstring(a_fapi_font->memory, a_output, " def\n");
+
+ return 0;
}
-static void
+static int
write_array_entry(gs_fapi_font * a_fapi_font, WRF_output * a_output,
const char *a_name, int a_index, int a_divisor)
{
/* NOTE that the feature index must be preceded by the count index for this to work. */
- int count = a_fapi_font->get_word(a_fapi_font, a_index - 1, 0);
+ unsigned short count;
+ int code = a_fapi_font->get_word(a_fapi_font, a_index - 1, 0, &count);
+
+ if (code < 0)
+ return code;
- write_array_entry_with_count(a_fapi_font, a_output, a_name, a_index,
+ return write_array_entry_with_count(a_fapi_font, a_output, a_name, a_index,
count, a_divisor);
}
-static void
+static int
write_subrs(gs_fapi_font * a_fapi_font, WRF_output * a_output, int raw)
{
int i;
- int count =
- a_fapi_font->get_word(a_fapi_font, gs_fapi_font_feature_Subrs_count,
- 0);
- if (count <= 0)
- return;
-
- WRF_wstring(a_fapi_font->memory, a_output, "/Subrs ");
- WRF_wint(a_fapi_font->memory, a_output, count);
- WRF_wstring(a_fapi_font->memory, a_output, " array\n");
-
- for (i = 0; i < count; i++) {
- long length;
- long buffer_size;
-
- if (raw)
- length = a_fapi_font->get_raw_subr(a_fapi_font, i, 0, 0);
- else
- length = a_fapi_font->get_subr(a_fapi_font, i, 0, 0);
- WRF_wstring(a_fapi_font->memory, a_output, "dup ");
- WRF_wint(a_fapi_font->memory, a_output, i);
- WRF_wbyte(a_fapi_font->memory, a_output, ' ');
- WRF_wint(a_fapi_font->memory, a_output, length);
- WRF_wstring(a_fapi_font->memory, a_output, " RD ");
-
- /* Get the subroutine into the buffer and encrypt it in place. */
- buffer_size = a_output->m_limit - a_output->m_count;
- if (buffer_size >= length) {
- if (raw)
- a_fapi_font->get_raw_subr(a_fapi_font, i, a_output->m_pos,
- (ushort) length);
- else
- a_fapi_font->get_subr(a_fapi_font, i, a_output->m_pos,
- (ushort) length);
- WRF_wtext(a_fapi_font->memory, a_output, a_output->m_pos, length);
- } else
- a_output->m_count += length;
+ unsigned short count;
+ int code = a_fapi_font->get_word(a_fapi_font, gs_fapi_font_feature_Subrs_count,
+ 0, &count);
+ if (code < 0)
+ return code;
- WRF_wstring(a_fapi_font->memory, a_output, " NP\n");
- }
+ if (count > 0) {
+ WRF_wstring(a_fapi_font->memory, a_output, "/Subrs ");
+ WRF_wint(a_fapi_font->memory, a_output, count);
+ WRF_wstring(a_fapi_font->memory, a_output, " array\n");
- WRF_wstring(a_fapi_font->memory, a_output, "ND\n");
-}
+ for (i = 0; i < count; i++) {
+ int length;
+ int buffer_size;
-static void
-write_charstrings(gs_fapi_font * a_fapi_font, WRF_output * a_output)
-{
- long length;
- long buffer_size;
- int i, count = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_CharStrings_count,
- 0);
- char NameBuf[256];
- if (count <= 0)
- return;
-
- WRF_wstring(a_fapi_font->memory, a_output, "2 index /CharStrings ");
- WRF_wint(a_fapi_font->memory, a_output, count);
- WRF_wstring(a_fapi_font->memory, a_output, " dict dup begin\n");
- for (i = 0; i < count; i++) {
- length =
- a_fapi_font->get_charstring_name(a_fapi_font, i,
- (byte *) & NameBuf, 256);
- if (length > 0) {
- length = a_fapi_font->get_charstring(a_fapi_font, i, 0, 0);
-
- WRF_wbyte(a_fapi_font->memory, a_output, '/');
- WRF_wstring(a_fapi_font->memory, a_output, (const char *)&NameBuf);
+ if (raw)
+ length = a_fapi_font->get_raw_subr(a_fapi_font, i, 0, 0);
+ else
+ length = a_fapi_font->get_subr(a_fapi_font, i, 0, 0);
+ if (length < 0)
+ return length;
+
+ WRF_wstring(a_fapi_font->memory, a_output, "dup ");
+ WRF_wint(a_fapi_font->memory, a_output, i);
WRF_wbyte(a_fapi_font->memory, a_output, ' ');
WRF_wint(a_fapi_font->memory, a_output, length);
WRF_wstring(a_fapi_font->memory, a_output, " RD ");
- /* Get the CharString into the buffer and encrypt it in place. */
+ /* Get the subroutine into the buffer and encrypt it in place. */
buffer_size = a_output->m_limit - a_output->m_count;
if (buffer_size >= length) {
- a_fapi_font->get_charstring(a_fapi_font, i, a_output->m_pos,
- (ushort) length);
+ int l2;
+
+ if (raw)
+ l2 = a_fapi_font->get_raw_subr(a_fapi_font, i, a_output->m_pos,
+ (ushort) length);
+ else
+ l2 = a_fapi_font->get_subr(a_fapi_font, i, a_output->m_pos,
+ (ushort) length);
+ if (l2 < 0)
+ return l2;
+
WRF_wtext(a_fapi_font->memory, a_output, a_output->m_pos, length);
} else
a_output->m_count += length;
- WRF_wstring(a_fapi_font->memory, a_output, " ND\n");
+
+ WRF_wstring(a_fapi_font->memory, a_output, " NP\n");
}
+
+ WRF_wstring(a_fapi_font->memory, a_output, "ND\n");
}
- WRF_wstring(a_fapi_font->memory, a_output, " end");
+ return 0;
}
static int
+write_charstrings(gs_fapi_font * a_fapi_font, WRF_output * a_output)
+{
+ int length;
+ int buffer_size;
+ int i;
+ unsigned short count;
+ int code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_CharStrings_count,
+ 0, &count);
+ char NameBuf[256];
+
+ if (code < 0)
+ return code;
+
+ if (count > 0) {
+ WRF_wstring(a_fapi_font->memory, a_output, "2 index /CharStrings ");
+ WRF_wint(a_fapi_font->memory, a_output, count);
+ WRF_wstring(a_fapi_font->memory, a_output, " dict dup begin\n");
+ for (i = 0; i < count; i++) {
+ length =
+ a_fapi_font->get_charstring_name(a_fapi_font, i,
+ (byte *) & NameBuf, 256);
+ if (length < 0)
+ return length;
+
+ if (length > 0) {
+ length = a_fapi_font->get_charstring(a_fapi_font, i, 0, 0);
+ if (length < 0)
+ return length;
+
+ WRF_wbyte(a_fapi_font->memory, a_output, '/');
+ WRF_wstring(a_fapi_font->memory, a_output, (const char *)&NameBuf);
+ WRF_wbyte(a_fapi_font->memory, a_output, ' ');
+ WRF_wint(a_fapi_font->memory, a_output, length);
+ WRF_wstring(a_fapi_font->memory, a_output, " RD ");
+
+ /* Get the CharString into the buffer and encrypt it in place. */
+ buffer_size = a_output->m_limit - a_output->m_count;
+ if (buffer_size >= length) {
+ int l2;
+ l2 = a_fapi_font->get_charstring(a_fapi_font, i, a_output->m_pos,
+ (ushort) length);
+ if (l2 < 0)
+ return l2;
+
+ WRF_wtext(a_fapi_font->memory, a_output, a_output->m_pos, length);
+ } else
+ a_output->m_count += length;
+ WRF_wstring(a_fapi_font->memory, a_output, " ND\n");
+ }
+ }
+ WRF_wstring(a_fapi_font->memory, a_output, " end");
+ }
+ return 0;
+}
+
+static bool
is_MM_font(gs_fapi_font * a_fapi_font)
{
- return a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_DollarBlend, 0);
+ unsigned short db;
+ int code = a_fapi_font->get_word(a_fapi_font, gs_fapi_font_feature_DollarBlend, 0, &db);
+
+ if (code >= 0 && db == 1)
+ return true;
+
+ return false;
}
-static void
+static int
write_private_blend_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output)
{
short x, x1, x2, i, j, acc;
+ int code;
+
if (is_MM_font(a_fapi_font)) {
WRF_wstring(a_fapi_font->memory, a_output, "3 index /Blend get /Private get begin\n");
- x = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendBlueValues_length, 0);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendBlueValues_length, 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
if (x > 0) {
WRF_wstring(a_fapi_font->memory, a_output, "/BlueValues [");
acc = 0;
for (i = 0; i < x; i++) {
WRF_wstring(a_fapi_font->memory, a_output, " [");
- x1 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendBlueValues_count, i);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendBlueValues_count, i, (unsigned short *)&x1);
+ if (code < 0)
+ return code;
+
for (j = 0; j < x1; j++) {
- x2 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendBlueValues, acc++);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendBlueValues, acc++, (unsigned short *)&x2);
+ if (code < 0)
+ return code;
+
WRF_wint(a_fapi_font->memory, a_output, x2);
WRF_wbyte(a_fapi_font->memory, a_output, (byte)' ');
}
@@ -205,18 +263,27 @@ write_private_blend_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output
WRF_wstring(a_fapi_font->memory, a_output, " ]\n");
}
- x = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendOtherBlues_length, 0);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendOtherBlues_length, 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
if (x > 0) {
WRF_wstring(a_fapi_font->memory, a_output, "/OtherBlues [");
acc = 0;
for (i = 0; i < x; i++) {
WRF_wstring(a_fapi_font->memory, a_output, " [");
- x1 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendOtherBlues_count, i);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendOtherBlues_count, i, (unsigned short *)&x1);
+ if (code < 0)
+ return code;
+
for (j = 0; j < x1; j++) {
- x2 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendOtherBlues, acc++);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendOtherBlues, acc++, (unsigned short *)&x2);
+ if (code < 0)
+ return code;
+
WRF_wint(a_fapi_font->memory, a_output, x2);
WRF_wbyte(a_fapi_font->memory, a_output, (byte)' ');
}
@@ -224,71 +291,104 @@ write_private_blend_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output
}
WRF_wstring(a_fapi_font->memory, a_output, " ]\n");
}
- x = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendBlueScale_count, 0);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendBlueScale_count, 0, (unsigned short *)&x);
+ if (code < 0)
+ return 0;
+
if (x > 0) {
float v;
WRF_wstring(a_fapi_font->memory, a_output, "/BlueScale [");
for (i =0; i < x; i++) {
- v = a_fapi_font->get_float(a_fapi_font,
- gs_fapi_font_feature_BlendBlueScale, i);
+ code = a_fapi_font->get_float(a_fapi_font,
+ gs_fapi_font_feature_BlendBlueScale, i, &v);
+ if (code < 0)
+ return code;
+
WRF_wfloat(a_fapi_font->memory, a_output, v);
WRF_wbyte(a_fapi_font->memory, a_output, (byte)' ');
}
WRF_wstring(a_fapi_font->memory, a_output, " ]\n");
}
- x = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendBlueShift_count, 0);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendBlueShift_count, 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
if (x > 0) {
WRF_wstring(a_fapi_font->memory, a_output, "/BlueShift [");
for (i =0; i < x; i++) {
- x2 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendBlueShift, i);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendBlueShift, i, (unsigned short *)&x2);
+ if (code < 0)
+ return code;
+
WRF_wint(a_fapi_font->memory, a_output, x2);
WRF_wbyte(a_fapi_font->memory, a_output, (byte)' ');
}
WRF_wstring(a_fapi_font->memory, a_output, " ]\n");
}
- x = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendBlueFuzz_count, 0);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendBlueFuzz_count, 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
if (x > 0) {
WRF_wstring(a_fapi_font->memory, a_output, "/BlueFuzz [");
for (i =0; i < x; i++) {
- x2 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendBlueFuzz, i);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendBlueFuzz, i, (unsigned short *)&x2);
+ if (code < 0)
+ return code;
+
WRF_wint(a_fapi_font->memory, a_output, x2);
WRF_wbyte(a_fapi_font->memory, a_output, (byte)' ');
}
WRF_wstring(a_fapi_font->memory, a_output, " ]\n");
}
- x = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendForceBold_count, 0);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendForceBold_count, 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
if (x > 0) {
WRF_wstring(a_fapi_font->memory, a_output, "/ForceBold [");
for (i =0; i < x; i++) {
- x2 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendForceBold, i);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendForceBold, i, (unsigned short *)&x2);
+ if (code < 0)
+ return code;
+
WRF_wstring(a_fapi_font->memory, a_output, x2 ? "/true" : "/false");
WRF_wbyte(a_fapi_font->memory, a_output, (byte)' ');
}
WRF_wstring(a_fapi_font->memory, a_output, " ]\n");
}
- x = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendStdHW_length, 0);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendStdHW_length, 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
if (x > 0) {
WRF_wstring(a_fapi_font->memory, a_output, "/StdHW [");
acc = 0;
for (i = 0; i < x; i++) {
WRF_wstring(a_fapi_font->memory, a_output, " [");
- x1 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendStdHW_count, i);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendStdHW_count, i, (unsigned short *)&x1);
+ if (code < 0)
+ return code;
+
for (j = 0; j < x1; j++) {
- x2 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendStdHW, acc++);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendStdHW, acc++, (unsigned short *)&x2);
+ if (code < 0)
+ return code;
+
WRF_wint(a_fapi_font->memory, a_output, x2);
WRF_wbyte(a_fapi_font->memory, a_output, (byte)' ');
}
@@ -297,18 +397,27 @@ write_private_blend_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output
WRF_wstring(a_fapi_font->memory, a_output, " ]\n");
}
- x = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendStdVW_length, 0);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendStdVW_length, 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
if (x > 0) {
WRF_wstring(a_fapi_font->memory, a_output, "/StdVW [");
acc = 0;
for (i = 0; i < x; i++) {
WRF_wstring(a_fapi_font->memory, a_output, " [");
- x1 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendStdVW_count, i);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendStdVW_count, i, (unsigned short *)&x1);
+ if (code < 0)
+ return code;
+
for (j = 0; j < x1; j++) {
- x2 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendStdVW, acc++);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendStdVW, acc++, (unsigned short *)&x2);
+ if (code < 0)
+ return code;
+
WRF_wint(a_fapi_font->memory, a_output, x2);
WRF_wbyte(a_fapi_font->memory, a_output, (byte)' ');
}
@@ -317,18 +426,27 @@ write_private_blend_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output
WRF_wstring(a_fapi_font->memory, a_output, " ]\n");
}
- x = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendStemSnapH_length, 0);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendStemSnapH_length, 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
if (x > 0) {
WRF_wstring(a_fapi_font->memory, a_output, "/StemSnapH [");
acc = 0;
for (i = 0; i < x; i++) {
WRF_wstring(a_fapi_font->memory, a_output, " [");
- x1 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendStemSnapH_count, i);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendStemSnapH_count, i, (unsigned short *)&x1);
+ if (code < 0)
+ return code;
+
for (j = 0; j < x1; j++) {
- x2 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendStemSnapH, acc++);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendStemSnapH, acc++, (unsigned short *)&x2);
+ if (code < 0)
+ return code;
+
WRF_wint(a_fapi_font->memory, a_output, x2);
WRF_wbyte(a_fapi_font->memory, a_output, (byte)' ');
}
@@ -337,18 +455,27 @@ write_private_blend_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output
WRF_wstring(a_fapi_font->memory, a_output, " ]\n");
}
- x = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendStemSnapV_length, 0);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendStemSnapV_length, 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
if (x > 0) {
WRF_wstring(a_fapi_font->memory, a_output, "/StemSnapV [");
acc = 0;
for (i = 0; i < x; i++) {
WRF_wstring(a_fapi_font->memory, a_output, " [");
- x1 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendStemSnapV_count, i);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendStemSnapV_count, i, (unsigned short *)&x1);
+ if (code < 0)
+ return code;
+
for (j = 0; j < x1; j++) {
- x2 = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendStemSnapV, acc++);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendStemSnapV, acc++, (unsigned short *)&x2);
+ if (code < 0)
+ return code;
+
WRF_wint(a_fapi_font->memory, a_output, x2);
WRF_wbyte(a_fapi_font->memory, a_output, (byte)' ');
}
@@ -359,12 +486,15 @@ write_private_blend_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output
WRF_wstring(a_fapi_font->memory, a_output, "end\n");
}
+ return 0;
}
-static void
+static int
write_private_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output,
int Write_CharStrings)
{
+ int code;
+ unsigned long ulval;
a_output->m_encrypt = true;
/* Write 4 bytes that must encrypt to at least one character that cannot be a valid hexadecimal character. */
@@ -375,57 +505,97 @@ write_private_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output,
WRF_wstring(a_fapi_font->memory, a_output, "/MinFeature {16 16} def\n");
WRF_wstring(a_fapi_font->memory, a_output, "/password 5839 def\n");
- if (Write_CharStrings)
- write_word_entry(a_fapi_font, a_output, "lenIV",
- gs_fapi_font_feature_lenIV, 1);
- else
+ if (Write_CharStrings) {
+ code = write_word_entry(a_fapi_font, a_output, "lenIV", gs_fapi_font_feature_lenIV, 1);
+ if (code < 0)
+ return code;
+ }
+ else {
WRF_wstring(a_fapi_font->memory, a_output, "/lenIV -1 def\n"); /* indicate that /subrs are not encoded. */
- write_word_entry(a_fapi_font, a_output, "BlueFuzz",
- gs_fapi_font_feature_BlueFuzz, 16);
+ }
+ code = write_word_entry(a_fapi_font, a_output, "BlueFuzz", gs_fapi_font_feature_BlueFuzz, 16);
+ if (code < 0)
+ return code;
WRF_wstring(a_fapi_font->memory, a_output, "/BlueScale ");
- WRF_wfloat(a_fapi_font->memory, a_output,
- a_fapi_font->get_long(a_fapi_font,
- gs_fapi_font_feature_BlueScale,
- 0) / 65536.0);
+ code = a_fapi_font->get_long(a_fapi_font,gs_fapi_font_feature_BlueScale, 0, &ulval);
+ if (code < 0)
+ return code;
+
+ WRF_wfloat(a_fapi_font->memory, a_output, (float)ulval/65536.0);
+
WRF_wstring(a_fapi_font->memory, a_output, " def\n");
- write_word_entry(a_fapi_font, a_output, "BlueShift",
- gs_fapi_font_feature_BlueShift, 16);
- write_array_entry(a_fapi_font, a_output, "BlueValues",
+ code = write_word_entry(a_fapi_font, a_output, "BlueShift", gs_fapi_font_feature_BlueShift, 16);
+ if (code < 0)
+ return code;
+
+ code = write_array_entry(a_fapi_font, a_output, "BlueValues",
gs_fapi_font_feature_BlueValues, 16);
- write_array_entry(a_fapi_font, a_output, "OtherBlues",
+ if (code < 0)
+ return code;
+
+ code = write_array_entry(a_fapi_font, a_output, "OtherBlues",
gs_fapi_font_feature_OtherBlues, 16);
- write_array_entry(a_fapi_font, a_output, "FamilyBlues",
+ if (code < 0)
+ return code;
+
+ code = write_array_entry(a_fapi_font, a_output, "FamilyBlues",
gs_fapi_font_feature_FamilyBlues, 16);
- write_array_entry(a_fapi_font, a_output, "FamilyOtherBlues",
+ if (code < 0)
+ return code;
+
+ code = write_array_entry(a_fapi_font, a_output, "FamilyOtherBlues",
gs_fapi_font_feature_FamilyOtherBlues, 16);
- write_word_entry(a_fapi_font, a_output, "ForceBold",
- gs_fapi_font_feature_ForceBold, 1);
- write_array_entry_with_count(a_fapi_font, a_output, "StdHW",
+ if (code < 0)
+ return code;
+
+ code = write_word_entry(a_fapi_font, a_output, "ForceBold", gs_fapi_font_feature_ForceBold, 1);
+ if (code < 0)
+ return code;
+
+ code = write_array_entry_with_count(a_fapi_font, a_output, "StdHW",
gs_fapi_font_feature_StdHW, 1, 16);
- write_array_entry_with_count(a_fapi_font, a_output, "StdVW",
+ if (code < 0)
+ return code;
+
+ code = write_array_entry_with_count(a_fapi_font, a_output, "StdVW",
gs_fapi_font_feature_StdVW, 1, 16);
- write_array_entry(a_fapi_font, a_output, "StemSnapH",
+ if (code < 0)
+ return code;
+
+ code = write_array_entry(a_fapi_font, a_output, "StemSnapH",
gs_fapi_font_feature_StemSnapH, 16);
- write_array_entry(a_fapi_font, a_output, "StemSnapV",
+ if (code < 0)
+ return code;
+
+ code = write_array_entry(a_fapi_font, a_output, "StemSnapV",
gs_fapi_font_feature_StemSnapV, 16);
+ if (code < 0)
+ return code;
- write_private_blend_dictionary(a_fapi_font, a_output);
+ code = write_private_blend_dictionary(a_fapi_font, a_output);
+ if (code < 0)
+ return code;
if (Write_CharStrings)
- write_subrs(a_fapi_font, a_output, 1);
+ code = write_subrs(a_fapi_font, a_output, 1);
else
- write_subrs(a_fapi_font, a_output, 0);
+ code = write_subrs(a_fapi_font, a_output, 0);
+ if (code < 0)
+ return code;
+
if (Write_CharStrings)
- write_charstrings(a_fapi_font, a_output);
+ code = write_charstrings(a_fapi_font, a_output);
+
+ return code;
}
-static void
-write_main_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output,
- int Write_CharStrings)
+static int
+write_main_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output, int Write_CharStrings)
{
- int i;
+ int i, code;
+ float fval;
WRF_wstring(a_fapi_font->memory, a_output, "5 dict begin\n");
@@ -433,10 +603,11 @@ write_main_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output,
WRF_wstring(a_fapi_font->memory, a_output, "/FontMatrix [");
for (i = 0; i < 6; i++) {
- WRF_wfloat(a_fapi_font->memory, a_output,
- a_fapi_font->get_float(a_fapi_font,
- gs_fapi_font_feature_FontMatrix,
- i));
+ code = a_fapi_font->get_float(a_fapi_font, gs_fapi_font_feature_FontMatrix, i, &fval);
+ if (code < 0)
+ return code;
+
+ WRF_wfloat(a_fapi_font->memory, a_output, fval);
WRF_wbyte(a_fapi_font->memory, a_output, (byte) (i == 5 ? ']' : ' '));
}
WRF_wbyte(a_fapi_font->memory, a_output, '\n');
@@ -445,9 +616,12 @@ write_main_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output,
WRF_wstring(a_fapi_font->memory, a_output, "/FontBBox {");
for (i = 0; i < 4; i++) {
- short x =
- a_fapi_font->get_word(a_fapi_font, gs_fapi_font_feature_FontBBox,
- i);
+ short x;
+ code = a_fapi_font->get_word(a_fapi_font, gs_fapi_font_feature_FontBBox,
+ i, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
WRF_wint(a_fapi_font->memory, a_output, x);
WRF_wbyte(a_fapi_font->memory, a_output, (byte) (i == 3 ? '}' : ' '));
}
@@ -459,52 +633,77 @@ write_main_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output,
char Buffer[255];
entries = 0;
- x = a_fapi_font->get_word(a_fapi_font,
+ code = a_fapi_font->get_word(a_fapi_font,
gs_fapi_font_feature_BlendAxisTypes_count,
- 0);
+ 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
if (x)
entries++;
- x = a_fapi_font->get_word(a_fapi_font,
+
+ code = a_fapi_font->get_word(a_fapi_font,
gs_fapi_font_feature_BlendDesignPositionsArrays_count,
- 0);
+ 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
if (x)
entries++;
- x = a_fapi_font->get_word(a_fapi_font,
+ code = a_fapi_font->get_word(a_fapi_font,
gs_fapi_font_feature_BlendDesignMapArrays_count,
- 0);
+ 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
if (x)
+
entries++;
gs_sprintf(Buffer, "/FontInfo %d dict dup begin\n", entries);
WRF_wstring(a_fapi_font->memory, a_output, Buffer);
- x = a_fapi_font->get_word(a_fapi_font,
+ code = a_fapi_font->get_word(a_fapi_font,
gs_fapi_font_feature_BlendAxisTypes_count,
- 0);
+ 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
if (x) {
WRF_wstring(a_fapi_font->memory, a_output, "/BlendAxisTypes [");
for (i = 0; i < x; i++) {
WRF_wstring(a_fapi_font->memory, a_output, " /");
- a_fapi_font->get_name(a_fapi_font,
+ code = a_fapi_font->get_name(a_fapi_font,
gs_fapi_font_feature_BlendAxisTypes, i,
(char *)&Buffer, 255);
+ if (code < 0)
+ return code;
+
WRF_wstring(a_fapi_font->memory, a_output, Buffer);
}
WRF_wstring(a_fapi_font->memory, a_output, "] def\n");
}
- x = a_fapi_font->get_word(a_fapi_font,
+ code = a_fapi_font->get_word(a_fapi_font,
gs_fapi_font_feature_BlendDesignPositionsArrays_count,
- 0);
+ 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
if (x) {
WRF_wstring(a_fapi_font->memory, a_output, "/BlendDesignPositions [");
- x2 = a_fapi_font->get_word(a_fapi_font,
+ code = a_fapi_font->get_word(a_fapi_font,
gs_fapi_font_feature_BlendAxisTypes_count,
- 0);
+ 0, (unsigned short *)&x2);
+ if (code < 0)
+ return code;
+
for (i = 0; i < x; i++) {
WRF_wstring(a_fapi_font->memory, a_output, "[");
for (j = 0; j < x2; j++) {
- x1 = a_fapi_font->get_float(a_fapi_font,
+ code = a_fapi_font->get_float(a_fapi_font,
gs_fapi_font_feature_BlendDesignPositionsArrayValue,
- i * 8 + j);
+ i * 8 + j, &x1);
+ if (code < 0)
+ return code;
+
gs_sprintf(Buffer, "%f ", x1);
WRF_wstring(a_fapi_font->memory, a_output, Buffer);
}
@@ -512,26 +711,36 @@ write_main_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output,
}
WRF_wstring(a_fapi_font->memory, a_output, "] def\n");
}
- x = a_fapi_font->get_word(a_fapi_font,
+ code = a_fapi_font->get_word(a_fapi_font,
gs_fapi_font_feature_BlendDesignMapArrays_count,
- 0);
+ 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
if (x) {
WRF_wstring(a_fapi_font->memory, a_output, "/BlendDesignMap [");
for (i = 0; i < x; i++) {
- x2 = a_fapi_font->get_word(a_fapi_font,
+ code = a_fapi_font->get_word(a_fapi_font,
gs_fapi_font_feature_BlendDesignMapSubArrays_count,
- i);
+ i, (unsigned short *)&x2);
+ if (code < 0)
+ return code;
+
WRF_wstring(a_fapi_font->memory, a_output, "[");
for (j = 0; j < x2; j++) {
WRF_wstring(a_fapi_font->memory, a_output, "[");
- x1 = a_fapi_font->get_float(a_fapi_font,
+ code = a_fapi_font->get_float(a_fapi_font,
gs_fapi_font_feature_BlendDesignPositionsArrayValue,
- i * 64 + j * 64);
+ i * 64 + j * 64, &x1);
+ if (code < 0)
+ return code;
+
gs_sprintf(Buffer, "%f ", x1);
WRF_wstring(a_fapi_font->memory, a_output, Buffer);
- x1 = a_fapi_font->get_float(a_fapi_font,
+ code = a_fapi_font->get_float(a_fapi_font,
gs_fapi_font_feature_BlendDesignPositionsArrayValue,
- i * 64 + j * 64 + 1);
+ i * 64 + j * 64 + 1, &x1);
+ if (code < 0)
+ return code;
gs_sprintf(Buffer, "%f ", x1);
WRF_wstring(a_fapi_font->memory, a_output, Buffer);
WRF_wstring(a_fapi_font->memory, a_output, "]");
@@ -548,48 +757,62 @@ write_main_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output,
* be because the "get_proc" method below was missing the code to handle PS name
* objects.
*/
- if ((x =
- a_fapi_font->get_word(a_fapi_font,
+ code = a_fapi_font->get_word(a_fapi_font,
gs_fapi_font_feature_DollarBlend_length,
- 0)) > 0) {
+ 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
+ if (x > 0) {
+ int len;
WRF_wstring(a_fapi_font->memory, a_output, "/$Blend {");
if (a_output->m_count)
a_output->m_count += x;
- x = a_fapi_font->get_proc(a_fapi_font,
+ len = a_fapi_font->get_proc(a_fapi_font,
gs_fapi_font_feature_DollarBlend, 0,
(char *)a_output->m_pos);
if (a_output->m_pos)
- a_output->m_pos += x;
+ a_output->m_pos += len;
WRF_wstring(a_fapi_font->memory, a_output, "} def\n");
} else {
WRF_wstring(a_fapi_font->memory, a_output,
"/$Blend {0.1 mul exch 0.45 mul add exch 0.17 mul add add} def\n");
}
-#if 1
WRF_wstring(a_fapi_font->memory, a_output, "/WeightVector [");
- x = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_WeightVector_count, 0);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_WeightVector_count, 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
for (i = 0; i < x; i++) {
- x1 = a_fapi_font->get_float(a_fapi_font,
- gs_fapi_font_feature_WeightVector, i);
+ code = a_fapi_font->get_float(a_fapi_font,
+ gs_fapi_font_feature_WeightVector, i, &x1);
+ if (code < 0)
+ return code;
+
gs_sprintf(Buffer, "%f ", x1);
WRF_wstring(a_fapi_font->memory, a_output, Buffer);
}
WRF_wstring(a_fapi_font->memory, a_output, "] def\n");
-#endif
WRF_wstring(a_fapi_font->memory, a_output, "/Blend 3 dict dup begin\n");
WRF_wstring(a_fapi_font->memory, a_output, "/FontBBox {");
- x = a_fapi_font->get_word(a_fapi_font,
- gs_fapi_font_feature_BlendFontBBox_length , 0);
+ code = a_fapi_font->get_word(a_fapi_font,
+ gs_fapi_font_feature_BlendFontBBox_length , 0, (unsigned short *)&x);
+ if (code < 0)
+ return code;
+
for (i = 0; i < x; i++) {
int j;
WRF_wstring(a_fapi_font->memory, a_output, " {");
for (j = 0; j < 4; j++) {
- x2 = a_fapi_font->get_word(a_fapi_font,
+ code = a_fapi_font->get_word(a_fapi_font,
gs_fapi_font_feature_BlendFontBBox,
- j + (i * 4));
+ j + (i * 4), (unsigned short *)&x2);
+ if (code < 0)
+ return code;
+
WRF_wint(a_fapi_font->memory, a_output, x2);
WRF_wbyte(a_fapi_font->memory, a_output, (byte)' ');
}
@@ -600,7 +823,8 @@ write_main_dictionary(gs_fapi_font * a_fapi_font, WRF_output * a_output,
WRF_wstring(a_fapi_font->memory, a_output, "end def\n");
}
WRF_wstring(a_fapi_font->memory, a_output, "currentdict end\ncurrentfile eexec\n");
- write_private_dictionary(a_fapi_font, a_output, Write_CharStrings);
+
+ return write_private_dictionary(a_fapi_font, a_output, Write_CharStrings);
}
/**
@@ -616,6 +840,7 @@ long
gs_fapi_serialize_type1_font(gs_fapi_font * a_fapi_font,
unsigned char *a_buffer, long a_buffer_size)
{
+ int code;
WRF_output output;
WRF_init(&output, a_buffer, a_buffer_size);
@@ -623,15 +848,18 @@ gs_fapi_serialize_type1_font(gs_fapi_font * a_fapi_font,
/* Leading comment identifying a Type 1 font. */
WRF_wstring(a_fapi_font->memory, &output, "%!PS-AdobeFont-1\n");
- write_main_dictionary(a_fapi_font, &output, 0);
+ code = write_main_dictionary(a_fapi_font, &output, 0);
+ if (code < 0)
+ return (long)code;
#if 0
{
extern FILE *stdout;
- if (is_MM_font(a_fapi_font) && a_buffer && a_buffer_size >= output.m_count) {
+ if (a_buffer && a_buffer_size >= output.m_count) {
fwrite(a_buffer, 1, output.m_count, stdout);
}
}
#endif
+
return output.m_count;
}
@@ -640,6 +868,7 @@ gs_fapi_serialize_type1_font_complete(gs_fapi_font * a_fapi_font,
unsigned char *a_buffer,
long a_buffer_size)
{
+ int code;
WRF_output output;
WRF_init(&output, a_buffer, a_buffer_size);
@@ -647,6 +876,9 @@ gs_fapi_serialize_type1_font_complete(gs_fapi_font * a_fapi_font,
/* Leading comment identifying a Type 1 font. */
WRF_wstring(a_fapi_font->memory, &output, "%!PS-AdobeFont-1\n");
- write_main_dictionary(a_fapi_font, &output, 1);
+ code = write_main_dictionary(a_fapi_font, &output, 1);
+ if (code < 0)
+ return (long)code;
+
return output.m_count;
}
diff --git a/base/write_t1.h b/base/write_t1.h
index eeb355cd..0b16c387 100644
--- a/base/write_t1.h
+++ b/base/write_t1.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/write_t2.c b/base/write_t2.c
index 9df6216a..9cf3883c 100644
--- a/base/write_t2.c
+++ b/base/write_t2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -63,7 +63,7 @@ write_type2_int(gs_fapi_font * a_fapi_font, WRF_output * a_output, long a_int)
}
static void
-write_type2_float(gs_fapi_font * a_fapi_font, WRF_output * a_output, double a_float)
+write_type2_float(gs_fapi_font * a_fapi_font, WRF_output * a_output, float a_float)
{
char buffer[32];
const char *p = buffer;
@@ -120,17 +120,22 @@ write_name_index(gs_fapi_font * a_fapi_font, WRF_output * a_output)
WRF_wtext(a_fapi_font->memory, a_output, (const unsigned char *)"\x0\x1\x1\x1\x2" "x", 6);
}
-static void
+static int
write_word_entry(gs_fapi_font * a_fapi_font, WRF_output * a_output,
int a_feature_id, int a_feature_count, bool a_two_byte_op,
int a_op, int a_divisor)
{
+ int code = 0;
+
if (a_feature_count > 0) {
int i;
for (i = 0; i < a_feature_count; i++) {
/* Get the value and convert it from unsigned to signed. */
- short x = a_fapi_font->get_word(a_fapi_font, a_feature_id, i);
+ short x;
+ code = a_fapi_font->get_word(a_fapi_font, a_feature_id, i, (unsigned short *)&x);
+ if (code < 0)
+ return code;
/* Divide by the divisor to bring it back to font units. */
x = (short)(x / a_divisor);
@@ -140,24 +145,30 @@ write_word_entry(gs_fapi_font * a_fapi_font, WRF_output * a_output,
WRF_wbyte(a_fapi_font->memory, a_output, 12);
WRF_wbyte(a_fapi_font->memory, a_output, (unsigned char)a_op);
}
+ return code;
}
-static void
+static int
write_delta_array_entry(gs_fapi_font * a_fapi_font, WRF_output * a_output,
int a_feature_id, bool a_two_byte_op, int a_op,
int a_divisor)
{
- int i;
+ int i, code;
/* NOTE that the feature index (a_feature_id) must be preceded by the count index for this to work. */
- int count = a_fapi_font->get_word(a_fapi_font, a_feature_id - 1, 0);
+ unsigned short count;
- if (count > 0) {
+ code = a_fapi_font->get_word(a_fapi_font, a_feature_id - 1, 0, &count);
+
+ if (code >= 0 && count > 0) {
short prev_value = 0;
for (i = 0; i < count; i++) {
/* Get the value and convert it from unsigned to signed. */
- short value = a_fapi_font->get_word(a_fapi_font, a_feature_id, i);
+ short value;
+ code = a_fapi_font->get_word(a_fapi_font, a_feature_id, i, (unsigned short *)&value);
+ if (code < 0)
+ return code;
/* Divide by the divisor to bring it back to font units. */
value = (short)(value / a_divisor);
@@ -168,18 +179,22 @@ write_delta_array_entry(gs_fapi_font * a_fapi_font, WRF_output * a_output,
WRF_wbyte(a_fapi_font->memory, a_output, 12);
WRF_wbyte(a_fapi_font->memory, a_output, (unsigned char)a_op);
}
+ return code;
}
-static void
+static int
write_float_entry(gs_fapi_font * a_fapi_font, WRF_output * a_output,
int a_feature_id, int a_feature_count, bool a_two_byte_op,
int a_op)
{
if (a_feature_count > 0) {
- int i;
+ int i, code;
+ float x;
for (i = 0; i < a_feature_count; i++) {
- double x = a_fapi_font->get_float(a_fapi_font, a_feature_id, i);
+ code = a_fapi_font->get_float(a_fapi_font, a_feature_id, i, &x);
+ if (code < 0)
+ return code;
write_type2_float(a_fapi_font, a_output, x);
}
@@ -187,23 +202,29 @@ write_float_entry(gs_fapi_font * a_fapi_font, WRF_output * a_output,
WRF_wbyte(a_fapi_font->memory, a_output, 12);
WRF_wbyte(a_fapi_font->memory, a_output, (unsigned char)a_op);
}
+ return 0;
}
-static void
+static int
write_font_dict_index(gs_fapi_font * a_fapi_font, WRF_output * a_output,
unsigned char **a_charset_offset_ptr,
unsigned char **a_charstrings_offset_ptr,
unsigned char **a_private_dict_length_ptr)
{
unsigned char *data_start = 0;
+ int code;
WRF_wtext(a_fapi_font->memory, a_output, (const unsigned char *)"\x0\x1\x2\x0\x1\x0\x0", 7); /* count = 1, offset size = 2, first offset = 1, last offset = 0 (to be filled in later). */
if (a_output->m_pos)
data_start = a_output->m_pos;
- write_word_entry(a_fapi_font, a_output, gs_fapi_font_feature_FontBBox, 4,
- false, 5, 1);
- write_float_entry(a_fapi_font, a_output, gs_fapi_font_feature_FontMatrix,
- 6, true, 7);
+ code = write_word_entry(a_fapi_font, a_output, gs_fapi_font_feature_FontBBox, 4, false, 5, 1);
+ if (code < 0)
+ return code;
+
+ code = write_float_entry(a_fapi_font, a_output, gs_fapi_font_feature_FontMatrix, 6, true, 7);
+ if (code < 0)
+ return code;
+
write_type2_int(a_fapi_font, a_output, 0); /* 0 = Standard Encoding. */
WRF_wbyte(a_fapi_font->memory, a_output, 16); /* 16 = opcode for 'encoding'. */
*a_charset_offset_ptr = a_output->m_pos;
@@ -221,6 +242,7 @@ write_font_dict_index(gs_fapi_font * a_fapi_font, WRF_output * a_output,
data_start[-2] = (unsigned char)(last_offset >> 8);
data_start[-1] = (unsigned char)(last_offset & 0xFF);
}
+ return 0;
}
/**
@@ -236,9 +258,9 @@ write_charset(gs_fapi_font * a_fapi_font, WRF_output * a_output, unsigned char *
int i = 0;
/* Write the offset to the start of the charset to the top dictionary. */
- if (a_output->m_pos)
+ if (a_output->m_pos) {
write_4_byte_int(a_charset_offset_ptr + 1, a_output->m_count);
-
+ }
/*
Write the charset. Write one less than the number of characters,
because the first one is assumed to be .notdef. For the moment
@@ -263,8 +285,9 @@ write_charstrings_index(gs_fapi_font * a_fapi_font, WRF_output * a_output, int a
unsigned char *a_charstrings_offset_ptr)
{
/* Write the offset to the charstrings index to the top dictionary. */
- if (a_output->m_pos)
+ if (a_output->m_pos) {
write_4_byte_int(a_charstrings_offset_ptr + 1, a_output->m_count);
+ }
/* Write the index. */
WRF_wbyte(a_fapi_font->memory, a_output, (unsigned char)(a_characters >> 8));
@@ -274,21 +297,25 @@ write_charstrings_index(gs_fapi_font * a_fapi_font, WRF_output * a_output, int a
WRF_wbyte(a_fapi_font->memory, a_output, 1); /* offset = 1 */
}
-static void
+static int
write_gsubrs_index(gs_fapi_font * a_fapi_font, WRF_output * a_output)
{
unsigned char *cur_offset = 0;
unsigned char *data_start = 0;
int i;
- int count = a_fapi_font->get_word(a_fapi_font,
+ unsigned short count;
+ int code = a_fapi_font->get_word(a_fapi_font,
gs_fapi_font_feature_GlobalSubrs_count,
- 0);
+ 0, &count);
+
+ if (code < 0)
+ return code;
WRF_wbyte(a_fapi_font->memory, a_output, (unsigned char)(count >> 8));
WRF_wbyte(a_fapi_font->memory, a_output, (unsigned char)(count & 0xFF));
if (count <= 0)
- return;
+ return 0;
WRF_wbyte(a_fapi_font->memory, a_output, 4); /* offset size = 4 bytes */
WRF_wtext(a_fapi_font->memory, a_output, (const unsigned char *)"\x0\x0\x0\x1", 4); /* first offset = 1 */
@@ -305,9 +332,12 @@ write_gsubrs_index(gs_fapi_font * a_fapi_font, WRF_output * a_output)
for (i = 0; i < count; i++) {
long buffer_size = a_output->m_limit - a_output->m_count < 0 ? 0 : a_output->m_limit - a_output->m_count;
- long length = a_fapi_font->get_gsubr(a_fapi_font, i, a_output->m_pos,
+ int length = a_fapi_font->get_gsubr(a_fapi_font, i, a_output->m_pos,
(ushort) (buffer_size > 65535 ? 65535 : buffer_size));
+ if (length < 0)
+ return length;
+
if (a_output->m_pos)
WRF_wtext(a_fapi_font->memory, a_output, a_output->m_pos, length);
else
@@ -319,23 +349,28 @@ write_gsubrs_index(gs_fapi_font * a_fapi_font, WRF_output * a_output)
cur_offset += 4;
}
}
+ return 0;
}
-static void
+static int
write_subrs_index(gs_fapi_font * a_fapi_font, WRF_output * a_output)
{
unsigned char *cur_offset = 0;
unsigned char *data_start = 0;
int i;
- int count =
+ unsigned short count;
+ int code =
a_fapi_font->get_word(a_fapi_font, gs_fapi_font_feature_Subrs_count,
- 0);
+ 0, &count);
+
+ if (code < 0)
+ return code;
WRF_wbyte(a_fapi_font->memory, a_output, (unsigned char)(count >> 8));
WRF_wbyte(a_fapi_font->memory, a_output, (unsigned char)(count & 0xFF));
if (count <= 0)
- return;
+ return 0;
WRF_wbyte(a_fapi_font->memory, a_output, 4); /* offset size = 4 bytes */
WRF_wtext(a_fapi_font->memory, a_output, (const unsigned char *)"\x0\x0\x0\x1", 4); /* first offset = 1 */
@@ -352,9 +387,12 @@ write_subrs_index(gs_fapi_font * a_fapi_font, WRF_output * a_output)
for (i = 0; i < count; i++) {
long buffer_size = a_output->m_limit - a_output->m_count;
- long length = a_fapi_font->get_subr(a_fapi_font, i, a_output->m_pos,
+ int length = a_fapi_font->get_subr(a_fapi_font, i, a_output->m_pos,
(ushort) buffer_size);
+ if (length < 0)
+ return length;
+
if (a_output->m_pos)
WRF_wtext(a_fapi_font->memory, a_output, a_output->m_pos, length);
else
@@ -366,69 +404,104 @@ write_subrs_index(gs_fapi_font * a_fapi_font, WRF_output * a_output)
cur_offset += 4;
}
}
+ return 0;
}
-static void
+static int
write_private_dict(gs_fapi_font * a_fapi_font, WRF_output * a_output,
unsigned char *a_private_dict_length_ptr)
{
- int count, initial = a_output->m_count;
-
+ int code, initial = a_output->m_count;
+ unsigned short count;
/* Write the offset to the start of the private dictionary to the top dictionary. */
unsigned char *start = a_output->m_pos;
+ unsigned long lval;
+ gs_font_type1 *t1 = (gs_font_type1 *) a_fapi_font->client_font_data;
if (a_output->m_pos)
write_4_byte_int(a_private_dict_length_ptr + 6, a_output->m_count);
- write_word_entry(a_fapi_font, a_output, gs_fapi_font_feature_BlueFuzz, 1,
+ code = write_word_entry(a_fapi_font, a_output, gs_fapi_font_feature_BlueFuzz, 1,
true, 11, 16);
+ if (code < 0)
+ return code;
+ code = a_fapi_font->get_long(a_fapi_font, gs_fapi_font_feature_BlueScale, 0, &lval);
+ if (code < 0)
+ return code;
+
+ write_type2_float(a_fapi_font, a_output, (float)((double)lval/65536.0));
- write_type2_float(a_fapi_font, a_output,
- a_fapi_font->get_long(a_fapi_font,
- gs_fapi_font_feature_BlueScale,
- 0) / 65536.0);
WRF_wbyte(a_fapi_font->memory, a_output, 12);
WRF_wbyte(a_fapi_font->memory, a_output, 9);
- write_word_entry(a_fapi_font, a_output, gs_fapi_font_feature_BlueShift, 1,
+ code = write_word_entry(a_fapi_font, a_output, gs_fapi_font_feature_BlueShift, 1,
true, 10, 16);
- write_delta_array_entry(a_fapi_font, a_output,
+ if (code < 0)
+ return code;
+
+ code = write_delta_array_entry(a_fapi_font, a_output,
gs_fapi_font_feature_BlueValues, false, 6, 16);
- write_delta_array_entry(a_fapi_font, a_output,
+ if (code < 0)
+ return code;
+
+ code = write_delta_array_entry(a_fapi_font, a_output,
gs_fapi_font_feature_OtherBlues, false, 7, 16);
- write_delta_array_entry(a_fapi_font, a_output,
+ if (code < 0)
+ return code;
+
+ code = write_delta_array_entry(a_fapi_font, a_output,
gs_fapi_font_feature_FamilyBlues, false, 8, 16);
- write_delta_array_entry(a_fapi_font, a_output,
+ if (code < 0)
+ return code;
+
+ code = write_delta_array_entry(a_fapi_font, a_output,
gs_fapi_font_feature_FamilyOtherBlues, false, 9,
16);
- write_word_entry(a_fapi_font, a_output, gs_fapi_font_feature_ForceBold, 1,
+ if (code < 0)
+ return code;
+
+ code = write_word_entry(a_fapi_font, a_output, gs_fapi_font_feature_ForceBold, 1,
true, 14, 1);
- write_word_entry(a_fapi_font, a_output, gs_fapi_font_feature_StdHW, 1,
+ if (code < 0)
+ return code;
+
+ code = write_word_entry(a_fapi_font, a_output, gs_fapi_font_feature_StdHW, 1,
false, 10, 16);
- write_word_entry(a_fapi_font, a_output, gs_fapi_font_feature_StdVW, 1,
+ if (code < 0)
+ return code;
+
+ code = write_word_entry(a_fapi_font, a_output, gs_fapi_font_feature_StdVW, 1,
false, 11, 16);
- write_delta_array_entry(a_fapi_font, a_output,
+ if (code < 0)
+ return code;
+
+ code = write_delta_array_entry(a_fapi_font, a_output,
gs_fapi_font_feature_StemSnapH, true, 12, 16);
- write_delta_array_entry(a_fapi_font, a_output,
+ if (code < 0)
+ return code;
+
+ code = write_delta_array_entry(a_fapi_font, a_output,
gs_fapi_font_feature_StemSnapV, true, 13, 16);
+ if (code < 0)
+ return code;
/*
Write the default width and the nominal width. These values are not available via
the FAPI interface so we have to get a pointer to the Type 1 font structure and
extract them directly.
*/
- {
- gs_font_type1 *t1 = (gs_font_type1 *) a_fapi_font->client_font_data;
+ write_type2_float(a_fapi_font, a_output, fixed2float(t1->data.defaultWidthX));
+ WRF_wbyte(a_fapi_font->memory, a_output, 20);
- write_type2_float(a_fapi_font, a_output, fixed2float(t1->data.defaultWidthX));
- WRF_wbyte(a_fapi_font->memory, a_output, 20);
- write_type2_float(a_fapi_font, a_output, fixed2float(t1->data.nominalWidthX));
- WRF_wbyte(a_fapi_font->memory, a_output, 21);
- }
+ write_type2_float(a_fapi_font, a_output, fixed2float(t1->data.nominalWidthX));
+ WRF_wbyte(a_fapi_font->memory, a_output, 21);
- count =
+ code =
a_fapi_font->get_word(a_fapi_font, gs_fapi_font_feature_Subrs_count,
- 0);
+ 0, &count);
+ if (code < 0)
+ return code;
+
/* If we have local /Subrs we need to make a new dict ( see calling routine) and
* we also need to add an entry to the Provate dict with an offset to the /Subrs
* dict. This is complicated by the fact that the offset includes the data for
@@ -477,6 +550,7 @@ write_private_dict(gs_fapi_font * a_fapi_font, WRF_output * a_output,
if (a_output->m_pos)
write_4_byte_int(a_private_dict_length_ptr + 1,
a_output->m_pos - start);
+ return 0;
}
/**
@@ -492,6 +566,7 @@ gs_fapi_serialize_type2_font(gs_fapi_font * a_fapi_font,
unsigned char *charstrings_offset_ptr = NULL;
unsigned char *private_dict_length_ptr = NULL;
int characters = 0;
+ int code;
WRF_output output;
@@ -499,17 +574,29 @@ gs_fapi_serialize_type2_font(gs_fapi_font * a_fapi_font,
write_header(a_fapi_font, &output);
write_name_index(a_fapi_font, &output);
- write_font_dict_index(a_fapi_font, &output, &charset_offset_ptr,
+ code = write_font_dict_index(a_fapi_font, &output, &charset_offset_ptr,
&charstrings_offset_ptr, &private_dict_length_ptr);
+ if (code < 0)
+ return (long)code;
/* Write an empty string index. */
WRF_wtext(a_fapi_font->memory, &output, (const unsigned char *)"\x0\x0", 2);
write_gsubrs_index(a_fapi_font, &output);
- characters = write_charset(a_fapi_font, &output, charset_offset_ptr);
+ code = characters = write_charset(a_fapi_font, &output, charset_offset_ptr);
+ if (code < 0)
+ return (long)code;
+
write_charstrings_index(a_fapi_font, &output, characters, charstrings_offset_ptr);
- write_private_dict(a_fapi_font, &output, private_dict_length_ptr);
- write_subrs_index(a_fapi_font, &output);
+
+ code = write_private_dict(a_fapi_font, &output, private_dict_length_ptr);
+ if (code < 0)
+ return (long)code;
+
+ code = write_subrs_index(a_fapi_font, &output);
+
+ if (code < 0)
+ return (long)code;
return output.m_count;
}
diff --git a/base/write_t2.h b/base/write_t2.h
index b1c9d931..d3e4a30a 100644
--- a/base/write_t2.h
+++ b/base/write_t2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/x_.h b/base/x_.h
index 249e9533..4d02d7a0 100644
--- a/base/x_.h
+++ b/base/x_.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/base/zlib.mak b/base/zlib.mak
index c103a5d9..f697fdcc 100644
--- a/base/zlib.mak
+++ b/base/zlib.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/configure b/configure
index 4f502ea3..3cc84d31 100755
--- a/configure
+++ b/configure
@@ -620,6 +620,7 @@ ac_includes_default="\
#endif"
ac_subst_vars='LTLIBOBJS
+CFLAGS_VISIBILITY
ARCH_AUTOCONF_HEADER
AUXEXTRALIBS
LDFLAGSAUX
@@ -628,6 +629,7 @@ CFLAGSAUX_DEBUG
CFLAGSAUX_STANDARD
CAPOPTAUX
GCFLAGSAUX
+CFLAGSAUX
CCAUX
JPX_SSE_CFLAGS
CFLAGS_SANITIZE
@@ -820,6 +822,22 @@ FONTCONFIG_CFLAGS
HAVE_FONTCONFIG
UTF8DEVS
HAVE_LIBIDN
+TESS_CXXFLAGS
+TESS_NEON
+TESS_SSE4_1
+TESS_FMA
+TESS_AVX2
+TESS_AVX
+OCR_VERSION
+OCR_DEVS
+TESSERACTDIR
+LEPTONICADIR
+TESSERACTINCLUDE
+LEPTONICAINCLUDE
+TESSERACT_LIBS
+ac_ct_CXX
+CXXFLAGS
+CXX
RECURSIVE_MUTEXATTR
PTHREAD_LIBS
SYNC
@@ -910,6 +928,7 @@ enable_sse2
enable_threadsafe
with_large_color_index
enable_threading
+with_tesseract
with_libiconv
with_libidn
with_libpaper
@@ -941,6 +960,7 @@ with_gpdl
enable_compile_inits
with_drivers
with_driversfile
+with_openprinting
enable_hidden_visibility
enable_dynamic
with_fontpath
@@ -963,6 +983,9 @@ LDFLAGS
LIBS
CPPFLAGS
CPP
+CXX
+CXXFLAGS
+CCC
XMKMF'
@@ -1618,6 +1641,7 @@ Optional Packages:
--with-arch_h=<arch.h to use>
Use a custom arch.h (must be an absolute path)
+ --without-tesseract do not try to use the Tesseract library for OCR
--with-libiconv=[no/gnu/native]
use the libiconv library
--without-libidn Do not use libidn to support Unicode passwords
@@ -1704,6 +1728,8 @@ Some influential environment variables:
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP C preprocessor
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
XMKMF Path to xmkmf, Makefile generator for X Window System
Use these variables to override the choices made by `configure' or to help
@@ -2473,6 +2499,90 @@ $as_echo "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_decl
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
@@ -4481,7 +4591,7 @@ INSTALL_CONTRIB="install-contrib-extras"
if test x"$enable_contrib" = x; then
case $host in
- *-mingw*|*-msys*|*-cygwin*)
+ *-mingw*|*-msys*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: disabling contrib devices" >&5
$as_echo "$as_me: WARNING: disabling contrib devices" >&2;}
enable_contrib=no
@@ -4510,33 +4620,38 @@ fi
CC_OPT_FLAGS_TO_TRY="-O -DNDEBUG"
+CC_VISIBILITY_FLAGS_TO_TRY=""
SET_DT_SONAME="-soname="
CFLAGS_LARGEFILE=""
case $host in
*-linux*|*-gnu)
- if test $ac_cv_c_compiler_gnu = yes; then
+ if test $GCC = yes; then
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+ CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
fi
;;
*bsd*)
- if test $ac_cv_c_compiler_gnu = yes; then
+ if test $GCC = yes; then
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+ CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
fi
;;
*-darwin*)
- if test $ac_cv_c_compiler_gnu = yes; then
+ if test $GCC = yes; then
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+ CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
fi
SET_DT_SONAME=""
;;
- *-mingw*|*-msys*|*-cygwin*)
- if test $ac_cv_c_compiler_gnu = yes; then
+ *-mingw*|*-msys*)
+ if test $GCC = yes; then
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+ CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
fi
SET_DT_SONAME=""
;;
@@ -4544,21 +4659,23 @@ case $host in
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CFLAGS_LARGEFILE="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
# the trailing space is required!
- if test $ac_cv_c_compiler_gnu = no; then
+ if test $GCC = no; then
SET_DT_SONAME="-h "
fi
- if test $ac_cv_c_compiler_gnu = yes; then
+ if test $GCC = yes; then
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+ CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
else
CC_DBG_FLAGS_TO_TRY="-g -O0"
fi
;;
*-aix*)
- if test $ac_cv_c_compiler_gnu = yes; then
+ if test $GCC = yes; then
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
SET_DT_SONAME="so"
+ CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
fi
;;
esac
@@ -4566,7 +4683,7 @@ esac
-if test $ac_cv_c_compiler_gnu = yes; then
+if test $GCC = yes; then
cflags_to_try="-Wall -Wstrict-prototypes -Wundef \
-Wmissing-declarations -Wmissing-prototypes -Wwrite-strings \
-fno-strict-aliasing -Werror=declaration-after-statement \
@@ -4610,11 +4727,17 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
CFLAGS="$CFLAGS -DHAVE_RESTRICT=1"
+ if test x"$host" = x"$build" ; then
+ CFLAGSAUX="$CFLAGSAUX -DHAVE_RESTRICT=1"
+ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
else
CFLAGS="$CFLAGS -DHAVE_RESTRICT=0"
+ if test x"$host" = x"$build" ; then
+ CFLAGSAUX="$CFLAGSAUX -DHAVE_RESTRICT=0"
+ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
@@ -4635,10 +4758,10 @@ ARCH_CONF_HEADER=
if test x"$with_arch_h" = x""; then
case $host in
- x86_64*-mingw*|x86_64*-msys*|x86_64*-cygwin*)
+ x86_64*-mingw*|x86_64*-msys*)
ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/windows-x64-msvc.h"
;;
- *-mingw*|*-msys*|*-cygwin*)
+ *-mingw*|*-msys*)
ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/windows-x86-msvc.h"
;;
*-darwin*)
@@ -4742,6 +4865,31 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
CFLAGS=$old_cflags
done
+CFLAGS_VISIBILITY=""
+
+for flag in $CC_VISIBILITY_FLAGS_TO_TRY; do
+ CFLAGS="$CFLAGS $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ echo " $flag"
+ CFLAGS_VISIBILITY="$CFLAGS_VISIBILITY $flag"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$old_cflags
+done
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ...done." >&5
$as_echo " ...done." >&6; }
@@ -4770,7 +4918,7 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"; then :
CFLAGS_SANITIZE="$CFLAGS"
else
- CFLAGS_SANITIZE="****************ADDRESS_SANITIZER_NOT_SUPPORTED*********************"
+ CFLAGS_SANITIZE="'****************ADDRESS_SANITIZER_NOT_SUPPORTED*********************'"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
@@ -6647,6 +6795,528 @@ fi
+TESSERACTDIR=tesseract
+LEPTONICADIR=leptonica
+OCR_VERSION=0
+LEPTONICAINCLUDE=
+TESSERACTINCLUDE=
+TESSERACT_LIBS=
+OCR_DEVS=
+
+
+# Check whether --with-tesseract was given.
+if test "${with_tesseract+set}" = set; then :
+ withval=$with_tesseract;
+fi
+
+
+if test x$with_tesseract != xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for local Tesseract library source" >&5
+$as_echo_n "checking for local Tesseract library source... " >&6; }
+ if test -d $srcdir/tesseract && test -d $srcdir/leptonica; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CXX" && break
+done
+
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
+fi
+
+ fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+else
+ CXXFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ HAVE_CXX_COMPILER=yes
+else
+ HAVE_CXX_COMPILER=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test x$HAVE_CXX_COMPILER != xyes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling tesseract as no working C++ compiler" >&5
+$as_echo "$as_me: WARNING: Disabling tesseract as no working C++ compiler" >&2;}
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking sse4.1 support" >&5
+$as_echo_n "checking sse4.1 support... " >&6; }
+ save_cxxflags=$CXXFLAGS
+ TESS_CXXFLAGS=""
+ CXXFLAGS="$CXXFLAGS -msse4.1"
+
+ TESS_SSE4_1=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <emmintrin.h>
+ #include <smmintrin.h>
+int
+main ()
+{
+__m128i input1;
+ unsigned char buf1[128];
+ input1 = _mm_loadu_si128((const __m128i *)buf1);
+ input1 = _mm_hadd_epi32(input1, input1);
+ return(0);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ TESS_SSE4_1="-msse4.1"
+else
+ TESS_SSE4_1=""
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ if test "x$TESS_SSE4_1" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_SSE4_1"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking avx support" >&5
+$as_echo_n "checking avx support... " >&6; }
+ CXXFLAGS="$save_cxxflags -mavx"
+
+ TESS_AVX=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <immintrin.h>
+int
+main ()
+{
+__m256d input1 = _mm256_setzero_pd();
+ input1 = _mm256_hadd_pd(input1, input1);
+ return(0);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ TESS_AVX="-mavx"
+else
+ TESS_AVX=""
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ if test "x$TESS_AVX" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_AVX"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking avx2 support" >&5
+$as_echo_n "checking avx2 support... " >&6; }
+ CXXFLAGS="$save_cxxflags -mavx2"
+
+ TESS_AVX2=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <immintrin.h>
+int
+main ()
+{
+__m256i input1;
+ unsigned char buf1[256];
+ input1 = _mm256_loadu_si256((const __m256i *)buf1);
+ input1 = _mm256_adds_epu8(input1, input1);
+ return(0);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ TESS_AVX2="-mavx2"
+else
+ TESS_AVX2=""
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ if test "x$TESS_AVX2" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_AVX2"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking fma support" >&5
+$as_echo_n "checking fma support... " >&6; }
+ CXXFLAGS="$save_cxxflags -mfma"
+
+ TESS_FMA=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <immintrin.h>
+int
+main ()
+{
+__m256d input1 = _mm256_setzero_pd();
+ input1 = _mm256_fmadd_pd(input1, input1, input1);
+ return(0);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ TESS_FMA="-mfma"
+else
+ TESS_FMA=""
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ if test "x$TESS_FMA" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_FMA"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking neon support" >&5
+$as_echo_n "checking neon support... " >&6; }
+ CXXFLAGS="$save_cxxflags -mfpu=neon -mcpu=cortex-a53"
+
+ TESS_NEON=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include "arm_neon.h"
+int
+main ()
+{
+int32x4_t round = vdupq_n_s32(10);
+ return(0);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ TESS_NEON="-mfpu=neon -mcpu=cortex-a53 -D__ARM_NEON__"
+else
+ TESS_NEON=""
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ if test "x$TESS_NEON" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_NEON"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+ CXXFLAGS="$save_cxxflags"
+
+ OCR_VERSION=1
+ OCR_DEVS="\$(DD)ocr.dev \$(DD)hocr.dev \$(DD)pdfocr8.dev \$(DD)pdfocr24.dev \$(DD)pdfocr32.dev"
+ LEPTONICAINCLUDE="include base/leptonica.mak"
+ TESSERACTINCLUDE="include base/tesseract.mak"
+ TESSERACT_LIBS="-lstdc++"
+ fi
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
# Check whether --with-libiconv was given.
if test "${with_libiconv+set}" = set; then :
@@ -7635,7 +8305,7 @@ $as_echo "yes" >&6; }
SHARE_ZLIB=0
ZLIBDIR=$srcdir/zlib
- if test x"$ac_cv_c_compiler_gnu" = x"yes"; then
+ if test x"$GCC" = x"yes"; then
ZLIBCFLAGS="-Wno-write-strings"
fi
else
@@ -7734,7 +8404,24 @@ $as_echo "yes" >&6; }
SHARE_LIBPNG=0
LIBPNGDIR=$srcdir/libpng
PNGDEVS="$PNGDEVS_ALL"
- else
+ case $host in
+ *powerpc*)
+ # Building on PPC with gcc, disable libpng's PPC specific
+ # optimizations: we don't include the source file for it
+ # and it only applies to reading, which we don't use.
+ if test $GCC = yes; then
+ CFLAGS="$CFLAGS -DPNG_POWERPC_VSX_OPT=0"
+ fi
+ ;;
+ *arm64*|*aarch64*)
+ # Building on arm64 with gcc, disable libpng's neon
+ # optimizations.
+ if test $GCC = yes; then
+ CFLAGS="$CFLAGS -DPNG_ARM_NEON_OPT=0"
+ fi
+ ;;
+ esac
+ else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for png_create_write_struct in -lpng" >&5
@@ -8133,6 +8820,11 @@ $as_echo "$as_me: Could not find local copy of libtiff. Disabling tiff and xps o
;;
esac
+
+if test x"$SHARE_LIBTIFF" != x"$SHARE_LIBJPEG" ; then
+ as_fn_error $? "Mixing local libtiff with shared libjpeg not supported" "$LINENO" 5
+fi
+
CGLAGS_STORE=$CFLAGS
CFLAGS=-Wno-misleading-indentation
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8187,7 +8879,7 @@ if test x"$SHARE_LIBTIFF" = x"0" ; then
fi
cd "$olddir"
- if test x"$ac_cv_c_compiler_gnu" = x"yes"; then
+ if test x"$GCC" = x"yes"; then
TIFFCFLAGS="-Wno-write-strings $CFLAGS_NMI $CFLAGS_NUD -DJPEG_LIB_MK1_OR_12BIT=0"
fi
# if we're building with our own libjpeg, or we have another libjpeg available, allow jpeg compression in TIFF
@@ -8659,7 +9351,7 @@ fi
case $host in
- *-mingw*|*-msys*|*-cygwin*)
+ *-mingw*|*-msys*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: disabling the ijs device" >&5
$as_echo "$as_me: WARNING: disabling the ijs device" >&2;}
with_ijs=no
@@ -8783,7 +9475,7 @@ $as_echo "yes" >&6; }
JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -DMAC -DMAC_OS_X_BUILD -fsigned-char"
;;
*-aix*)
- if test $ac_cv_c_compiler_gnu = yes; then
+ if test $GCC = yes; then
JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -fsigned-char -DLINUX=1 -DFORTE"
else
JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -qchars=signed -DLINUX=1 -DFORTE"
@@ -8804,7 +9496,7 @@ $as_echo "no" >&6; }
fi
JB2_STDINT_TYPES_IN=
-JBIG2DEC_REQ=0.16
+JBIG2DEC_REQ=0.19
if test "x$JBIG2_DECODER" = x; then
@@ -8996,7 +9688,7 @@ $as_echo "yes" >&6; }
JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -DMAC -DMAC_OS_X_BUILD"
;;
*-aix*)
- if test $ac_cv_c_compiler_gnu = yes; then
+ if test $GCC = yes; then
JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -fsigned-char -DLINUX=1 -DFORTE"
else
JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -qchars=signed -DLINUX=1 -DFORTE"
@@ -9050,7 +9742,7 @@ done
JPX_SSE_CFLAGS=""
if test "x$HAVE_SSE2" = "x" ; then
- if test $ac_cv_c_compiler_gnu = yes; then
+ if test $GCC = yes; then
JPX_SSE_CFLAGS="-U__SSE__"
fi
fi
@@ -9220,10 +9912,10 @@ $as_echo_n "checking for URF support... " >&6; }
$as_echo "yes" >&6; }
ENABLEURF="\$(D_)URF_INCLUDED\$(_D)"
URF_DEVS='urfgray urfrgb urfcmyk'
- GPDL_URF_TOP_OBJ=$(GPDLOBJ)/$(GPDL_URF_TOP_OBJ_FILE)
- URF_INCLUDE=$(I_)$(URFSRCDIR)$(_I)
- URF_DEV=$(GLD)urfd.dev
- SURFX_H=SURFX_H=$(URFSRCDIR)$(D)surfx.h
+ GPDL_URF_TOP_OBJ="\$(GPDLOBJ)/\$(GPDL_URF_TOP_OBJ_FILE)"
+ URF_INCLUDE="\$(I_)\$(URFSRCDIR)\$(_I)"
+ URF_DEV="\$(GLD)urfd.dev"
+ SURFX_H="\$(URFSRCDIR)\$(D)surfx.h"
fi
fi
@@ -10514,7 +11206,15 @@ IBM_DEVS='ibmpro jetp3852'
OKI_DEVS='oki182 okiibm oki4w'
JAPAN_DEVS='lips4 lips4v ljet4pjl lj4dithp dj505j picty180 lips2p bjc880j pr201 pr150 pr1000 pr1000_4 jj100 bj10v bj10vh mj700v2c mj500c mj6000c mj8000c fmpr fmlbp ml600 lbp310 lbp320 md50Mono md50Eco md1xMono escpage lp2000 npdl rpdl'
MISC_PDEVS='uniprint ap3250 atx23 atx24 atx38 itk24i itk38 coslw2p coslwxl declj250 fs600 imagen lj250 m8510 necp6 oce9050 r4081 sj48 tek4696 t4693d2 t4693d4 t4693d8 dl2100 la50 la70 la75 la75plus ln03 xes md2k md5k gdi samsunggdi'
-OPVP_DEVS='opvp oprp'
+
+
+# Check whether --with-openprinting was given.
+if test "${with_openprinting+set}" = set; then :
+ withval=$with_openprinting; OPVP_DEVS='opvp oprp'
+else
+ OPVP_DEVS=''
+fi
+
ETS_HALFTONING_DEVS='rinkj'
@@ -10553,11 +11253,12 @@ while test -n "$drivers"; do
PRINTERS)
P_DEVS0="$P_DEVS0 $CANON_DEVS $EPSON_DEVS $HP_DEVS $LEXMARK_DEVS $BROTHER_DEVS $APPLE_DEVS $IBM_DEVS $OKI_DEVS $JAPAN_DEVS $MISC_PDEVS $ETS_HALFTONING_DEVS $URF_DEVS"
IJS_DEVS0="$IJSDEVS"
- if test x$ac_cv_lib_dl_dlopen != xno -a x$found_iconv != xno; then
- P_DEVS0="$P_DEVS0 $OPVP_DEVS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to include opvp/oprp driver due to missing or disabled prerequisites..." >&5
-$as_echo "$as_me: WARNING: Unable to include opvp/oprp driver due to missing or disabled prerequisites..." >&2;}
+ if test x"$OPVP_DEVS" != x"" ; then
+ if test x$ac_cv_lib_dl_dlopen != xno -a x$found_iconv != xno; then
+ P_DEVS0="$P_DEVS0 $OPVP_DEVS"
+ else
+ as_fn_error $? "Unable to include opvp/oprp driver due to missing or disabled prerequisites..." "$LINENO" 5
+ fi
fi
;;
FILES)
@@ -10822,7 +11523,7 @@ if test "${enable_hidden_visibility+set}" = set; then :
fi
-if test x$hide_symbols = xyes -a $ac_cv_c_compiler_gnu = yes; then
+if test x$hide_symbols = xyes -a $GCC = yes; then
attr_default="__attribute__((visibility(\\\"default\\\")))"
attr_hidden="__attribute__((visibility(\\\"hidden\\\")))"
fi
@@ -10834,7 +11535,7 @@ case $host in
PCL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
XPS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR)"
PDL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GPDL_SONAME_MAJOR)"
- if test $ac_cv_c_compiler_gnu = yes; then
+ if test $GCC = yes; then
# GCC high level flag
DYNAMIC_LIBS="-rdynamic"
else
@@ -10842,7 +11543,7 @@ case $host in
fi
SO_LIB_EXT=".so"
;;
- *-mingw*|*-msys*|*-cygwin*)
+ *-mingw*|*-msys*)
if test x$hide_symbols = xyes; then
attr_default="__declspec(dllexport)"
attr_hidden=""
@@ -10871,6 +11572,32 @@ case $host in
GPDL_SONAME_MAJOR="lib\$(GPDL${libname3}"
GPDL_SONAME_MAJOR_MINOR="lib\$(GPDL${libname2}"
;;
+ *-cygwin*)
+ if test x$hide_symbols = xyes; then
+ attr_default="__declspec(dllexport)"
+ attr_hidden=""
+ fi
+ GS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(GS_SO_BASE).dll.a $_ldflags"
+ PCL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PCL_SO_BASE).dll.a $_ldflags"
+ XPS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(XPS_SO_BASE).dll.a $_ldflags"
+ PDL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PDL_SO_BASE).dll.a $_ldflags"
+ SO_LIB_EXT=""
+ DLL_EXT=".dll"
+ SO_LIB_VERSION_SEPARATOR="-"
+ # make sure the import library doesn't link a program against the DLL with the minor version in it
+ GS_SONAME="lib\$(GS${libname1}"
+ GS_SONAME_MAJOR="lib\$(GS${libname3}"
+ GS_SONAME_MAJOR_MINOR="cyg\$(GS${libname2}"
+ PCL_SONAME="lib\$(PCL${libname1}"
+ PCL_SONAME_MAJOR="lib\$(PCL${libname3}"
+ PCL_SONAME_MAJOR_MINOR="cyg\$(PCL${libname2}"
+ XPS_SONAME="lib\$(XPS${libname1}"
+ XPS_SONAME_MAJOR="lib\$(XPS${libname3}"
+ XPS_SONAME_MAJOR_MINOR="cyg\$(XPS${libname2}"
+ GPDL_SONAME="lib\$(GPDL${libname1}"
+ GPDL_SONAME_MAJOR="lib\$(GPDL${libname3}"
+ GPDL_SONAME_MAJOR_MINOR="cyg\$(GPDL${libname2}"
+ ;;
*bsd*)
DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
GS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
@@ -10881,15 +11608,15 @@ case $host in
;;
*-darwin*)
DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
- GS_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(GS_SONAME_MAJOR_MINOR)"
- PCL_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(PCL_SONAME_MAJOR_MINOR)"
- XPS_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(XPS_SONAME_MAJOR_MINOR)"
- PDL_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(GPDL_SONAME_MAJOR_MINOR)"
+ GS_DYNAMIC_LDFLAGS="-dynamiclib -install_name $DARWIN_LDFLAGS_SO_PREFIX\$(GS_SONAME_MAJOR_MINOR)"
+ PCL_DYNAMIC_LDFLAGS="-dynamiclib -install_name $DARWIN_LDFLAGS_SO_PREFIX\$(PCL_SONAME_MAJOR_MINOR)"
+ XPS_DYNAMIC_LDFLAGS="-dynamiclib -install_name $DARWIN_LDFLAGS_SO_PREFIX\$(XPS_SONAME_MAJOR_MINOR)"
+ PDL_DYNAMIC_LDFLAGS="-dynamiclib -install_name $DARWIN_LDFLAGS_SO_PREFIX\$(GPDL_SONAME_MAJOR_MINOR)"
DYNAMIC_LIBS=""
SO_LIB_EXT=".dylib"
;;
*-sun*|*-solaris*)
- if test $ac_cv_c_compiler_gnu = yes; then
+ if test $GCC = yes; then
DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
else
DYNAMIC_CFLAGS="-KPIC $DYNAMIC_CFLAGS"
@@ -10908,7 +11635,7 @@ case $host in
SO_LIB_EXT=".so"
;;
*-aix*)
- if test $ac_cv_c_compiler_gnu = yes; then
+ if test $GCC = yes; then
DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
GCFLAGS="-Wl,-brtl -D_LARGE_FILES $GCFLAGS"
GS_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
@@ -10927,7 +11654,7 @@ case $host in
esac
if test x$hide_symbols = xyes ; then
- if test $ac_cv_c_compiler_gnu = yes; then
+ if test $GCC = yes; then
DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -fvisibility=hidden"
fi
DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -DGSDLLEXPORT=\"$attr_default\""
@@ -12030,7 +12757,7 @@ esac
EXEEXT=""
case $host in
- *-mingw*|*-msys*|*-cygwin*)
+ *-mingw*|*-msys*)
EXEEXT=".exe"
;;
*)
@@ -12053,7 +12780,7 @@ fi
AUXEXEEXT=""
case $build in
- *-mingw*|*-msys*|*-cygwin*)
+ *-mingw*|*-msys*)
AUXEXEEXT=".exe"
;;
*)
@@ -12096,10 +12823,11 @@ fi
# NOTE: Strict aliasing can cause some parts
# of Ghostscript to malfunction.
# --------------------------------------------------
-if test $ac_cv_c_compiler_gnu = yes; then
+if test $GCC = yes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to explicitly disable strict aliasing" >&5
$as_echo_n "checking whether to explicitly disable strict aliasing... " >&6; }
CFLAGS_backup="$CFLAGS"
+ CFLAGSAUX_backup="$CFLAGSAUX"
CFLAGS="$CFLAGS -fno-strict-aliasing"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -12117,10 +12845,14 @@ if ac_fn_c_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
CFLAGS_backup="$CFLAGS"
+ if test x"$host" = x"$build" ; then
+ CFLAGSAUX_backup="$CFLAGSAUX -fno-strict-aliasing"
+ fi
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
CFLAGS="$CFLAGS_backup"
+ CFLAGSAUX="$CFLAGSAUX_backup"
fi
# --------------------------------------------------
@@ -12881,6 +13613,13 @@ fi
+
+if test x"$GCFLAGSAUX" = x"\$(GCFLAGS)" ; then
+ GCFLAGSAUX="$GCFLAGS"
+fi
+
+CFLAGSAUX=$(echo $CFLAGSAUX | sed -e 's/-DGS_NO_FILESYSTEM//g')
+
SRCDIR="$srcdir"
@@ -12900,6 +13639,8 @@ SRCDIR="$srcdir"
+
+
CONFIG_FILES_LIST="$CONFIG_FILES_LIST $THEMAKEFILE"
if test x"$THEMAKEFILE" != x"$MAKEFILE" && test x"$build" = x"$host"; then
diff --git a/configure.ac b/configure.ac
index 698abd30..d4f56fde 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-dnl Copyright (C) 2001-2019 Artifex Software, Inc.
+dnl Copyright (C) 2001-2020 Artifex Software, Inc.
dnl All Rights Reserved.
dnl
dnl This software is provided AS-IS with no warranty, either express or
@@ -248,7 +248,7 @@ INSTALL_CONTRIB="install-contrib-extras"
if test x"$enable_contrib" = x; then
case $host in
- *-mingw*|*-msys*|*-cygwin*)
+ *-mingw*|*-msys*)
AC_MSG_WARN([disabling contrib devices])
enable_contrib=no
;;
@@ -279,33 +279,38 @@ dnl Set build flags based on environment
dnl --------------------------------------------------
CC_OPT_FLAGS_TO_TRY="-O -DNDEBUG"
+CC_VISIBILITY_FLAGS_TO_TRY=""
SET_DT_SONAME="-soname="
CFLAGS_LARGEFILE=""
case $host in
*-linux*|*-gnu)
- if test $ac_cv_prog_gcc = yes; then
+ if test $GCC = yes; then
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+ CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
fi
;;
*bsd*)
- if test $ac_cv_prog_gcc = yes; then
+ if test $GCC = yes; then
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+ CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
fi
;;
*-darwin*)
- if test $ac_cv_prog_gcc = yes; then
+ if test $GCC = yes; then
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+ CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
fi
SET_DT_SONAME=""
;;
- *-mingw*|*-msys*|*-cygwin*)
- if test $ac_cv_prog_gcc = yes; then
+ *-mingw*|*-msys*)
+ if test $GCC = yes; then
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+ CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
fi
SET_DT_SONAME=""
;;
@@ -313,21 +318,23 @@ case $host in
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CFLAGS_LARGEFILE="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
# the trailing space is required!
- if test $ac_cv_prog_gcc = no; then
+ if test $GCC = no; then
SET_DT_SONAME="-h "
fi
- if test $ac_cv_prog_gcc = yes; then
+ if test $GCC = yes; then
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+ CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
else
CC_DBG_FLAGS_TO_TRY="-g -O0"
fi
;;
*-aix*)
- if test $ac_cv_prog_gcc = yes; then
+ if test $GCC = yes; then
CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
SET_DT_SONAME="so"
+ CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
fi
;;
esac
@@ -335,7 +342,7 @@ esac
AC_SUBST(SET_DT_SONAME)
-if test $ac_cv_prog_gcc = yes; then
+if test $GCC = yes; then
cflags_to_try="-Wall -Wstrict-prototypes -Wundef \
-Wmissing-declarations -Wmissing-prototypes -Wwrite-strings \
-fno-strict-aliasing -Werror=declaration-after-statement \
@@ -365,8 +372,14 @@ void test (char * __restrict p){}
return 1;
],[
CFLAGS="$CFLAGS -DHAVE_RESTRICT=1"
+ if test x"$host" = x"$build" ; then
+ CFLAGSAUX="$CFLAGSAUX -DHAVE_RESTRICT=1"
+ fi
AC_MSG_RESULT([yes])],[
CFLAGS="$CFLAGS -DHAVE_RESTRICT=0"
+ if test x"$host" = x"$build" ; then
+ CFLAGSAUX="$CFLAGSAUX -DHAVE_RESTRICT=0"
+ fi
AC_MSG_RESULT([no])])
@@ -378,10 +391,10 @@ ARCH_CONF_HEADER=
if test x"$with_arch_h" = x""; then
case $host in
- x86_64*-mingw*|x86_64*-msys*|x86_64*-cygwin*)
+ x86_64*-mingw*|x86_64*-msys*)
ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/windows-x64-msvc.h"
;;
- *-mingw*|*-msys*|*-cygwin*)
+ *-mingw*|*-msys*)
ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/windows-x86-msvc.h"
;;
*-darwin*)
@@ -442,6 +455,17 @@ for flag in $dbgflags_to_try; do
CFLAGS=$old_cflags
done
+CFLAGS_VISIBILITY=""
+
+for flag in $CC_VISIBILITY_FLAGS_TO_TRY; do
+ CFLAGS="$CFLAGS $flag"
+ AC_TRY_COMPILE(, [return 0;], [
+ echo " $flag"
+ CFLAGS_VISIBILITY="$CFLAGS_VISIBILITY $flag"
+ ])
+ CFLAGS=$old_cflags
+done
+
AC_MSG_RESULT([ ...done.])
dnl ----------------------------
@@ -459,7 +483,7 @@ AC_LINK_IFELSE(
[AC_LANG_PROGRAM([#include <stdio.h>], [
return(0);
])],
- [CFLAGS_SANITIZE="$CFLAGS"], [CFLAGS_SANITIZE="****************ADDRESS_SANITIZER_NOT_SUPPORTED*********************"])
+ [CFLAGS_SANITIZE="$CFLAGS"], [CFLAGS_SANITIZE="'****************ADDRESS_SANITIZER_NOT_SUPPORTED*********************'"])
CFLAGS="$CFLAGS_SAVED"
@@ -794,6 +818,163 @@ AC_SUBST(SYNC)
AC_SUBST(PTHREAD_LIBS)
AC_SUBST(RECURSIVE_MUTEXATTR)
+dnl Tesseract/Leptonica detection
+TESSERACTDIR=tesseract
+LEPTONICADIR=leptonica
+OCR_VERSION=0
+LEPTONICAINCLUDE=
+TESSERACTINCLUDE=
+TESSERACT_LIBS=
+OCR_DEVS=
+
+AC_ARG_WITH([tesseract], AC_HELP_STRING([--without-tesseract],
+ [do not try to use the Tesseract library for OCR]))
+
+if test x$with_tesseract != xno; then
+ AC_MSG_CHECKING([for local Tesseract library source])
+ if test -d $srcdir/tesseract && test -d $srcdir/leptonica; then
+ AC_MSG_RESULT([yes])
+ AC_LANG_PUSH(C++)
+ AC_TRY_COMPILE([],
+ [return 0;],
+ [HAVE_CXX_COMPILER=yes],
+ [HAVE_CXX_COMPILER=no])
+ if test x$HAVE_CXX_COMPILER != xyes; then
+ AC_MSG_WARN([Disabling tesseract as no working C++ compiler])
+ else
+ dnl --------------------------------------------------
+ dnl check for sse4.1, avx, avx2 or fma
+ dnl --------------------------------------------------
+ AC_MSG_CHECKING([sse4.1 support])
+ save_cxxflags=$CXXFLAGS
+ TESS_CXXFLAGS=""
+ CXXFLAGS="$CXXFLAGS -msse4.1"
+
+ TESS_SSE4_1=""
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include <emmintrin.h>
+ #include <smmintrin.h>],
+ [__m128i input1;
+ unsigned char buf1[[128]];
+ input1 = _mm_loadu_si128((const __m128i *)buf1);
+ input1 = _mm_hadd_epi32(input1, input1);
+ return(0);
+ ])],
+ [TESS_SSE4_1="-msse4.1"],
+ [TESS_SSE4_1=""])
+
+ if test "x$TESS_SSE4_1" != x; then
+ AC_MSG_RESULT(yes)
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_SSE4_1"
+ else
+ AC_MSG_RESULT(no)
+ fi
+
+ AC_MSG_CHECKING([avx support])
+ CXXFLAGS="$save_cxxflags -mavx"
+
+ TESS_AVX=""
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include <immintrin.h>],
+ [__m256d input1 = _mm256_setzero_pd();
+ input1 = _mm256_hadd_pd(input1, input1);
+ return(0);])],
+ [TESS_AVX="-mavx"],
+ [TESS_AVX=""])
+
+ if test "x$TESS_AVX" != x; then
+ AC_MSG_RESULT(yes)
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_AVX"
+ else
+ AC_MSG_RESULT(no)
+ fi
+
+ AC_MSG_CHECKING([avx2 support])
+ CXXFLAGS="$save_cxxflags -mavx2"
+
+ TESS_AVX2=""
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include <immintrin.h>],
+ [__m256i input1;
+ unsigned char buf1[[256]];
+ input1 = _mm256_loadu_si256((const __m256i *)buf1);
+ input1 = _mm256_adds_epu8(input1, input1);
+ return(0);])],
+ [TESS_AVX2="-mavx2"],
+ [TESS_AVX2=""])
+
+ if test "x$TESS_AVX2" != x; then
+ AC_MSG_RESULT(yes)
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_AVX2"
+ else
+ AC_MSG_RESULT(no)
+ fi
+
+ AC_MSG_CHECKING([fma support])
+ CXXFLAGS="$save_cxxflags -mfma"
+
+ TESS_FMA=""
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include <immintrin.h>],
+ [__m256d input1 = _mm256_setzero_pd();
+ input1 = _mm256_fmadd_pd(input1, input1, input1);
+ return(0);])],
+ [TESS_FMA="-mfma"],
+ [TESS_FMA=""])
+
+ if test "x$TESS_FMA" != x; then
+ AC_MSG_RESULT(yes)
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_FMA"
+ else
+ AC_MSG_RESULT(no)
+ fi
+
+ AC_MSG_CHECKING([neon support])
+ CXXFLAGS="$save_cxxflags -mfpu=neon -mcpu=cortex-a53"
+
+ TESS_NEON=""
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include "arm_neon.h"],
+ [int32x4_t round = vdupq_n_s32(10);
+ return(0);])],
+ [TESS_NEON="-mfpu=neon -mcpu=cortex-a53 -D__ARM_NEON__"],
+ [TESS_NEON=""])
+
+ if test "x$TESS_NEON" != x; then
+ AC_MSG_RESULT(yes)
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_NEON"
+ else
+ AC_MSG_RESULT(no)
+ fi
+
+ CXXFLAGS="$save_cxxflags"
+
+ OCR_VERSION=1
+ OCR_DEVS="\$(DD)ocr.dev \$(DD)hocr.dev \$(DD)pdfocr8.dev \$(DD)pdfocr24.dev \$(DD)pdfocr32.dev"
+ LEPTONICAINCLUDE="include base/leptonica.mak"
+ TESSERACTINCLUDE="include base/tesseract.mak"
+ TESSERACT_LIBS="-lstdc++"
+ fi
+ AC_LANG_POP()
+ else
+ AC_MSG_RESULT([no])
+ fi
+fi
+
+AC_SUBST(TESSERACT_LIBS)
+AC_SUBST(LEPTONICAINCLUDE)
+AC_SUBST(TESSERACTINCLUDE)
+AC_SUBST(LEPTONICADIR)
+AC_SUBST(TESSERACTDIR)
+AC_SUBST(OCR_DEVS)
+AC_SUBST(OCR_VERSION)
+AC_SUBST(TESS_AVX)
+AC_SUBST(TESS_AVX2)
+AC_SUBST(TESS_FMA)
+AC_SUBST(TESS_SSE4_1)
+AC_SUBST(TESS_NEON)
+AC_SUBST(TESS_CXXFLAGS)
+
dnl Tests for iconv (Needed for OpenPrinting Vector, "opvp" output device)
AC_ARG_WITH(libiconv,
[AC_HELP_STRING([--with-libiconv=@<:@no/gnu/native@:>@],
@@ -1197,7 +1378,7 @@ else
SHARE_ZLIB=0
ZLIBDIR=$srcdir/zlib
- if test x"$ac_cv_prog_gcc" = x"yes"; then
+ if test x"$GCC" = x"yes"; then
ZLIBCFLAGS="-Wno-write-strings"
fi
else
@@ -1246,7 +1427,24 @@ else
SHARE_LIBPNG=0
LIBPNGDIR=$srcdir/libpng
PNGDEVS="$PNGDEVS_ALL"
- else
+ case $host in
+ *powerpc*)
+ # Building on PPC with gcc, disable libpng's PPC specific
+ # optimizations: we don't include the source file for it
+ # and it only applies to reading, which we don't use.
+ if test $GCC = yes; then
+ CFLAGS="$CFLAGS -DPNG_POWERPC_VSX_OPT=0"
+ fi
+ ;;
+ *arm64*|*aarch64*)
+ # Building on arm64 with gcc, disable libpng's neon
+ # optimizations.
+ if test $GCC = yes; then
+ CFLAGS="$CFLAGS -DPNG_ARM_NEON_OPT=0"
+ fi
+ ;;
+ esac
+ else
AC_MSG_RESULT([no])
AC_CHECK_LIB(png, png_create_write_struct, [
AC_CHECK_HEADERS(png.h, [
@@ -1419,6 +1617,11 @@ case "x$with_system_libtiff" in
;;
esac
+
+if test x"$SHARE_LIBTIFF" != x"$SHARE_LIBJPEG" ; then
+ AC_MSG_ERROR([Mixing local libtiff with shared libjpeg not supported])
+fi
+
CGLAGS_STORE=$CFLAGS
CFLAGS=-Wno-misleading-indentation
AC_TRY_COMPILE([], [return 0;],
@@ -1443,7 +1646,7 @@ if test x"$SHARE_LIBTIFF" = x"0" ; then
fi
cd "$olddir"
- if test x"$ac_cv_prog_gcc" = x"yes"; then
+ if test x"$GCC" = x"yes"; then
TIFFCFLAGS="-Wno-write-strings $CFLAGS_NMI $CFLAGS_NUD -DJPEG_LIB_MK1_OR_12BIT=0"
fi
# if we're building with our own libjpeg, or we have another libjpeg available, allow jpeg compression in TIFF
@@ -1669,7 +1872,7 @@ AC_ARG_WITH([ijs], AC_HELP_STRING([--without-ijs],
[disable IJS driver support]))
case $host in
- *-mingw*|*-msys*|*-cygwin*)
+ *-mingw*|*-msys*)
AC_MSG_WARN([disabling the ijs device])
with_ijs=no
;;
@@ -1735,7 +1938,7 @@ if test x$with_luratech != xno; then
JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -DMAC -DMAC_OS_X_BUILD -fsigned-char"
;;
*-aix*)
- if test $ac_cv_prog_gcc = yes; then
+ if test $GCC = yes; then
JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -fsigned-char -DLINUX=1 -DFORTE"
else
JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -qchars=signed -DLINUX=1 -DFORTE"
@@ -1755,7 +1958,7 @@ if test x$with_luratech != xno; then
fi
JB2_STDINT_TYPES_IN=
-JBIG2DEC_REQ=0.16
+JBIG2DEC_REQ=0.19
if test "x$JBIG2_DECODER" = x; then
dnl look for jbig2dec
@@ -1876,7 +2079,7 @@ if test x$with_luratech != xno; then
JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -DMAC -DMAC_OS_X_BUILD"
;;
*-aix*)
- if test $ac_cv_prog_gcc = yes; then
+ if test $GCC = yes; then
JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -fsigned-char -DLINUX=1 -DFORTE"
else
JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -qchars=signed -DLINUX=1 -DFORTE"
@@ -1917,7 +2120,7 @@ AC_CHECK_FUNCS([fseeko], [CFLAGS_OPJ_HAVE_FSEEKO="-DOPJ_HAVE_FSEEKO=1"], [CFLAGS
JPX_SSE_CFLAGS=""
if test "x$HAVE_SSE2" = "x" ; then
- if test $ac_cv_prog_gcc = yes; then
+ if test $GCC = yes; then
JPX_SSE_CFLAGS="-U__SSE__"
fi
fi
@@ -2003,10 +2206,10 @@ if test x$with_urf != xno; then
AC_MSG_RESULT([yes])
ENABLEURF="\$(D_)URF_INCLUDED\$(_D)"
URF_DEVS='urfgray urfrgb urfcmyk'
- GPDL_URF_TOP_OBJ=$(GPDLOBJ)/$(GPDL_URF_TOP_OBJ_FILE)
- URF_INCLUDE=$(I_)$(URFSRCDIR)$(_I)
- URF_DEV=$(GLD)urfd.dev
- SURFX_H=SURFX_H=$(URFSRCDIR)$(D)surfx.h
+ GPDL_URF_TOP_OBJ="\$(GPDLOBJ)/\$(GPDL_URF_TOP_OBJ_FILE)"
+ URF_INCLUDE="\$(I_)\$(URFSRCDIR)\$(_I)"
+ URF_DEV="\$(GLD)urfd.dev"
+ SURFX_H="\$(URFSRCDIR)\$(D)surfx.h"
fi
fi
@@ -2412,7 +2615,8 @@ IBM_DEVS='ibmpro jetp3852'
OKI_DEVS='oki182 okiibm oki4w'
JAPAN_DEVS='lips4 lips4v ljet4pjl lj4dithp dj505j picty180 lips2p bjc880j pr201 pr150 pr1000 pr1000_4 jj100 bj10v bj10vh mj700v2c mj500c mj6000c mj8000c fmpr fmlbp ml600 lbp310 lbp320 md50Mono md50Eco md1xMono escpage lp2000 npdl rpdl'
MISC_PDEVS='uniprint ap3250 atx23 atx24 atx38 itk24i itk38 coslw2p coslwxl declj250 fs600 imagen lj250 m8510 necp6 oce9050 r4081 sj48 tek4696 t4693d2 t4693d4 t4693d8 dl2100 la50 la70 la75 la75plus ln03 xes md2k md5k gdi samsunggdi'
-OPVP_DEVS='opvp oprp'
+
+AC_ARG_WITH([openprinting],, OPVP_DEVS='opvp oprp', OPVP_DEVS='')
ETS_HALFTONING_DEVS='rinkj'
@@ -2452,10 +2656,12 @@ while test -n "$drivers"; do
PRINTERS)
P_DEVS0="$P_DEVS0 $CANON_DEVS $EPSON_DEVS $HP_DEVS $LEXMARK_DEVS $BROTHER_DEVS $APPLE_DEVS $IBM_DEVS $OKI_DEVS $JAPAN_DEVS $MISC_PDEVS $ETS_HALFTONING_DEVS $URF_DEVS"
IJS_DEVS0="$IJSDEVS"
- if test x$ac_cv_lib_dl_dlopen != xno -a x$found_iconv != xno; then
- P_DEVS0="$P_DEVS0 $OPVP_DEVS"
- else
- AC_MSG_WARN(Unable to include opvp/oprp driver due to missing or disabled prerequisites...)
+ if test x"$OPVP_DEVS" != x"" ; then
+ if test x$ac_cv_lib_dl_dlopen != xno -a x$found_iconv != xno; then
+ P_DEVS0="$P_DEVS0 $OPVP_DEVS"
+ else
+ AC_MSG_ERROR(Unable to include opvp/oprp driver due to missing or disabled prerequisites...)
+ fi
fi
;;
FILES)
@@ -2718,7 +2924,7 @@ AC_ARG_ENABLE([hidden-visibility],
[hide all shared library symbols which are not part of its public API]),
[hide_symbols=yes])
-if test x$hide_symbols = xyes -a $ac_cv_prog_gcc = yes; then
+if test x$hide_symbols = xyes -a $GCC = yes; then
attr_default="__attribute__((visibility(\\\"default\\\")))"
attr_hidden="__attribute__((visibility(\\\"hidden\\\")))"
fi
@@ -2730,7 +2936,7 @@ case $host in
PCL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
XPS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR)"
PDL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GPDL_SONAME_MAJOR)"
- if test $ac_cv_prog_gcc = yes; then
+ if test $GCC = yes; then
# GCC high level flag
DYNAMIC_LIBS="-rdynamic"
else
@@ -2738,7 +2944,7 @@ case $host in
fi
SO_LIB_EXT=".so"
;;
- *-mingw*|*-msys*|*-cygwin*)
+ *-mingw*|*-msys*)
if test x$hide_symbols = xyes; then
attr_default="__declspec(dllexport)"
attr_hidden=""
@@ -2767,6 +2973,32 @@ case $host in
GPDL_SONAME_MAJOR="lib\$(GPDL${libname3}"
GPDL_SONAME_MAJOR_MINOR="lib\$(GPDL${libname2}"
;;
+ *-cygwin*)
+ if test x$hide_symbols = xyes; then
+ attr_default="__declspec(dllexport)"
+ attr_hidden=""
+ fi
+ GS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(GS_SO_BASE).dll.a $_ldflags"
+ PCL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PCL_SO_BASE).dll.a $_ldflags"
+ XPS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(XPS_SO_BASE).dll.a $_ldflags"
+ PDL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PDL_SO_BASE).dll.a $_ldflags"
+ SO_LIB_EXT=""
+ DLL_EXT=".dll"
+ SO_LIB_VERSION_SEPARATOR="-"
+ # make sure the import library doesn't link a program against the DLL with the minor version in it
+ GS_SONAME="lib\$(GS${libname1}"
+ GS_SONAME_MAJOR="lib\$(GS${libname3}"
+ GS_SONAME_MAJOR_MINOR="cyg\$(GS${libname2}"
+ PCL_SONAME="lib\$(PCL${libname1}"
+ PCL_SONAME_MAJOR="lib\$(PCL${libname3}"
+ PCL_SONAME_MAJOR_MINOR="cyg\$(PCL${libname2}"
+ XPS_SONAME="lib\$(XPS${libname1}"
+ XPS_SONAME_MAJOR="lib\$(XPS${libname3}"
+ XPS_SONAME_MAJOR_MINOR="cyg\$(XPS${libname2}"
+ GPDL_SONAME="lib\$(GPDL${libname1}"
+ GPDL_SONAME_MAJOR="lib\$(GPDL${libname3}"
+ GPDL_SONAME_MAJOR_MINOR="cyg\$(GPDL${libname2}"
+ ;;
*bsd*)
DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
GS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
@@ -2777,15 +3009,15 @@ case $host in
;;
*-darwin*)
DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
- GS_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(GS_SONAME_MAJOR_MINOR)"
- PCL_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(PCL_SONAME_MAJOR_MINOR)"
- XPS_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(XPS_SONAME_MAJOR_MINOR)"
- PDL_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(GPDL_SONAME_MAJOR_MINOR)"
+ GS_DYNAMIC_LDFLAGS="-dynamiclib -install_name $DARWIN_LDFLAGS_SO_PREFIX\$(GS_SONAME_MAJOR_MINOR)"
+ PCL_DYNAMIC_LDFLAGS="-dynamiclib -install_name $DARWIN_LDFLAGS_SO_PREFIX\$(PCL_SONAME_MAJOR_MINOR)"
+ XPS_DYNAMIC_LDFLAGS="-dynamiclib -install_name $DARWIN_LDFLAGS_SO_PREFIX\$(XPS_SONAME_MAJOR_MINOR)"
+ PDL_DYNAMIC_LDFLAGS="-dynamiclib -install_name $DARWIN_LDFLAGS_SO_PREFIX\$(GPDL_SONAME_MAJOR_MINOR)"
DYNAMIC_LIBS=""
SO_LIB_EXT=".dylib"
;;
*-sun*|*-solaris*)
- if test $ac_cv_prog_gcc = yes; then
+ if test $GCC = yes; then
DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
else
DYNAMIC_CFLAGS="-KPIC $DYNAMIC_CFLAGS"
@@ -2804,7 +3036,7 @@ case $host in
SO_LIB_EXT=".so"
;;
*-aix*)
- if test $ac_cv_prog_gcc = yes; then
+ if test $GCC = yes; then
DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
GCFLAGS="-Wl,-brtl -D_LARGE_FILES $GCFLAGS"
GS_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
@@ -2823,7 +3055,7 @@ case $host in
esac
if test x$hide_symbols = xyes ; then
- if test $ac_cv_prog_gcc = yes; then
+ if test $GCC = yes; then
DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -fvisibility=hidden"
fi
DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -DGSDLLEXPORT=\"$attr_default\""
@@ -3210,7 +3442,7 @@ AC_SUBST(AUXDIRPOSTFIX)
EXEEXT=""
case $host in
- *-mingw*|*-msys*|*-cygwin*)
+ *-mingw*|*-msys*)
EXEEXT=".exe"
;;
*)
@@ -3230,7 +3462,7 @@ AC_SUBST(EXEEXT)
AUXEXEEXT=""
case $build in
- *-mingw*|*-msys*|*-cygwin*)
+ *-mingw*|*-msys*)
AUXEXEEXT=".exe"
;;
*)
@@ -3271,15 +3503,20 @@ AC_SUBST(VERSIONED_PATH)
# NOTE: Strict aliasing can cause some parts
# of Ghostscript to malfunction.
# --------------------------------------------------
-if test $ac_cv_prog_gcc = yes; then
+if test $GCC = yes; then
AC_MSG_CHECKING([whether to explicitly disable strict aliasing])
CFLAGS_backup="$CFLAGS"
+ CFLAGSAUX_backup="$CFLAGSAUX"
CFLAGS="$CFLAGS -fno-strict-aliasing"
AC_TRY_COMPILE(, [return 0;], [
AC_MSG_RESULT([yes])
CFLAGS_backup="$CFLAGS"
+ if test x"$host" = x"$build" ; then
+ CFLAGSAUX_backup="$CFLAGSAUX -fno-strict-aliasing"
+ fi
])
CFLAGS="$CFLAGS_backup"
+ CFLAGSAUX="$CFLAGSAUX_backup"
fi
# --------------------------------------------------
@@ -3427,6 +3664,13 @@ AC_ARG_ENABLE([mkromfs-quiet], AC_HELP_STRING([--enable-mkromfs-quiet],
AC_SUBST(MKROMFS_FLAGS)
+
+if test x"$GCFLAGSAUX" = x"\$(GCFLAGS)" ; then
+ GCFLAGSAUX="$GCFLAGS"
+fi
+
+CFLAGSAUX=$(echo $CFLAGSAUX | sed -e 's/-DGS_NO_FILESYSTEM//g')
+
dnl --------------------------------------------------
dnl Do substitutions
dnl --------------------------------------------------
@@ -3440,6 +3684,7 @@ AC_SUBST(STRIP_XE)
AC_SUBST(JPX_SSE_CFLAGS)
AC_SUBST(CCAUX)
+AC_SUBST(CFLAGSAUX)
AC_SUBST(GCFLAGSAUX)
AC_SUBST(CAPOPTAUX)
AC_SUBST(CFLAGSAUX_STANDARD)
@@ -3448,6 +3693,7 @@ AC_SUBST(CFLAGSAUX_PROFILE)
AC_SUBST(LDFLAGSAUX)
AC_SUBST(AUXEXTRALIBS)
AC_SUBST(ARCH_AUTOCONF_HEADER)
+AC_SUBST(CFLAGS_VISIBILITY)
CONFIG_FILES_LIST="$CONFIG_FILES_LIST $THEMAKEFILE"
diff --git a/contrib/contrib.mak b/contrib/contrib.mak
index bb266407..2edee7af 100644
--- a/contrib/contrib.mak
+++ b/contrib/contrib.mak
@@ -22,6 +22,10 @@
CONTRIB_MAK=$(CONTRIBDIR)$(D)contrib.mak $(TOP_MAKEFILES)
CONTRIBSRC=$(CONTRIBDIR)$(D)
+# Almost all device drivers depend on the following:
+CONTDEVH=$(gserrors_h) $(gx_h) $(gxdevice_h)
+CONTDEV=$(AK) $(ECHOGS_XE) $(GDEVH)
+
###### --------------------------- Catalog -------------------------- ######
# The following drivers are user-contributed, and maintained (if at all) by
@@ -53,8 +57,6 @@ CONTRIBSRC=$(CONTRIBDIR)$(D)
# cdnj500 HP DesignJet 500
# chp2200 HP Business Inkjet 2200
# dl2100 DEC DL2100
-# dmprt dot matrix printer driver for Ghostscript (it can use
-# dviprt printer config files, japanese)
# escpage Epson ESC/Page driver for Ghostscript (japanese)
# fmpr Fujitsu FMPR (japanese)
# fmlbp Fujitsu FMLBP2xx Page Printer (japanese)
@@ -152,16 +154,16 @@ appledmp_=$(DEVOBJ)gdevadmp.$(OBJ)
$(DEVOBJ)gdevadmp.$(OBJ) : $(CONTRIBSRC)gdevadmp.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevadmp.$(OBJ) $(C_) $(CONTRIBSRC)gdevadmp.c
-$(DD)appledmp.dev : $(appledmp_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)appledmp.dev : $(appledmp_) $(DD)page.dev $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)appledmp $(appledmp_)
-$(DD)iwhi.dev : $(appledmp_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)iwhi.dev : $(appledmp_) $(DD)page.dev $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)iwhi $(appledmp_)
-$(DD)iwlo.dev : $(appledmp_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)iwlo.dev : $(appledmp_) $(DD)page.dev $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)iwlo $(appledmp_)
-$(DD)iwlq.dev : $(appledmp_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)iwlq.dev : $(appledmp_) $(DD)page.dev $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)iwlq $(appledmp_)
@@ -185,19 +187,19 @@ $(DEVOBJ)gdevbjca.$(OBJ) : $(CONTRIBSRC)gdevbjca.c $(PDEVH) $(bjc_h) \
$(DEVCC) $(DEVO_)gdevbjca.$(OBJ) $(C_) $(CONTRIBSRC)gdevbjca.c
$(DD)bjcmono.dev : $(bjc_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)bjcmono $(bjc_)
$(DD)bjcgray.dev : $(bjc_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)bjcgray $(bjc_)
$(DD)bjccmyk.dev : $(bjc_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)bjccmyk $(bjc_)
$(DD)bjccolor.dev : $(bjc_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)bjccolor $(bjc_)
@@ -208,25 +210,25 @@ cdeskjet8_=$(DEVOBJ)gdevcd8.$(OBJ) $(HPPCL)
# Author: Uli Wortmann (uliw@erdw.ethz.ch), Martin Gerbershagen (ger@ulm.temic.de)
# Printer: HP 670
$(DD)cdj670.dev : $(cdeskjet8_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)cdj670 $(cdeskjet8_)
# Author: Uli Wortmann (uliw@erdw.ethz.ch)
# Printer: HP 850
$(DD)cdj850.dev : $(cdeskjet8_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)cdj850 $(cdeskjet8_)
# Author: Uli Wortmann (uliw@erdw.ethz.ch), Martin Gerbershagen (ger@ulm.temic.de)
# Printer: HP 890
$(DD)cdj890.dev : $(cdeskjet8_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)cdj890 $(cdeskjet8_)
# Author: Uli Wortmann (uliw@erdw.ethz.ch), Martin Gerbershagen (ger@ulm.temic.de)
# Printer: HP 1600
$(DD)cdj1600.dev : $(cdeskjet8_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)cdj1600 $(cdeskjet8_)
$(DEVOBJ)gdevcd8.$(OBJ) : $(CONTRIBSRC)gdevcd8.c $(PDEVH) $(math__h)\
@@ -244,7 +246,8 @@ $(DEVOBJ)gdevcd8.$(OBJ) : $(CONTRIBSRC)gdevcd8.c $(PDEVH) $(math__h)\
# Author: Matthew Gelhaus (mgelhaus@proaxis.com)
# Printer: HP 880c
-$(DD)cdj880.dev : $(cdeskjet8_) $(DD)page.dev
+$(DD)cdj880.dev : $(cdeskjet8_) $(DD)page.dev $(CONTDEV) \
+ $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)cdj880 $(cdeskjet8_)
@@ -255,7 +258,7 @@ cdeskjet9_=$(DEVOBJ)gdevdj9.$(OBJ) $(HPPCL)
# Author: Rene Harsch (rene@harsch.net)
# Printer: HP 970Cxi
$(DD)cdj970.dev : $(cdeskjet9_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)cdj970 $(cdeskjet9_)
$(DEVOBJ)gdevdj9.$(OBJ) : $(CONTRIBSRC)gdevdj9.c $(PDEVH) $(math__h) $(string__h)\
@@ -268,7 +271,7 @@ $(DEVOBJ)gdevdj9.$(OBJ) : $(CONTRIBSRC)gdevdj9.c $(PDEVH) $(math__h) $(string__h
### NOTE: Same as chp2200 (some PJL and CRD changes).
$(DD)cdnj500.dev : $(cdeskjet8_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)cdnj500 $(cdeskjet8_)
@@ -277,7 +280,7 @@ $(DD)cdnj500.dev : $(cdeskjet8_) $(DD)page.dev \
### NOTE: Depends on the presence of the cdj850 section.
$(DD)chp2200.dev : $(cdeskjet8_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)chp2200 $(cdeskjet8_)
@@ -288,11 +291,11 @@ $(DD)chp2200.dev : $(cdeskjet8_) $(DD)page.dev \
GDIMONO=$(DEVOBJ)gdevgdi.$(OBJ) $(HPPCL)
$(DD)gdi.dev : $(GDIMONO) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)gdi $(GDIMONO)
$(DD)samsunggdi.dev : $(GDIMONO) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)samsunggdi $(GDIMONO)
$(DEVOBJ)gdevgdi.$(OBJ) : $(CONTRIBSRC)gdevgdi.c $(PDEVH) $(gdevpcl_h) \
@@ -306,17 +309,17 @@ $(DEVOBJ)gdevgdi.$(OBJ) : $(CONTRIBSRC)gdevgdi.c $(PDEVH) $(gdevpcl_h) \
hl1250_=$(DEVOBJ)gdevhl12.$(OBJ) $(HPDLJM)
$(DD)hl1250.dev : $(hl1250_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hl1250 $(hl1250_)
$(DD)hl1240.dev : $(hl1250_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hl1240 $(hl1250_)
# Author: Marek Michalkiewicz <marekm@linux.org.pl>
# Printer: Brother HL-1250 (may work with some other models too)
$(DEVOBJ)gdevhl12.$(OBJ) : $(CONTRIBSRC)gdevhl12.c $(PDEVH) $(gdevdljm_h) \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevhl12.$(OBJ) $(C_) $(CONTRIBSRC)gdevhl12.c
@@ -327,37 +330,37 @@ ln03_=$(DEVOBJ)gdevln03.$(OBJ)
# Author: Ulrich Mueller (ulm@vsnhd1.cern.ch)
# Printer: DEC LN03
$(DD)ln03.dev : $(ln03_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)ln03 $(ln03_)
# Author: Nick Brown (nick.brown@coe.int)
# Printer: DEClaser 2100
$(DD)dl2100.dev : $(ln03_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)dl2100 $(ln03_)
# Author: Ian MacPhedran (macphed@dvinci.USask.CA)
# Printer: DEC LA50
$(DD)la50.dev : $(ln03_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)la50 $(ln03_)
# Author: Bruce Lowekamp (lowekamp@csugrad.cs.vt.edu)
# Printer: DEC LA70
$(DD)la70.dev : $(ln03_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)la70 $(ln03_)
# Author: Ian MacPhedran (macphed@dvinci.USask.CA)
# Printer: DEC LA75
$(DD)la75.dev : $(ln03_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)la75 $(ln03_)
# Author: Andre' Beck (Andre_Beck@IRS.Inf.TU-Dresden.de)
# Printer: DEC LA75plus
$(DD)la75plus.dev : $(ln03_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)la75plus $(ln03_)
$(DEVOBJ)gdevln03.$(OBJ) : $(CONTRIBSRC)gdevln03.c $(PDEVH) \
@@ -380,27 +383,27 @@ $(DEVOBJ)gdevescv.$(OBJ) : $(ESCV_SRC)gdevescv.c $(ESCV_SRC)gdevescv.h $(PDEVH)
$(DEVCC) -DA4 $(DEVO_)gdevescv.$(OBJ) $(C_) $(escv_opts) $(ESCV_SRC)gdevescv.c
$(DD)alc1900.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)alc1900 $(escv_)
$(DD)alc2000.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)alc2000 $(escv_)
$(DD)alc4000.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)alc4000 $(escv_)
$(DD)alc4100.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)alc4100 $(escv_)
$(DD)alc8500.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)alc8500 $(escv_)
$(DD)alc8600.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)alc8600 $(escv_)
$(DD)alc9100.dev : $(escv_) $(DD)page.dev \
@@ -408,11 +411,11 @@ $(DD)alc9100.dev : $(escv_) $(DD)page.dev \
$(SETPDEV) $(DD)alc9100 $(escv_)
$(DD)lp3000c.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp3000c $(escv_)
$(DD)lp8000c.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp8000c $(escv_)
$(DD)lp8200c.dev : $(escv_) $(DD)page.dev \
@@ -420,15 +423,15 @@ $(DD)lp8200c.dev : $(escv_) $(DD)page.dev \
$(SETPDEV) $(DD)lp8200c $(escv_)
$(DD)lp8300c.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp8300c $(escv_)
$(DD)lp8500c.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp8500c $(escv_)
$(DD)lp8800c.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp8800c $(escv_)
$(DD)lp9000c.dev : $(escv_) $(DD)page.dev \
@@ -436,177 +439,177 @@ $(DD)lp9000c.dev : $(escv_) $(DD)page.dev \
$(SETPDEV) $(DD)lp9000c $(escv_)
$(DD)lp9200c.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp9200c $(escv_)
$(DD)lp9500c.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp9500c $(escv_)
$(DD)lp9800c.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp9800c $(escv_)
$(DD)lps6500.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lps6500 $(escv_)
$(DD)epl2050.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)epl2050 $(escv_)
$(DD)epl2050p.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)epl2050p $(escv_)
$(DD)epl2120.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)epl2120 $(escv_)
$(DD)epl2500.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)epl2500 $(escv_)
$(DD)epl2750.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)epl2750 $(escv_)
$(DD)epl5800.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)epl5800 $(escv_)
$(DD)epl5900.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)epl5900 $(escv_)
$(DD)epl6100.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)epl6100 $(escv_)
$(DD)epl6200.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)epl6200 $(escv_)
$(DD)lp1800.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp1800 $(escv_)
$(DD)lp1900.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp1900 $(escv_)
$(DD)lp2200.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp2200 $(escv_)
$(DD)lp2400.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp2400 $(escv_)
$(DD)lp2500.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp2500 $(escv_)
$(DD)lp7500.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp7500 $(escv_)
$(DD)lp7700.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp7700 $(escv_)
$(DD)lp7900.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp7900 $(escv_)
$(DD)lp8100.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp8100 $(escv_)
$(DD)lp8300f.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp8300f $(escv_)
$(DD)lp8400f.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp8400f $(escv_)
$(DD)lp8600.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp8600 $(escv_)
$(DD)lp8600f.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp8600f $(escv_)
$(DD)lp8700.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp8700 $(escv_)
$(DD)lp8900.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp8900 $(escv_)
$(DD)lp9000b.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp9000b $(escv_)
$(DD)lp9100.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp9100 $(escv_)
$(DD)lp9200b.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp9200b $(escv_)
$(DD)lp9300.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp9300 $(escv_)
$(DD)lp9400.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp9400 $(escv_)
$(DD)lp9600.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp9600 $(escv_)
$(DD)lp9600s.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp9600s $(escv_)
$(DD)lps4500.dev : $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lps4500 $(escv_)
$(DD)eplcolor.dev: $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)eplcolor $(escv_)
$(DD)eplmono.dev: $(escv_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)eplmono $(escv_)
# ------ The Lexmark 5700 and 7000 devices ------ #
lex7000_=$(DEVOBJ)gdevlx7.$(OBJ)
$(DD)lex7000.dev : $(lex7000_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lex7000 $(lex7000_)
lex5700_=$(DEVOBJ)gdevlx7.$(OBJ)
$(DD)lex5700.dev : $(lex5700_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lex5700 $(lex5700_)
lex3200_=$(DEVOBJ)gdevlx7.$(OBJ)
$(DD)lex3200.dev : $(lex3200_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lex3200 $(lex3200_)
lex2050_=$(DEVOBJ)gdevlx7.$(OBJ)
$(DD)lex2050.dev : $(lex2050_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lex2050 $(lex2050_)
$(DEVOBJ)gdevlx7.$(OBJ) : $(CONTRIBSRC)gdevlx7.c $(PDEVH) \
@@ -623,7 +626,7 @@ $(DEVOBJ)gdevlx32.$(OBJ) : $(CONTRIBSRC)gdevlx32.c $(PDEVH) $(gsparam_h) \
$(DEVCC) $(DEVO_)gdevlx32.$(OBJ) $(C_) $(CONTRIBSRC)gdevlx32.c
$(DD)lxm3200.dev : $(lxm3200_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lxm3200 $(lxm3200_)
@@ -649,13 +652,13 @@ $(DEVOBJ)gdevlips.$(OBJ) : $(GX) $(LIPS_SRC)gdevlips.c $(std_h) \
$(DEVCC) $(DEVO_)gdevlips.$(OBJ) $(LIPS_OPT) $(C_) $(LIPS_SRC)gdevlips.c
$(DD)lips4.dev : $(lipsr_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lips4 $(lipsr_)
lipsv_=$(DEVOBJ)gdevl4v.$(OBJ) $(DEVOBJ)gdevlips.$(OBJ)
$(DD)lips4v.dev : $(ECHOGS_XE) $(lipsv_) $(DD)vector.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETDEV) $(DD)lips4v $(lipsv_)
$(ADDMOD) $(DD)lips4v -include $(GLD)vector
@@ -668,11 +671,11 @@ $(DEVOBJ)gdevl4v.$(OBJ) : $(LIPS_SRC)gdevl4v.c $(LIPS_SRC)gdevlips.h $(GDEV)\
### --------------- Some extra devices: lips2p, bjc880j ---------------- ###
$(DD)lips2p.dev : $(lipsr_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lips2p $(lipsr_)
$(DD)bjc880j.dev : $(lipsr_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)bjc880j $(lipsr_)
@@ -681,15 +684,15 @@ $(DD)bjc880j.dev : $(lipsr_) $(DD)page.dev \
md2k_=$(DEVOBJ)gdevmd2k.$(OBJ)
$(DD)md2k.dev : $(md2k_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)md2k $(md2k_)
$(DD)md5k.dev : $(md2k_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)md5k $(md2k_)
$(DEVOBJ)gdevmd2k.$(OBJ) : $(CONTRIBSRC)gdevmd2k.c $(PDEVH) $(gsparam_h) \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevmd2k.$(OBJ) $(C_) $(CONTRIBSRC)gdevmd2k.c
@@ -697,7 +700,7 @@ $(DEVOBJ)gdevmd2k.$(OBJ) : $(CONTRIBSRC)gdevmd2k.c $(PDEVH) $(gsparam_h) \
oki4w_=$(DEVOBJ)gdevop4w.$(OBJ)
$(DD)oki4w.dev : $(oki4w_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)oki4w $(oki4w_)
# Author: Ivan Schreter (ivan@shadow.sk)
@@ -720,11 +723,11 @@ $(DEVOBJ)gdevopvp.$(OBJ) : $(OPVP_SRC)gdevopvp.c $(OPVP_SRC)opvp_common.h\
$(DEVCC) $(DEVO_)gdevopvp.$(OBJ) $(OPVP_OPT) $(C_) $(OPVP_SRC)gdevopvp.c
$(DD)opvp.dev : $(opvp_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)opvp $(opvp_)
$(DD)oprp.dev : $(opvp_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)oprp $(opvp_)
@@ -901,78 +904,78 @@ $(DEVOBJ)pclcomp.$(OBJ) : $(pcl3_src)pclcomp.c $(pcl3_src)pclgen.h \
# The generic pcl3 device with selectable subdevices
$(DD)pcl3.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)pcl3 $(pcl3_)
# Fixed devices for specific printers
$(DD)hpdjplus.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdjplus $(pcl3_)
$(DD)hpdjportable.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdjportable $(pcl3_)
$(DD)hpdj310.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj310 $(pcl3_)
$(DD)hpdj320.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj320 $(pcl3_)
$(DD)hpdj340.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj340 $(pcl3_)
$(DD)hpdj400.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj400 $(pcl3_)
$(DD)hpdj500.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj500 $(pcl3_)
$(DD)hpdj500c.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj500c $(pcl3_)
$(DD)hpdj510.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj510 $(pcl3_)
$(DD)hpdj520.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj520 $(pcl3_)
$(DD)hpdj540.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj540 $(pcl3_)
$(DD)hpdj550c.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj550c $(pcl3_)
$(DD)hpdj560c.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj560c $(pcl3_)
$(DD)hpdj600.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj600 $(pcl3_)
$(DD)hpdj660c.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj660c $(pcl3_)
$(DD)hpdj670c.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj670c $(pcl3_)
$(DD)hpdj680c.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj680c $(pcl3_)
$(DD)hpdj690c.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj690c $(pcl3_)
$(DD)hpdj850c.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj850c $(pcl3_)
$(DD)hpdj855c.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj855c $(pcl3_)
$(DD)hpdj870c.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj870c $(pcl3_)
$(DD)hpdj890c.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj890c $(pcl3_)
$(DD)hpdj1120c.dev : $(pcl3_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hpdj1120c $(pcl3_)
#------------------------------------------------------------------------------
@@ -1009,7 +1012,7 @@ pcl3-install:
xes_=$(DEVOBJ)gdevxes.$(OBJ)
$(DD)xes.dev : $(xes_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)xes $(xes_)
# Author: Peter Flass (flass@lbdrscs.bitnet)
@@ -1029,16 +1032,16 @@ JAPSRC=$(JAPDIR)$(D)
pr201_=$(DEVOBJ)gdevp201.$(OBJ) $(DEVOBJ)gdevprn.$(OBJ)
-$(DD)pr201.dev : $(pr201_) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pr201.dev : $(pr201_) $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)pr201 $(pr201_)
-$(DD)pr150.dev : $(pr201_) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pr150.dev : $(pr201_) $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)pr150 $(pr201_)
-$(DD)pr1000.dev : $(pr201_) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pr1000.dev : $(pr201_) $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)pr1000 $(pr201_)
-$(DD)pr1000_4.dev : $(pr201_) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pr1000_4.dev : $(pr201_) $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)pr1000_4 $(pr201_)
$(DEVOBJ)gdevp201.$(OBJ) : $(JAPSRC)gdevp201.c $(PDEVH) \
@@ -1049,7 +1052,7 @@ $(DEVOBJ)gdevp201.$(OBJ) : $(JAPSRC)gdevp201.c $(PDEVH) \
jj100_=$(DEVOBJ)gdevj100.$(OBJ) $(DEVOBJ)gdevprn.$(OBJ)
-$(DD)jj100.dev : $(jj100_) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)jj100.dev : $(jj100_) $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)jj100 $(jj100_)
$(DEVOBJ)gdevj100.$(OBJ) : $(JAPSRC)gdevj100.c $(PDEVH) \
@@ -1061,11 +1064,11 @@ $(DEVOBJ)gdevj100.$(OBJ) : $(JAPSRC)gdevj100.c $(PDEVH) \
bj10v_=$(DEVOBJ)gdev10v.$(OBJ) $(DEVOBJ)gdevprn.$(OBJ)
$(DD)bj10v.dev : $(bj10v_) \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)bj10v $(bj10v_)
$(DD)bj10vh.dev : $(bj10v_) \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)bj10vh $(bj10v_)
# Uncomment the following line if you are using MS-DOS on PC9801 series.
@@ -1076,29 +1079,6 @@ $(DEVOBJ)gdev10v.$(OBJ) : $(JAPSRC)gdev10v.c $(PDEVH) \
# $(DEVCC) -DPC9801 $(O_)$@ $(C_) $(JAPSRC)gdev10v.c
-### ---------------- Dot matrix printer device ---------------- ###
-dmprt_=$(DEVOBJ)gdevdmpr.$(OBJ) $(DEVOBJ)dviprlib.$(OBJ) $(DEVOBJ)gdevprn.$(OBJ)
-
-$(DD)dmprt.dev : $(dmprt_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
- $(SETDEV) $(DD)dmprt $(dmprt_)
- $(ADDMOD) $(DD)dmprt -ps dmp_init
-
-$(DEVOBJ)gdevdmpr.$(OBJ) : $(JAPSRC)gdevdmpr.c $(JAPSRC)dviprlib.h $(PDEVH) \
- $(CONTRIB_MAK) $(MAKEDIRS)
- $(DEVCC) $(O_)$@ $(C_) $(JAPSRC)gdevdmpr.c
-
-$(DEVOBJ)dviprlib.$(OBJ) : $(JAPSRC)dviprlib.c $(JAPSRC)dviprlib.h \
- $(CONTRIB_MAK) $(MAKEDIRS)
- $(DEVCC) $(O_)$@ $(C_) $(JAPSRC)dviprlib.c
-
-extra-dmprt-install: install-libdata
- $(INSTALL_DATA) $(JAPSRC)dmp_init.ps $(DESTDIR)$(gsdatadir)$(D)lib || exit 1
- $(INSTALL_DATA) $(JAPSRC)dmp_site.ps $(DESTDIR)$(gsdatadir)$(D)lib || exit 1
- $(INSTALL_DATA) $(JAPSRC)escp_24.src $(DESTDIR)$(gsdatadir)$(D)lib || exit 1
-
-
-
##
## EPSON MachJet driver
##
@@ -1110,19 +1090,19 @@ $(DEVOBJ)gdevmjc.$(OBJ) : $(JAPSRC)gdevmjc.c $(JAPSRC)gdevmjc.h $(PDEVH) $(gdevp
$(DEVCC) -DA4 $(DEVO_)gdevmjc.$(OBJ) $(C_) $(JAPSRC)gdevmjc.c
$(DD)mj700v2c.dev : $(mj700v2c_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)mj700v2c $(mj700v2c_)
$(DD)mj500c.dev : $(mj700v2c_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)mj500c $(mj700v2c_)
$(DD)mj6000c.dev : $(mj700v2c_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)mj6000c $(mj700v2c_)
$(DD)mj8000c.dev : $(mj700v2c_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)mj8000c $(mj700v2c_)
### ----------------- The Fujitsu FMPR printer device ----------------- ###
@@ -1130,7 +1110,7 @@ $(DD)mj8000c.dev : $(mj700v2c_) $(DD)page.dev \
fmpr_=$(DEVOBJ)gdevfmpr.$(OBJ) $(DEVOBJ)gdevprn.$(OBJ)
$(DD)fmpr.dev : $(fmpr_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)fmpr $(fmpr_)
$(DEVOBJ)gdevfmpr.$(OBJ) : $(JAPSRC)gdevfmpr.c $(PDEVH) \
@@ -1142,7 +1122,7 @@ $(DEVOBJ)gdevfmpr.$(OBJ) : $(JAPSRC)gdevfmpr.c $(PDEVH) \
fmlbp_=$(DEVOBJ)gdevfmlbp.$(OBJ) $(DEVOBJ)gdevprn.$(OBJ)
$(DD)fmlbp.dev : $(fmlbp_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)fmlbp $(fmlbp_)
$(DEVOBJ)gdevfmlbp.$(OBJ) : $(JAPSRC)gdevfmlbp.c $(PDEVH) \
@@ -1159,7 +1139,7 @@ $(DEVOBJ)gdevfmlbp.$(OBJ) : $(JAPSRC)gdevfmlbp.c $(PDEVH) \
ml6_=$(DEVOBJ)gdevml6.$(OBJ) $(DEVOBJ)gdevprn.$(OBJ)
$(DD)ml600.dev : $(ml6_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)ml600 $(ml6_)
$(DEVOBJ)gdevml6.$(OBJ) : $(JAPSRC)gdevml6.c $(PDEVH) \
@@ -1172,11 +1152,11 @@ $(DEVOBJ)gdevml6.$(OBJ) : $(JAPSRC)gdevml6.c $(PDEVH) \
lbp3x0_=$(DEVOBJ)gdevlbp3.$(OBJ)
$(DD)lbp310.dev :$(lbp3x0_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lbp310 $(lbp3x0_)
$(DD)lbp320.dev :$(lbp3x0_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lbp320 $(lbp3x0_)
$(DEVOBJ)gdevlbp3.$(OBJ) : $(JAPSRC)gdevlbp3.c $(PDEVH)
@@ -1191,7 +1171,7 @@ $(DEVOBJ)gdevnpdl.$(OBJ) : $(JAPSRC)gdevnpdl.c $(LIPS_SRC)gdevlprn.h $(PDEVH) \
$(DEVCC) -DA4 $(DEVO_)gdevnpdl.$(OBJ) $(LIPS_OPT) $(C_) $(JAPSRC)gdevnpdl.c
$(DD)npdl.dev : $(npdl_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)npdl $(npdl_)
### ------- EPSON ESC/Page printer device ----------------- ###
@@ -1203,11 +1183,11 @@ $(DEVOBJ)gdevespg.$(OBJ) : $(JAPSRC)gdevespg.c $(LIPS_SRC)gdevlprn.h $(PDEVH) \
$(DEVCC) -DA4 $(DEVO_)gdevespg.$(OBJ) $(LIPS_OPT) $(C_) $(JAPSRC)gdevespg.c
$(DD)escpage.dev : $(escpage_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)escpage $(escpage_)
$(DD)lp2000.dev : $(escpage_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp2000 $(escpage_)
### --- The RICOH RPDL language printer device ------ ###
@@ -1218,7 +1198,7 @@ $(DEVOBJ)gdevrpdl.$(OBJ) : $(JAPSRC)gdevrpdl.c $(LIPS_SRC)gdevlprn.h $(PDEVH) \
$(DEVCC) $(DEVO_)gdevrpdl.$(OBJ) $(LIPS_OPT) $(C_) $(JAPSRC)gdevrpdl.c
$(DD)rpdl.dev : $(rpdl_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)rpdl $(rpdl_)
### ---------- RICOH RPDL IV(600dpi) printer devices ---------- ###
@@ -1228,11 +1208,11 @@ $(DD)rpdl.dev : $(rpdl_) $(DD)page.dev \
# $(DEVCC) $(DEVO_)gdevrpdl.$(OBJ) $(C_) $(JAPSRC)gdevrpdl.c
#
#$(DD)nx100f.dev : $(rpdl_) $(DD)page.dev \
-# $(CONTRIB_MAK) $(MAKEDIRS)
+# $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
# $(SETPDEV2) $(DD)nx100f $(rpdl_)
#
#$(DD)nx100v.dev : $(rpdl_) $(DD)page.dev \
-# $(CONTRIB_MAK) $(MAKEDIRS)
+# $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
# $(SETPDEV2) $(DD)nx100v $(rpdl_)
### ------------ The ALPS Micro Dry printer devices ------------ ###
@@ -1240,15 +1220,15 @@ $(DD)rpdl.dev : $(rpdl_) $(DD)page.dev \
alps_=$(DEVOBJ)gdevalps.$(OBJ)
$(DD)md50Mono.dev : $(alps_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)md50Mono $(alps_)
$(DD)md50Eco.dev : $(alps_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)md50Eco $(alps_)
$(DD)md1xMono.dev : $(alps_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(CONTDEV) $(CONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)md1xMono $(alps_)
$(DEVOBJ)gdevalps.$(OBJ) : $(JAPSRC)gdevalps.c $(PDEVH) \
@@ -1267,4 +1247,4 @@ extra-upp-install: install-libdata
### ------------ Build/Install special features ------------ ###
-install-contrib-extras: extra-dmprt-install extra-upp-install
+install-contrib-extras: extra-upp-install
diff --git a/contrib/gdevadmp.c b/contrib/gdevadmp.c
index d48c0dab..72fdcab6 100644
--- a/contrib/gdevadmp.c
+++ b/contrib/gdevadmp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/contrib/gdevbjc_.h b/contrib/gdevbjc_.h
index 92f5448c..b40c6fc4 100644
--- a/contrib/gdevbjc_.h
+++ b/contrib/gdevbjc_.h
@@ -46,8 +46,8 @@
/* BJC printer drivers definitions and utility interfaces */
-#ifndef gdevbjc_INCLUDED
-# define gdevbjc_INCLUDED
+#ifndef gdevbjcUNDERSCORE_INCLUDED
+# define gdevbjcUNDERSCORE_INCLUDED
/* Define the default X and Y resolution. */
#define X_DPI 360
@@ -248,4 +248,4 @@ void bjc_rgb_to_cmy (byte r, byte g, byte b, int *c, int *m, int *y);
void bjc_rgb_to_gray(byte r, byte g, byte b, int *k);
uint bjc_rand(gx_device_bjc_printer *dev);
void bjc_init_tresh(gx_device_bjc_printer *dev, int rnd);
-#endif /* gdevbjc_INCLUDED */
+#endif /* gdevbjcUNDERSCORE_INCLUDED */
diff --git a/contrib/japanese/dmp_init.ps b/contrib/japanese/dmp_init.ps
deleted file mode 100644
index b7bebd6d..00000000
--- a/contrib/japanese/dmp_init.ps
+++ /dev/null
@@ -1,206 +0,0 @@
-%!
-% Copyright (C) 1989, 1992, 1993 Aladdin Enterprises. All rights reserved.
-%
-% This file is part of Ghostscript.
-%
-% 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 Ghostscript General Public License for full details.
-%
-% Everyone is granted permission to copy, modify and redistribute
-% Ghostscript, but only under the conditions described in the Ghostscript
-% General Public License. A copy of this license is supposed to have been
-% given to you along with 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.
-
-% dmp_init.ps
-% Initialization file for `dmprt' device driver.
-%
-% Written initial version by... ASAYAMA Kazunori 1993 Nov.
-% Modified for Ghostscript 4.03 by ... ASAYAMA Kazunori 1997 May.
-
-%%%%% check version %%%%%
-
-201 % version of this initialization file.
-
-/dmprt finddevice { /DmprtParams gsgetdeviceprop /Version get }
- stopped { pop pop 0 } if
-2 copy ne {
- (\ndmprt: driver version\() print
- dup 0 eq {pop (unknown) print }{==only}ifelse
- (\) does not match dmp_init.ps version\() print
- ==only (\).\n) print
- flush 1 .quit
-} { pop pop } ifelse
-
-%%%%% BODY %%%%%
-
-40 dict begin % .WorkDict .UserParams
- % .DmprtDevice
- % .GetDmprtParam .SetDmprtParam
- % .DmprtParams .Xdpi .Ydpi .Xdot .Ydot
- %
- % in cm mm pt bp dot
- % BeginMode EndMode
- % .ModeDataBase .CurrentMode
- % BeginConfig EndConfig
- % BeginPrinterProps EndPrinterProps
-
-/.WorkDict currentdict def
-/.ModeDataBase 10 dict def
-/.dicttomark {
- counttomark 2 idiv dup dict begin { def } repeat pop currentdict end
-} bind def
-
-%%%%% utilities for user customization. %%%%%
-
-/in { } bind def
-/cm { 2.54 div } bind def
-/mm { 25.4 div } bind def
-/pt { 72.27 div } bind def
-/bp { 72.0 div } bind def
-/dot { [ exch truncate cvi ] } bind def
-
-% the database of user customizations. (not implemented yet.)
-/BeginMode { % <name> -> <name> mark
- mark
-} bind def
-/EndMode { % <name> mark <item1> <value1> ... <itemN> <valueN> -> --
- .dicttomark .ModeDataBase
- dup dup maxlength exch length eq {
- % Expand capacity of database dictionaly.
- dup maxlength 10 add dict copy dup /.ModeDataBase exch def
- } if
- 3 1 roll put
-} bind def
-
-% these procedures are undocumented in the user's manual.
-% these are used in order to specify the propaties directly.
-/BeginPrinterProps { [ } bind def
-/EndPrinterProps { ] /printer exch } bind def
-
-%%%%% run the user customization file. %%%%%
-
-/BeginConfig mark def
-/EndConfig { .dicttomark /.UserParams exch def } bind def
-systemdict /DMPCONFIG 2 copy known
-{ get run } % -sDMPCONFIG=<filename>
-{ pop pop (dmp_site.ps) findlibfile { closefile run } if } ifelse
-
-%%%%% refer database %%%%%
-
-/.UsedMode .ModeDataBase length dict def
-/.ExpandUserParams { % <dict> -> <param1> <value1> ... <paramN> <valueN>
- /.InheritMode null def
- { 1 index /inherit eq {
- exch pop dup .UsedMode exch known { % check recursive reference.
- /.ExpandUserParams /rangecheck signalerror
- } if
- /.InheritMode exch def
- } if } forall
- .InheritMode type /nametype eq {
- .UsedMode .InheritMode true put
- .ModeDataBase .InheritMode get .ExpandUserParams
- } if
-} bind def
-
-systemdict /DMPMODE 2 copy known
- {get .ModeDataBase exch get} {pop pop .UserParams} ifelse
-mark exch .ExpandUserParams .dicttomark /.UserParams exch def
-
-%%%%% Local variables and procedures. %%%%%
-/.DmprtDevice /dmprt finddevice def
-/.SetDmprtParam { % <key> <value> -> --
- .DmprtParams 3 1 roll put
-} bind def
-/.SetLocalParam { .LocalParams 3 1 roll put } bind def
-/.GetDmprtParam { % <key> -> <value>
- .DmprtParams exch get
-} bind def
-/.GetUserParam { % <key> <default-value> -> <value>
- .UserParams 3 -1 roll 2 copy known {get exch pop}{pop pop} ifelse
-} bind def
-/.SetUserParam { % <prop-name> <key> <default-value> -> --
- .GetUserParam .SetDmprtParam
-} bind def
-
-%%%%% dviprt proparties %%%%%
-
-mark
-.UserParams /printer 2 copy known {
- get dup type /dicttype ne { mark /FileName 3 -1 roll .dicttomark } if
-}
-{ pop pop % Default printer is `ESC/P 24 pins'.
- mark
- /Name (ESC/P 24 pins)
- /Transpose true
- /Reverse false
- /NonMoving false
- /Encoding (Null)
- /HDpi 180
- /VDpi 180
- /Pins 24
- /MinimalUnit 1
- /MaximalUnit 180
- /Constant 1
- /BitImageMode (\007\0333\030\033?Z\047)
- /NormalMode (\004\015\014\0332)
- /SendBitImage (\002\033Z\002\001\200)
- /SkipSpaces (\002\033\\\002\001\200)
- /LineFeed (\002\015\012)
- /FormFeed (\002\015\014)
- /AfterBitImage ()
- /BitRowHeader ()
- .dicttomark
-} ifelse
-/DviprtParams exch .DmprtDevice putdeviceprops
-
-getdeviceprops .dicttomark /.DmprtParams exch def
-.DmprtParams /DviprtParams get /.DviprtParams exch def
-.DmprtParams /DmprtParams get /.LocalParams exch def
-
-% calcurate resolutions and define operators converting
-% from user-coordination to device-coordination(count by dots).
-/resolution [ .DviprtParams dup /HDpi get exch /VDpi get ]
- .GetUserParam {} forall /.Ydpi exch def /.Xdpi exch def
-/.Xdot { dup type /arraytype eq { 0 get } { .Xdpi mul truncate cvi } ifelse
-} bind def
-/.Ydot { dup type /arraytype eq { 0 get } { .Ydpi mul truncate cvi } ifelse
-} bind def
-
-%%%%% Standard Ghostscript device propaties. %%%%%
-
-/HWSize % default is A4.
- /defaultsize [8.3 11.7] .GetUserParam
- [ exch dup 0 get .Xdot exch 1 get .Ydot ] .SetDmprtParam
-
-%%%%% dmprt device propaties. %%%%%
-
-/MaxSize
- /maxsize [0.0 0.0] .GetUserParam [ exch dup 0 get .Xdot exch 1 get .Ydot ]
- .SetLocalParam
-/Margins /margin [0.0 0.0 0.0 0.0] .GetUserParam
- [ exch dup 0 get .Xdot exch dup 1 get .Ydot
- exch dup 2 get .Xdot exch 3 get .Ydot ] .SetLocalParam
-/Verbose QUIET {false}
- {/verbose false .GetUserParam} ifelse .SetLocalParam
-/Debug /debug false .GetUserParam .SetLocalParam
-
-%%%%% Page device propaties. %%%%%
-%%%%% See PostScript Reference Manual 2nd edition. %%%%%
-
-/HWResolution [ .Xdpi .Ydpi ] .SetDmprtParam
-/Offsets
- /offset [0.0 0.0] .GetUserParam [ exch dup 0 get .Xdot exch 1 get .Ydot ]
- .SetLocalParam
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-mark .DmprtParams {} forall .DmprtDevice putdeviceprops pop
-
-end
-%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of file %%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/contrib/japanese/dmp_site.ps b/contrib/japanese/dmp_site.ps
deleted file mode 100644
index 05bdb4d6..00000000
--- a/contrib/japanese/dmp_site.ps
+++ /dev/null
@@ -1,14 +0,0 @@
-%!
-BeginConfig
-%%%%%%%%%%%%%%%%%%%%%% Standard user cusomizations %%%%%%%%%%%%%%%%%%%%%
-/printer (escp_24.src)
-% horizontal / vertical
-% /resolution [ 180.0 180.0 ]
-% horizontal / vertical
-% /offset [ 0.0 0.0 ]
-% width / height
-% /defaultsize [ 8.0 in 11.0 in ]
-% width / height
-% /maxsize [ 8.0 -1 ]
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-EndConfig
diff --git a/contrib/japanese/doc/gdevdmpr.txt b/contrib/japanese/doc/gdevdmpr.txt
deleted file mode 100644
index 5c64d5d4..00000000
--- a/contrib/japanese/doc/gdevdmpr.txt
+++ /dev/null
@@ -1,545 +0,0 @@
-¢£ ¢£
-¢£ ¥É¥Ã¥È¥Þ¥È¥ê¥¯¥¹¥×¥ê¥ó¥¿ÈÆÍѥɥ饤¥Ð ¢£
-¢£ dmprt version 2.01 ¢£
-¢£ for Ghostscript version 4.03 ¢£
-¢£ ¢£
-¢£ ÞÉ»³ÏÂŵ ¢£
-¢£ TPM03937@pcvan.or.jp ¢£
-¢£ GHF01532@niftyserve.or.jp ¢£
-¢£ asayama@vsp.cpg.sony.co.jp ¢£
-¢£ ¢£
-
-========================================================================
-¡ü £±¡¥ ¥Õ¥¡¥¤¥ë¹½À®
-========================================================================
-
- ¤³¤Î¥Ñ¥Ã¥±¡¼¥¸¤Ë¤Ï¼¡¤Î¥Õ¥¡¥¤¥ë¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£Ëܥɥ­¥å¥á¥ó¥ÈÃæ¤Ç¡ÖËÜ
-¥Ñ¥Ã¥±¡¼¥¸¡×¤È¤¤¤¦¾ì¹ç¤Ë¤Ï¤³¤ì¤éÁ´¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò»Ø¤·¤Æ¤¤¤ë¤â¤Î¤È¤·¤Þ¤¹¡£
-
- COPYING GNU General Public License
- gdevdmpr.sj ¤³¤Î¥Õ¥¡¥¤¥ë(Shift JIS)
- gdevdmpr.c ¥×¥ê¥ó¥¿¥É¥é¥¤¥Ð¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë
- dviprlib.c ¡·
- dviprlib.h ¡·
- gdevdmpr.mak Makefile
- escp_24.src dviprt¤Î¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Î¥µ¥ó¥×¥ë
- dmp_init.ps ½é´ü²½¥Õ¥¡¥¤¥ë
- dmp_site.ps ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥µ¥ó¥×¥ë
- testpage.ps °ÌÃÖ¹ç¤ï¤»¥Æ¥¹¥ÈÍѤÎPS¥Õ¥¡¥¤¥ë
-
-========================================================================
-¡ü £²¡¥ ³µÍ×
-========================================================================
-
- ¤³¤Î¥×¥ê¥ó¥¿¥É¥é¥¤¥Ð¤Ï¡¢¥Ó¥Ã¥È¥Þ¥Ã¥×¥¤¥á¡¼¥¸¤Î°õ»ú¤Î¤¿¤á¤Î¥×¥ê¥ó¥¿Ì¿Îá
-¤ò¥æ¡¼¥¶¤¬ÄêµÁ¤Ç¤­¤ë¤è¤¦¤Ë¤·¡¢½ÐÍè¤ë¸Â¤ê¿¤¯¤Î¼ïÎà¤Î¥×¥ê¥ó¥¿¤ËÂбþ¤Ç¤­¤ë
-¤è¤¦¤Ë¤·¤¿¤â¤Î¤Ç¤¹¡£
-
- ¥×¥ê¥ó¥¿¥³¡¼¥É¤ÎÄêµÁ¤Ï¡¢MS-DOS ¾å¤Ç¹­¤¯ÍѤ¤¤é¤ì¤Æ¤¤¤ë TeX ÍÑ¥×¥ê¥ó¥¿¥É
-¥é¥¤¥Ð dviprt.exe ¤Î¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë (³ÈÄ¥»Ò.cfg)¡¢¤Þ¤¿¤Ï¤½¤Î¥½¡¼¥¹
-¥Õ¥¡¥¤¥ë (³ÈÄ¥»Ò.src) ¤òÍѤ¤¤ë¡¢¤È¤¤¤¦ÊýË¡¤Ç¹Ô¤¤¤Þ¤¹¡£
-
- ¢¨ ¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Î½ñ¼°¤Ë¤Ä¤¤¤Æ¤Ï dviprt ¤Î¥Æ¥¯¥Ë¥«¥ë¥Þ¥Ë¥å¥¢
- ¥ë texjman.tex (ver. 2.42 °Ê¹ß) ¤ò¤´Í÷¤¯¤À¤µ¤¤¡£tex???ma.lzh(???
- ¤Ï¥Ð¡¼¥¸¥ç¥óÈÖ¹æ) ¤È¤¤¤¦¥Õ¥¡¥¤¥ë̾¤ÇÇÛÉÛ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
-
- ¢¨ dviprt ¤Î¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Î»ÅÍͤ¬¥Ð¡¼¥¸¥ç¥ó 2.41.8 °Ê¹ß¤Ç³È
- Ä¥¤µ¤ì¤Þ¤·¤¿¡£dmprt ¤ÎËܥС¼¥¸¥ç¥ó¤Ç¤Ï¤³¤Î¿·¤·¤¤»ÅÍͤˤâÂбþ¤·¤Æ¤¤
- ¤Þ¤¹¡£
-
- ¢¨ dviprt.exe ¤Ï TSG(ÅìµþÂç³ØÍýÏÀ²Ê³Ø¥°¥ë¡¼¥×) µÚ¤Ó PC-VAN SSCIENCE
- ¤Î SHIMA ¤µ¤ó¤Ë¤è¤ë TeX ÍÑ¥×¥ê¥ó¥¿¥É¥é¥¤¥Ð¤Ç¤¹¡£PC-VAN ¤Ç¤Ï
- SSCIENCE ¤Î OSL¡¢Nifty Serve ¤Ç¤Ï FLABO ¤Î¥é¥¤¥Ö¥é¥ê¤Î 11 ÈÖ (TeX
- ÀìÍÑ)¡¢ASCII NET ¤Ç¤Ï pool msdos ¤ÇÆþ¼ê²Äǽ¤Ç¤¹¡£¤Þ¤¿ annonymous
- FTP ¤Ç¤âÆþ¼ê¤Ç¤­¤Þ¤¹¡£
-
- ¢¨ ¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Ï dviprt.exe ¤Î¥æ¡¼¥Æ¥£¥ê¥Æ¥£¥Ñ¥Ã¥±¡¼¥¸
- tex???ut.lzh (??? ¤Ï¥Ð¡¼¥¸¥ç¥óÈÖ¹æ) ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£
-
- ¢¨ dviprt v2.42 ¤Î»þÅÀ¤ÇÇÛÉۥѥ屡¼¥¸¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¥×¥ê¥ó¥¿ÄêµÁ¥Õ
- ¥¡¥¤¥ë¤Ï°Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹¡£
-
- ¤³¤ì¤éÁ´¤Æ¤Î¥×¥ê¥ó¥¿¤Ç¤ÎÆ°ºî³Îǧ¤¬½ÐÍè¤Æ¤¤¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤³
- ¤ì¤é¤Î¥×¥ê¥ó¥¿¤ÎÃæ¤ÇÀµ¾ï¤Ë°õ»ú½ÐÍè¤Ê¤¤¾ì¹ç¤Ë¤Ï¤´Ï¢Íí¤¯¤À¤µ¤¤¡£½ÐÍè
- ¤ë¸Â¤êÂн褷¤Þ¤¹¡£
-
- ap850.src EPSON AP-850/MJ-500ÍÑ (48¥É¥Ã¥È)
- ap900.src EPSON AP-900ÍÑ (360dpi)
- art.src Xerox ART mode (240dpi)
- art2.src Xerox ART2 mode (240dpi, Hex mode)
- bj_10v48.src Canon BJ-10/BJ-15ÍÑ (48¥É¥Ã¥È)
- bj_130j.src Canon BJ-130J/BJ-330JÍÑ (48¥É¥Ã¥È)
- dj500.src HP DeskJet 500ÍÑ (300dpi)
- dj505j.src HP DeskJet 500J/300J/505J/505J plusÍÑ (300dpi)
- dj505j1.src HP DeskJet 505J plusÍÑ (300dpi PCL mode1 °µ½Ì)
- dj505j2.src HP DeskJet 505J plusÍÑ (300dpi PCl mode2 °µ½Ì)
- dvi2pbm.src raw PBM ½ÐÎÏÍÑ (118dpi)
- epsimage.src Encapsulated PostScript(TM) Image ½ÐÎÏÍÑ(118dpi)
- escp_24.src EPSON ESC/P (24¥É¥Ã¥È)¥×¥ê¥ó¥¿ÍÑ
- escp_48.src EPSON HG-4800ÍÑ (48¥É¥Ã¥È)
- escp_48a.src EPSON HG-5130ÍÑ (48¥É¥Ã¥È, ÎÙÀܥɥåȲÄ)
- escp_8.src EPSON ESC/P (8¥Ô¥ó)ÍÑ
- fmpr-351.src Fujitsu FMPR-351ÍÑ (48¥É¥Ã¥È)
- g3fax.src G3 FAXÍÑ(200dpi, Header ¤Ê¤·)
- hl_8e.src Brother HL-8eÍÑ (300dpi)
- hp_djp.src HP DeskJet PlusÍÑ (300dpi)
- hp_ljp.src HP LaserJet PlusÍÑ (300dpi)
- jt48escp.src Star JT-48 ESC/P (48 ¥É¥Ã¥È)
- jt48nm.src Star JT-48CL/NM (48 ¥É¥Ã¥È)
- lbp-b406.src Canon LBP-B406ÍÑ(240dpi)
- lbp8_240.src Canon LBP-8/LIPS IIÍÑ (240dpi)
- lbp8_300.src Canon LBP-8/LIPS IIÍÑ (300dpi)
- lcs240.src Casio LCS-240ÍÑ (240dpi)
- lips3.src Canon LIPS IIIÍÑ
- lp3000.src EPSON LP-3000(2000)ÍÑ
- lp7000.src EPSON LP-7000ÍÑ
- lp_rpdl.src RICOH LP3320-SP4 mark2
- / LP2310-SP5 (RPDL)ÍÑ (240dpi)
- l_880.src Kyocera L-880ÍÑ (300dpi)
- nec_page.src NEC PC-PR2000ÍÑ
- nec_pgr.src NEC PC-PR1000,2000,4000ÍÑ (240dpi)
- nec_pgr4.src NEC PC-PR2000,4000ÍÑ (400dpi)
- nm_24.src NEC NM(24¥É¥Ã¥È)ÍÑ
- pc-pr101.src NEC PC-PR101ÍÑ(24¥É¥Ã¥È)
- pc-pr_24.src NEC PC-PR(24¥É¥Ã¥È)ÍÑ
- pc150v48.src NEC PC-PR150V(48¥É¥Ã¥È)ÍÑ
- pc8821.src NEC PC-8821(16¥É¥Ã¥È)ÍÑ
- pc_pr406.src NEC PR406LM(48¥É¥Ã¥È)ÍÑ
- pc_pr602.src NEC PC-PR602RÍÑ (240dpi)
- pr_130ax.src SANYO PR_130AX, TOSHIBA PR-48(J31DPR02)ÍÑ (180dpi)
- pr-48.src Toshiba PR-48 (360dpi)
- r98_dma.src RICOH LP3320-SP4 R98 emulation mode
- Direct Memory Access
- rpdl_dma.src RICOH LP3320-SP4 Direct Memory Access (240dpi)
- smdfax.src SONY SMD50/70 ¥·¥ê¡¼¥ºFAX (200dpi)
- starfax.src StarfaxÍÑ (200dpi)
-
-
-========================================================================
-¡ü £³¡¥ Æ°ºî´Ä¶­
-========================================================================
-
- ¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ï´ðËÜŪ¤ËÈ󵡼ï°Í¸¤Î¤Ä¤â¤ê¤Ç½ñ¤¤¤Æ¤¢¤ê¤Þ¤¹ (¤¿¤À¤·
-FreeBSD ¾å¤Ç¤·¤«Æ°ºî³Îǧ¤Ï¤ª¤³¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó)¡£
-
- ¤³¤Î¥É¥é¥¤¥Ð¤òÁȤ߹þ¤à¤³¤È¤¬½ÐÍè¤ë Ghostscript ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤¹¤¬¡¢
-Ghostscript ¤ÎËÜÂΤȥǥХ¤¥¹¥É¥é¥¤¥Ð¤È¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤¬ Ghostscript
-version 4.03 ¤ÈƱÍͤΤâ¤Î¤Ê¤é¤Ð²Äǽ¤Ç¤¹ (2.6.x ¤Ë¤ÏÁȤ߹þ¤á¤Þ¤»¤ó¡£
-2.6.x ¤Ç¤Ï½¾Íè¤Î¤â¤Î¤òÍѤ¤¤Æ²¼¤µ¤¤)¡£
-
-
-========================================================================
-¡ü £´¡¥ ƳÆþ¤Î¼ê½ç
-========================================================================
- ¤³¤³¤Ç¤Ï dmprt ¤¬ÁȤߤ³¤ó¤Ç¤¢¤ë¼Â¹Ô²Äǽ·Á¼°¤Î gs ¤¬´û¤Ë¼ê¸µ¤Ë¤¢¤ë¤â¤Î
-¤È¤·¤ÆÀâÌÀ¤·¤Þ¤¹¡£¥³¥ó¥Ñ¥¤¥ë¤¬É¬Íפʾì¹ç¤Ï¤³¤Î¥É¥­¥å¥á¥ó¥ÈËöÈø¤Î¡Ö¥³¥ó¥Ñ
-¥¤¥ë¡×¤Î¹àÌܤò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
-
- dmprt ¤Ï¤ª¤ª¤è¤½ÈÆÍѤΥץê¥ó¥¿¥É¥é¥¤¥Ð¤Ç¤¹¤«¤é¡¢µÕ¤Ë¸À¤¦¤È¥æ¡¼¥¶¤¬ÀßÄê
-¤ò¤ª¤³¤Ê¤Ã¤Æ¤ä¤é¤Ê¤¤¤ÈÀµ¤·¤¯Æ°ºî¤·¤Æ¤¯¤ì¤Þ¤»¤ó¡£
-
- °Ê²¼¤Îºî¶È¤ò¹Ô¤¤¤Þ¤¹¡£
-
-(1) ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤ÎÊÔ½¸
-(2) ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Î»ØÄê
-
------------------------
-¡ú 4.1 ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë
------------------------
-
- ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Ç¤Ï¡¢¥×¥ê¥ó¥¿¤Îµ¡¼ïÊ̾ðÊó¤Ê¤É¤ò»ØÄꤷ¤Þ¤¹¡£¤Þ¤¿¡¢°õ»ú
-°ÌÃÖ¤ÎÊäÀµ¤Ê¤É¤¬É¬Íפʤé¤Ð¤µ¤é¤Ë¤½¤ì¤ò»ØÄꤷ¤Þ¤¹¡£
-
-
------------------------------
-¡ú 4.2 ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Î½ñ¼°
------------------------------
-
- ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë dmp_site.ps ¤ÎÂç¤Þ¤«¤Ê½ñ¼°¤òÀâÌÀ¤·¤Þ¤¹¡£¹àÌÜÊ̤ξܺÙ
-¤Ê½ñ¼°¤Ï³Æ¹àÌܤÎÀâÌÀ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
-
-(1) ÀßÄê¥Õ¥¡¥¤¥ë¤Î³«»Ï¡¦½ªÎ»¥³¥Þ¥ó¥É
-
- ÉÕ°¤Î dmp_site.ps ¤ÎºÇ½é¤ÈºÇ¸å¤Î¹Ô¤Ë¤¢¤ë ¡ÖBeginConfig¡× ¤È
- ¡ÖEndConfig¡× ¤È¤¤¤¦Ê¸»úÎó¤Î¤³¤È¤Ç¤¹¡£ÀßÄê¥Õ¥¡¥¤¥ë¤ÎºÇ½é¤ÈºÇ¸å¤Î¹Ô
- ¤Ë¤½¤ì¤¾¤ì¤³¤ì¤é¤Îʸ»úÎ󤬤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ÉÕ°¤Î dmp_site.ps ¤ò
- ÊÔ½¸¤·¤Æ»È¤¦¾ì¹ç¤Ë¤Ï¡¢¤³¤ì¤é¤Î¹Ô¤òºï½ü¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
-
-(2) ¥³¥á¥ó¥È
-
- '%' °Ê¹ß¹ÔËö¤Þ¤Ç¤Ï¥³¥á¥ó¥È¤È¤·¤Æ̵»ë¤µ¤ì¤Þ¤¹¡£
-
-(3) ÏÀÍýÃÍ (¥¹¥¤¥Ã¥Á)
-
- true (¿¿ / on) Ëô¤Ï false (µ¶ / off) ¤Î¤É¤Á¤é¤«¤ÎÃͤǤ¹¡£
-
-(4) ʸ»úÎó
-
- '(' ¤È ')' ¤Ç°Ï¤Þ¤ì¤¿¤â¤Î¤¬Ê¸»úÎó¤Ç¤¹¡£¤³¤ì¤é¤Î³ç¸Ì¤Î´Ö¤Ë¤Ï;ʬ¤Ê
- ¶õÇò¤ò´Þ¤á¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£
-
-(5) Ťµ
- dmp_site.ps ¤ÎÃæ¤Ç¡ÖŤµ¡×¤Ç»ØÄꤹ¤ë¹àÌܤǤÏñ°Ì¤òÉÕ¤±¤ë¤³¤È¤¬½ÐÍè
- ¤Þ¤¹¡£»ÈÍѤǤ­¤ëñ°Ì¤Ï¡¢
-
- ¡¦ in ¥¤¥ó¥Á
- ¡¦ cm ¥»¥ó¥Á¥á¡¼¥È¥ë
- ¡¦ mm ¥ß¥ê¥á¡¼¥È¥ë
- ¡¦ pt ¥Ý¥¤¥ó¥È (1/72.27 ¥¤¥ó¥Á)
- ¡¦ bp ¥Ó¥Ã¥°¥Ý¥¤¥ó¥È (1/72 ¥¤¥ó¥Á)
- ¡¦ dot ¥É¥Ã¥È
-
- ¤Ç¤¹¡£Ã±°Ì¤¬»ØÄꤵ¤ì¤Ê¤¤¾ì¹ç¤Ï¡Ö¥¤¥ó¥Á¡×¤òñ°Ì¤È¤·¤Æ½èÍý¤·¤Þ¤¹¡£
-
- ñ°Ì¤ò»ØÄꤹ¤ë¾ì¹ç¤Ë¤Ï¡¢¿ôÃͤȤδ֤˶õÇòʸ»ú¤ò¾¯¤Ê¤¯¤È¤â°ì¤ÄÁÞÆþ¤·
- ¤Æ¤¯¤À¤µ¤¤¡£¶õÇòʸ»ú¤¬¿ôÃͤȤδ֤ˤʤ¤¾ì¹ç¡¢¤¦¤Þ¤¯²ò¼á¤Ç¤­¤Þ¤»¤ó¡£
-
- (e.g.) /defaultsize [ 576 bp 792 bp ]
-
-
- ¢¨´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Ï¼ÂºÝ¤Ë¤Ï PostScript ¥×¥í¥°¥é¥à¤È¤·¤Æ¼Â¹Ô¤µ¤ì²ò¼á
- ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£½¾¤Ã¤Æ¡¢´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Ç¤Ï PostScript ¸À¸ì¤¬µö¤¹
- µ­½Ò¤Ï´ðËÜŪ¤Ëµö¤µ¤ì¤Þ¤¹¡£
-
- ¤¿¤À¤·¡¢¤½¤Î¾ì¹ç¤Ëºî¶È¤ÎÅÔ¹ç¾å¼­½ñ¤ËÅÐÏ¿¤ò¹Ô¤Ê¤¦É¬Íפ¬¤¢¤ë¾ì¹ç¤Ë¤Ï
- ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Ç¥í¡¼¥«¥ë¤Ê¼­½ñ¤òºî¤Ã¤Æ¡¢¤½¤Î¼­½ñ¤ËÂФ·¤ÆÅÐÏ¿¤ò
- ¹Ô¤Ê¤Ã¤Æ¤¯¤À¤µ¤¤ (dictfull ¥¨¥é¡¼¤ä»×¤ï¤ÌÉûºîÍѤ¬µ¯¤­¤ë²ÄǽÀ­¤¬¤¢
- ¤ê¤Þ¤¹)¡£¤Þ¤¿¡¢¥ª¥Ú¥é¥ó¥É¥¹¥¿¥Ã¥¯¤ä¼­½ñ¥¹¥¿¥Ã¥¯¤òÇ˲õ¤·¤Ê¤¤¤è¤¦¤Ë
- ½½Ê¬¤Ëµ¤¤òÉÕ¤±¤Æ¤¯¤À¤µ¤¤ (¥´¥ß¤ò»Ä¤µ¤Ê¤¤¤è¤¦¤Ë!!)¡£
-
- ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Ç¤Ï Level 2 ¤Î¥ª¥Ú¥ì¡¼¥¿¤Ï»È¤ï¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯
- ¤À¤µ¤¤¡£
-
------------------------------
-¡ú 4.3 ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Î¹àÌÜ
------------------------------
-
- ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë dmp_site.ps ¤Ï°Ê²¼¤Î¹àÌܤȥ³¥á¥ó¥È¤«¤é¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
-
- /printer dviprt¤Î¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë
- /resolution ²òÁüÅÙ
- /offset ¸¶ÅÀ°ÜÆ°ÎÌ
- /defaultsize ¥Ç¥Õ¥©¥ë¥È¤ÎÍѻ極¥¤¥º
- /margin °õ»úÉÔ²ÄǽÎΰè
- /maxsize °õ»ú²ÄǽÎΰè¤ÎºÇÂçÈÏ°Ï
- /verbose ¤ª¤·¤ã¤Ù¤ê¥â¡¼¥É(^^;
-
- ¤³¤ì¤é¤ÏÁ´¤Æ¾Êά²Äǽ¤Ê¹àÌܤǤ¹¡£¤¿¤À¤·¡¢/printer ¤òÀßÄꤷ¤Ê¤¤¾ì¹ç¤Ë¤Ï
-ESC/P 24 pins ¤Î¥×¥ê¥ó¥¿¥³¡¼¥É¤òÍѤ¤¤Æ½ÐÎϤ·¤Þ¤¹¤Î¤Ç¡¢¤³¤ì¤Ë³ºÅö¤·¤Ê¤¤¥×
-¥ê¥ó¥¿¤ò»ÈÍѤ¹¤ë¾ì¹ç¤Ë¤ÏºÇÄã¸Â¤³¤Î¹àÌܤÏÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
-
- °Ê²¼¤Ë³Æ¹àÌܤλØÄêË¡¤òÀâÌÀ¤·¤Þ¤¹¡£³Æ¹àÌܤϹÔñ°Ì¤Ç»ØÄꤷ¡¢½ÅÊ£¤·¤¿»ØÄê
-¤ÏºÇ½é¤Î»ØÄê¤Î¤ß¤¬Í­¸ú¤È¤Ê¤ê¤Þ¤¹¡£¤Þ¤¿¡¢ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Îʸ»ú¤ÏÁ´¤ÆÂçʸ»ú¡¢
-¾®Ê¸»ú¤¬¶èÊ̤µ¤ì¤Þ¤¹¤Î¤ÇÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
-
-(1) /printer
-
- ¡¦ ¡Ô»ØÄêË¡¡Õ
-
- /printer (¥Õ¥¡¥¤¥ë̾)
-
- dviprt ¤Î *.cfg/*.src ¤Î¥Õ¥¡¥¤¥ë̾¤òʸ»úÎó¤Ç»ØÄꤷ¤Þ¤¹¡£³ÈÄ¥»Ò
- ¤Î¾Êά¤Ï¤Ç¤­¤Þ¤»¤ó¡£
-
- MS-DOS ¾å¤Ç»ÈÍѤ¹¤ë¾ì¹ç¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Î¶èÀÚ¤ê¤Ë¤Ï '\' ¤Ç¤Ï¤Ê¤¯
- '/' ¤òÍѤ¤¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
-
- ¡¦ ¡Ô»ØÄêÎã¡Õ
-
- /printer (/usr/local/lib/tex/dviprt/escp_24.cfg)
-
- ¡¦ ¡ÔÀâÌÀ¡Õ
-
- dviprt.exe ¤ÇÍѤ¤¤é¤ì¤ë¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¤½¤Î¥½¡¼¥¹¥Õ
- ¥¡¥¤¥ë¤ò»ØÄꤷ¤Þ¤¹¡£
-
- ¤³¤³¤Ç»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ï
-
- (A) Ghostscript ¤Î¥é¥¤¥Ö¥é¥ê¸¡º÷ (use.doc ¤Î File searching ¤Î¹à
- Ìܤò»²¾È) ¤Ë½¾¤Ã¤¿¸¡º÷
- (B) »ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë̾¤ò´Ä¶­ÊÑ¿ô TEXCFG ¤ËÀßÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È
- ¥ê̾¤ËÏ¢·ë¤·¤¿¥Õ¥¡¥¤¥ë̾¤Î¥Õ¥¡¥¤¥ë (´Ä¶­ÊÑ¿ô¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë
- ¾ì¹ç¤Î¤ß)
-
- ¤Î½ç¤Ëõ¤µ¤ì¤Þ¤¹¡£
-
- ¤³¤Î¥Õ¥¡¥¤¥ë¤Ï»ÈÍѤ¹¤ë¥×¥ê¥ó¥¿¤Îµ¡¼ï¤Ë¤¢¤Ã¤¿¤â¤Î¤òÍÑ°Õ¤¹¤ëɬÍ×
- ¤¬¤¢¤ê¤Þ¤¹¡£
-
- dviprt ¤ÏÂçÊÑ¿¤¯¤Î¥æ¡¼¥¶¤ò»ý¤Ã¤Æ¤¤¤ë¤¿¤á¤¢¤ê¤¬¤¿¤¤¤³¤È¤Ë¤¿¤¯
- ¤µ¤ó¤Î¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤¬´û¤ËºîÀ®¡¦¸ø³«¡¦ÇÛÉÛ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤Þ
- ¤º¤Ï dviprt ¤Î¥æ¡¼¥Æ¥£¥ê¥Æ¥£¥Ñ¥Ã¥±¡¼¥¸ tex???ut.lzh ¤ËÌÜŪ¤Î¥×¥ê
- ¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤¬Ìµ¤¤¤«¤É¤¦¤«³Î¤«¤á¤Æ¤¯¤À¤µ¤¤¡£
-
- ±¿°­¤¯¤´»ÈÍѤΥץê¥ó¥¿ÍѤΥץê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤¬ tex???ut.lzh
- ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢¤½¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ï¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤Ç¤¹¤Î
- ¤Ç¥¨¥Ç¥£¥¿¤ÇºîÀ®¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
-
- ¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤È¤½¤ì¤ò¥³¥ó¥Ð¡¼¥È¤·¤¿¥Ð¥¤
- ¥Ê¥ê¥Õ¥¡¥¤¥ë¤È¤Ï¤½¤ÎÆâÍƤ«¤é¼«Æ°È½Ê̤·¤Æ¤¤¤Þ¤¹¡£
-
-(2) /resolution
-
- ¡¦ ¡Ô»ØÄêË¡¡Õ
-
- /resolution [ ²£¤Î²òÁüÅÙ ½Ä¤Î²òÁüÅÙ ]
-
- dot/inch(dpi) ñ°Ì¤Ç¤Î¼Â¿ôɽ¸½¡£
-
- ¡¦ ¡ÔÀßÄêÎã¡Õ
-
- /resolution [ 160 180 ]
-
- ¡¦ ¡ÔÀâÌÀ¡Õ
-
- ²òÁüÅÙ¤ò»ØÄꤷ¤Þ¤¹¡£Ä̾ï¤Ï¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Ëµ­Ï¿¤·¤Æ¤¢¤ë¥×
- ¥ê¥ó¥¿¸ÇÍ­¤Î²òÁüÅÙ¤ò»²¾È¤·¤Þ¤¹¤Î¤Ç¤³¤Î¹àÌܤÎÀßÄê¤ÏɬÍפ¢¤ê¤Þ¤»¤ó
- ¤¬ dviprt ¤Î¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Ï½Ä²£¤Î²òÁüÅÙ¤¬Æ±¤¸¤Ç¤¢¤ë¤³¤È¤ò
- ²¾Äꤷ¤Æ¤¤¤Þ¤¹¤Î¤Ç¤³¤ì¤Ë³ºÅö¤·¤Ê¤¤¥×¥ê¥ó¥¿ (½Ä²£¤Î²òÁüÅÙ¤¬°Û¤Ê¤ë
- ¥×¥ê¥ó¥¿) ¤Ç¤Ï¼Â¹ÔËè¤Ë (Ghostscript ¤Î)-r ¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Ê¤±
- ¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤Þ¤¿¡¢²òÁüÅÙ¤¬µ­Ï¿¤µ¤ì¤Æ¤¤¤Ê¤¤¸Å¤¤¥Ð¡¼¥¸¥ç¥ó¤Î¥×
- ¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤ò»ÈÍѤ¹¤ë¾ì¹ç¤Ç¤âƱÍͤǤ¹¡£
-
- ²òÁüÅÙ¤ÎÍ¥Àè½ç°Ì¤Ï¡¢
-
- (A) Ghostscript µ¯Æ°»þ¤Î -r ¥ª¥×¥·¥ç¥ó¤Ë¤è¤ë»ØÄê
- (B) ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Î "/resolution" ¤Î¹àÌܤˤè¤ë»ØÄê
- (C) ¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ëÃæ¤Î²òÁüÅÙ
- (D) 180dpi(¥Ç¥Õ¥©¥ë¥È)
-
- ¤Ç¤¹¡£
-
-(3) /offset
-
- ¡¦ ¡ÔÀßÄêË¡¡Õ
-
- /offset [ ²£¤Î°ÜÆ°ÎÌ ½Ä¤Î°ÜÆ°ÎÌ ]
-
- Ťµ¤Ë¤è¤ë»ØÄê¡£
-
- ¡¦ ¡ÔÀßÄêÎã¡Õ
-
- /offset [ 0.0 -0.2 ]
-
- ¡¦ ¡ÔÀâÌÀ¡Õ
-
- ¸¶ÅÀ (½ÐÎÏ¥¤¥á¡¼¥¸¤Îº¸²¼³Ñ) ¤Î²£ / ½ÄÊý¸þ¤Î°ÜÆ°Î̤ò»ØÄꤷ¤Þ¤¹¡£
-
- °õ»ú²ÄǽÎΰè¤ÎÏȤ«¤éÇÁ¤¤¤Æ¸«¤¨¤ëÉôʬ¤¬¤³¤³¤Ç»ØÄꤵ¤ì¤¿Ê¬¤À¤±Ê¿
- ¹Ô°ÜÆ°¤¹¤ë¡¢¤È¤¤¤¦¥¤¥á¡¼¥¸¤ò»ý¤Ã¤Æ¤¤¤¿¤À¤±¤Ð¤¤¤¤¤Ç¤·¤ç¤¦¡£
-
- Íѻ汦¡¢¾åÊý¸þ¤¬¤½¤ì¤¾¤ì¤ÎÀµÊý¸þ¤Ç¤¹¡£
-
- ¾Êά¤µ¤ì¤¿¾ì¹ç¤Ï½Ä²£ÁÐÊý¸þ 0 ¥¤¥ó¥Á¤Ç¤¹¡£
-
- ¤³¤Î¥Ñ¥Ã¥±¡¼¥¸¤Ë¤Ï°ÌÃÖ¹ç¤ï¤»¤Î¤¿¤á¤Î PS ¥Õ¥¡¥¤¥ë (testpage.ps)
- ¤¬ÉÕ°¤·¤Æ¤¤¤Þ¤¹¡£¤³¤Î¥Õ¥¡¥¤¥ë¤ÏÍÑ»æ¤Î±ï¤«¤é¡¢Æ⦠1.5cm¡¢1inch¡¢
- µÚ¤Ó 3cm ¤Î°ÌÃÖ¤Ë 1 dot Éý¤ÎºÙ¤¤Àþ¤ÇÏȤò½ñ¤¯¤À¤±¤Î¤â¤Î¤Ç¤¹¡£
-
- testpage.ps ¤Ç¤ÏÍѻ極¥¤¥º¤Ï¡¢¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤ÎÉÁ²èÈϰϤËÅù¤·
- ¤¤¤â¤Î¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£Î㤨¤Ð -sPAPERSIZE=b5 ¤È¤¤¤¦¥ª¥×¥·¥ç¥ó¤òÉÕ
- ¤±¤Æ Ghostscript ¤òµ¯Æ°¤¹¤ì¤ÐÍѻ極¥¤¥º¤Ï B5 ¤Ç¤¢¤ë¤È²¾Äꤵ¤ì¡¢
- ¤Þ¤¿¡¢Ghostscript ¤ËÉÁ²èÈϰϤò»ØÄꤹ¤ë¥ª¥×¥·¥ç¥ó (-g¡¢
- -sPAPERSIZE) ¤òÉÕ¤±¤º¤Ëµ¯Æ°¤·¤¿¾ì¹ç¤Ë¤Ï¡¢¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤Î¥Ç¥Õ
- ¥©¥ë¥È¤ÎÉÁ²èÈϰϤ¬Íѻ極¥¤¥º¤Ç¤¢¤ë¤È¤µ¤ì¤Þ¤¹¡£
-
- -sPAPERSIZE ¥ª¥×¥·¥ç¥ó¤È -g ¥ª¥×¥·¥ç¥ó¤Ë¤Ä¤¤¤Æ¤Ï Ghostscript
- ¤Î¥É¥­¥å¥á¥ó¥È use.doc ¤ò¤´Í÷¤¯¤À¤µ¤¤¡£
-
- Î㤨¤Ð¡¢¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£
-
- gs -dNOPAUSE -sDEVICE=dmprt -sPAPERSIZE=b5 -- testpage.ps
-
- ¤³¤Î¥Õ¥¡¥¤¥ë testpage.ps ¤Î½ÐÎÏ°ÌÃÖ¤¬¤º¤ì¤ë¾ì¹ç¤Ë¤ÏÀµ¤·¤¤°ÌÃÖ
- ¤ËÏȤ¬¤¯¤ë¤è¤¦¤Ë /offset ¤ÎÃͤòÄ´Àᤷ¤Æ¤¯¤À¤µ¤¤¡£
-
-(4) /defaultsize
-
- ¡¦ ¡ÔÀßÄêË¡¡Õ
-
- /defaultsize [ Éý ¹â ]
-
- Ťµ¤Ë¤è¤ë»ØÄê¡£
-
- ¡¦ ¡ÔÀßÄêÎã¡Õ
-
- /defaultsize [ 8.0 11.0 ]
-
- ¡¦ ¡ÔÀâÌÀ¡Õ
-
- Ghostscript ¤Îµ¯Æ°¥ª¥×¥·¥ç¥ó¤Ç°õ»úÎΰè¤ÎÉý¡¦¹â¤Î»ØÄê (-g ¥ª¥×
- ¥·¥ç¥ó¡¢-sPAPERSIZE ¥ª¥×¥·¥ç¥ó) ¤¬¤Ê¤¤¾ì¹ç¤Î°õ»úÎΰè¤ò»ØÄꤷ¤Þ¤¹¡£
-
- »ØÄꤵ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ë¤Ï¡¢Éý 8.3 ¥¤¥ó¥Á¡¢¹â 11.7 ¥¤¥ó¥Á¤Ç¤¹¡£
-
-(5) /margin
-
- ¡¦ ¡ÔÀßÄêË¡¡Õ
-
- /margin [ º¸ ²¼ ±¦ ¾å ]
-
- Ťµ¤Ë¤è¤ë»ØÄê¡£
-
- ¡¦ ¡ÔÀßÄêÎã¡Õ
-
- /margin [ 3.675 mm 12.7 mm 3.675 mm 6.5 mm ]
-
- ¡¦ ¡ÔÀâÌÀ¡Õ
-
- ÍÑ»æ¤Î¤¦¤Á¥×¥ê¥ó¥¿¤¬°õ»ú¤¹¤ë¤³¤È¤¬½ÐÍè¤Ê¤¤Éôʬ¤òÍÑ»æ¾å²¼º¸±¦¤Î
- ü¤«¤é¤ÎŤµ¤Ç»ØÄꤷ¤Þ¤¹¡£
-
- ¤³¤³¤Ç»ØÄꤵ¤ì¤¿Îΰè¤Î¥¤¥á¡¼¥¸¤Ï¥×¥ê¥ó¥¿¤Ë½ÐÎϤµ¤ì¤Þ¤»¤ó (c.f.
- /maxsize)¡£
-
- »ØÄꤵ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¤Ï¾å²¼º¸±¦Á´¤Æ 0 ¥¤¥ó¥Á¤Ç¤¹¡£
-
-(6) /maxsize
-
- ¡¦ ¡ÔÀßÄêË¡¡Õ
-
- /maxsize [ Éý ¹â ]
-
- Ťµ¤Ë¤è¤ë»ØÄê¡£
-
- ¡¦ ¡ÔÀßÄêÎã¡Õ
-
- /maxsize [ 8.0 11.0 ]
-
- ¡¦ ¡ÔÀâÌÀ¡Õ
-
- ¥×¥ê¥ó¥¿¤Î°õ»ú²ÄǽÎΰè¤ÎºÇÂ祵¥¤¥º¤ò»ØÄꤷ¤Þ¤¹¡£¤³¤Î¥µ¥¤¥º¤«¤é
- ¤Ï¤ß½Ð¤¹Éôʬ¤Ï»ØÄꤵ¤ì¤¿Íѻ極¥¤¥º¤ä¥Þ¡¼¥¸¥ó¤Ë¤«¤«¤ï¤é¤º½ÐÎϤµ¤ì
- ¤Ê¤¯¤Ê¤ê¤Þ¤¹ (±¦¡¢¾å¤¬ÀÚ¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹)¡£
-
- Î㤨¤ÐºÇÂç°õ»ú²ÄǽÉý¤ò±Û¤¨¤ë¥¤¥á¡¼¥¸¤òÁ÷¤Ã¤¿¾ì¹ç¤Ë¤½¤Î¤Ö¤ó¤ò̵
- »ë¤»¤º¤Ë¼¡¤Î¹Ô¤ËÀÞ¤êÊÖ¤·¤Æ°õ»ú¤·¤Æ¤·¤Þ¤¦¥×¥ê¥ó¥¿¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì
- ¹ç¤ä¡¢Ä¹¤¹¤®¤ë¥Ú¡¼¥¸¤ò½ÐÎϤ·¤¿¾ì¹ç¤Ë¼¡¤ÎÍÑ»æ¤Ë³¤­¤ò½ÐÎϤ·¤Æ¤·¤Þ
- ¤¦¾ì¹ç¤Ê¤É¤Ë¤³¤Î¹àÌܤòÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
-
- 0 Ëô¤ÏÉé¤ÎÃͤϡÖ̵¸ÂÂç¡×¤ò°ÕÌ£¤·¤Þ¤¹¡£Éý¡¢¹â¤µ¤Î»ØÄê¤ÏÆÈΩ¤Ç¤¹¡£
- ¤¹¤Ê¤ï¤ÁÎ㤨¤ÐÉý¤¬ 8 ¥¤¥ó¥Á¡¢¹â¤µ¤¬Ìµ¸ÂÂç¡¢¤È¤¤¤¦»ØÄê¤â²Äǽ¤Ç¤¹¡£
-
- (e.g.) /maxsize [ 8.0 0 ]
-
- »ØÄꤵ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ë¤Ï½Ä²£ÁÐÊý¸þ¤¬Ìµ¸ÂÂç¤Ç¤¹¡£
-
- ½ÐÎϤµ¤ì¤ë¥¤¥á¡¼¥¸¤Î¥µ¥¤¥º¤¬Íѻ極¥¤¥º¤«¤é¥Þ¡¼¥¸¥ó¤òº¹¤·°ú¤¤¤¿
- ¥µ¥¤¥º¤è¤êÂ礭¤¤¤È¤­¤Ë½ÐÎÏ¥¤¥á¡¼¥¸¤Î¥µ¥¤¥º¤ò¤³¤³¤ÇÀßÄꤵ¤ì¤¿ÃͤË
- ÃÖ¤­´¹¤¨¤Æ½èÍý¤µ¤ì¤Þ¤¹ (ÀßÄꤵ¤ì¤¿Ãͤ¬ 0 °Ê²¼¤Ç¤¢¤ì¤Ð¤³¤ÎÃÖ¤­´¹
- ¤¨¤Ï¹Ô¤ï¤ì¤Þ¤»¤ó)¡£
-
-(7) /verbose
-
- ¡¦ ¡ÔÀßÄêË¡¡Õ
-
- /verbose ÏÀÍýÃÍ
-
- ¡¦ ¡ÔÀßÄêÎã¡Õ
-
- /verbose true
-
- ¡¦ ¡ÔÀâÌÀ¡Õ
-
- ¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤ÎÆ°ºî¾õÂÖ¤ò¾Ü¤·¤¯É½¼¨¤¹¤ë¤«¤É¤¦¤«¤Î»ØÄê¤Ç¤¹¡£½Ð
- ÎÏÃæ¤Î¥Ú¡¼¥¸¤ÎÄ̤·ÈÖ¹æ¤ä½ÐÎÏ¥³¡¼¥É¤Î¥Ð¥¤¥È¿ô¤Ê¤É¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£
-
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï false (off) ¤Ç¤¹ (²¿¤âɽ¼¨¤µ¤ì¤Þ¤»¤ó)¡£
-
- ¤³¤Î¹àÌܤ¬ true (on) ¤ËÀßÄꤷ¤Æ¤¢¤Ã¤Æ¤â¡¢Ghostscript ¤Îµ¯Æ°¥ª¥×
- ¥·¥ç¥ó¤Ç -q ¥ª¥×¥·¥ç¥ó (QUIET) ¤¬»ØÄꤷ¤Æ¤¢¤ì¤Ð¡¢¤³¤Î¹àÌܤÎÀßÄê
- ¤¬ off ¤Î¾ì¹ç¤ÈƱ¤¸Æ°ºî¤ò¤·¤Þ¤¹¡£
-
------------------------------
-¡ú 4.4 ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Î»ØÄê
------------------------------
- dmprt ¥É¥é¥¤¥Ð¤¬ÁȤ߹þ¤Þ¤ì¤¿ Ghostscript ¤Ïµ¯Æ°»þ¤Ë dmp_init.ps µÚ¤Ó
-dmp_site.ps ¤ò Ghostscript ¤Î¥Õ¥¡¥¤¥ë¸¡º÷¥Ñ¥¹¾å¤«¤éÆɤ߹þ¤ß¤Þ¤¹¡£¤³¤ì¤é
-¤Î¥Õ¥¡¥¤¥ë¤Ï Ghostscript ¤Î¥Õ¥¡¥¤¥ë¸¡º÷¥Ñ¥¹¾å¤ËÃÖ¤¤¤Æ¤¯¤À¤µ¤¤¡£
-dmp_site.ps(´Ä¶­ÄêµÁ¥Õ¥¡¥¤¥ë) ¤¬¸«¤Ä¤«¤é¤Ê¤±¤ì¤ÐÆɤ߹þ¤ß¤òÄü¤á¤Æ¥Ç¥Õ¥©¥ë
-¥È¤ÎÀßÄê (ESC/P 24 pin) ¤òÍѤ¤¤Þ¤¹¡£
-
- dmp_site.ps ¤ÎÂå¤ï¤ê¤ËÊ̤Υե¡¥¤¥ë¤ò»ØÄꤷ¤ÆÆɤ߹þ¤à¤³¤È¤â²Äǽ¤Ç¤¹¡£
-Ghostscript µ¯Æ°»þ¤Ë¤½¤Î¥Õ¥¡¥¤¥ë̾¤ò -sDMPCONFIG= ¥Õ¥¡¥¤¥ë̾ ¤Î¤è¤¦¤Ë»Ø
-Äꤷ¤Æ¤¯¤À¤µ¤¤¡£¤³¤Î¾ì¹ç¤Ë»ØÄꤹ¤ë¥Õ¥¡¥¤¥ë¤òÃÖ¤¯¥Ç¥£¥ì¥¯¥È¥ê¤â
-dmp_init.ps ¤Ê¤É¤ÈƱÍͤǤ¹¡£
-
- (e.g.) gs -sDEVICE=dmprt -sDMPCONFIG=dmp_local.ps -dNOPAUSE -- tiger.ps
-
-
-========================================================================
-¡ü £µ¡¥ »ÈÍÑË¡
-========================================================================
-
- dmp_site.ps ¤ÎÀßÄê°Ê³°¤Ë¤ÏÆÃÊ̤ʤ³¤È¤ò¹Ô¤¦É¬ÍפϤ¢¤ê¤Þ¤»¤ó¡£gs ¤Î¥Ç¥Ð
-¥¤¥¹¤È¤·¤Æ "dmprt" ¤ò»ØÄꤷ¤Æµ¯Æ°¤·¤Æ¤¯¤À¤µ¤¤ (¾¤Î¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤ÈƱ
-ÍͤλȤ¤Êý)¡£
-
- (e.g.) gs -sDEVICE=dmprt sample.ps
-
-
-========================================================================
-¡ü £¶¡¥ ¼Õ¼­
-========================================================================
-
- ¡þ PC-VAN SSCIENCE ¤Î FKR ¤µ¤ó¤Ë¤Ï 386BSD ¤Ç¤ÎÍøÍѤˤª¤±¤ëÉÔ¶ñ¹ç¤ò½¤Àµ
- ¤·¤Æ¤¤¤¿¤À¤­¤Þ¤·¤¿¡£
-
- ¡þ CCITTFax ¥¨¥ó¥³¡¼¥À¤Î¼ÂÁõ¤Ë¤¢¤¿¤Ã¤Æ¤Ï¡¢¤½¤Î¥³¡¼¥É¤ò Godohoji ¤µ¤óµÚ
- ¤Ó SHIMA ¤µ¤ó¤Ë¤è¤ë Fax Endode/Decode ¥é¥¤¥Ö¥é¥êÃæ¤Î¤â¤Î¤ò¸µ¤Ë¤µ¤»¤Æ
- ¤¤¤¿¤À¤­¤Þ¤·¤¿¡£
-
- ¡þ ¤½¤·¤Æ²¿¤è¤ê dviprt/dviout ¤È¤¤¤¦¹âµ¡Ç½ DVI ¥É¥é¥¤¥Ð¤ò³«È¯¡¦³ÈÄ¥¤·¤Æ
- ²¼¤µ¤Ã¤¿ PC-VAN SSCIENCE ¤Î SHIMA ¤µ¤ó¤ò¤Ï¤¸¤á¤È¤¹¤ë³«È¯¼Ô¤ÎÊý¡¹¤Ë´¶
- ¼Õ¤·¤Þ¤¹¡£
-
-
-========================================================================
-¡ü £·¡¥ ¥³¥ó¥Ñ¥¤¥ë
-========================================================================
-
- °Ê²¼¤Î¼ê½ç¤Ç¥³¥ó¥Ñ¥¤¥ë¤·¤Æ²¼¤µ¤¤¡£
-
-(1) gdevdmpr.c¡¢dviprlib.c¡¢dviprlib.h ¤ò¾¤Î Ghostscript ¤Î¥½¡¼¥¹¤ÈƱ¤¸
- ¥Ç¥£¥ì¥¯¥È¥ê¤ËÃÖ¤¯¡£
-
-(2) devs.mak ¤Ë gdevdmpr.mak ¤ÎÆâÍƤòÄɲ乤롣
-
-(3) *-head.mak Ãæ¤Î¥Þ¥¯¥í "DEVICE_DEVS?" ¤Ë "dmprt.dev" ¤ò²Ã¤¨¤ë¡£
-
-(4) tar_cat ¤ò¼Â¹Ô¤¹¤ë¡£
-
-(5) make ¤¹¤ë¡£
-
-
-========================================================================
-¡ü £¸¡¥ Ãøºî¸¢¡¦Êݾڡ¦ºÆÇÛÉÛ¡¦²þÊÑ
-========================================================================
-
- Ãøºî¸¢¤Ïºî¼Ô¤Ç¤¢¤ëÞÉ»³ (TPM03937@pcvan.or.jp) ¤¬ÊÝÍ­¤·¤Þ¤¹¡£Ëܥѥ屡¼
-¥¸¤Ë´Þ¤Þ¤ì¤ëÁ´¤Æ¤Î¥×¥í¥°¥é¥àµÚ¤Ó¥É¥­¥å¥á¥ó¥È¤Ï̵ÊݾڤǤ¹¡£
-
- ÊݾڵڤӺÆÇÛÉÛ¡¦²þÊѤ˴ؤ¹¤ë¾ò·ï¤ÏÁ´¤Æ GNU General Public License (GNU
-GPL) ¤Ë½¾¤¤¤Þ¤¹¡£GNU GPL ¤ÏÉÕ°¤Î COPYING ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤Þ
-¤¹¡£
-
-
-========================================================================
-¡ü £¸¡¥ ÍúÎò
-========================================================================
-
-1997.5.13.
-
- ¡þ Ghostscript 4.03 ¤ËÂбþ¡£
- ¡þ *.src ¤¬Àµ¤·¤¯Æɤ߹þ¤á¤Ê¤¤¾ì¹ç (line_feed, form_feed ¤¬Ì¤ÄêµÁ¤Î *.src)
- ¤¬¤¢¤ëÉÔ¶ñ¹ç¤ò½¤Àµ¡£
- ¡þ -sDMPSITE ¤Î½èÍý¤¬Àµ¤·¤¯¤ª¤³¤Ê¤ï¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿ÉÔ¶ñ¹ç¤ò½¤Àµ¡£
- ¡þ setpagedevice ¥ª¥Ú¥ì¡¼¥¿¤ÇÀßÄê²Äǽ¤ÊÀßÄê¹àÌܤο¤¯¤òºï½ü¡£
- ¡þ DJ's GPP ¤Ø¤ÎÂбþ¤òÅà·ë (³«È¯´Ä¶­¤È²Ë¤¬¤Ê¤¯¤Ê¤Ã¤¿¤¿¤á)¡£
- ¡þ testpage.ps ¤¬ Level 2 ¤Ç¤¦¤Þ¤¯½ÐÎϤǤ­¤Ê¤«¤Ã¤¿ÉÔ¶ñ¹ç¤ò½¤Àµ¡£
-
-
- ÞÉ»³ ÏÂŵ (ASAYAMA Kazunori)
- TPM03937@pcvan.or.jp
- GHF01532@niftyserve.or.jp
- asayama@vsp.cpg.sony.co.jp
diff --git a/contrib/japanese/dviprlib.c b/contrib/japanese/dviprlib.c
deleted file mode 100644
index 97ad5526..00000000
--- a/contrib/japanese/dviprlib.c
+++ /dev/null
@@ -1,2823 +0,0 @@
-/* COPYRIGHT (C) 1990, 1992 Aladdin Enterprises. All rights reserved.
- Distributed by Free Software Foundation, Inc.
-
- This file is part of Ghostscript.
-
- 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 Ghostscript General Public License for full details.
-
- Everyone is granted permission to copy, modify and redistribute
- Ghostscript, but only under the conditions described in the Ghostscript
- General Public License. A copy of this license is supposed to have been
- given to you along with 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. */
-
-/* dviprlib.c */
-
-#include "stdio_.h"
-#include "ctype_.h"
-#include "malloc_.h"
-#include "string_.h"
-#include "gstypes.h"
-#include "gsmemory.h"
-#include "gp.h"
-
-/* include library header. */
-#define dviprlib_implementation
-#include "dviprlib.h"
-
-/* The remainder of this file is a copy of the library for dviprt. */
-
-/***** From rcfg.c *****/
-/* $Id: RCFG.C 1.1 1994/08/30 02:27:02 kaz Exp kaz $ */
-
-/*--- forward declarations ---*/
-static int dviprt_read_S_cfg(dviprt_cfg_t *,dviprt_cfg_i *);
-static int dviprt_read_QR_cfg(dviprt_cfg_t *,dviprt_cfg_i *);
-
-/*--- library functions ---*/
-int
-dviprt_readcfg(const gs_memory_t *mem, char *ifname,dviprt_cfg_t *pcfg,uchar *pcodebuf,int codebuf_s,
- uchar *pworkbuf,int workbuf_s)
-{
- int code;
- int ver;
- dviprt_cfg_i info;
-
- info.fname = ifname;
- info.line_no = -1;
- if (ifname) {
- info.file = gp_fopen(mem,ifname,gp_fmode_rb);
- if (info.file == NULL) {
- dviprt_printcfgerror(&info,"Cannot open.\n",-1);
- return CFG_ERROR_FILE_OPEN;
- }
- }
- else {
- /* Broken, but unused in gs. Just return an error for now. */
- /* info.file = stdin; */
- return CFG_ERROR_FILE_OPEN;
- }
-
- gp_fseek(info.file,16,0);
- ver = gp_fgetc(info.file);
- gp_fseek(info.file,0,0);
- info.codebuf = pcodebuf;
- info.readbuf = pworkbuf;
- info.codebuf_size = codebuf_s;
- info.readbuf_size = workbuf_s;
- code = (ver == 'S') ? dviprt_read_S_cfg(pcfg,&info)
- : dviprt_read_QR_cfg(pcfg,&info);
-
- if (ifname) gp_fclose(info.file);
- return code;
-}
-
-/*--- internal routines ---*/
-static int
-dviprt_read_S_cfg(dviprt_cfg_t *pcfg,dviprt_cfg_i *pinfo)
-{
- gp_file *ifp;
- long intoff,stroff,codeoff;
- int i,count;
- uchar *pbuf,*rbuf;
- int code;
- char *ptype;
- int n;
-
- if ((code = dviprt_setcfgbuffer_(pinfo,100,0)) < 0) return code;
- dviprt_initcfg_(pcfg,pinfo);
-
- ifp = pinfo->file;
- rbuf = pinfo->readbuf;
-
- if (gp_fread(rbuf,20,1,ifp) < 1) {
- dviprt_printcfgerror(pinfo,"Read error.\n",-1);
- }
- if (rbuf[17] != 0xff || rbuf[18] != 0xff) {
- not_cfg:
- dviprt_printcfgerror(pinfo,"This file does not seem *.CFG.\n",-1);
- return CFG_ERROR_OTHER;
- }
- if (memcmp(rbuf,CFG_MAGIC_NUMBER,2))
- goto not_cfg;
- pcfg->version = rbuf[2] | ((uint)rbuf[3] << 8);
- if (pcfg->version > CFG_VERSION) {
- gs_sprintf(dviprt_message_buffer,
- "This *.CFG file is too new version(ver.%u).\n",pcfg->version);
- dviprt_printcfgerror(pinfo,dviprt_message_buffer,-1);
- return CFG_ERROR_OTHER;
- }
-
-#define bytes2long(p) ((p)[0] | ((long)(p)[1]<<8) | \
- ((long)(p)[2]<<16) | ((long)(p)[3]<<24))
- intoff = bytes2long(rbuf+4);
- stroff = bytes2long(rbuf+8);
- codeoff = bytes2long(rbuf+12);
-#undef bytes2long
-
- gp_fseek(ifp,intoff,0);
- count = gp_fgetc(ifp);
- gp_fread(rbuf,count*3,1,ifp);
-
- pbuf = rbuf;
- for (i=0;i<count;i++) {
- n = pbuf[0];
- if (n >= CFG_INTEGER_TYPE_COUNT) {
- ptype = "integer";
- unknown_no:
- gs_sprintf(dviprt_message_buffer,
- "Unknown %s type value No.%d is found.\n",ptype,n);
- dviprt_printcfgerror(pinfo,dviprt_message_buffer,-1);
- return CFG_ERROR_OTHER;
- }
- pcfg->integer[n] = pbuf[1] | ((uint)pbuf[2]<<8);
- pbuf += 3;
- }
-
- gp_fseek(ifp,stroff,0);
- count = gp_fgetc(ifp);
- pbuf = NULL;
- for (i=0;i<count;i++) {
- int l;
- gp_fread(rbuf,3,1,ifp);
- n = rbuf[0];
- l = rbuf[1] | ((uint)rbuf[2]<<8);
- if (n >= CFG_STRINGS_TYPE_COUNT) {
- ptype = "strings";
- goto unknown_no;
- }
- if (pinfo->codebuf == NULL) {
- pcfg->strings[n] = (uchar *)malloc(l+1);
- if (pcfg->strings[n] == NULL) {
- no_memory:
- dviprt_printcfgerror(pinfo,"Memory exhausted.\n",-1);
- return CFG_ERROR_MEMORY;
- }
- }
- else {
- pcfg->strings[n] = pinfo->pcodebuf;
- pinfo->pcodebuf += (l+1);
- }
- gp_fread(pcfg->strings[n],l,1,ifp);
- *(pcfg->strings[n]+l) = 0;
- }
-
- gp_fseek(ifp,codeoff,0);
- count = gp_fgetc(ifp);
- for (i=0;i<count;i++) {
- int l;
- gp_fread(rbuf,3,1,ifp);
- n = rbuf[0];
- l = rbuf[1] | ((uint)rbuf[2]<<8);
-
- if (n >= CFG_PRTCODE_TYPE_COUNT) {
- ptype = "printer code";
- goto unknown_no;
- }
- if (pinfo->codebuf == NULL) {
- pcfg->prtcode[n] = (uchar *)malloc(l+1);
- if (pcfg->prtcode[n] == NULL)
- goto no_memory;
- }
- else {
- pcfg->prtcode[n] = pinfo->pcodebuf;
- pinfo->pcodebuf += (l+1);
- }
- gp_fread(pcfg->prtcode[n],l,1,ifp);
- *(pcfg->prtcode[n]+l) = 0;
- pcfg->prtcode_size[n] = l;
- }
- dviprt_resetcfgbuffer_(pinfo);
- return 0;
-}
-
-static int
-dviprt_read_QR_cfg(dviprt_cfg_t *pcfg,dviprt_cfg_i *pinfo)
-{
-#define TYPE_BIT 0xc0
-
-#define NO_NUM 0
-#define BINARY_LTOH 1
-#define BINARY_HTOL 2
-#define DECIMAL_3 3
-#define DECIMAL_4 4
-#define DECIMAL_5 5
-#define DECIMAL_V 6
-
-#define TOTAL_BYTE 0x80
-#define ISO_NUMBER 0x40
-#define DIVIDEBY_2 0x10
-#define DIVIDE_ALL 0x30
-#define MULT_CONST 0x08
- enum {
- BIT_IMAGE_MODE,
- NORML_MODE,
- SEND_BIT_IMAGE,
- SKIP_SPACES,
- LINE_FEED,
- FORM_FEED,
- AFTER_BIT_IMAGE,
- BIT_ROW_HEADER,
- };
- uchar *cfg_buf,*ptr;
- int ch, type, f_cont, f_type, pos, i, j, k, lens;
- int f_r_format;
- long offset;
- int old2new[] = {
- CFG_BIT_IMAGE_MODE,
- CFG_NORMAL_MODE,
- CFG_SEND_BIT_IMAGE,
- CFG_SKIP_SPACES,
- CFG_LINE_FEED,
- CFG_FORM_FEED,
- CFG_AFTER_BIT_IMAGE,
- CFG_BIT_ROW_HEADER,
- };
-
- ch =dviprt_setcfgbuffer_(pinfo,300,TEMP_CODEBUF_SIZE);
- if (ch < 0) return CFG_ERROR_MEMORY;
- dviprt_initcfg_(pcfg,pinfo);
- cfg_buf = pinfo->readbuf;
- if (gp_fread(cfg_buf,30,1,pinfo->file) < 1) {
- dviprt_printcfgerror(pinfo,"Read error.\n",-1);
- }
- if (cfg_buf[16] == 'P') {
- dviprt_printcfgerror(pinfo,"This is made by old version.\n",-1);
- return CFG_ERROR_OTHER;
- }
- else if (cfg_buf[16] == 'Q')
- f_r_format = 0;
- else if (cfg_buf[16] == 'R')
- f_r_format = 1;
- else
- f_r_format = -1;
- if (f_r_format == -1 || cfg_buf[18] != 0xff) {
- dviprt_printcfgerror(pinfo,"This is not the *.CFG file for dviprt.\n",-1);
- return CFG_ERROR_OTHER;
- }
- cfg_buf[16] = '\0';
- pcfg->version = 0;
- if (pinfo->temp_codebuf_f) {
- pcfg->strings[CFG_NAME] = malloc(strlen(cfg_buf)+1);
- if (pcfg->strings[CFG_NAME] == NULL) {
- no_memory:
- dviprt_printcfgerror(pinfo,"Memory exhausted.\n",-1);
- return CFG_ERROR_MEMORY;
- }
- }
- else {
- pcfg->strings[CFG_NAME] = pinfo->pcodebuf;
- pinfo->pcodebuf += strlen(cfg_buf);
- pinfo->pcodebuf++;
- }
- strcpy(pcfg->strings[CFG_NAME],cfg_buf);
-
- pcfg->integer[CFG_UPPER_POS] =
- (cfg_buf[17] & (CFG_LEFT_IS_LOW|CFG_NON_MOVING));
- pcfg->integer[CFG_ENCODE] =
- (cfg_buf[17] & 0x10) ? CFG_ENCODE_HEX : CFG_ENCODE_NULL;
- pcfg->integer[CFG_PINS] = ((uint) (cfg_buf[17]) & 0x0f);
-
- ptr = cfg_buf+23;
- pcfg->integer[CFG_MINIMAL_UNIT] = (uint)ptr[0] | ((uint)ptr[1]<<8);
- pcfg->integer[CFG_MAXIMAL_UNIT] = (uint)ptr[2] | ((uint)ptr[3]<<8);
- pcfg->integer[CFG_DPI] =
- f_r_format ? ((uint)ptr[4] | ((uint)ptr[5]<<8)) : 180;
- if (cfg_buf[20])
- pcfg->integer[CFG_CONSTANT] = cfg_buf[20];
- offset = cfg_buf[19];
- gp_fseek(pinfo->file,offset,0);
-
- for (i = 0; i <= BIT_ROW_HEADER; i++) {
- uchar *pstart,*plength;
- uchar prev = 1;
- if (pinfo->temp_codebuf_f) {
- pinfo->pcodebuf = pinfo->codebuf;
- }
- pstart = pinfo->pcodebuf;
- do {
- lens = gp_fgetc(pinfo->file);
- if (lens == EOF) break;
- gp_fread(cfg_buf,lens+3,1,pinfo->file);
- ptr = cfg_buf;
- f_cont = *ptr++;
- pos = *ptr++;
- f_type = *ptr++;
- type = f_type & 0x7;
-
- for (j = 0; j < lens; j++) {
- ch = *ptr++;
- if (pos == j && type != NO_NUM) {
- uchar *pfmt = pinfo->pcodebuf++;
- plength = pinfo->pcodebuf++;
- *pinfo->pcodebuf++ = CFG_VAL_DEFAULT;
- *plength = 1;
- j++;
- ptr++;
- switch (type) {
- case (BINARY_LTOH):
- *pfmt = CFG_FMT_BIT | CFG_FMT_BIN_LTOH | 2;
- break;
- case (BINARY_HTOL):
- *pfmt = CFG_FMT_BIT | CFG_FMT_BIN_HTOL | 2;
- break;
- case (DECIMAL_3):
- *pfmt = CFG_FMT_BIT | CFG_FMT_DECIMAL | 3;
- j++;
- ptr++;
- break;
- case (DECIMAL_4):
- *pfmt = CFG_FMT_BIT | CFG_FMT_DECIMAL | 4;
- j += 2;
- ptr += 2;
- break;
- case (DECIMAL_5):
- *pfmt = CFG_FMT_BIT | CFG_FMT_DECIMAL | 5;
- j += 3;
- ptr += 3;
- break;
- case (DECIMAL_V):
- *pfmt = CFG_FMT_BIT | CFG_FMT_DECIMAL;
- j++;
- ptr++;
- break;
- default:
- gs_sprintf(dviprt_message_buffer,"Unknown format %02X",type);
- dviprt_printcfgerror(pinfo,dviprt_message_buffer,-1);
- goto ex_func;
- }
- if (f_type & TOTAL_BYTE) {
- *pinfo->pcodebuf++ = CFG_VAL_PINS_BYTE;
- *pinfo->pcodebuf++ = CFG_OP_MUL;
- (*plength) += 2;
- }
- if ((k = (f_type & DIVIDE_ALL)) != 0) {
- *pinfo->pcodebuf = 0;
- for (; k > 0; k -= DIVIDEBY_2) {
- (*pinfo->pcodebuf)++;
- }
- pinfo->pcodebuf++;
- *pinfo->pcodebuf++ = CFG_OP_SHR;
- (*plength) += 2;
- }
- if (f_type & ISO_NUMBER) {
- *pfmt |= CFG_FMT_ISO_BIT;
- }
- if (f_type & MULT_CONST) {
- *pinfo->pcodebuf++ = CFG_VAL_CONSTANT;
- *pinfo->pcodebuf++ = CFG_OP_MUL;
- (*plength) += 2;
- }
- prev = 1;
- }
- else {
- if (prev == 1 || *plength >= 127) {
- plength = pinfo->pcodebuf++;
- *plength = 0;
- }
- (*plength)++;
- *pinfo->pcodebuf++ = ch;
- prev = 0;
- }
- }
- } while (f_cont & 0x80);
- *pinfo->pcodebuf++ = 0;
- { int n = old2new[i];
- uint l = pinfo->pcodebuf-pstart;
- pcfg->prtcode_size[n] = l - 1;
- if (pinfo->temp_codebuf_f) { /* allocate buffer */
- pcfg->prtcode[n] = (uchar *)malloc(l);
- if (pcfg->prtcode[n] == NULL)
- goto no_memory;
- memcpy(pcfg->prtcode[n],pstart,l);
- }
- else {
- pcfg->prtcode[n] = pstart;
- }
- }
- }
- ex_func:
- dviprt_resetcfgbuffer_(pinfo);
- return 0;
-}
-/***** End of rcfg.c *****/
-
-/***** From rsrc.c *****/
-/* $Id: RSRC.C 1.1 1994/08/30 02:27:02 kaz Exp kaz $ */
-
-typedef struct {
- char *name;
- signed char type;
- uchar no;
- uchar spec_f;
- uchar req_f;
- char *info;
-} dviprt_cfg_item_t;
-
-typedef struct {
- long min;
- long max;
-} dviprt_cfg_limit_t;
-
-/*--- forward declarations ---*/
-static int dviprt_set_select
- (dviprt_cfg_item_t *,uchar **,dviprt_cfg_t *,dviprt_cfg_i *);
-static int dviprt_set_integer
- (dviprt_cfg_item_t *, uchar *, dviprt_cfg_t *,dviprt_cfg_i *);
-static int dviprt_set_strings
- (dviprt_cfg_item_t *,uchar *,dviprt_cfg_t *,dviprt_cfg_i *);
-static int dviprt_set_rpexpr
- (dviprt_cfg_item_t *,uchar *,int , dviprt_cfg_t *,dviprt_cfg_i *,int);
-static int dviprt_set_code
- (dviprt_cfg_item_t *,uchar *,dviprt_cfg_t *,dviprt_cfg_i *);
-
-static long dviprt_oct2long(uchar *,uchar *,uchar **);
-static long dviprt_dec2long(uchar *,uchar *,uchar **);
-static long dviprt_hex2long(uchar *,uchar *,uchar **);
-
-static int dviprt_printtokenerror(dviprt_cfg_i *,char *,int ,int);
-
-/*--- macros ---*/
-#define strlcmp(tmplt,str,len) \
- (!(strncmp(tmplt,str,(int)(len)) == 0 && (int)(len) == strlen(tmplt)))
-#define set_version(pcfg,v) ((pcfg)->version = MAX(v,(pcfg)->version))
-
-enum {
- ERROR_UNKNOWN_VALUE,ERROR_UNKNOWN_FORMAT,ERROR_UNKNOWN_ESCSEQ,
- ERROR_OUTOFRANGE,
- ERROR_INVALID_VALUE,
- ERROR_COMPLICATED_EXPR,
- ERROR_INCOMPLETE,
-};
-
-/*--- library functions ---*/
-int
-dviprt_readsrc(const gs_memory_t *mem, char *fname,dviprt_cfg_t *pcfg,uchar *pcodebuf,int codebuf_s,
- uchar *pworkbuf,int workbuf_s)
-{
- dviprt_cfg_i info;
- int code;
- gp_file *ifp;
- dviprt_cfg_item_t *pitem;
- int enc = CFG_ENCODE_NULL;
- enum { T_INTEGER,T_STRINGS,T_CODE,T_SELECT,T_UPPERPOS};
- static dviprt_cfg_limit_t pins_limit = { 8, 128 };
- static dviprt_cfg_limit_t positive_limit = { 1, 0x7fff };
- static dviprt_cfg_limit_t nonnegative_limit = { 0, 0x7fff};
- static dviprt_cfg_item_t dviprt_items[] = {
- {NULL,T_STRINGS,CFG_NAME,0,1,NULL},
- {NULL,T_INTEGER,CFG_PINS,0,1,(char*)&pins_limit},
- {NULL,T_INTEGER,CFG_MINIMAL_UNIT,0,0,(char*)&positive_limit},
- {NULL,T_INTEGER,CFG_MAXIMAL_UNIT,0,0,(char*)&positive_limit},
- {NULL,T_INTEGER,CFG_DPI,0,0,(char*)&positive_limit},
- {NULL,T_INTEGER,CFG_CONSTANT,0,0,(char*)&nonnegative_limit},
- {NULL,T_INTEGER,CFG_Y_DPI,0,0,(char*)&positive_limit},
- {NULL,T_CODE,CFG_BIT_IMAGE_MODE,0,1,NULL},
- {NULL,T_CODE,CFG_SEND_BIT_IMAGE,0,1,NULL},
- {NULL,T_CODE,CFG_BIT_ROW_HEADER,0,0,NULL},
- {NULL,T_CODE,CFG_AFTER_BIT_IMAGE,0,0,NULL},
- {NULL,T_CODE,CFG_LINE_FEED,0,0,NULL},
- {NULL,T_CODE,CFG_FORM_FEED,0,0,NULL},
- {NULL,T_CODE,CFG_NORMAL_MODE,0,1,NULL},
- {NULL,T_CODE,CFG_SKIP_SPACES,0,1,NULL},
- {NULL,T_UPPERPOS,CFG_UPPER_POS,0,1,NULL},
- {NULL,T_SELECT,CFG_ENCODE,0,0,(char*)dviprt_encodename},
- {NULL,-1},
- };
- static dviprt_cfg_item_t encode_info = {
- "encode",T_STRINGS,CFG_ENCODE_INFO,0,0,NULL
- };
- int prtcode_output_bytes[CFG_PRTCODE_TYPE_COUNT];
-
- info.line_no = -1;
- info.fname = fname;
- if (fname) {
- info.file = gp_fopen(mem,fname,"r");
- if (info.file == NULL) {
- dviprt_printcfgerror(&info,"Cannot open.\n",-1);
- return CFG_ERROR_FILE_OPEN;
- }
- }
- else {
- ifp = stdin;
- }
- ifp = info.file;
-
- info.codebuf = pcodebuf;
- info.readbuf = pworkbuf;
- info.codebuf_size = codebuf_s;
- info.readbuf_size = workbuf_s;
- /* allocate buffer */
- if (dviprt_setcfgbuffer_(&info,TEMP_READBUF_SIZE,TEMP_CODEBUF_SIZE) < 0) {
- gp_fclose(info.file);
- return CFG_ERROR_MEMORY;
- }
-
- /* initialize */
- dviprt_initcfg_(pcfg,&info);
- for (pitem = dviprt_items;pitem->type>=0;pitem++) {
- if (pitem->name == NULL) {
- switch (pitem->type) {
- case T_INTEGER:
- case T_SELECT:
- case T_UPPERPOS:
- pitem->name = dviprt_integername[pitem->no];
- break;
- case T_STRINGS:
- pitem->name = dviprt_stringsname[pitem->no];
- break;
- case T_CODE:
- pitem->name = dviprt_prtcodename[pitem->no];
- break;
- }
- }
- pitem->spec_f = 0;
- }
- encode_info.spec_f = 0;
- { int i;
- for (i=0;i<CFG_PRTCODE_TYPE_COUNT;i++)
- prtcode_output_bytes[i] = 0;
- }
-
- pcfg->version = 1;
- for ( ; ; ) {
- uchar *pbuf = info.readbuf;
- uchar *pchar;
-
- if (fgets(info.readbuf,info.readbuf_size,ifp) == NULL) break;
- info.line_no++;
- {
- int len = strlen(pbuf);
- if ((pbuf[0] < 'a' || pbuf[0] > 'z') && pbuf[0] != '_') {
- while (pbuf[len-1] != '\n') {
- if (fgets(info.readbuf,info.readbuf_size,ifp) == NULL)
- goto end_scan;
- len = strlen(pbuf);
- }
- continue;
- }
- if ( len > 0 && pbuf[len-1] == '\n')
- pbuf[len-1] = 0;
- }
- while (*pbuf && *pbuf != ':') pbuf++;
- if (*pbuf != ':') {
- dviprt_printcfgerror(&info,"Character ':' is expected.\n",-1);
- code = CFG_ERROR_SYNTAX;
- goto end_process;
- }
- pchar = pbuf-1;
- while (pchar >= info.readbuf && isspace(*pchar)) pchar--;
- *++pchar = 0;
- pbuf++;
- for (pitem = dviprt_items;pitem->name;pitem++) {
- if (strcmp(pitem->name,info.readbuf) == 0) break;
- }
- if (pitem->name == NULL) {
- dviprt_printcfgerror(&info,"Unknown item `",-1);
- dviprt_printmessage(info.readbuf,-1);
- dviprt_printmessage("'.\n",-1);
- code = CFG_ERROR_RANGE;
- goto end_process;
- }
- parse_more:
- while (*pbuf && isspace(*pbuf)) pbuf++;
- if (pitem->spec_f) {
- dviprt_printcfgerror(&info,NULL,0);
- gs_sprintf(dviprt_message_buffer,
- "Item `%s' is specified twice.\n",pitem->name);
- dviprt_printmessage(dviprt_message_buffer,-1);
- code = CFG_ERROR_SYNTAX;
- goto end_process;
- }
- switch (pitem->type) {
- case T_INTEGER:
- if ((code = dviprt_set_integer(pitem,pbuf,pcfg,&info)) < 0)
- goto end_process;
- if (pitem->no == CFG_PINS) {
- if (pcfg->integer[CFG_PINS] % 8) {
- dviprt_printcfgerror(&info,"Value must be a multiple of 8.\n",-1);
- code = CFG_ERROR_RANGE;
- goto end_process;
- }
- pcfg->integer[CFG_PINS] /= 8;
- }
- break;
- case T_STRINGS:
- if (info.temp_codebuf_f)
- info.pcodebuf = info.codebuf;
- if ((code = dviprt_set_strings(pitem,pbuf,pcfg,&info)) < 0)
- goto end_process;
- if (info.temp_codebuf_f) {
- pcfg->strings[pitem->no] =
- (uchar*)malloc(strlen(pcfg->strings[pitem->no])+1);
- if (pcfg->strings[pitem->no] == NULL) {
- goto no_more_memory;
- }
- strcpy(pcfg->strings[pitem->no],info.codebuf);
- }
- break;
- case T_CODE:
- if (info.temp_codebuf_f)
- info.pcodebuf = info.codebuf;
- if ((code = dviprt_set_code(pitem,pbuf,pcfg,&info)) < 0)
- goto end_process;
- prtcode_output_bytes[pitem->no] = code;
- if (info.temp_codebuf_f) {
- pcfg->prtcode[pitem->no] =
- (uchar*)malloc(pcfg->prtcode_size[pitem->no]+1);
- if (pcfg->prtcode[pitem->no] == NULL) {
- no_more_memory:
- dviprt_printcfgerror(&info,"Memory exhausted.\n",-1);
- code = CFG_ERROR_MEMORY;
- goto end_process;
- }
- memcpy(pcfg->prtcode[pitem->no],info.codebuf,
- pcfg->prtcode_size[pitem->no]+1);
- }
- break;
- case T_SELECT:
- if ((code = dviprt_set_select(pitem,&pbuf,pcfg,&info)) < 0)
- goto end_process;
- if (pitem->no == CFG_ENCODE) {
- pitem = &encode_info;
- goto parse_more;
- }
- break;
- case T_UPPERPOS:
- { uchar *ptmp;
- uchar upos=0;
- uchar opt = 0;
- if (*pbuf == 0) {
- dviprt_printcfgerror(&info,"No value.\n",-1);
- code = CFG_ERROR_SYNTAX;
- goto end_process;
- }
- while (*pbuf) {
- ptmp = pbuf;
- while (*ptmp && !isspace(*ptmp)) ptmp++;
- if (strlcmp("HIGH_BIT",pbuf,ptmp-pbuf) == 0)
- upos = CFG_TOP_IS_HIGH;
- else if (strlcmp("LOW_BIT",pbuf,ptmp-pbuf) == 0)
- upos = CFG_TOP_IS_LOW;
- else if (strlcmp("LEFT_IS_HIGH",pbuf,ptmp-pbuf) == 0)
- upos = CFG_LEFT_IS_HIGH;
- else if (strlcmp("LEFT_IS_LOW",pbuf,ptmp-pbuf) == 0)
- upos = CFG_LEFT_IS_LOW;
- else if (strlcmp("NON_MOVING",pbuf,ptmp-pbuf) == 0)
- opt = CFG_NON_MOVING;
- else if (strlcmp("HEX_MODE",pbuf,ptmp-pbuf) == 0)
- enc = CFG_ENCODE_HEX;
- else {
- dviprt_printtokenerror(&info,pbuf,(int)(ptmp-pbuf),ERROR_UNKNOWN_VALUE);
- code = CFG_ERROR_RANGE;
- goto end_process;
- }
- pbuf = ptmp;
- while (*pbuf && isspace(*pbuf)) pbuf++;
- }
- pcfg->integer[CFG_UPPER_POS] = upos | opt;
- }
- break;
- }
- pitem->spec_f = 1;
- }
- end_scan:
-
- info.line_no = -1;
- code = 0;
- for (pitem = dviprt_items;pitem->name;pitem++) {
- if (!pitem->spec_f && pitem->req_f) {
- gs_sprintf(dviprt_message_buffer,"%s not found.\n",pitem->name);
- dviprt_printcfgerror(&info,dviprt_message_buffer,-1);
- code++;
- }
- }
- if (code) { code = CFG_ERROR_RANGE; goto end_process; }
-
- if (pcfg->prtcode[CFG_LINE_FEED] == NULL) {
- if (info.temp_codebuf_f) {
- pcfg->prtcode[CFG_LINE_FEED] = info.pcodebuf;
- info.pcodebuf += 4;
- }
- else pcfg->prtcode[CFG_LINE_FEED] = (byte*)malloc(4);
- memcpy(pcfg->prtcode[CFG_LINE_FEED],"\002\x0d\x0a\000",4);
- pcfg->prtcode_size[CFG_LINE_FEED] = 3;
- }
- if (pcfg->prtcode[CFG_FORM_FEED] == NULL) {
- if (info.temp_codebuf_f) {
- pcfg->prtcode[CFG_FORM_FEED] = info.pcodebuf;
- info.pcodebuf += 4;
- }
- else pcfg->prtcode[CFG_FORM_FEED] = (byte*)malloc(4);
- memcpy(pcfg->prtcode[CFG_FORM_FEED],"\002\x0d\x0c\000",4);
- pcfg->prtcode_size[CFG_FORM_FEED] = 3;
- }
- if (pcfg->integer[CFG_DPI] < 0 && pcfg->integer[CFG_Y_DPI] < 0) {
- pcfg->integer[CFG_DPI] = 180;
- }
- else if (pcfg->integer[CFG_DPI] < 0 || pcfg->integer[CFG_Y_DPI] < 0) {
- if (pcfg->integer[CFG_DPI] < 0)
- pcfg->integer[CFG_DPI] = pcfg->integer[CFG_Y_DPI];
- pcfg->integer[CFG_Y_DPI] = -1;
- }
- else if (pcfg->integer[CFG_DPI] == pcfg->integer[CFG_Y_DPI]) {
- pcfg->integer[CFG_Y_DPI] = -1;
- }
- else if (pcfg->integer[CFG_Y_DPI] >= 0) { /* has y_dpi. */
- set_version(pcfg,2);
- }
- if (pcfg->integer[CFG_ENCODE] < 0) {
- pcfg->integer[CFG_ENCODE] = enc;
- }
- if (pcfg->integer[CFG_MAXIMAL_UNIT] < 0) {
- pcfg->integer[CFG_MAXIMAL_UNIT] = 0x7fff;
- }
- if (pcfg->integer[CFG_MINIMAL_UNIT] < 0) {
- uint v;
- v = (MAX(prtcode_output_bytes[CFG_SEND_BIT_IMAGE],0) +
- MAX(prtcode_output_bytes[CFG_AFTER_BIT_IMAGE],0) +
- MAX(prtcode_output_bytes[CFG_SKIP_SPACES],0))
- / (pcfg->integer[CFG_PINS]*8) +
- MAX(prtcode_output_bytes[CFG_BIT_ROW_HEADER],0);
- if (v == 0) v = 1;
- pcfg->integer[CFG_MINIMAL_UNIT] = v;
- }
-
- for (pitem = dviprt_items;pitem->type>=0;pitem++) {
- if (pitem->spec_f == 0) {
- gs_sprintf(dviprt_message_buffer,": %s:",pitem->name);
- switch (pitem->type) {
- case T_INTEGER:
- if (pcfg->integer[pitem->no] >= 0) {
- uint v = pcfg->integer[pitem->no];
- dviprt_printmessage(fname,-1);
- dviprt_printmessage(dviprt_message_buffer,-1);
- gs_sprintf(dviprt_message_buffer," %d\n",v);
- dviprt_printmessage(dviprt_message_buffer,-1);
- }
- break;
- default: break; /* do nothing */
- }
- }
- }
-
- end_process:
- if (fname) gp_fclose(ifp);
- dviprt_resetcfgbuffer_(&info);
-
- return code;
-}
-
-/*--- internal routines ---*/
-static int
-dviprt_set_integer(dviprt_cfg_item_t *pitem,uchar *buf,dviprt_cfg_t *pcfg,
- dviprt_cfg_i *pinfo)
-{
- uchar *pbuf = buf;
- long v = 0;
- long max = -1 ,min = -1;
-
- if (pitem->info != NULL) {
- dviprt_cfg_limit_t *plimit = (dviprt_cfg_limit_t *)pitem->info;
- min = plimit->min;
- max = plimit->max;
- }
- if (min < 0) min = 0;
- if (max < 0) max = 0xffff;
- if (*pbuf == 0) {
- dviprt_printcfgerror(pinfo,"No value.\n",-1);
- return CFG_ERROR_SYNTAX;
- }
- while (*pbuf) {
- if (!isdigit(*pbuf)) {
- if (isspace(*pbuf)) break;
- else goto invalid_val;
- }
- v = v*10 + *pbuf - '0';
- if (v > max) {
- out_of_range:
- dviprt_printtokenerror(pinfo,buf,strlen(buf),ERROR_OUTOFRANGE);
- dviprt_printcfgerror(pinfo,"",-1);
- gs_sprintf(dviprt_message_buffer,
- "(%u <= value <= %u).\n",(uint)min,(uint)max);
- dviprt_printmessage(dviprt_message_buffer,-1);
- return CFG_ERROR_RANGE;
- }
- pbuf++;
- }
- if (v < min) goto out_of_range;
-
- while (*pbuf) {
- if (!isspace(*pbuf)) {
- invalid_val:
- dviprt_printtokenerror(pinfo,buf,strlen(buf),ERROR_INVALID_VALUE);
- return CFG_ERROR_RANGE;
- }
- pbuf++;
- }
- pcfg->integer[pitem->no] = v;
-
- return 0;
-}
-
-static int
-dviprt_set_strings(dviprt_cfg_item_t *pitem,uchar *buf,dviprt_cfg_t *pcfg,
- dviprt_cfg_i *pinfo)
-{
- uchar *pend;
- long len;
- pend = buf+strlen(buf)-1;
- while (pend >= buf && isspace(*pend)) pend--;
- pend++;
- len = pend - buf;
- if (len > 0x7fffL) {
- dviprt_printcfgerror(pinfo,"Too long strings.\n",-1);
- return CFG_ERROR_RANGE;
- }
-
- pcfg->strings[pitem->no] = pinfo->pcodebuf;
- strncpy(pinfo->pcodebuf,buf,(int)len);
- pinfo->pcodebuf[len] = 0;
- pinfo->pcodebuf += len;
- pinfo->pcodebuf++;
- return 0;
-}
-
-static int
-dviprt_set_select(dviprt_cfg_item_t *pitem,uchar **buf,dviprt_cfg_t *pcfg,
- dviprt_cfg_i *pinfo)
-{
- int i;
- uchar *ptmp = *buf;
- uchar *pstart = *buf;
- uchar **opt;
- if (*pstart == 0) {
- dviprt_printcfgerror(pinfo,"No value.\n",-1);
- return CFG_ERROR_SYNTAX;
- }
- while (*ptmp && !isspace(*ptmp)) ptmp++;
-
- for (i=0,opt=(uchar**)pitem->info;*opt;i++,opt++) {
- if (strlcmp(*opt,pstart,ptmp-pstart) == 0) {
- pcfg->integer[pitem->no] = i;
- *buf = ptmp;
- return 0;
- }
- }
- dviprt_printtokenerror(pinfo,pstart,(int)(ptmp-pstart),ERROR_UNKNOWN_VALUE);
- return CFG_ERROR_RANGE;
-}
-
-#define CFG_TOKEN_ERROR -1
-#define CFG_TOKEN_LIMIT_BIT 0x100
-#define CFG_TOKEN_FMT 0x200
-
-static int
-dviprt_get_codetype_token(dviprt_cfg_i *pinfo,uchar *pstart,uchar *pend,uchar *stopescseqchars,
- uchar *limitchars)
-{
- while (pstart < pend && isspace(*pstart)) pstart++;
- if (pstart >= pend) {
- pinfo->token = pinfo->endtoken = pstart;
- return CFG_TOKEN_LIMIT_BIT;
- }
- else if (strchr(limitchars,*pstart)) {
- pinfo->token = pstart;
- pinfo->endtoken = pstart+1;
- return CFG_TOKEN_LIMIT_BIT | *pstart;
- }
- else if (*pstart == '\\') {
- int c;
- long v;
- uchar *pexpr,*pnext;
-
- pexpr = pinfo->token = pstart++;
- while (pstart < pend && !isspace(*pstart) &&
- *pstart != '\\' && !strchr(stopescseqchars,*pstart)) {
- pstart++;
- }
- pinfo->endtoken = pstart;
- if (pinfo->token + 1 == pinfo->endtoken) { /* '\\' only */
- return '\\';
- }
- pexpr++;
- if (pinfo->endtoken - pexpr == 1) {
- if (isdigit(*pexpr)) goto parse_decimal_numb;
- switch (*pexpr) {
- case 't': c = '\t'; break; /* tab */
- case 'v': c = '\v'; break; /* tab */
- case 'n': c = '\n'; break; /* line feed */
- case 'f': c = '\f'; break; /* form feed */
- case 'r': c = '\r'; break; /* carrige return */
- case 'e': c = 0x1b; break; /* escape code */
- case 's': c = 0x20; break; /* space */
- default:
- dviprt_printtokenerror(pinfo,pinfo->token,2,ERROR_UNKNOWN_ESCSEQ);
- return CFG_TOKEN_ERROR;
- }
- return c;
- }
- else if (strlcmp("SP",pexpr,pinfo->endtoken - pexpr) == 0)
- return 0x20;
- else if (strlcmp("ESC",pexpr,pinfo->endtoken - pexpr) == 0)
- return 0x1b;
- switch (*pexpr) {
- case 'x':
- case 'X':
- v = dviprt_hex2long(pexpr+1,pinfo->endtoken,&pnext);
- check_numb_range:
- if (pstart != pnext) {
- dviprt_printtokenerror(pinfo,pinfo->token,
- (int)(pinfo->endtoken - pinfo->token), ERROR_INVALID_VALUE);
- return CFG_TOKEN_ERROR;
- }
- if (v >= 256) {
- dviprt_printtokenerror(pinfo,pinfo->token,
- (int)(pinfo->endtoken - pinfo->token), ERROR_OUTOFRANGE);
- return CFG_TOKEN_ERROR;
- }
- pinfo->endtoken = pnext;
- return v;
- case '0':
- v = dviprt_oct2long(pexpr,pinfo->endtoken,&pnext);
- goto check_numb_range;
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- parse_decimal_numb:
- v = dviprt_dec2long(pexpr,pinfo->endtoken,&pnext);
- goto check_numb_range;
- default:
- return CFG_TOKEN_FMT;
- }
- }
- else {
- pinfo->token = pstart;
- pinfo->endtoken = pstart+1;
- return *pstart;
- }
-}
-
-static long
-dviprt_dec2long(uchar *start,uchar *end,uchar **next)
-{
- long v = 0;
- while (start < end) {
- int c = *start;
- if (isdigit(c)) v = v*10 + c - '0';
- else break;
- start++;
- }
- *next = start;
- return v;
-}
-
-static long
-dviprt_oct2long(uchar *start,uchar *end,uchar **next)
-{
- long v = 0;
- while (start < end) {
- int c = *start;
- if (c >= '0' && c <= '7') v = v*8 + c - '0';
- else break;
- start++;
- }
- *next = start;
- return v;
-}
-
-static long
-dviprt_hex2long(uchar *start,uchar *end,uchar **next)
-{
- long v = 0;
- while (start < end) {
- int c = *start;
- if (isdigit(c)) v = v*16 + c - '0';
- else if (c >= 'A' && c <= 'F') v = v*16 + c - 'A' + 10;
- else if (c >= 'a' && c <= 'f') v = v*16 + c - 'a' + 10;
- else break;
- start++;
- }
- *next = start;
- return v;
-}
-
-static int
-dviprt_set_rpexpr(dviprt_cfg_item_t *pitem,uchar *pbuf,int len,dviprt_cfg_t *pcfg,
- dviprt_cfg_i *pinfo,int sp)
-{
- uchar *pend = pbuf + len;
- uchar *plastop = NULL;
- int code;
-
- /* get left expr */
- while (pbuf < pend) {
- int par_count = 0;
- uchar *pcur = pbuf;
- while (pcur < pend) {
- if (*pcur == '(') par_count++;
- else if (*pcur == ')') par_count--;
- else if (!isdigit(*pcur) && !isalpha(*pcur) && par_count == 0) {
- /* operator */
- plastop = pcur;
- }
- pcur++;
- }
- if (par_count != 0) {
- dviprt_printtokenerror(pinfo,pbuf,(int)(pend-pbuf),ERROR_INCOMPLETE);
- return CFG_ERROR_SYNTAX;
- }
- if (plastop == NULL) {
- if (*pbuf != '(') break;
- pbuf++;
- pend--;
- }
- else break;
- }
-
- if (plastop == NULL) { /* no operator */
- ulong v;
- uchar *pdummy;
- if (*pbuf == '0') {
- uchar a,b,c;
- v = dviprt_oct2long(pbuf,pend,&pdummy);
- check_intval:
- if (pdummy != pend) goto unknown_value;
- if (v > 0xffff) {
- dviprt_printtokenerror(pinfo,pbuf,(int)(pend-pbuf),ERROR_OUTOFRANGE);
- return CFG_ERROR_RANGE;
- }
- a = v & 0x7f;
- b = (v>>7) & 0x7f;
- c = (v>>14) & 0x03;
- if (c) {
- *pinfo->pcodebuf++ = c;
- *pinfo->pcodebuf++ = 14;
- *pinfo->pcodebuf++ = CFG_OP_SHL;
- }
- if (b) {
- *pinfo->pcodebuf++ = b;
- *pinfo->pcodebuf++ = 7;
- *pinfo->pcodebuf++ = CFG_OP_SHL;
- if (c) *pinfo->pcodebuf++ = CFG_OP_OR;
- }
- if (a) {
- *pinfo->pcodebuf++ = a;
- if (b || c) *pinfo->pcodebuf++ = CFG_OP_OR;
- }
- code = 0;
- }
- else if (isdigit(*pbuf)) {
- v = dviprt_dec2long(pbuf,pend,&pdummy);
- goto check_intval;
- }
- else if (pend - pbuf > 1 && (*pbuf == 'x' || *pbuf == 'X')) {
- v = dviprt_hex2long(pbuf+1,pend,&pdummy);
- goto check_intval;
- }
- else if (pend - pbuf > 1) {
- unknown_value:
- dviprt_printtokenerror(pinfo,pbuf,(int)(pend-pbuf),ERROR_UNKNOWN_VALUE);
- return CFG_ERROR_RANGE;
- }
- else {
- switch (*pbuf) {
- case 'd': v = CFG_VAL_DEFAULT;
- if (pitem->no != CFG_SEND_BIT_IMAGE &&
- pitem->no != CFG_BIT_ROW_HEADER &&
- pitem->no != CFG_AFTER_BIT_IMAGE &&
- pitem->no != CFG_SKIP_SPACES)
- goto unavailable_value;
- break;
- case 'c': v = CFG_VAL_CONSTANT; break;
- case 'w': v = CFG_VAL_WIDTH; break;
- case 'h': v = CFG_VAL_HEIGHT; break;
- case 'r': v = CFG_VAL_X_DPI; break;
- case 'R': v = CFG_VAL_Y_DPI; break;
- case 'p': v = CFG_VAL_PAGE; break;
- case 'x': v = CFG_VAL_X_POS; break;
- case 'y': v = CFG_VAL_Y_POS; break;
- case 'v': v = CFG_VAL_PINS_BYTE; break;
- case 's':
- v = CFG_VAL_DATASIZE;
- if (pitem->no != CFG_SEND_BIT_IMAGE &&
- pitem->no != CFG_BIT_ROW_HEADER &&
- pitem->no != CFG_AFTER_BIT_IMAGE) {
- unavailable_value:
- dviprt_printcfgerror(pinfo,"",-1);
- gs_sprintf(dviprt_message_buffer,"Variable `%c' in ",(int)*pbuf);
- dviprt_printmessage(dviprt_message_buffer,-1);
- dviprt_printmessage(pbuf,(int)(pend-pbuf));
- gs_sprintf(dviprt_message_buffer," cannot be used in %s.\n",pitem->name);
- dviprt_printmessage(dviprt_message_buffer,-1);
- return CFG_ERROR_RANGE;
- }
- break;
- default:
- goto unknown_value;
- }
- *pinfo->pcodebuf++ = v;
- code = 0;
- }
- }
- else { /* has operator */
- uchar op;
-
- code = dviprt_set_rpexpr(pitem,pbuf,(int)(plastop-pbuf),pcfg,pinfo,sp+1);
- if (code < 0) return code;
- code = dviprt_set_rpexpr(pitem,plastop+1,(int)(pend-plastop-1),pcfg,pinfo,sp+2);
- if (code < 0) return code;
-
- switch (*plastop) {
- case '+': op = CFG_OP_ADD; break;
- case '-': op = CFG_OP_SUB; break;
- case '*': op = CFG_OP_MUL; break;
- case '/': op = CFG_OP_DIV; break;
- case '%': op = CFG_OP_MOD; break;
- case '<': op = CFG_OP_SHL; break;
- case '>': op = CFG_OP_SHR; break;
- case '&': op = CFG_OP_AND; break;
- case '|': op = CFG_OP_OR ; break;
- case '^': op = CFG_OP_XOR; break;
- default:
- dviprt_printcfgerror(pinfo,NULL,0);
- gs_sprintf(dviprt_message_buffer,"Unknown operator %c in ",(int)*pbuf);
- dviprt_printmessage(dviprt_message_buffer,-1);
- dviprt_printmessage(pbuf,(int)(pend-pbuf));
- dviprt_printmessage(".\n",-1);
- return CFG_ERROR_SYNTAX;
- }
- *pinfo->pcodebuf++ = op;
- }
-
- return code;
-}
-
-static int
-dviprt_set_code(dviprt_cfg_item_t *pitem,uchar *buf,dviprt_cfg_t *pcfg,
- dviprt_cfg_i *pinfo)
-{
- long prev_line;
- int prev_type = 1;
- uchar *pcount;
- uchar *pcode_begin;
- uchar *rbuf;
- int obytes = 0;
-
- prev_line = ftell(pinfo->file);
- pcode_begin = pinfo->pcodebuf;
- rbuf = pinfo->readbuf;
-
- for ( ; ; ) {
- while (*buf) {
- int c;
- c = dviprt_get_codetype_token(pinfo,buf,buf+strlen(buf),",","");
- if (c == CFG_TOKEN_LIMIT_BIT) break; /* no elements remain */
- else if (c == CFG_TOKEN_ERROR) return CFG_ERROR_SYNTAX;
- if ( c < 256) { /* character code (raw data) */
- if (prev_type) {
- new_unit:
- pcount = pinfo->pcodebuf++;
- (*pcount) = 0;
- prev_type = 0;
- }
- if (*pcount == 127) goto new_unit;
- (*pcount)++;
- *pinfo->pcodebuf++ = c;
- buf = pinfo->endtoken;
- obytes++;
- }
- else if (c == CFG_TOKEN_FMT) { /* format */
- uchar *pexpr = pinfo->token;
- int div=0,iso=0,mul=0,tl=0;
- int cols=0;
- int fmt;
- uchar *plength;
- uchar *pstart;
-
- buf = pinfo->token+1;
-
- /* formats */
- switch (*buf) {
- case 'b': fmt = CFG_FMT_BIN_LTOH; break;
- case 'B': fmt = CFG_FMT_BIN_HTOL; break;
- case 'H': fmt = CFG_FMT_HEX_UPPER; break;
- case 'h': fmt = CFG_FMT_HEX_LOWER; break;
- case 'd': fmt = CFG_FMT_DECIMAL; break;
- case 'o': fmt = CFG_FMT_OCTAL; break;
- case 's':
- buf++;
- if (*buf != 't') goto unknown_format;
- fmt = CFG_FMT_STRINGS;
- break;
- default:
- unknown_format:
- dviprt_printtokenerror(pinfo,pexpr,(int)(pinfo->endtoken-pexpr),
- ERROR_UNKNOWN_FORMAT);
- return CFG_ERROR_SYNTAX;
- }
- buf++;
-
- /* columns */
- if (fmt == CFG_FMT_STRINGS) ;
- else {
- if (buf >= pinfo->endtoken) {
- dviprt_printtokenerror(pinfo,pexpr,(int)(pinfo->token-pexpr),ERROR_INCOMPLETE);
- return CFG_ERROR_SYNTAX;
- }
-
- if (!(*buf >= '1' && *buf <= '7') && *buf != '?') {
- invalid_cols:
- dviprt_printtokenerror(pinfo,pexpr,(int)(pinfo->endtoken-pexpr),
- ERROR_UNKNOWN_FORMAT);
- return CFG_ERROR_SYNTAX;
- }
- cols = (*buf == '?') ? 0 : *buf - '0';
- if (cols == 0 &&
- (fmt == CFG_FMT_BIN_LTOH || fmt == CFG_FMT_BIN_HTOL))
- goto invalid_cols;
-
- buf++;
- obytes += (cols == 0) ? 5 : cols;
- }
-
- /* additional format */
- while (buf < pinfo->endtoken) {
- switch (*buf) {
- case 'D': div++; break;
- case 'I': iso++; break;
- case 'M': mul++; break;
- case 'T': tl++; break;
- default:
- dviprt_printtokenerror(pinfo,pexpr,(int)(buf-pexpr),ERROR_UNKNOWN_FORMAT);
- return CFG_ERROR_SYNTAX;
- }
- if (div > 3 || iso > 1 || mul > 1 || tl > 1) {
- dviprt_printtokenerror(pinfo,pexpr,(int)(buf-pexpr),ERROR_UNKNOWN_FORMAT);
- return CFG_ERROR_SYNTAX;
- }
- buf++;
- }
- *pinfo->pcodebuf++ =
- CFG_FMT_BIT | fmt | (iso ? CFG_FMT_ISO_BIT : 0) | cols;
- plength = pinfo->pcodebuf;
- pinfo->pcodebuf++;
- pstart = pinfo->pcodebuf;
-
- if (*buf == ',' && *(buf+1) != '\"') {
- int code;
- buf++;
- pinfo->token = buf;
- while (*pinfo->token && *pinfo->token != ',' &&
- *pinfo->token != '\\' && !isspace(*pinfo->token))
- pinfo->token++;
- if (pinfo->token == buf) {
- dviprt_printcfgerror(pinfo,"No expression is specified in ",-1);
- dviprt_printmessage(pexpr,(int)(buf-pexpr));
- dviprt_printmessage(".\n",-1);
- return CFG_ERROR_SYNTAX;
- }
- if ((code = dviprt_set_rpexpr(pitem,buf,(int)(pinfo->token-buf),pcfg,pinfo,0)) < 0)
- return code;
- buf = pinfo->token;
- }
- else {
- *pinfo->pcodebuf++ = CFG_VAL_DEFAULT;
- }
- if (mul) {
- *pinfo->pcodebuf++ = CFG_VAL_CONSTANT;
- *pinfo->pcodebuf++ = CFG_OP_MUL;
- }
- if (tl) {
- *pinfo->pcodebuf++ = CFG_VAL_PINS_BYTE;
- *pinfo->pcodebuf++ = CFG_OP_MUL;
- }
- if (div) {
- *pinfo->pcodebuf++ = div;
- *pinfo->pcodebuf++ = CFG_OP_SHR;
- }
- {
- int length = pinfo->pcodebuf-pstart;
- if (length > 255) {
- dviprt_printtokenerror(pinfo,pexpr,(int)(buf-pexpr),ERROR_COMPLICATED_EXPR);
- return CFG_ERROR_RANGE;
- }
- *plength++ = length & 0xff;
- }
- if (fmt == CFG_FMT_STRINGS) {
- uchar *pslen = pinfo->pcodebuf++;
- int len;
- if (strlen(buf) < 2 || *buf != ',' || *(buf+1) != '\"') {
- dviprt_printcfgerror(pinfo,"No strings specified in ",-1);
- dviprt_printmessage(pexpr,(int)(buf-pexpr));
- dviprt_printmessage(".\n",-1);
- return CFG_ERROR_SYNTAX;
- }
- buf += 2;
- for (len=0; ;len++) {
- c = dviprt_get_codetype_token(pinfo,buf,buf+strlen(buf),"\"","\"");
- if (c == CFG_TOKEN_ERROR) return CFG_ERROR_SYNTAX;
- else if (c == CFG_TOKEN_FMT) {
- dviprt_printcfgerror(pinfo,"The format ",-1);
- dviprt_printmessage(pinfo->token,
- (int)(pinfo->endtoken-pinfo->token));
- dviprt_printmessage(" cannot to be specified here.\n",-1);
- return CFG_ERROR_SYNTAX;
- }
- else if (c & CFG_TOKEN_LIMIT_BIT) {
- if ((c & 0xff) != '\"') {
- dviprt_printcfgerror(pinfo,
- "Strings must be enclosed with "
- "double quotations (\").\n",-1);
- return CFG_ERROR_SYNTAX;
- }
- buf = pinfo->endtoken;
- break;
- }
- *pinfo->pcodebuf++ = c;
- buf = pinfo->endtoken;
- }
- if (len > 255) {
- dviprt_printcfgerror(pinfo,"Too long strings.\n",-1);
- return CFG_ERROR_RANGE;
- }
- *pslen = len;
- }
- prev_type = 1;
- }
- else {
- dviprt_printcfgerror(pinfo,"Parse error. Unexpected token ",-1);
- dviprt_printmessage(pinfo->token,(int)(pinfo->endtoken-pinfo->token));
- dviprt_printmessage(".\n",-1);
- return CFG_ERROR_SYNTAX;
- }
- }
- next_line:
- if (fgets(rbuf,pinfo->readbuf_size,pinfo->file) == NULL) break;
- if (!isspace(rbuf[0]) && rbuf[0] != ';') {
- gp_fseek(pinfo->file,prev_line,0);
- break;
- }
- prev_line = ftell(pinfo->file);
- pinfo->line_no++;
- buf = rbuf;
- while (*buf && isspace(*buf)) buf++;
- if (*buf == ';')
- goto next_line; /* comment */
- {
- int len = strlen(rbuf);
- if (len > 0 && rbuf[len-1] == '\n')
- rbuf[len-1] = 0;
- }
- }
- pcfg->prtcode[pitem->no] = pcode_begin;
- pcfg->prtcode_size[pitem->no] = (pinfo->pcodebuf - pcode_begin) & 0xffff;
- *pinfo->pcodebuf++ = 0;
- return obytes;
-}
-
-static char *
-dviprt_src_errorno2message(int type)
-{
- switch (type) {
- case ERROR_OUTOFRANGE:
- return "Out of range.\n";
- case ERROR_UNKNOWN_VALUE:
- return "Unknown value.\n";
- case ERROR_UNKNOWN_ESCSEQ:
- return "Unknown escape sequence.\n";
- case ERROR_COMPLICATED_EXPR:
- return "Too complicated expression.\n";
- case ERROR_INCOMPLETE:
- return "Incomplete specification.\n";
- case ERROR_UNKNOWN_FORMAT:
- return "Unknown format.\n";
- case ERROR_INVALID_VALUE:
- return "Invalid value.\n";
- default:
- return NULL;
- }
-}
-
-static int
-dviprt_printtokenerror(dviprt_cfg_i *pinfo,char *token,int len,int type)
-{
- char *msg;
-
- dviprt_printcfgerror(pinfo,token,len);
- dviprt_printmessage("\n",-1);
-
- if ((msg = dviprt_src_errorno2message(type)) != NULL)
- dviprt_printcfgerror(pinfo,msg,-1);
- return 0;
-}
-
-#undef strlcmp
-#undef set_version
-/***** End of rsrc.c *****/
-
-/***** From util.c *****/
-/* $Id: UTIL.C 1.1 1994/08/30 02:27:02 kaz Exp kaz $ */
-
-char *dviprt_integername[] = { CFG_INTEGER_NAME, NULL };
-char *dviprt_stringsname[] = { CFG_STRINGS_NAME, NULL };
-char *dviprt_prtcodename[] = { CFG_PRTCODE_NAME, NULL };
-char *dviprt_encodename[] = { CFG_ENCODE_NAME, NULL };
-
-#if 0
-static FILE *dviprt_messagestream = stderr;
-#else /* patch for glibc 2.1.x by Shin Fukui <shita@april.co.jp> */
-static FILE *dviprt_messagestream;
-#endif
-
-/*--- library functions ---*/
-int
-dviprt_setmessagestream(FILE *fp)
-{
- dviprt_messagestream = fp;
- return 0;
-}
-
-/*--- internal routines ---*/
-static int
-dviprt_initcfg_(dviprt_cfg_t *pcfg,dviprt_cfg_i *pinfo)
-{
- int i;
-
- for (i=0;i<CFG_INTEGER_TYPE_COUNT;i++)
- pcfg->integer[i] = -1;
- for (i=0;i<CFG_STRINGS_TYPE_COUNT;i++)
- pcfg->strings[i] = NULL;
- for (i=0;i<CFG_PRTCODE_TYPE_COUNT;i++) {
- pcfg->prtcode[i] = NULL;
- pcfg->prtcode_size[i] = 0;
- }
- pinfo->pcodebuf = pinfo->codebuf;
- pinfo->line_no = 0;
- return 0;
-}
-
-static int
-dviprt_setcfgbuffer_(dviprt_cfg_i *pinfo,int rsize,int csize)
-{
- pinfo->temp_readbuf_f = pinfo->temp_codebuf_f = 0;
-
- if (pinfo->readbuf == NULL) {
- pinfo->readbuf_size = rsize;
- if (rsize>0) {
- pinfo->temp_readbuf_f = 1;
- pinfo->readbuf = (uchar *)malloc(rsize);
- if (pinfo->readbuf == NULL) {
- no_mem:
- dviprt_printmessage(pinfo->fname,-1);
- dviprt_printmessage("Memory exhausted.\n",-1);
- return CFG_ERROR_MEMORY;
- }
- }
- }
- if (pinfo->codebuf == NULL) {
- pinfo->codebuf_size = csize;
- if (csize>0) {
- pinfo->temp_codebuf_f = 1;
- pinfo->codebuf = (uchar *)malloc(csize);
- if (pinfo->codebuf == NULL) goto no_mem;
- }
- }
- return 0;
-}
-
-static int
-dviprt_resetcfgbuffer_(dviprt_cfg_i *pinfo)
-{
- if (pinfo->temp_readbuf_f) free(pinfo->readbuf);
- if (pinfo->temp_codebuf_f) free(pinfo->codebuf);
- pinfo->temp_codebuf_f = pinfo->temp_readbuf_f = 0;
- return 0;
-}
-
-char dviprt_message_buffer[128];
-
-static int
-dviprt_printmessage(char *str,int len)
-{
- if (dviprt_messagestream && str) {
- if (len >= 0) fwrite(str,len,1,dviprt_messagestream);
- else fputs(str,dviprt_messagestream);
- fflush(dviprt_messagestream);
- }
- return 0;
-}
-
-static int
-dviprt_printcfgerrorheader(dviprt_cfg_i *pinfo)
-{
- if (pinfo) {
- char *fn = pinfo->fname;
- if (fn == NULL) fn = "-";
- dviprt_printmessage(fn,-1);
- dviprt_printmessage(": ",-1);
- if (pinfo->line_no>0) {
- gs_sprintf(dviprt_message_buffer,"%d: ",pinfo->line_no);
- dviprt_printmessage(dviprt_message_buffer,-1);
- }
- }
- return 0;
-}
-
-static int
-dviprt_printerror(char *msg,int len)
-{
- dviprt_printmessage("*ERROR* ",-1);
- dviprt_printmessage(msg,len);
- return 0;
-}
-
-static int
-dviprt_printcfgerror(dviprt_cfg_i *pinfo,char *msg,int len)
-{
- dviprt_printcfgerrorheader(pinfo);
- dviprt_printerror(msg,len);
- return 0;
-}
-
-static int
-dviprt_printwarning(char *msg,int len)
-{
- dviprt_printmessage("*WARNING* ",-1);
- dviprt_printmessage(msg,len);
- return 0;
-}
-
-static int
-dviprt_printcfgwarning(dviprt_cfg_i *pinfo,char *msg,int len)
-{
- dviprt_printcfgerrorheader(pinfo);
- dviprt_printwarning(msg,len);
- return 0;
-}
-/***** End of util.c *****/
-
-/***** From print.c *****/
-/* $Id: PRINT.C 1.1 1994/08/30 02:27:02 kaz Exp kaz $ */
-
-/*--- forward declarations ---*/
-static int dviprt_getmaximalwidth(dviprt_print *);
-static int dviprt_flush_buffer(dviprt_print *,uchar far *);
-static int dviprt_output_transpose(dviprt_print *,uchar far *,uint);
-static int dviprt_output_nontranspose(dviprt_print *,uchar far *,uint);
-static int dviprt_output_nontranspose_reverse(dviprt_print *,uchar far *,uint);
-static int dviprt_reverse_bits(uchar far *,uint);
-static int dviprt_transpose8x8(uchar far *,uint, uchar far *,uint);
-static int dviprt_output_expr(dviprt_print *,int,uint,uint);
-static int dviprt_default_outputproc(uchar far *,long ,void *);
-static long dviprt_getbuffersize(dviprt_print *);
-
-/*--- library functions ---*/
-long
-dviprt_initlibrary(dviprt_print *pprint,dviprt_cfg_t *pprt,uint width,uint height)
-{
- dviprt_encoder *pencode;
- uint pins = pprt->integer[CFG_PINS]*8;
-
- pprint->printer = pprt;
- height += (pins-1);
- height /= pins;
- height *= pins;
- pprint->bitmap_width = width; /* width by bytes */
- pprint->bitmap_height = height;
- pprint->buffer_width = MIN(width,pprt->integer[CFG_MAXIMAL_UNIT]);
- pprint->page_count = 0;
- pprint->output_bytes = 0;
- pprint->tempbuffer_f = 0;
- pencode = dviprt_getencoder_((int)pprt->integer[CFG_ENCODE]);
- if (pencode == NULL) return CFG_ERROR_NOT_SUPPORTED;
- pprint->encode_getbuffersize_proc = pencode->getworksize;
- pprint->encode_encode_proc = pencode->encode;
-
- pprint->output_bytes = 0;
- pprint->pstream = NULL;
- pprint->output_proc = NULL;
-
- if (pprt->integer[CFG_UPPER_POS] & CFG_NON_TRANSPOSE_BIT) {
- pprint->output_maximal_unit =
- (pprt->integer[CFG_UPPER_POS] & CFG_REVERSE_BIT) ?
- dviprt_output_nontranspose_reverse : dviprt_output_nontranspose;
- }
- else
- pprint->output_maximal_unit = dviprt_output_transpose;
- return dviprt_getbuffersize(pprint);
-}
-
-int
- dviprt_setstream
-#ifdef __PROTOTYPES__
- (dviprt_print *pprint,int (*func)(uchar far *,long ,void*),void *pstream)
-#else
-(pprint,func,pstream)
-dviprt_print *pprint;
-int (*func)();
-void *pstream;
-#endif
-{
- if (pprint->page_count) {
- int code = dviprt_output_expr(pprint,CFG_FORM_FEED,0,0);
- if (code < 0) return code;
- pprint->page_count = 0;
- }
- pprint->output_bytes = 0;
- pprint->pstream = pstream;
- pprint->output_proc = (func == NULL) ? dviprt_default_outputproc : func;
- return 0;
-}
-
-int
-dviprt_setbuffer(dviprt_print *pprint,uchar far *buf)
-{
- if (pprint->tempbuffer_f) {
- BufferFree(pprint->encode_buffer);
- }
- pprint->tempbuffer_f = 0;
- if (buf == NULL) {
- long s = dviprt_getbuffersize(pprint);
- if (s) {
- buf = (uchar far *)BufferAlloc(s);
- if (buf == NULL) return CFG_ERROR_MEMORY;
- pprint->tempbuffer_f = 1;
- }
- }
- pprint->encode_buffer = buf;
- pprint->source_buffer =
- buf + pprint->encode_getbuffersize_proc(pprint,dviprt_getmaximalwidth(pprint));
- return 0;
-}
-
-int
-dviprt_beginpage(dviprt_print *pprint)
-{
- int code;
- pprint->device_x = pprint->device_y = 0;
- pprint->bitmap_x = pprint->bitmap_y = 0;
- if (pprint->page_count == 0) { /* bit_image_mode */
- code = dviprt_output_expr(pprint,CFG_BIT_IMAGE_MODE,0,0);
- }
- else { /* form_feed */
- code = dviprt_output_expr(pprint,CFG_FORM_FEED,0,0);
- }
- pprint->page_count++;
- if (code < 0) return code;
- return 0;
-}
-
-int
-dviprt_outputscanlines(dviprt_print *pprint,uchar far *fb)
-{
- dviprt_cfg_t *pprt;
- int code;
- uint bw;
-
- pprt = pprint->printer;
- bw = pprint->bitmap_width;
-
- if (pprt->prtcode_size[CFG_SKIP_SPACES] <= 0) {
- pprint->bitmap_x = bw;
- pprint->last_x = 0;
- }
- else {
- uint uw,rw;
- uint mu;
- uint bx,lx;
- uint pins = dviprt_getscanlines(pprint);
- mu = pprt->integer[CFG_MINIMAL_UNIT];
- bx = lx = 0;
-
- for (rw= bw; rw > 0 ;rw -= uw) {
- uint x,y;
- uchar far *in;
-
- uw = MIN(mu,rw);
- in = fb + bx;
- for (x = uw; x>0 ; x--) {
- uchar far *test;
- test = in;
- for (y = pins ; y > 0 ;y--) {
- if (*test) goto next_unit;
- test += bw;
- }
- in++;
- }
-
- if (bx > lx) {
- pprint->bitmap_x = bx;
- pprint->last_x = lx;
- code = dviprt_flush_buffer(pprint,fb); /* output buffered unit */
- if (code < 0) return code;
- lx = pprint->last_x + uw;
- }
- else lx += uw;
-
- next_unit:
- bx += uw;
- }
- pprint->bitmap_x = bx;
- pprint->last_x = lx;
- }
- code = (pprint->last_x < pprint->bitmap_x) ? dviprt_flush_buffer(pprint,fb) : 0;
- pprint->bitmap_y++;
- return code;
-}
-
-int
-dviprt_endbitmap(dviprt_print *pprint)
-{
- if (pprint->page_count) {
- int code = dviprt_output_expr(pprint,CFG_NORMAL_MODE,0,0);
- if (code < 0) return code;
- }
- return 0;
-}
-
-int
-dviprt_unsetbuffer(dviprt_print *pprint)
-{
- if (pprint->tempbuffer_f) {
- BufferFree(pprint->encode_buffer);
- pprint->tempbuffer_f = 0;
- }
- return 0;
-}
-
-int
-dviprt_output(dviprt_print *pprint,uchar far *buf,long s)
-{
- int c = pprint->output_proc(buf,s,pprint->pstream);
- pprint->output_bytes += s;
- return c;
-}
-
-/*--- internal routines ---*/
-static int
-dviprt_getmaximalwidth(dviprt_print *pprint)
-{
- return MIN(pprint->printer->integer[CFG_MAXIMAL_UNIT],pprint->bitmap_width);
-}
-
-static long
-dviprt_getbuffersize(dviprt_print *pprint)
-{
- long w = dviprt_getmaximalwidth(pprint);
- long e = pprint->encode_getbuffersize_proc(pprint,w);
- switch (pprint->printer->integer[CFG_UPPER_POS]
- & (CFG_NON_TRANSPOSE_BIT | CFG_REVERSE_BIT)) {
- case CFG_LEFT_IS_HIGH:
- return e;
- default:
- return w * dviprt_getscanlines(pprint) + e;
- }
-}
-
-static int
-dviprt_flush_buffer(dviprt_print *pprint,uchar far *fb)
-{
- dviprt_cfg_t *pprt;
- int code;
-
- pprt = pprint->printer;
- while (pprint->device_y < pprint->bitmap_y) { /* skip vertical spaces */
- pprint->device_y++;
- code = dviprt_output_expr(pprint,CFG_LINE_FEED,0,0);
- pprint->device_x = 0;
- }
- while (pprint->last_x < pprint->bitmap_x) {
- int w;
- while (pprint->device_x < pprint->last_x) { /* skip horizontal spaces */
- w = MIN(pprt->integer[CFG_MAXIMAL_UNIT],
- pprint->last_x - pprint->device_x);
- code = dviprt_output_expr(pprint,CFG_SKIP_SPACES,w,0);
- pprint->device_x += w;
- }
- w = MIN(pprt->integer[CFG_MAXIMAL_UNIT],pprint->bitmap_x-pprint->last_x);
- code = pprint->output_maximal_unit(pprint,fb+pprint->last_x,w);
- if (code < 0) return code;
- pprint->last_x += w;
- if (!(pprt->integer[CFG_UPPER_POS] & CFG_NON_MOVING))
- pprint->device_x += w;
- }
- return 0;
-}
-
-static int
-dviprt_output_nontranspose(dviprt_print *pprint,uchar far *fb,uint width)
-{
- int code;
- uint dsize;
- uint y;
- uint pins;
-
- pins = dviprt_getscanlines(pprint);
-
- dsize = 0;
- pprint->psource = fb;
- for (y = pins ; y>0 ; y--) {
- int dsize_line;
- dsize_line = pprint->encode_encode_proc(pprint,(long)width,0);
- if (dsize_line < 0) return dsize_line;
- dsize += dsize_line;
- pprint->psource += pprint->bitmap_width;
- }
-
- code = dviprt_output_expr(pprint,CFG_SEND_BIT_IMAGE,width,dsize);
- if (code < 0) return code;
-
- pprint->psource = fb;
- for (y = pins ; y>0 ; y--) {
- int dsize_line;
- dsize_line = pprint->encode_encode_proc(pprint,(long)width,1);
- code = dviprt_output_expr(pprint,CFG_BIT_ROW_HEADER,width,dsize_line);
- if (code < 0) return code;
- code = dviprt_output(pprint,pprint->poutput,dsize_line);
- if (code < 0) return code;
- pprint->psource += pprint->bitmap_width;
- }
-
- code = dviprt_output_expr(pprint,CFG_AFTER_BIT_IMAGE,width,dsize);
- if (code < 0) return code;
-
- return 0;
-}
-
-static int
-dviprt_output_nontranspose_reverse(dviprt_print *pprint,uchar far *fb,uint width)
-{
- uchar far *psrc;
- uchar far *pbuf;
- int code;
- uint src_size;
- uint dsize;
- uint y;
- uint pins;
-
- pins = dviprt_getscanlines(pprint);
- src_size = width * pins;
-
- psrc = pprint->source_buffer;
- for (y = pins ; y > 0; y--) {
- uint i;
- pbuf = fb;
- for (i=width;i>0;i--) *psrc++ = *pbuf++;
- fb += pprint->bitmap_width;
- }
-
- /* here, reverse bits */
- psrc = pprint->source_buffer;
- dviprt_reverse_bits(psrc,src_size);
-
- dsize = 0;
- pprint->psource = pprint->source_buffer;
- for (y = pins ; y>0 ; y--) {
- int dsize_line;
- dsize_line = pprint->encode_encode_proc(pprint,(long)width,0);
- if (dsize_line < 0) return dsize_line;
- dsize += dsize_line;
- pprint->psource += width;
- }
-
- code = dviprt_output_expr(pprint,CFG_SEND_BIT_IMAGE,width,dsize);
- if (code < 0) return code;
-
- pprint->psource = pprint->source_buffer;
- for (y = pins ; y>0 ; y--) {
- int dsize_line;
- dsize_line = pprint->encode_encode_proc(pprint,(long)width,1);
- code = dviprt_output_expr(pprint,CFG_BIT_ROW_HEADER,width,dsize_line);
- if (code < 0) return code;
- code = dviprt_output(pprint,pprint->poutput,dsize_line);
- if (code < 0) return code;
- pprint->psource += width;
- }
-
- code = dviprt_output_expr(pprint,CFG_AFTER_BIT_IMAGE,width,dsize);
- if (code < 0) return code;
-
- return 0;
-}
-
-static int
-dviprt_output_transpose(dviprt_print *pprint,uchar far *fb,uint width)
-{
- uchar far *psrc;
- uchar far *pbuf;
- int code;
- uint src_size;
- uint dsize;
- uint pins,pins8;
- int y;
-
- pins8 = pprint->printer->integer[CFG_PINS];
- pins = pins8 * 8;
- src_size = width * pins;
- psrc = pprint->source_buffer;
- {
- uchar far *pdst;
- uint sskip;
- sskip = pprint->bitmap_width * 8;
- for (y = pins8-1; y >= 0 ; y--) {
- uint i;
- pbuf = fb;
- pdst = psrc;
- for (i=width;i>0;i--) {
- dviprt_transpose8x8(pbuf,pprint->bitmap_width,pdst,pins8);
- pbuf ++;
- pdst += pins;
- }
- fb += sskip;
- psrc++;
- }
- }
-
- psrc = pprint->source_buffer;
-
- /* here, reverse bits */
- if (pprint->printer->integer[CFG_UPPER_POS] & CFG_REVERSE_BIT)
- dviprt_reverse_bits(psrc,src_size);
-
- dsize = 0;
- pprint->psource = pprint->source_buffer;
- for (y = pins ; y>0 ; y--) {
- int dsize_line;
- dsize_line = pprint->encode_encode_proc(pprint,(long)width,0);
- if (dsize_line < 0) return dsize_line;
- dsize += dsize_line;
- pprint->psource += width;
- }
-
- code = dviprt_output_expr(pprint,CFG_SEND_BIT_IMAGE,width,dsize);
- if (code < 0) return code;
-
- pprint->psource = pprint->source_buffer;
- for (y = pins ; y>0 ; y--) {
- uint dsize_line;
- dsize_line = pprint->encode_encode_proc(pprint,(long)width,1);
- code = dviprt_output(pprint,pprint->poutput,dsize_line);
- if (code < 0) return code;
- pprint->psource += width;
- }
-
- code = dviprt_output_expr(pprint,CFG_AFTER_BIT_IMAGE,width,dsize);
- if (code < 0) return code;
-
- return 0;
-}
-
-static int
-dviprt_transpose8x8(uchar far *inp,uint line_size,uchar far *outp,uint dist)
-{
- register uint ae, bf, cg, dh;
- {
- uchar far *ptr4 = inp + (line_size << 2);
- ae = ((uint)*inp << 8) + *ptr4;
- inp += line_size, ptr4 += line_size;
- bf = ((uint)*inp << 8) + *ptr4;
- inp += line_size, ptr4 += line_size;
- cg = ((uint)*inp << 8) + *ptr4;
- inp += line_size, ptr4 += line_size;
- dh = ((uint)*inp << 8) + *ptr4;
- }
- /* Check for all 8 bytes being the same. */
- /* This is especially worth doing for the case where all are zero. */
- if ( ae == bf && ae == cg && ae == dh && (ae >> 8) == (ae & 0xff) ) {
- if ( ae == 0 ) goto store;
- *outp = -((ae >> 7) & 1);
- outp += dist;
- *outp = -((ae >> 6) & 1);
- outp += dist;
- *outp = -((ae >> 5) & 1);
- outp += dist;
- *outp = -((ae >> 4) & 1);
- outp += dist;
- *outp = -((ae >> 3) & 1);
- outp += dist;
- *outp = -((ae >> 2) & 1);
- outp += dist;
- *outp = -((ae >> 1) & 1);
- outp += dist;
- *outp = -(ae & 1);
- }
- else {
- register uint temp;
-
- /* Transpose a block of bits between registers. */
-#define transpose(r,s,mask,shift)\
- r ^= (temp = ((s >> shift) ^ r) & mask);\
- s ^= temp << shift
-
- /* Transpose blocks of 4 x 4 */
-#define transpose4(r) transpose(r,r,0x00f0,4)
- transpose4(ae);
- transpose4(bf);
- transpose4(cg);
- transpose4(dh);
-
- /* Transpose blocks of 2 x 2 */
- transpose(ae, cg, 0x3333, 2);
- transpose(bf, dh, 0x3333, 2);
-
- /* Transpose blocks of 1 x 1 */
- transpose(ae, bf, 0x5555, 1);
- transpose(cg, dh, 0x5555, 1);
-
- store: *outp = ae >> 8;
- outp += dist;
- *outp = bf >> 8;
- outp += dist;
- *outp = cg >> 8;
- outp += dist;
- *outp = dh >> 8;
- outp += dist;
- *outp = (uchar)ae;
- outp += dist;
- *outp = (uchar)bf;
- outp += dist;
- *outp = (uchar)cg;
- outp += dist;
- *outp = (uchar)dh;
- }
- return 0;
-}
-
-static int
-dviprt_reverse_bits(uchar far *buf,uint s)
-{
- static uchar rev[256] = {
- 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
- 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
- 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
- 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
- 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
- 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
- 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
- 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
- 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
- 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
- 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
- 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
- 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
- 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
- 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
- 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
- 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
- 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
- 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
- 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
- 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
- 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
- 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
- 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
- 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
- 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
- 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
- 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
- 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
- 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
- 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
- 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
- };
- while (s-- > 0) {
- *buf = rev[*buf];
- buf++;
- }
- return 0;
-}
-
-static int
-dviprt_output_expr(dviprt_print *pprint,int numb,uint width,uint dsize)
-{
- uchar *pcode;
- dviprt_cfg_t *pprt;
- uint v;
- uint len;
-
- pprt = pprint->printer;
- if (pprt->prtcode[numb] == NULL) return 0;
- pcode = pprt->prtcode[numb];
- len = pprt->prtcode_size[numb];
-
- while (*pcode && len>0) {
- if (*pcode & CFG_FMT_BIT) {
- uint stack[CFG_STACK_DEPTH];
- int stack_p = -1;
- uchar fmt = *pcode++;
- uint l = *pcode++;
- len -=2;
- while (l>0) {
- if ((*pcode & CFG_EXPR_TYPE_BIT) == CFG_OP) {
- uint v2 = stack[stack_p--];
- v = stack[stack_p--];
- switch (*pcode) {
- case CFG_OP_ADD: v += v2; break;
- case CFG_OP_SUB: v -= v2; break;
- case CFG_OP_MUL: v *= v2; break;
- case CFG_OP_DIV:
- if (v2 == 0) { /* divided by zero. */
- div_by_zero:
- return CFG_ERROR_DIV0;
- }
- v /= v2;
- break;
- case CFG_OP_MOD:
- if (v2 == 0) goto div_by_zero;
- v %= v2;
- break;
- case CFG_OP_SHL: v <<= v2; break;
- case CFG_OP_SHR: v >>= v2; break;
- case CFG_OP_AND: v &= v2; break;
- case CFG_OP_OR : v |= v2; break;
- case CFG_OP_XOR: v ^= v2; break;
- default:
- ;
- }
- stack[++stack_p] = v;
- }
- else if ((*pcode & CFG_EXPR_TYPE_BIT) == CFG_VAL) {
- {
- switch (*pcode) {
- case CFG_VAL_DEFAULT: v = width*8; break;
- case CFG_VAL_CONSTANT: v = pprt->integer[CFG_CONSTANT]; break;
- case CFG_VAL_WIDTH: v = pprint->bitmap_width*8; break;
- case CFG_VAL_HEIGHT: v = pprint->bitmap_height; break;
- case CFG_VAL_PAGE:
- case CFG_VAL_PAGECOUNT: v = pprint->page_count; break;
- case CFG_VAL_DATASIZE: v = dsize; break;
- case CFG_VAL_X_DPI: v = (int)pprt->integer[CFG_DPI]; break;
- case CFG_VAL_Y_DPI:
- v = pprt->integer[CFG_Y_DPI] > 0 ?
- pprt->integer[CFG_Y_DPI] : pprt->integer[CFG_DPI];
- break;
- case CFG_VAL_PINS_BYTE: v = pprt->integer[CFG_PINS]; break;
- case CFG_VAL_X_POS: v = pprint->device_x*8; break;
- case CFG_VAL_Y_POS:
- v = pprint->device_y * dviprt_getscanlines(pprint);
- break;
- }
- }
- stack[++stack_p] = v;
- }
- else {
- stack[++stack_p] = *pcode;
- }
- l--; pcode++; len--;
- }
- v = stack[stack_p];
- if ((fmt & CFG_FMT_FORMAT_BIT) == CFG_FMT_STRINGS) {
- uint l = *pcode++;
- len--;
- while (v-- > 0)
- dviprt_output(pprint,(uchar far *)pcode,l);
- pcode += l;
- len -= l;
- }
- else if ((fmt & CFG_FMT_FORMAT_BIT) == CFG_FMT_ASSIGNMENT) {
- pprint->uservar[fmt&0x0f] = v;
- }
- else { uchar valbuf[10];
- int cols = fmt & CFG_FMT_COLUMN_BIT;
- int i;
-
- switch (fmt & CFG_FMT_FORMAT_BIT) {
- case CFG_FMT_BIN_LTOH:
- for (i=0;i<cols;i++) {
- valbuf[i] = v&0xff;
- v >>= 8;
- }
- break;
- case CFG_FMT_BIN_HTOL:
- for (i=cols-1;i>=0;i--) {
- valbuf[i] = v&0xff;
- v >>= 8;
- }
- break;
- default:
- { char *f;
- char fmtbuf[10];
- switch(fmt & CFG_FMT_FORMAT_BIT) {
- case CFG_FMT_HEX_UPPER: f = "X"; break;
- case CFG_FMT_HEX_LOWER: f = "x"; break;
- case CFG_FMT_DECIMAL: f = "u"; break;
- case CFG_FMT_OCTAL: f = "o"; break;
- }
- if (cols == 0)
- strcpy(fmtbuf,"%");
- else
- gs_sprintf(fmtbuf,"%%0%d",cols);
- strcat(fmtbuf,f);
- gs_sprintf(valbuf,fmtbuf,stack[stack_p]);
- cols = strlen(valbuf);
- if (fmt & CFG_FMT_ISO_BIT)
- valbuf[cols-1] |= 0x10;
- }
- break;
- }
- dviprt_output(pprint,(uchar far *)valbuf, cols);
- }
- }
- else {
- uint l = *pcode++;
- len--;
- dviprt_output(pprint,(uchar far *)pcode,l);
- pcode += l;
- len -= l;
- }
- }
- return 0;
-}
-
-static int
-dviprt_default_outputproc(uchar far *buf,long s,void *fp)
-{
-#ifdef __MSDOS_REAL__
- while (s-- > 0) {
- if (fputc(*buf++,fp) == EOF)
- return CFG_ERROR_OUTPUT;
- }
- return 0;
-#else
- return fwrite(buf,s,1,fp) == 1 ? 0 : CFG_ERROR_OUTPUT;
-#endif
-}
-/***** End of print.c *****/
-
-/***** From encode.c *****/
-/* $Id: ENCODE.C 1.1 1994/08/30 02:27:02 kaz Exp kaz $ */
-
-#define DVIPRT_SUPPORT_FAX 1
-#define DVIPRT_SUPPORT_PCL 1
-
-/*--- forward declarations ---*/
-static long dviprt_null_getworksize(dviprt_print *,long );
-static long dviprt_null_encode(dviprt_print *,long ,int );
-static long dviprt_hex_getworksize(dviprt_print *,long );
-static long dviprt_hex_encode(dviprt_print *,long ,int );
-#if DVIPRT_SUPPORT_FAX
-static long dviprt_fax_getworksize(dviprt_print *,long );
-static long dviprt_fax_encode(dviprt_print *,long ,int );
-#endif
-#if DVIPRT_SUPPORT_PCL
-static long dviprt_pcl1_getworksize(dviprt_print *,long );
-static long dviprt_pcl1_encode(dviprt_print *,long ,int );
-static long dviprt_pcl2_getworksize(dviprt_print *,long );
-static long dviprt_pcl2_encode(dviprt_print *,long ,int );
-#endif
-
-static dviprt_encoder dviprt_encoder_list[] = {
- { CFG_ENCODE_NULL, dviprt_null_getworksize,dviprt_null_encode},
- { CFG_ENCODE_HEX, dviprt_hex_getworksize,dviprt_hex_encode},
-#if DVIPRT_SUPPORT_FAX
- { CFG_ENCODE_FAX, dviprt_fax_getworksize,dviprt_fax_encode},
-#endif
-#if DVIPRT_SUPPORT_PCL
- { CFG_ENCODE_PCL1, dviprt_pcl1_getworksize,dviprt_pcl1_encode},
- { CFG_ENCODE_PCL2, dviprt_pcl2_getworksize,dviprt_pcl2_encode},
-#endif
- { -1 },
-};
-
-/*--- internal routines ---*/
-/* The users MUST NOT USE these functions */
-static dviprt_encoder *
-dviprt_getencoder_(int no)
-{
- int i;
- for (i=0;dviprt_encoder_list[i].no >= 0;i++)
- if (no == dviprt_encoder_list[i].no)
- return dviprt_encoder_list+i;
- return NULL;
-}
-
-static long
-dviprt_null_getworksize(dviprt_print *pprint,long s)
-{
- return 0;
-}
-static long
-dviprt_null_encode(dviprt_print *pprint,long s,int f)
-{
- pprint->poutput = pprint->psource;
- return s;
-}
-
-static long
-dviprt_hex_getworksize(dviprt_print *pprint,long s)
-{
- return s*2;
-}
-static long
-dviprt_hex_encode(dviprt_print *pprint,long s,int f)
-{
- if (f) {
- uchar far *w;
- uchar far *buf;
- static uchar hex[] = "0123456789ABCDEF";
- int i=s;
- w = pprint->poutput = pprint->encode_buffer;
- buf = pprint->psource;
- while (i-->0) {
- *w++ = hex[(*buf>>4)&0x0f];
- *w++ = hex[*buf&0x0f];
- buf++;
- }
- }
- return s*2;
-}
-
-#if DVIPRT_SUPPORT_PCL
-static long
-dviprt_pcl1_getworksize(dviprt_print *pprint,long s)
-{
- return s*2;
-}
-static long
-dviprt_pcl1_encode(dviprt_print *pprint,long s,int f)
-{
- uchar far *src;
- uchar far *end;
- uchar far *out;
- long total = 0;
-
- src = pprint->psource;
- end = src + s;
- out = pprint->poutput = pprint->encode_buffer;
-
- while ( src < end ) {
- uchar test = *src++;
- uchar far *run = src;
- while ( src < end && *src == test ) src++;
- if (f) {
- while ( src - run > 255 ) {
- *out++ = 255;
- *out++ = test;
- total += 2;
- run += 256;
- }
- *out++ = src - run;
- *out++ = test;
- total += 2;
- }
- else {
- total += (((src-run)/255 + ((src-run)%255) ? 1 : 0)) * 2;
- }
- }
- return total;
-}
-
-static long
-dviprt_pcl2_getworksize(dviprt_print *pprint,long s)
-{
- return s + s/127 + 1;
-}
-static long
-dviprt_pcl2_encode(dviprt_print *pprint,long s,int f)
-{
- uchar far *exam;
- uchar far *cptr;
- uchar far *end;
- uchar far *src;
- long total = 0;
-
- src = pprint->psource;
- exam = src;
- cptr = pprint->poutput = pprint->encode_buffer;
- end = exam + s;
-
- for ( ; ; ) {
- uchar test = *exam++;
- int len;
- while ((test != *exam) && (exam < end))
- test = *exam++;
- if (exam < end) exam--;
- len = exam - src;
- if (f) {
- while (len > 0){
- int i;
- int count = len;
- if (count>127) count=127;
- *cptr++=count-1;
- for (i = 0 ; i < count ; i++) *cptr++ = *src++;
- len -= count;
- total += (count+1);
- }
- }
- else {
- total += len + ((len/127)+(len%127 ? 1 : 0));
- }
- if (exam >= end) break;
- exam++;
- while ((test == *exam) && (exam < end))
- exam++;
- len = exam - src;
- if (f) {
- while (len > 0) {
- int count = len;
- if (count > 127) count = 127;
- *cptr++ = (257-count);
- *cptr++ = test;
- len -= count;
- total += 2;
- }
- }
- else {
- total += ((len/127 + (len%127) ? 1 : 0)) * 2;
- }
- if (exam >= end) break;
- src = exam;
- }
- return total;
-}
-#endif /* DVIPRT_SUPPORT_PCL */
-
-#if DVIPRT_SUPPORT_FAX
-static long
-dviprt_fax_getworksize(dviprt_print *pprint,long s)
-{
- long size = s * 8 + 7;
- return MAX(size*2/9+4,size/8) * dviprt_getscanlines(pprint) + 1;
-}
-
-#define MAX_FAX_WIDTH 2623
-typedef struct {
- int data;
- int length;
-} FaxEncode_t;
-typedef struct {
- uchar i_bitbuf;
- uchar far *i_buf;
- int i_count;
-
- uchar o_bitbuf;
- uchar far *o_buf;
- int o_count;
- int o_bufcount;
-} FaxEncodeInfo;
-static int dviprt_fax_set_white(int,FaxEncodeInfo *);
-static int dviprt_fax_set_black(int,FaxEncodeInfo *);
-static int dviprt_fax_set_bitcount(FaxEncode_t *,FaxEncodeInfo *);
-
-static long
-dviprt_fax_encode(dviprt_print *pprint,long s,int f)
-{
- static FaxEncode_t eol_code = {0x800,12};
- int allruns = 0;
- int width = s * 8;
- int top_bit_count = 8;
- FaxEncodeInfo info;
- uchar far *src_end;
- uchar recover;
-
- src_end = pprint->psource + s;
- recover = *src_end;
- *src_end = 0xaa;
-
- /* initializing */
- info.i_buf = pprint->psource;
- info.i_bitbuf = *info.i_buf++;
- info.i_count = 8;
- info.o_buf = pprint->poutput = pprint->encode_buffer;
- info.o_bitbuf = 0;
- info.o_count = 8;
- info.o_bufcount = 0;
-
- dviprt_fax_set_bitcount(&eol_code,&info);
-
- for(;;){
- static uchar ROW[9] =
- {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
- static uchar MASK[9] =
- {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff};
- int white_run_length;
- int black_run_length;
-
- /* count run-length */
- /* remaining bits in the current byte are white? */
- if (!(info.i_bitbuf &= MASK[info.i_count])){
- do{
- top_bit_count += 8; /* next byte is also white */
- } while(!(info.i_bitbuf = *info.i_buf++));
- info.i_count = 8;
- }
- /* current byte contains white and black bits */
- while(!(info.i_bitbuf & ROW[info.i_count]))
- info.i_count--; /* skip white bits */
- white_run_length = top_bit_count - (black_run_length = info.i_count);
-
- /* remaining bits in the current byte are black? */
- if (info.i_bitbuf == MASK[info.i_count]){
- do{
- black_run_length += 8;
- /* next byte is also black */
- } while((info.i_bitbuf = *info.i_buf++) == 0xff);
- info.i_count = 8;
- }
- else info.i_count--; /* skip the top black bit */
-
- /* current byte contains white and black bits */
- while(info.i_bitbuf & ROW[info.i_count])
- info.i_count--; /* skip black bits */
- black_run_length -= (top_bit_count = info.i_count);
-
- /* output */
- if((allruns += white_run_length) < width)
- dviprt_fax_set_white(white_run_length,&info);
- else{
- dviprt_fax_set_white(white_run_length + width - allruns,&info);
- break;
- }
- if((allruns += black_run_length) < width)
- dviprt_fax_set_black(black_run_length,&info);
- else{
- dviprt_fax_set_black(black_run_length + width - allruns,&info);
- break;
- }
- }
-
- info.o_bufcount++;
- if (info.o_count < 8)
- *info.o_buf++ = info.o_bitbuf;
- else
- *info.o_buf++ = 0;
- *src_end = recover;
-
- return info.o_bufcount;
-}
-
-static int
-dviprt_fax_set_bitcount(FaxEncode_t *pt,FaxEncodeInfo *info)
-{
- int data, length;
-
- data = pt->data;
- length = pt->length;
- while( (length -= info->o_count) >= 0 ){
- *info->o_buf++ = ((data << (8 - info->o_count))|info->o_bitbuf);
- info->o_bitbuf = 0;
- info->o_bufcount++;
- data >>= info->o_count;
- info->o_count = 8;
- }
- info->o_bitbuf |= (data << (8 - info->o_count));
- info->o_count = -length;
- return 0;
-}
-
-static int
-dviprt_fax_set_white(int count,FaxEncodeInfo *info)
-{
- static FaxEncode_t white_count_list[]={
- { 0x00AC, 8, }, /* 0 */
- { 0x0038, 6, }, /* 1 */
- { 0x000E, 4, }, /* 2 */
- { 0x0001, 4, }, /* 3 */
- { 0x000D, 4, }, /* 4 */
- { 0x0003, 4, }, /* 5 */
- { 0x0007, 4, }, /* 6 */
- { 0x000F, 4, }, /* 7 */
- { 0x0019, 5, }, /* 8 */
- { 0x0005, 5, }, /* 9 */
- { 0x001C, 5, }, /* 10 */
- { 0x0002, 5, }, /* 11 */
- { 0x0004, 6, }, /* 12 */
- { 0x0030, 6, }, /* 13 */
- { 0x000B, 6, }, /* 14 */
- { 0x002B, 6, }, /* 15 */
- { 0x0015, 6, }, /* 16 */
- { 0x0035, 6, }, /* 17 */
- { 0x0072, 7, }, /* 18 */
- { 0x0018, 7, }, /* 19 */
- { 0x0008, 7, }, /* 20 */
- { 0x0074, 7, }, /* 21 */
- { 0x0060, 7, }, /* 22 */
- { 0x0010, 7, }, /* 23 */
- { 0x000A, 7, }, /* 24 */
- { 0x006A, 7, }, /* 25 */
- { 0x0064, 7, }, /* 26 */
- { 0x0012, 7, }, /* 27 */
- { 0x000C, 7, }, /* 28 */
- { 0x0040, 8, }, /* 29 */
- { 0x00C0, 8, }, /* 30 */
- { 0x0058, 8, }, /* 31 */
- { 0x00D8, 8, }, /* 32 */
- { 0x0048, 8, }, /* 33 */
- { 0x00C8, 8, }, /* 34 */
- { 0x0028, 8, }, /* 35 */
- { 0x00A8, 8, }, /* 36 */
- { 0x0068, 8, }, /* 37 */
- { 0x00E8, 8, }, /* 38 */
- { 0x0014, 8, }, /* 39 */
- { 0x0094, 8, }, /* 40 */
- { 0x0054, 8, }, /* 41 */
- { 0x00D4, 8, }, /* 42 */
- { 0x0034, 8, }, /* 43 */
- { 0x00B4, 8, }, /* 44 */
- { 0x0020, 8, }, /* 45 */
- { 0x00A0, 8, }, /* 46 */
- { 0x0050, 8, }, /* 47 */
- { 0x00D0, 8, }, /* 48 */
- { 0x004A, 8, }, /* 49 */
- { 0x00CA, 8, }, /* 50 */
- { 0x002A, 8, }, /* 51 */
- { 0x00AA, 8, }, /* 52 */
- { 0x0024, 8, }, /* 53 */
- { 0x00A4, 8, }, /* 54 */
- { 0x001A, 8, }, /* 55 */
- { 0x009A, 8, }, /* 56 */
- { 0x005A, 8, }, /* 57 */
- { 0x00DA, 8, }, /* 58 */
- { 0x0052, 8, }, /* 59 */
- { 0x00D2, 8, }, /* 60 */
- { 0x004C, 8, }, /* 61 */
- { 0x00CC, 8, }, /* 62 */
- { 0x002C, 8, }, /* 63 */
-
- { 0x001B, 5, }, /* 64 */
- { 0x0009, 5, }, /* 128 */
- { 0x003A, 6, }, /* 192 */
- { 0x0076, 7, }, /* 256 */
- { 0x006C, 8, }, /* 320 */
- { 0x00EC, 8, }, /* 384 */
- { 0x0026, 8, }, /* 448 */
- { 0x00A6, 8, }, /* 512 */
- { 0x0016, 8, }, /* 576 */
- { 0x00E6, 8, }, /* 640 */
- { 0x0066, 9, }, /* 704 */
- { 0x0166, 9, }, /* 768 */
- { 0x0096, 9, }, /* 832 */
- { 0x0196, 9, }, /* 896 */
- { 0x0056, 9, }, /* 960 */
- { 0x0156, 9, }, /* 1024 */
- { 0x00D6, 9, }, /* 1088 */
- { 0x01D6, 9, }, /* 1152 */
- { 0x0036, 9, }, /* 1216 */
- { 0x0136, 9, }, /* 1280 */
- { 0x00B6, 9, }, /* 1344 */
- { 0x01B6, 9, }, /* 1408 */
- { 0x0032, 9, }, /* 1472 */
- { 0x0132, 9, }, /* 1536 */
- { 0x00B2, 9, }, /* 1600 */
- { 0x0006, 6, }, /* 1664 */
- { 0x01B2, 9, }, /* 1728 */
-
- { 0x0080, 11, }, /* 1792 */
- { 0x0180, 11, }, /* 1856 */
- { 0x0580, 11, }, /* 1920 */
- { 0x0480, 12, }, /* 1984 */
- { 0x0C80, 12, }, /* 2048 */
- { 0x0280, 12, }, /* 2112 */
- { 0x0A80, 12, }, /* 2176 */
- { 0x0680, 12, }, /* 2240 */
- { 0x0E80, 12, }, /* 2304 */
- { 0x0380, 12, }, /* 2368 */
- { 0x0B80, 12, }, /* 2432 */
- { 0x0780, 12, }, /* 2496 */
- { 0x0F80, 12, }, /* 2560 */
- };
- while (count >= 64){
- if(count <= MAX_FAX_WIDTH){
- dviprt_fax_set_bitcount((white_count_list + 63) + (count/64),info);
- break;
- }
- dviprt_fax_set_white(MAX_FAX_WIDTH,info);
- dviprt_fax_set_black(0,info);
- count -= MAX_FAX_WIDTH;
- }
- dviprt_fax_set_bitcount(white_count_list + (count & 63) ,info);
- return 0;
-}
-
-static int
-dviprt_fax_set_black(int count,FaxEncodeInfo *info)
-{
- static FaxEncode_t black_count_list[]={
- { 0x03B0, 10, }, /* 0 */
- { 0x0002, 3, }, /* 1 */
- { 0x0003, 2, }, /* 2 */
- { 0x0001, 2, }, /* 3 */
- { 0x0006, 3, }, /* 4 */
- { 0x000C, 4, }, /* 5 */
- { 0x0004, 4, }, /* 6 */
- { 0x0018, 5, }, /* 7 */
- { 0x0028, 6, }, /* 8 */
- { 0x0008, 6, }, /* 9 */
- { 0x0010, 7, }, /* 10 */
- { 0x0050, 7, }, /* 11 */
- { 0x0070, 7, }, /* 12 */
- { 0x0020, 8, }, /* 13 */
- { 0x00E0, 8, }, /* 14 */
- { 0x0030, 9, }, /* 15 */
- { 0x03A0, 10, }, /* 16 */
- { 0x0060, 10, }, /* 17 */
- { 0x0040, 10, }, /* 18 */
- { 0x0730, 11, }, /* 19 */
- { 0x00B0, 11, }, /* 20 */
- { 0x01B0, 11, }, /* 21 */
- { 0x0760, 11, }, /* 22 */
- { 0x00A0, 11, }, /* 23 */
- { 0x0740, 11, }, /* 24 */
- { 0x00C0, 11, }, /* 25 */
- { 0x0530, 12, }, /* 26 */
- { 0x0D30, 12, }, /* 27 */
- { 0x0330, 12, }, /* 28 */
- { 0x0B30, 12, }, /* 29 */
- { 0x0160, 12, }, /* 30 */
- { 0x0960, 12, }, /* 31 */
- { 0x0560, 12, }, /* 32 */
- { 0x0D60, 12, }, /* 33 */
- { 0x04B0, 12, }, /* 34 */
- { 0x0CB0, 12, }, /* 35 */
- { 0x02B0, 12, }, /* 36 */
- { 0x0AB0, 12, }, /* 37 */
- { 0x06B0, 12, }, /* 38 */
- { 0x0EB0, 12, }, /* 39 */
- { 0x0360, 12, }, /* 40 */
- { 0x0B60, 12, }, /* 41 */
- { 0x05B0, 12, }, /* 42 */
- { 0x0DB0, 12, }, /* 43 */
- { 0x02A0, 12, }, /* 44 */
- { 0x0AA0, 12, }, /* 45 */
- { 0x06A0, 12, }, /* 46 */
- { 0x0EA0, 12, }, /* 47 */
- { 0x0260, 12, }, /* 48 */
- { 0x0A60, 12, }, /* 49 */
- { 0x04A0, 12, }, /* 50 */
- { 0x0CA0, 12, }, /* 51 */
- { 0x0240, 12, }, /* 52 */
- { 0x0EC0, 12, }, /* 53 */
- { 0x01C0, 12, }, /* 54 */
- { 0x0E40, 12, }, /* 55 */
- { 0x0140, 12, }, /* 56 */
- { 0x01A0, 12, }, /* 57 */
- { 0x09A0, 12, }, /* 58 */
- { 0x0D40, 12, }, /* 59 */
- { 0x0340, 12, }, /* 60 */
- { 0x05A0, 12, }, /* 61 */
- { 0x0660, 12, }, /* 62 */
- { 0x0E60, 12, }, /* 63 */
-
- { 0x03C0, 10, }, /* 64 */
- { 0x0130, 12, }, /* 128 */
- { 0x0930, 12, }, /* 192 */
- { 0x0DA0, 12, }, /* 256 */
- { 0x0CC0, 12, }, /* 320 */
- { 0x02C0, 12, }, /* 384 */
- { 0x0AC0, 12, }, /* 448 */
- { 0x06C0, 13, }, /* 512 */
- { 0x16C0, 13, }, /* 576 */
- { 0x0A40, 13, }, /* 640 */
- { 0x1A40, 13, }, /* 704 */
- { 0x0640, 13, }, /* 768 */
- { 0x1640, 13, }, /* 832 */
- { 0x09C0, 13, }, /* 896 */
- { 0x19C0, 13, }, /* 960 */
- { 0x05C0, 13, }, /* 1024 */
- { 0x15C0, 13, }, /* 1088 */
- { 0x0DC0, 13, }, /* 1152 */
- { 0x1DC0, 13, }, /* 1216 */
- { 0x0940, 13, }, /* 1280 */
- { 0x1940, 13, }, /* 1344 */
- { 0x0540, 13, }, /* 1408 */
- { 0x1540, 13, }, /* 1472 */
- { 0x0B40, 13, }, /* 1536 */
- { 0x1B40, 13, }, /* 1600 */
- { 0x04C0, 13, }, /* 1664 */
- { 0x14C0, 13, }, /* 1728 */
-
- { 0x0080, 11, }, /* 1792 */
- { 0x0180, 11, }, /* 1856 */
- { 0x0580, 11, }, /* 1920 */
- { 0x0480, 12, }, /* 1984 */
- { 0x0C80, 12, }, /* 2048 */
- { 0x0280, 12, }, /* 2112 */
- { 0x0A80, 12, }, /* 2176 */
- { 0x0680, 12, }, /* 2240 */
- { 0x0E80, 12, }, /* 2304 */
- { 0x0380, 12, }, /* 2368 */
- { 0x0B80, 12, }, /* 2432 */
- { 0x0780, 12, }, /* 2496 */
- { 0x0F80, 12, }, /* 2560 */
- };
-
- while (count >= 64){
- if(count <= MAX_FAX_WIDTH){
- dviprt_fax_set_bitcount((black_count_list + 63) + (count/64),info);
- break;
- }
- dviprt_fax_set_black(MAX_FAX_WIDTH,info);
- dviprt_fax_set_white(0,info);
- count -= MAX_FAX_WIDTH;
- }
- dviprt_fax_set_bitcount(black_count_list + (count & 63),info);
- return 0;
-}
-#endif /* DVIPRT_SUPPORT_FAX */
-/***** End of encode.c *****/
diff --git a/contrib/japanese/escp_24.src b/contrib/japanese/escp_24.src
deleted file mode 100644
index 5536aa23..00000000
--- a/contrib/japanese/escp_24.src
+++ /dev/null
@@ -1,12 +0,0 @@
-name : ESC/P 24 pin
-pins : 24
-minimal_unit : 1
-maximal_unit : 180
-dpi : 180
-upper_position : HIGH_BIT
-bit_image_mode : \e 3 \x18 \e ?Z'
-send_bit_image : \e Z \b2,d
-line_feed : \r \n
-form_feed : \r \f
-normal_mode : \r \f \e 2
-skip_spaces : \e \ \b2,d
diff --git a/contrib/japanese/gdevdmpr.c b/contrib/japanese/gdevdmpr.c
deleted file mode 100644
index f675cbb5..00000000
--- a/contrib/japanese/gdevdmpr.c
+++ /dev/null
@@ -1,888 +0,0 @@
-/* COPYRIGHT (C) 1990, 1992 Aladdin Enterprises. All rights reserved.
- Distributed by Free Software Foundation, Inc.
-
- This file is part of Ghostscript.
-
- 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 Ghostscript General Public License for full details.
-
- Everyone is granted permission to copy, modify and redistribute
- Ghostscript, but only under the conditions described in the Ghostscript
- General Public License. A copy of this license is supposed to have been
- given to you along with 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. */
-
-/* gdevdmpr.c
- *
- * Dot matrix printer driver for Ghostscript
- *
- * The first version written by ... K.Asayama Nov 1992
- * NEC PC-H98 high resolution mode supported by ... OkI Dec 1992
- * IBM PC AT/Compatible machines supported by ... hero.h Mar 1993
- * Modified for 386BSD by ... FKR Mar 1993
- * Modified for Ghostscript version 2.5.2 by ... K.Asayama Mar 1993
- * Modified for Ghostscript version 2.6.1 by ... K.Asayama Oct 1993
- * Modified for Ghostscript version 4.03 by ... K.Asayama May 1997
- */
-
-#include "gdevprn.h"
-#include "gp.h"
-#include "gserrors.h"
-#include "gsparam.h"
-#include "gsstate.h"
-#include "math_.h"
-#include "malloc_.h"
-
-/* include library header. */
-#include "dviprlib.h"
-
-#define LOCAL_DEBUG 0
-
-#define DEVICE_NAME "dmprt"
-#define DEVICE_VERSION 201 /* 2.01 */
-
-typedef struct gx_device_dmprt_local_s gx_device_dmprt_local;
-struct gx_device_dmprt_local_s {
- int orig_x_dpi;
- int orig_y_dpi;
-
- int x_offset;
- int y_offset;
-
- int spec_width;
- int spec_height;
- int max_width;
- int max_height;
- int dev_margin[4]; /* left bottom right top */
-
- int prtcfg_init_f;
- int verbose_f;
- int debug_f;
- dviprt_cfg_t prtcfg;
- dviprt_print prtinfo;
-};
-
-/* declaration of the structure to describe `DMPRT' device driver */
-typedef struct gx_device_dmprt_s gx_device_dmprt;
-struct gx_device_dmprt_s {
- gx_device_common;
- gx_prn_device_common;
-
- gx_device_dmprt_local dmprt;
-};
-
-/* declarations of main functions */
-static dev_proc_get_params(gdev_dmprt_get_params);
-static dev_proc_put_params(gdev_dmprt_put_params);
-static dev_proc_get_initial_matrix(gdev_dmprt_get_initial_matrix);
-static dev_proc_open_device(gdev_dmprt_open);
-static dev_proc_print_page(gdev_dmprt_print_page);
-static dev_proc_close_device(gdev_dmprt_close);
-
-/* declarations of sub functions to get printer properties. */
-static void gdev_dmprt_init_printer_props(gx_device_dmprt *);
-static int gdev_dmprt_get_printer_props(gx_device_dmprt *,char *);
-static int gdev_dmprt_check_code_props(byte * ,int );
-static gp_file *gdev_dmprt_dviprt_lib_fopen(const gs_memory_t *mem,const char *,char *);
-
-static int gdev_dmprt_error_no_dviprt_to_gs(int );
-
-/* The device descriptor */
-gx_device_procs prn_dmprt_procs = {
- gdev_dmprt_open,
- gdev_dmprt_get_initial_matrix,
- 0, /* sync_output */
- gdev_prn_output_page,
- gdev_dmprt_close,
- gdev_prn_map_rgb_color,
- gdev_prn_map_color_rgb,
- 0, /* fill_rectangle */
- 0, /* tile_rectangle */
- 0, /* copy_mono */
- 0, /* copy_color */
- 0, /* draw_line */
- 0, /* get_bits */
- gdev_dmprt_get_params,
- gdev_dmprt_put_params,
- gx_default_map_cmyk_color,
- 0,
-};
-
-#define DEFAULT_DPI 180
-#define DEFAULT_WIDTH 8.3
-#define DEFAULT_HEIGHT 11.7
-
-gx_device_dmprt gs_dmprt_device = {
- prn_device_body(gx_device_dmprt, prn_dmprt_procs, DEVICE_NAME,
- DEFAULT_WIDTH*10, /* width 10'th */
- DEFAULT_HEIGHT*10, /* height 10'th */
- DEFAULT_DPI, /* X resolution */
- DEFAULT_DPI, /* Y resolution */
- 0,0,0,0, /* margins (top,left,bottom,right) */
- 1,1,1,1,2,2, /* color info. */
- gdev_dmprt_print_page),
-
- {
- DEFAULT_DPI, DEFAULT_DPI,
- 0, 0, /* offset */
- DEFAULT_DPI*DEFAULT_WIDTH, /* specified width */
- DEFAULT_DPI*DEFAULT_HEIGHT, /* specified height */
- -1,-1, /* maximal width,height */
- { 0,0,0,0 }, /* margins */
-
- /* status of the device */
- 0, /* printer configuration is not initialized */
- 0, /* verbose mode */
- 0, /* debug flag */
- },
-};
-
-#define ppdev ((gx_device_printer *)pdev)
-#define pddev ((gx_device_dmprt *)pdev)
-
-typedef struct {
- char *name;
- int no;
-} dmprt_encoding;
-static dmprt_encoding gdev_dmprt_encode_list[] = {
- {"Null",CFG_ENCODE_NULL},
- {"AsciiHex",CFG_ENCODE_HEX },
- {"CCITTFax",CFG_ENCODE_FAX },
- {"PCLMode1Compress",CFG_ENCODE_PCL1 },
- {"PCLMode2Compress",CFG_ENCODE_PCL2 },
- {0},
-};
-
-/* --- Get properties of printer device. --- */
-static int gdev_dmprt_get_dmprt_params(gx_device *pdev, gs_param_list *plist);
-static int
-gdev_dmprt_get_dviprt_params(gx_device *pdev, gs_param_list *plist);
-
-static int
-gdev_dmprt_get_params(gx_device *pdev, gs_param_list *plist)
-{
- int code;
- gs_param_dict dict;
- const char *param_name;
-
- if (!pddev->dmprt.prtcfg_init_f)
- gdev_dmprt_init_printer_props(pddev);
-
- dict.size = 30;
- code = param_begin_write_dict(plist, (param_name = "DmprtParams"),
- &dict, false);
- if (code < 0) return code;
- if (code == 0) {
- code = gdev_dmprt_get_dmprt_params(pdev, dict.list);
- param_end_write_dict(plist, param_name, &dict);
- if (code < 0) return code;
- }
-
- dict.size = 30;
- code = param_begin_write_dict(plist, (param_name = "DviprtParams"),
- &dict, false);
- if (code < 0) return code;
- if (code == 0) {
- code = gdev_dmprt_get_dviprt_params(pdev, dict.list);
- param_end_write_dict(plist, param_name, &dict);
- if (code < 0) return code;
- }
-
- {
- int w = pddev->width;
- int h = pddev->height;
- pddev->width = pddev->dmprt.spec_width;
- pddev->height = pddev->dmprt.spec_height;
- code = gdev_prn_get_params(pdev, plist);
- pddev->width = w;
- pddev->height = h;
- }
-
- return code;
-}
-
-/* internal routines for get_params */
-static int
-gdev_dmprt_get_dmprt_params(gx_device *pdev, gs_param_list *plist)
-{
- int code;
- long vlong;
- bool vbool;
- gs_param_int_array vaint;
- int int_data[4];
-
- vlong = DEVICE_VERSION;
- code = param_write_long(plist, "Version", &vlong);
- if (code < 0) return code;
-
- vbool = pddev->dmprt.debug_f;
- code = param_write_bool(plist, "Debug", &vbool);
- if (code < 0) return code;
-
- vbool = pddev->dmprt.verbose_f;
- code = param_write_bool(plist, "Verbose", &vbool);
- if (code < 0) return code;
-
- vaint.size = 2;
- vaint.data = int_data;
- vaint.persistent = false;
- int_data[0] = pddev->dmprt.max_width;
- int_data[1] = pddev->dmprt.max_height;
- code = param_write_int_array(plist, "MaxSize", &vaint);
- if (code < 0) return code;
-
- vaint.size = 2;
- vaint.data = int_data;
- vaint.persistent = false;
- int_data[0] = pddev->dmprt.x_offset;
- int_data[1] = pddev->dmprt.y_offset;
- code = param_write_int_array(plist, "Offsets", &vaint);
- if (code < 0) return code;
-
- vaint.size = 4;
- vaint.data = int_data;
- vaint.persistent = false;
- { int i;
- for (i=0;i<4;i++) int_data[i] = pddev->dmprt.dev_margin[i];
- }
- code = param_write_int_array(plist, "Margins", &vaint);
- if (code < 0) return code;
-
- return code;
-}
-
-static int
-gdev_dmprt_get_dviprt_params(gx_device *pdev, gs_param_list *plist)
-{
- dviprt_cfg_t *pprt = &pddev->dmprt.prtcfg;
- long vlong;
- bool vbool;
- gs_param_string vstr;
- const char *vchar;
- int code;
- int i;
-
- vlong = pprt->integer[CFG_PINS] * 8;
- code = param_write_long(plist,"Pins", &vlong);
- if (code < 0) return code;
- code = param_write_long(plist, "MinimalUnit",
- pprt->integer+CFG_MINIMAL_UNIT);
- if (code < 0) return code;
- code = param_write_long(plist,"MaximalUnit",
- pprt->integer+CFG_MAXIMAL_UNIT);
- if (code < 0) return code;
- code = param_write_int(plist,"HDpi" , &pddev->dmprt.orig_x_dpi);
- if (code < 0) return code;
- code = param_write_int(plist,"VDpi", &pddev->dmprt.orig_y_dpi);
- if (code < 0) return code;
- code = param_write_long(plist,"Constant", pprt->integer+CFG_CONSTANT);
- if (code < 0) return code;
-
- vbool = pprt->integer[CFG_UPPER_POS] & CFG_NON_TRANSPOSE_BIT ? 0 : 1;
- code = param_write_bool(plist,"Transpose", &vbool);
- if (code < 0) return code;
- vbool = pprt->integer[CFG_UPPER_POS] & CFG_REVERSE_BIT ? 1 : 0;
- code = param_write_bool(plist,"Reverse", &vbool);
- if (code < 0) return code;
- vbool = (pprt->integer[CFG_UPPER_POS] & CFG_NON_MOVING) ? 1 : 0;
- code = param_write_bool(plist,"NonMoving", &vbool);
- if (code < 0) return code;
-
- vchar = pprt->strings[CFG_NAME] ? (const char*)pprt->strings[CFG_NAME] : "";
- param_string_from_string(vstr, vchar);
- code = param_write_string(plist, "Name", &vstr);
- if (code < 0) return code;
-
- for (i=0;gdev_dmprt_encode_list[i].name;i++) {
- if (pprt->integer[CFG_ENCODE] == gdev_dmprt_encode_list[i].no)
- break;
- }
- if (gdev_dmprt_encode_list[i].name == 0) i = 0;
- param_string_from_string(vstr, gdev_dmprt_encode_list[i].name);
- code = param_write_string(plist, "Encoding", &vstr);
- if (code < 0) return code;
-
-#define param_string_from_prt(ps, pprt, n) \
- ((ps).data = pprt->prtcode[n] ? pprt->prtcode[n] : (const byte*)"", \
- (ps).size = pprt->prtcode[n] ? pprt->prtcode_size[n] : 0, \
- (ps).persistent = true)
-#define param_write_prt(plist, name, pprt, n) \
- (param_string_from_prt(vstr, pprt, n), \
- param_write_string(plist, name, &vstr))
-
- code = param_write_prt(plist, "BitImageMode",
- pprt, CFG_BIT_IMAGE_MODE);
- if (code < 0) return code;
- code = param_write_prt(plist, "SendBitImage",
- pprt, CFG_SEND_BIT_IMAGE);
- if (code < 0) return code;
- code = param_write_prt(plist, "BitRowHeader",
- pprt, CFG_BIT_ROW_HEADER);
- if (code < 0) return code;
- code = param_write_prt(plist, "AfterBitImage",
- pprt, CFG_AFTER_BIT_IMAGE);
- if (code < 0) return code;
- code = param_write_prt(plist, "LineFeed", pprt, CFG_LINE_FEED);
- if (code < 0) return code;
- code = param_write_prt(plist, "FormFeed", pprt, CFG_FORM_FEED);
- if (code < 0) return code;
- code = param_write_prt(plist, "NormalMode", pprt, CFG_NORMAL_MODE);
- if (code < 0) return code;
- code = param_write_prt(plist, "SkipSpaces", pprt, CFG_SKIP_SPACES);
- if (code < 0) return code;
-
- return code;
-}
-/* end of internal routines for get_params */
-
-/* --- Put properties of printer device. --- */
-static int gdev_dmprt_put_dmprt_params(gx_device *pdev, gs_param_list *plist);
-static int
-gdev_dmprt_put_dviprt_params(gx_device *pdev, gs_param_list *plist);
-static int gdev_dmprt_put_prt_code_param(gs_param_list *plist,
- dviprt_cfg_t *pprt,
- const char* name, int idx);
-static int
-gdev_dmprt_put_prt_string_param(gs_param_list *plist,
- dviprt_cfg_t *pprt, const char* name, int idx);
-
-static int
-gdev_dmprt_put_params(gx_device *pdev, gs_param_list *plist)
-{
- int code = 0;
- const char *param_name;
- gs_param_dict dict;
-
- if (!pddev->dmprt.prtcfg_init_f)
- gdev_dmprt_init_printer_props(pddev);
-
- /* dmprt parameters */
- code = param_begin_read_dict(plist, (param_name = "DmprtParams"),
- &dict, false);
- if (code < 0) return code;
- if (code == 0) {
- code = gdev_dmprt_put_dmprt_params(pdev, dict.list);
- param_end_read_dict(plist, param_name, &dict);
- if (code < 0) return code;
- }
-
- /* dviprt parameters */
- code = param_begin_read_dict(plist, (param_name = "DviprtParams"),
- &dict, false);
- if (code < 0) return code;
- if (code == 0) {
- code = gdev_dmprt_put_dviprt_params(pdev, dict.list);
- param_end_read_dict(plist, param_name, &dict);
- if (code < 0) return code;
- }
-
- if (pdev->is_open && code) {
- int ccode = gs_closedevice(pdev);
- if (ccode < 0) return ccode;
- }
-
- pddev->width = pddev->dmprt.spec_width;
- pddev->height = pddev->dmprt.spec_height;
- code = gdev_prn_put_params(pdev, plist);
- pddev->dmprt.spec_width = pddev->width;
- pddev->dmprt.spec_height = pddev->height;
- pddev->width -= (pddev->dmprt.dev_margin[0] + pddev->dmprt.dev_margin[2]);
- pddev->height -= (pddev->dmprt.dev_margin[1] + pddev->dmprt.dev_margin[3]);
- if (code < 0) return code;
-
- if (pddev->dmprt.max_width>0 && pddev->dmprt.max_width<pddev->width)
- pddev->width = pddev->dmprt.max_width;
- if (pddev->dmprt.max_height>0 && pddev->dmprt.max_height<pddev->height)
- pddev->height = pddev->dmprt.max_height;
-
- dviprt_setmessagestream(pddev->dmprt.debug_f ? stderr : NULL);
-
- return code;
-}
-
-/* internal routines for put_params */
-
-static int
-gdev_dmprt_put_dmprt_params(gx_device *pdev, gs_param_list *plist)
-{
- int code;
- long vlong;
- bool vbool;
- gs_param_int_array vaint;
-
- /* debug flag */
- code = param_read_bool(plist, "Debug", &vbool);
- if (code < 0) return code;
- if (code == 0) pddev->dmprt.debug_f = vbool;
-
- dviprt_setmessagestream(pddev->dmprt.debug_f ? stderr : NULL);
-
- code = param_read_bool(plist, "Verbose", &vbool);
- if (code < 0) return code;
- pddev->dmprt.verbose_f = vbool;
-
- /* dummy */
- code = param_read_long(plist, "Version", &vlong);
- if (code < 0) return code;
-
- code = param_read_int_array(plist, "MaxSize", &vaint);
- if (code < 0) return code;
- if (code == 0) {
- if (vaint.size != 2) return_error(gs_error_typecheck);
- pddev->dmprt.max_width = vaint.data[0];
- pddev->dmprt.max_height = vaint.data[1];
- }
-
- code = param_read_int_array(plist, "Offsets", &vaint);
- if (code < 0) return code;
- if (code == 0) {
- if (vaint.size != 2) return_error(gs_error_typecheck);
- pddev->dmprt.x_offset = vaint.data[0];
- pddev->dmprt.y_offset = vaint.data[1];
- }
-
- code = param_read_int_array(plist, "Margins", &vaint);
- if (code < 0) return code;
- if (code == 0) {
- int i;
- if (vaint.size != 4) return_error(gs_error_typecheck);
- for (i=0;i<4;i++) pddev->dmprt.dev_margin[i] = vaint.data[i];
- }
-
- return code;
-}
-
-static int
-gdev_dmprt_put_dviprt_params(gx_device *pdev, gs_param_list *plist)
-{
- int code;
- dviprt_cfg_t *pprt = &pddev->dmprt.prtcfg;
- gs_param_string vstr;
- long vlong;
- bool vbool;
-
- /* load .cfg/.src file */
- code = param_read_string(plist, "FileName", &vstr);
- if (code < 0) return code;
- if (code == 0) {
- char *filename = gs_malloc(pdev->memory->non_gc_memory, vstr.size + 1, 1,
- "gdev_dmprt_put_props(filename)");
- int ccode;
- if (filename == 0) return_error(gs_error_VMerror);
- strncpy(filename, (const char*)vstr.data, vstr.size);
- filename[vstr.size] = '\0';
- ccode = gdev_dmprt_get_printer_props(pddev,filename);
- gs_free(pdev->memory->non_gc_memory, filename, vstr.size+1, 1, "gdev_dmprt_put_props(filename)");
- if (ccode < 0) return ccode;
- }
-
- code = param_read_long(plist, "Pins", &vlong);
- if (code < 0) return code;
- if (code == 0) pprt->integer[CFG_PINS] = vlong / 8;
-
- code = param_read_long(plist, "MinimalUnit", &vlong);
- if (code < 0) return code;
- if (code == 0) pprt->integer[CFG_MINIMAL_UNIT] = vlong;
-
- code = param_read_long(plist, "MaximalUnit", &vlong);
- if (code < 0) return code;
- if (code == 0) pprt->integer[CFG_MAXIMAL_UNIT] = vlong;
-
- code = param_read_long(plist, "HDpi", &vlong);
- if (code < 0) return code;
- if (code == 0) pddev->dmprt.orig_x_dpi = vlong;
-
- code = param_read_long(plist, "VDpi", &vlong);
- if (code < 0) return code;
- if (code == 0) pddev->dmprt.orig_y_dpi = vlong;
-
- code = param_read_long(plist, "Constant", &vlong);
- if (code < 0) return code;
- if (code == 0) pprt->integer[CFG_CONSTANT] = vlong;
-
- {
- long tr = pprt->integer[CFG_UPPER_POS] & CFG_NON_TRANSPOSE_BIT;
- long rv = pprt->integer[CFG_UPPER_POS] & CFG_REVERSE_BIT;
- long nm = pprt->integer[CFG_UPPER_POS] & CFG_NON_MOVING;
- param_read_bool(plist,"Transpose", &vbool);
- if (code < 0) return code;
- if (code == 0) tr = vbool ? 0 : CFG_NON_TRANSPOSE_BIT;
- param_read_bool(plist,"Reverse", &vbool);
- if (code < 0) return code;
- if (code == 0) rv = vbool ? CFG_REVERSE_BIT : 0;
- param_read_bool(plist,"NonMoving", &vbool);
- if (code < 0) return code;
- if (code == 0) nm = vbool ? CFG_NON_MOVING : 0;
- pprt->integer[CFG_UPPER_POS] = tr | rv | nm;
- }
-
- code = gdev_dmprt_put_prt_code_param(plist, pprt, "BitImageMode",
- CFG_BIT_IMAGE_MODE);
- if (code < 0) return code;
- code = gdev_dmprt_put_prt_code_param(plist, pprt, "SendBitImage",
- CFG_SEND_BIT_IMAGE);
- if (code < 0) return code;
- code = gdev_dmprt_put_prt_code_param(plist, pprt, "BitRowHeader",
- CFG_BIT_ROW_HEADER);
- if (code < 0) return code;
- code = gdev_dmprt_put_prt_code_param(plist, pprt, "AfterBitImage",
- CFG_AFTER_BIT_IMAGE);
- if (code < 0) return code;
- code = gdev_dmprt_put_prt_code_param(plist, pprt, "LineFeed",
- CFG_LINE_FEED);
- if (code < 0) return code;
- code = gdev_dmprt_put_prt_code_param(plist, pprt, "FormFeed",
- CFG_FORM_FEED);
- if (code < 0) return code;
- code = gdev_dmprt_put_prt_code_param(plist, pprt, "NormalMode",
- CFG_NORMAL_MODE);
- if (code < 0) return code;
- code = gdev_dmprt_put_prt_code_param(plist, pprt, "SkipSpaces",
- CFG_SKIP_SPACES);
- if (code < 0) return code;
-
- code = gdev_dmprt_put_prt_string_param(plist, pprt, "Name",
- CFG_NAME);
- if (code < 0) return code;
-
- code = param_read_string(plist, "Encoding", &vstr);
- if (code < 0) return code;
- if (code == 0) {
- int i;
- for (i=0; gdev_dmprt_encode_list[i].name ; i++) {
- if (strlen(gdev_dmprt_encode_list[i].name) == vstr.size) {
- if (strncmp(gdev_dmprt_encode_list[i].name,
- vstr.data, vstr.size) == 0) {
- pprt->integer[CFG_ENCODE] = gdev_dmprt_encode_list[i].no;
- break;
- }
- }
- }
- if (gdev_dmprt_encode_list[i].name == 0)
- return_error(gs_error_rangecheck);
- }
-
- return code;
-}
-
-static int
-gdev_dmprt_put_prt_code_param(gs_param_list *plist,
- dviprt_cfg_t *pprt, const char* name, int idx)
-{
- gs_param_string vstr;
-
- int code = param_read_string(plist, name, &vstr);
- if (code == 0) {
- int ccode = gdev_dmprt_check_code_props(vstr.data, vstr.size);
- byte *pbyte;
- if (ccode < 0) return_error(gs_error_rangecheck);
- pbyte = (byte *)malloc(vstr.size+1);
- if (pbyte == 0) return_error(gs_error_VMerror);
- memcpy(pbyte, vstr.data, vstr.size);
- pbyte[vstr.size] = 0;
- pprt->prtcode[idx] = pbyte;
- pprt->prtcode_size[idx] = vstr.size;
- if (code == 0) code = 1;
- }
- return code;
-}
-
-static int
-gdev_dmprt_put_prt_string_param(gs_param_list *plist,
- dviprt_cfg_t *pprt, const char* name, int idx)
-{
- gs_param_string vstr;
-
- int code = param_read_string(plist, name, &vstr);
- if (code == 0) {
- byte *pbyte;
- pbyte = (byte *)malloc(vstr.size+1);
- if (pbyte == 0) return_error(gs_error_VMerror);
- memcpy(pbyte, vstr.data, vstr.size);
- pbyte[vstr.size] = 0;
- pprt->strings[idx] = pbyte;
- if (code == 0) code = 1;
- }
- return code;
-}
-/* end of internal routines for put_params */
-
-/* --- Get initial matrix. --- */
-static void
-gdev_dmprt_get_initial_matrix(gx_device *pdev, gs_matrix *pmat)
-{
- gx_default_get_initial_matrix(pdev,pmat);
- pmat->tx += (pddev->dmprt.x_offset - pddev->dmprt.dev_margin[0]);
- pmat->ty += (pddev->dmprt.y_offset + pddev->dmprt.dev_margin[3]);
-}
-
-/* --- Open printer device. --- */
-static int
-gdev_dmprt_open(gx_device *pdev)
-{
- int code;
- dviprt_cfg_t *pcfg;
- dviprt_print *pprint;
-
- pprint = &pddev->dmprt.prtinfo;
- pcfg = &pddev->dmprt.prtcfg;
-
- if ((code = gdev_prn_open(pdev)) < 0)
- return code;
- pcfg->integer[CFG_DPI] = (int)ppdev->x_pixels_per_inch;
- pcfg->integer[CFG_Y_DPI] = (int)ppdev->y_pixels_per_inch;
- code = dviprt_initlibrary(pprint,pcfg,gdev_prn_raster(pdev),pdev->height);
- if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
- code = dviprt_setbuffer(pprint,NULL);
- if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
-
- return 0;
-}
-
-/* --- Close printer device. --- */
-static int
-gdev_dmprt_close(gx_device *pdev)
-{
- int code;
- dviprt_print *pprint;
-
- pprint = &pddev->dmprt.prtinfo;
-
- if (!strchr(pddev->fname,'%')) {
- code = dviprt_endbitmap(pprint);
- if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
- }
- if (pddev->dmprt.verbose_f && pddev->PageCount>0) {
- emprintf2(pdev->memory,
- "%s: Total %lu bytes output.\n",
- pddev->dname,
- dviprt_getoutputbytes(pprint));
- }
- code = dviprt_unsetbuffer(pprint);
- if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
- return gdev_prn_close(pdev);
-}
-
-/* Output the PAGE. */
-static int
-gdev_dmprt_print_page(gx_device_printer *pdev, gp_file *prn_stream)
-{
- int code = 0;
- dviprt_print *pprint = &pddev->dmprt.prtinfo;
- int line_size = gdev_prn_raster((gx_device *)pdev);
- int pins = dviprt_getscanlines(pprint);
- int i_buf_size = pins * line_size;
- int lnum = 0;
- ulong prev_bytes;
- byte *in;
-
- /* get work buffer */
- in = (byte *)gs_malloc(pdev->memory->non_gc_memory, 1, i_buf_size ,"gdev_dmprt_print_page(in)");
- if ( in == 0 )
- return_error(gs_error_VMerror);
-
- /* Initialize this printer driver */
- if (pdev->file_is_new) {
- code = dviprt_setstream(pprint,NULL,prn_stream);
- if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
- }
- if (pddev->dmprt.verbose_f) {
- if (pddev->PageCount == 1)
- emprintf2(pdev->memory,
- "%s: %s\n",
- pddev->dname,
- pddev->dmprt.prtcfg.strings[CFG_NAME]);
- emprintf2(pdev->memory,
- "%s: [%ld]",
- pddev->dname,
- pddev->PageCount);
- }
- prev_bytes = dviprt_getoutputbytes(pprint);
- code = dviprt_beginpage(pprint);
- if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
-
- /* Transfer pixels to printer */
- while ( lnum < pdev->height ) {
- int num_lines;
-
- num_lines = pdev->height-lnum;
- if (num_lines > pins)
- num_lines = pins;
-
- code = gdev_prn_copy_scan_lines(pdev,lnum,in,line_size*num_lines);
- if (code < 0) goto error_ex;
-
- lnum += num_lines;
- if (num_lines < pins) {
- memset(in+line_size*num_lines,0,line_size*(pins-num_lines));
- }
-
- code = dviprt_outputscanlines(pprint,in);
- if (code < 0) {
- code = gdev_dmprt_error_no_dviprt_to_gs(code);
- goto error_ex;
- }
- }
-
- /* Eject the page and set printer normal mode. */
- if (strchr(pdev->fname,'%')) {
- code = dviprt_endbitmap(pprint);
- if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
- }
- fflush(pddev->file);
- if (pddev->dmprt.verbose_f) {
- emprintf1(pdev->memory,
- " %lu bytes\n",
- dviprt_getoutputbytes(pprint)-prev_bytes);
- }
-error_ex:
- gs_free(pdev->memory->non_gc_memory, (char *)in, 1, i_buf_size,"gdev_dmprt_print_page(in)");
-
- return code;
-}
-
-/************************** Internal Routines **************************/
-
-/************************ Get printer properties. ***********************/
-static int
-gdev_dmprt_check_code_props(byte *str,int len)
-{
- byte *end = str+len;
- while (str < end) {
- byte fmt = *str++;
- if (fmt & CFG_FMT_BIT) {
- int s = *str++;
- str += s;
- if (str > end) return_error(gs_error_rangecheck);
- if ((fmt & CFG_FMT_FORMAT_BIT) == CFG_FMT_STRINGS) {
- s = *str++;
- str += s;
- if (str > end) return_error(gs_error_rangecheck);
- }
- }
- else {
- str += fmt;
- if (str > end) return_error(gs_error_rangecheck);
- }
- }
- return str == end ? 0 : gs_error_rangecheck;
-}
-
-static void
-gdev_dmprt_init_printer_props(gx_device_dmprt *pdev)
-{
- dviprt_cfg_t *pprt;
- int i;
-
- pprt = &pdev->dmprt.prtcfg;
-
- for (i=0;i<CFG_INTEGER_TYPE_COUNT;i++)
- pprt->integer[i] = 0;
- for (i=0;i<CFG_STRINGS_TYPE_COUNT;i++)
- pprt->strings[i] = 0;
- for (i=0;i<CFG_PRTCODE_TYPE_COUNT;i++) {
- pprt->prtcode[i] = 0;
- pprt->prtcode_size[i] = 0;
- }
- pdev->dmprt.prtcfg_init_f = 1;
-}
-
-static int
-gdev_dmprt_get_printer_props(gx_device_dmprt *pdev,char *fnamebase)
-{
- int code;
- gp_file *fp;
- dviprt_cfg_t cfg;
- char *fname;
-
- fname = gs_malloc(pdev->memory->non_gc_memory, 256,1,"dviprt_lib_fname");
- if (fname == NULL) return_error(gs_error_VMerror);
-
- fp = gdev_dmprt_dviprt_lib_fopen(pdev->memory,fnamebase,fname);
- if (fp == NULL) {
- return_error(gs_error_undefinedfilename);
- }
- if (fseek(fp,18,0) < 0)
- return_error(gs_error_ioerror);
- code = fgetc(fp);
- fclose(fp);
-
- if (code == EOF)
- code = gs_error_ioerror;
- else if (code == 0xff) {
- code = dviprt_readcfg(pdev->memory,fname,&cfg,NULL,0,NULL,0);
- }
- else {
- code = dviprt_readsrc(pdev->memory,fname,&cfg,NULL,0,NULL,0);
- }
-
- if (code < 0) {
- code = gdev_dmprt_error_no_dviprt_to_gs(code);
- }
- else { /* success */
- memcpy(&pdev->dmprt.prtcfg,&cfg,sizeof(dviprt_cfg_t));
- pddev->dmprt.orig_x_dpi = cfg.integer[CFG_DPI];
- pddev->dmprt.orig_y_dpi =
- cfg.integer[CFG_Y_DPI] > 0 ? cfg.integer[CFG_Y_DPI] : pddev->dmprt.orig_x_dpi;
- }
-
- gs_free(pdev->memory->non_gc_memory, fname,256,1,"dviprt_lib_fname");
-
- return code;
-}
-
-static const char * gp_file_name_concat_string(const char *, unsigned);
-static gp_file *
-gdev_dmprt_dviprt_lib_fopen(const gs_memory_t *mem,const char *fnamebase,char *fname)
-{
- gp_file *fp = NULL;
- char *env;
-
- strcpy(fname,fnamebase);
- /* lib_fopen is no longer called like this. Use gp_fopen
- * instead. */
- /* fp = lib_fopen(fname); */
- gp = gp_fopen(mem, fname, gp_fmode_rb);
- if (fp == NULL)
- {
- env = getenv("TEXCFG");
- if (env) {
- strcpy(fname,env);
- strcat(fname, gp_file_name_concat_string(env,strlen(env)));
- strcat(fname,fnamebase);
- fp = gp_fopen(mem,fname,gp_fmode_rb);
- }
- }
- return fp;
-}
-
-/* Misc. */
-static int
-gdev_dmprt_error_no_dviprt_to_gs(int code)
-{
- switch (code) {
- case CFG_ERROR_MEMORY:
- return_error(gs_error_VMerror);
- case CFG_ERROR_FILE_OPEN:
- case CFG_ERROR_OUTPUT:
- return gs_errpr_ioerror;
- default:
- return -1;
- }
-}
-
-/* Answer the string to be used for combining a directory/device prefix */
-/* with a base file name. The prefix directory/device is examined to */
-/* determine if a separator is needed and may return an empty string */
-static const char *
-gp_file_name_concat_string(const char *prefix, unsigned plen)
-{
- if (plen > 0 && prefix[plen - 1] == '/')
- return "";
- return "/";
-}
diff --git a/contrib/lips4/gdevlips.h b/contrib/lips4/gdevlips.h
index 1e3dd72c..26819998 100644
--- a/contrib/lips4/gdevlips.h
+++ b/contrib/lips4/gdevlips.h
@@ -21,6 +21,9 @@
/*$Id: gdevlips.h,v 1.4 2002/10/12 23:24:34 tillkamppeter Exp $ */
/* Common header file for LIPS driver */
+#ifndef gdevlips_h_INCLUDED
+#define gdevlips_h_INCLUDED
+
#define LIPS_ESC 0x1b
#define LIPS_FF 0x0c
#define LIPS_CSI 0x9b /* LIPS_ESC "[" */
@@ -195,3 +198,5 @@ int lips_media_selection(int width, int height);
int lips_packbits_encode(byte * inBuff, byte * outBuff, int Length);
int lips_mode3format_encode(byte * inBuff, byte * outBuff, int Length);
int lips_rle_encode(byte * inBuff, byte * outBuff, int Length);
+
+#endif
diff --git a/contrib/lips4/gdevlprn.h b/contrib/lips4/gdevlprn.h
index 248911cf..6b9245a7 100644
--- a/contrib/lips4/gdevlprn.h
+++ b/contrib/lips4/gdevlprn.h
@@ -20,6 +20,9 @@
/*$Id: gdevlprn.h,v 1.4 2002/10/12 23:24:34 tillkamppeter Exp $ */
/* Library for Laser Printer Driver */
+#ifndef gdevlprn_h_INCLUDED
+#define gdevlprn_h_INCLUDED
+
/*
Main part of this library was taked from Hiroshi Narimatsu's
Ghostscript driver, epag-3.08.
@@ -143,3 +146,5 @@ dev_proc_get_params(lprn_get_params);
dev_proc_put_params(lprn_put_params);
int lprn_print_image(gx_device_printer * pdev, gp_file * fp);
+
+#endif
diff --git a/cups/gdevcups.c b/cups/gdevcups.c
index 8fa48860..aac6adae 100644
--- a/cups/gdevcups.c
+++ b/cups/gdevcups.c
@@ -96,7 +96,7 @@
/* This should go into gdevprn.h, or, better yet, gdevprn should
acquire an API for changing resolution. */
int gdev_prn_maybe_realloc_memory(gx_device_printer *pdev,
- gdev_prn_space_params *old_space,
+ gdev_space_params *old_space,
int old_width, int old_height,
bool old_page_uses_transparency);
@@ -1180,7 +1180,7 @@ done:
void
cups_get_space_params(const gx_device_printer *pdev,
/* I - Printer device */
- gdev_prn_space_params *space_params)
+ gdev_space_params *space_params)
/* O - Space parameters */
{
float cache_size; /* Size of tile cache in bytes */
@@ -3100,7 +3100,7 @@ cups_put_params(gx_device *pdev, /* I - Device info */
int margins_set; /* Were the margins set? */
int size_set; /* Was the size set? */
int color_set; /* Were the color attrs set? */
- gdev_prn_space_params sp_old; /* Space parameter data */
+ gdev_space_params sp_old; /* Space parameter data */
int width, /* New width of page */
height, /* New height of page */
width_old = 0, /* Previous width of page */
@@ -3117,8 +3117,10 @@ cups_put_params(gx_device *pdev, /* I - Device info */
ppd_size_t *best_size = NULL;
int size_matched = 0,
margins_matched = 0,
- imageable_area_matched = 0,
- name_requested_matched = 0;
+ imageable_area_matched = 0;
+#ifdef CUPS_DEBUG
+ int name_requested_matched = 0;
+#endif
float long_edge_mismatch, short_edge_mismatch;
gs_param_string icc_pro_dummy;
int old_cmps = cups->color_info.num_components;
@@ -3501,7 +3503,9 @@ cups_put_params(gx_device *pdev, /* I - Device info */
size_matched = 0;
margins_matched = 0;
imageable_area_matched = 0;
+#ifdef CUPS_DEBUG
name_requested_matched = 0;
+#endif
long_edge_mismatch =
fabs(cups->MediaSize[1] - size->length)/size->length +
@@ -3579,7 +3583,11 @@ cups_put_params(gx_device *pdev, /* I - Device info */
if (size_matched || imageable_area_matched) {
if (!strcasecmp(cups->pageSizeRequested, size->name))
+ {
+#ifdef CUPS_DEBUG
name_requested_matched = 1;
+#endif
+ }
else
score -= 1000;
}
@@ -3674,7 +3682,9 @@ cups_put_params(gx_device *pdev, /* I - Device info */
size_matched = 0;
margins_matched = 0;
imageable_area_matched = 0;
+#ifdef CUPS_DEBUG
name_requested_matched = 0;
+#endif
long_edge_mismatch =
fabs(cups->MediaSize[0] - size->length)/size->length +
@@ -3752,7 +3762,11 @@ cups_put_params(gx_device *pdev, /* I - Device info */
if (size_matched || imageable_area_matched) {
if (!strcasecmp(cups->pageSizeRequested, size->name))
+ {
+#ifdef CUPS_DEBUG
name_requested_matched = 1;
+#endif
+ }
else
score -= 1000;
}
diff --git a/cups/libs/cups/globals.c b/cups/libs/cups/globals.c
index c7440b61..4b878f0a 100644
--- a/cups/libs/cups/globals.c
+++ b/cups/libs/cups/globals.c
@@ -103,6 +103,14 @@ _cupsGlobals(void)
pthread_once(&cups_globals_key_once, cups_globals_init);
#endif /* HAVE_PTHREAD_H */
+#ifdef HAVE_PTHREAD_H
+#elif defined(WIN32)
+ if (!cups_global_mutex.m_init) {
+ InitializeCriticalSection(&cups_global_mutex.m_criticalSection);
+ cups_global_mutex.m_init = 1;
+ }
+#endif
+
/*
* See if we have allocated the data yet...
*/
diff --git a/demos/c/ReadMe.txt b/demos/c/ReadMe.txt
new file mode 100644
index 00000000..16c4d9de
--- /dev/null
+++ b/demos/c/ReadMe.txt
@@ -0,0 +1,31 @@
+ api_test
+ ~~~~~~~~
+
+This is a simple VS2019 project that loads the gpdl dll and drives
+it via the gsapi functions.
+
+The first test feeds a variety of input formats into gpdl to create
+output PDF files. Next, mixtures of different format files are fed
+into the same instance, hence generating output PDF files collated
+from different sources.
+
+Finally, the display device is driven in a range of different
+formats, testing different alignments, chunky/planar formats,
+spot colors, and full page/rectangle request modes.
+
+These tests take a while to run, and will result in the outputs
+being given as apitest*.{pnm,pam,png,pdf}.
+
+A good quick test of the results is to run:
+
+ md5sum apitest*
+
+and you should see that the bitmaps produced group nicely into
+having the same md5sum values according to their color depths.
+
+The same code should compile and run on unix, but has not been
+tested there. Some fiddling to load the DLL may be required.
+
+Building with GHOSTPDL=0 will allow the Ghostscript DLL to be
+tested. The VS2019 project will need to be edited to use the
+appropriate .lib file too.
diff --git a/demos/c/api_test.c b/demos/c/api_test.c
new file mode 100644
index 00000000..8cc61e78
--- /dev/null
+++ b/demos/c/api_test.c
@@ -0,0 +1,1157 @@
+#ifdef _WIN32
+/* Stop windows builds complaining about sprintf being insecure. */
+#define _CRT_SECURE_NO_WARNINGS
+/* Ensure the dll import works correctly. */
+#define _WINDOWS_
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <memory.h>
+#include <assert.h>
+#include <limits.h>
+#include <stdarg.h>
+
+#ifndef GHOSTPDL
+#define GHOSTPDL 1
+#endif
+
+#if GHOSTPDL
+#include "pcl/pl/plapi.h" /* GSAPI - gpdf version */
+#else
+#include "psi/iapi.h" /* GSAPI - ghostscript version */
+#endif
+#include "devices/gdevdsp.h"
+
+/* In order to get consistent printing of pointers, we can't just
+ * use %p, as this includes the 0x on some platforms, and not on
+ * others. We therefore use a bit of #ifdeffery to get us a
+ * consistent result. */
+#if defined(_WIN64) || defined(_WIN32)
+ #define FMT_PTR "I64x"
+ #define PTR_CAST (__int64)(size_t)(intptr_t)
+ #define FMT_Z "I64d"
+ #define Z_CAST (__int64)
+#else
+ #define FMT_PTR "llx"
+ #define PTR_CAST (long long)(size_t)(intptr_t)
+ #define FMT_Z "lld"
+ #define Z_CAST (long long)
+#endif
+
+#define INSTANCE_HANDLE ((void *)1234)
+#define SANITY_CHECK_VALUE 0x12345678
+
+#define SANITY_CHECK(ts) assert(ts->sanity_check_value == SANITY_CHECK_VALUE)
+
+/* All the state for a given test is contained within the following
+ * structure. */
+typedef struct {
+ /* This value should always be set to SANITY_CHECK_VALUE. It
+ * allows us to check we have a valid (or at least plausible)
+ * teststate_t pointer by checking its value. */
+ int sanity_check_value;
+
+ int use_clist;
+ int legacy;
+
+ int w;
+ int h;
+ int r;
+ int pr;
+ int bh;
+ int y;
+ int lines_requested;
+ int format;
+ int align;
+
+ int n;
+ void *mem;
+ FILE *file;
+ const char *fname;
+} teststate_t;
+
+/*--------------------------------------------------------------------*/
+/* First off, we have a set of functions that cope with dumping lines
+ * of rendered data to file. We use pnm formats for their simplicity. */
+
+/* This function opens the file, named appropriately, and writes the
+ * header. */
+static FILE *save_header(teststate_t *ts)
+{
+ char text[32];
+ const char *suffix;
+ const char *align_str;
+
+ /* Only output the header once. */
+ if (ts->file != NULL)
+ return ts->file;
+
+ switch (ts->n)
+ {
+ case 1:
+ suffix = "pgm";
+ break;
+ case 3:
+ suffix = "ppm";
+ break;
+ case 4:
+ default:
+ suffix = "pam";
+ break;
+ }
+
+ switch (ts->format & DISPLAY_ROW_ALIGN_MASK) {
+ default:
+ case DISPLAY_ROW_ALIGN_DEFAULT:
+ align_str = "";
+ break;
+ case DISPLAY_ROW_ALIGN_4:
+ align_str = "_4";
+ break;
+ case DISPLAY_ROW_ALIGN_8:
+ align_str = "_8";
+ break;
+ case DISPLAY_ROW_ALIGN_16:
+ align_str = "_16";
+ break;
+ case DISPLAY_ROW_ALIGN_32:
+ align_str = "_32";
+ break;
+ case DISPLAY_ROW_ALIGN_64:
+ align_str = "_64";
+ break;
+ }
+
+ sprintf(text, "%s%s%s%s.%s",
+ ts->fname,
+ ts->use_clist ? "_c" : "",
+ ts->legacy ? "_l" : "",
+ align_str,
+ suffix);
+ ts->file = fopen(text, "wb");
+ if (ts->file == NULL) {
+ fprintf(stderr, "Fatal error: couldn't open %s for writing.\n", text);
+ exit(1);
+ }
+
+ switch (ts->n)
+ {
+ case 1:
+ fprintf(ts->file,
+ "P5\n%d %d\n255\n",
+ ts->w, ts->h);
+ break;
+ case 3:
+ fprintf(ts->file,
+ "P6\n%d %d\n255\n",
+ ts->w, ts->h);
+ break;
+ case 4:
+ default:
+ fprintf(ts->file,
+ "P7\nWIDTH %d\nHEIGHT %d\nDEPTH %d\nMAXVAL 255\n"
+ "%s"
+ "ENDHDR\n",
+ ts->w, ts->h, ts->n, ts->n == 4 ? "TUPLTYPE CMYK\n" : "");
+ break;
+ }
+
+ /* If we're getting the lines in BOTTOMFIRST order, then pad out
+ * the file to the required length. We'll gradually backtrack
+ * through the file filling it in with real data as it arrives. */
+ if (ts->format && DISPLAY_BOTTOMFIRST) {
+ static const char blank[256] = { 0 };
+ int n = ts->w * ts->h * ts->n;
+ while (n > 0) {
+ int i = n;
+ if (i > sizeof(blank))
+ i = sizeof(blank);
+ fwrite(blank, 1, i, ts->file);
+ n -= i;
+ }
+ }
+
+ return ts->file;
+}
+
+/* Write out the next h lines from the buffer. */
+static void save_lines(teststate_t *ts, int h)
+{
+ int i, j, k;
+ const char *m = ts->mem;
+ int w = ts->w;
+ int n = ts->n;
+ int r = ts->r;
+ int pr = ts->pr;
+ int wn = w*n;
+ /* Make sure we've put a header on the file. */
+ FILE *file = save_header(ts);
+
+ /* If the data is being given in "little endian" format then
+ * reorder it as we write it out. This is required to cope with
+ * the fact that windows bitmaps prefer BGR over RGB.
+ *
+ * If we are getting data BOTTOMFIRST, then we will already be
+ * positioned at the end of the file. Backtrack through the file
+ * as we go so that the lines appear in a sane order.
+ */
+ if (ts->format & (DISPLAY_PLANAR | DISPLAY_PLANAR_INTERLEAVED)) {
+ /* Planar */
+ if (ts->format & DISPLAY_LITTLEENDIAN) {
+ for (i = 0; i < h; i++) {
+ if (ts->format & DISPLAY_BOTTOMFIRST)
+ fseek(file, -wn, SEEK_CUR);
+ for (j = 0; j < w; j++) {
+ for (k = n; k > 0;)
+ fputc(m[--k * pr], file);
+ m++;
+ }
+ m += r - w;
+ if (ts->format & DISPLAY_BOTTOMFIRST)
+ fseek(file, -wn, SEEK_CUR);
+ }
+ } else {
+ for (i = 0; i < h; i++) {
+ if (ts->format & DISPLAY_BOTTOMFIRST)
+ fseek(file, -wn, SEEK_CUR);
+ for (j = 0; j < w; j++) {
+ for (k = 0; k < n; k++)
+ fputc(m[k * pr], file);
+ m++;
+ }
+ m += r - w;
+ if (ts->format & DISPLAY_BOTTOMFIRST)
+ fseek(file, -wn, SEEK_CUR);
+ }
+ }
+ } else {
+ /* Chunky */
+ if (ts->format & DISPLAY_LITTLEENDIAN) {
+ for (i = 0; i < h; i++) {
+ if (ts->format & DISPLAY_BOTTOMFIRST)
+ fseek(file, -wn, SEEK_CUR);
+ for (j = 0; j < w; j++) {
+ for (k = n; k > 0;)
+ fputc(m[--k], file);
+ m += n;
+ }
+ m += r - wn;
+ if (ts->format & DISPLAY_BOTTOMFIRST)
+ fseek(file, -wn, SEEK_CUR);
+ }
+ } else {
+ for (i = 0; i < h; i++) {
+ if (ts->format & DISPLAY_BOTTOMFIRST)
+ fseek(file, -wn, SEEK_CUR);
+ fwrite(m, 1, wn, file);
+ m += r;
+ if (ts->format & DISPLAY_BOTTOMFIRST)
+ fseek(file, -wn, SEEK_CUR);
+ }
+ }
+ }
+}
+
+/* Finish writing out. */
+static void save_end(teststate_t *ts)
+{
+ fclose(ts->file);
+ ts->file = NULL;
+}
+
+/*--------------------------------------------------------------------*/
+/* Next we have the implementations of the callback functions. */
+
+static int
+open(void *handle, void *device)
+{
+ teststate_t *ts = (teststate_t *)handle;
+
+ SANITY_CHECK(ts);
+ printf("open\n");
+
+ return 0;
+}
+
+static int
+preclose(void *handle, void *device)
+{
+ teststate_t *ts = (teststate_t *)handle;
+
+ SANITY_CHECK(ts);
+ printf("preclose\n");
+
+ return 0;
+}
+
+static int
+close(void *handle, void *device)
+{
+ teststate_t *ts = (teststate_t *)handle;
+
+ SANITY_CHECK(ts);
+ printf("close\n");
+
+ return 0;
+}
+
+static int
+presize(void *handle, void *device,
+ int width, int height, int raster, unsigned int format)
+{
+ teststate_t *ts = (teststate_t *)handle;
+
+ SANITY_CHECK(ts);
+ printf("presize: w=%d h=%d r=%d f=%x\n",
+ width, height, raster, format);
+
+ ts->w = width;
+ ts->h = height;
+ ts->r = raster;
+ ts->bh = 0;
+ ts->y = 0;
+ ts->format = format;
+
+ if (ts->format & DISPLAY_COLORS_GRAY)
+ ts->n = 1;
+ if (ts->format & DISPLAY_COLORS_RGB)
+ ts->n = 3;
+ if (ts->format & DISPLAY_COLORS_CMYK)
+ ts->n = 4;
+ if (ts->format & DISPLAY_COLORS_SEPARATION)
+ ts->n = 0;
+ if ((ts->format & DISPLAY_DEPTH_MASK) != DISPLAY_DEPTH_8)
+ return -1; /* Haven't written code for that! */
+
+ return 0;
+}
+
+static int
+size(void *handle, void *device, int width, int height,
+ int raster, unsigned int format, unsigned char *pimage)
+{
+ teststate_t *ts = (teststate_t *)handle;
+
+ SANITY_CHECK(ts);
+ printf("size: w=%d h=%d r=%d f=%x m=%p\n",
+ width, height, raster, format, pimage);
+ ts->w = width;
+ ts->h = height;
+ ts->r = raster;
+ ts->format = format;
+ ts->mem = pimage;
+
+ if (ts->format & DISPLAY_PLANAR)
+ ts->pr = ts->r * height;
+ /* When running with spots, n is not known yet. */
+ if (ts->n != 0 && ts->format & DISPLAY_PLANAR_INTERLEAVED)
+ ts->pr = ts->r / ts->n;
+
+ return 0;
+}
+
+static int
+sync(void *handle, void *device)
+{
+ teststate_t *ts = (teststate_t *)handle;
+
+ SANITY_CHECK(ts);
+ printf("sync\n");
+
+ return 0;
+}
+
+static int
+page(void *handle, void *device, int copies, int flush)
+{
+ teststate_t *ts = (teststate_t *)handle;
+
+ SANITY_CHECK(ts);
+ printf("page: c=%d f=%d\n", copies, flush);
+
+ save_lines(ts, ts->h);
+ save_end(ts);
+
+ return 0;
+}
+
+static int
+update(void *handle, void *device, int x, int y, int w, int h)
+{
+ teststate_t *ts = (teststate_t *)handle;
+
+ SANITY_CHECK(ts);
+ /* This print statement just makes too much noise :) */
+ /* printf("update: x=%d y=%d w=%d h=%d\n", x, y, w, h); */
+
+ return 0;
+}
+
+void *
+aligned_malloc(size_t size, int alignment)
+{
+ char *ret = malloc(size + alignment*2);
+ int boost;
+
+ if (ret == NULL)
+ return ret;
+
+ boost = alignment - (((intptr_t)ret) & (alignment-1));
+ memset(ret, boost, boost);
+
+ return ret + boost;
+}
+
+void aligned_free(void *ptr)
+{
+ char *p = ptr;
+
+ if (ptr == NULL)
+ return;
+
+ p -= p[-1];
+ free(p);
+}
+
+static void *
+memalloc(void *handle, void *device, size_t size)
+{
+ void *ret = NULL;
+ teststate_t *ts = (teststate_t *)handle;
+
+ SANITY_CHECK(ts);
+
+ if (ts->use_clist) {
+ printf("memalloc: asked for %"FMT_Z" but requesting clist\n", Z_CAST size);
+ return 0;
+ }
+
+ ret = aligned_malloc(size, 64);
+ printf("memalloc: %"FMT_Z" -> %p\n", Z_CAST size, ret);
+
+ return ret;
+}
+
+static int
+memfree(void *handle, void *device, void *mem)
+{
+ teststate_t *ts = (teststate_t *)handle;
+
+ SANITY_CHECK(ts);
+ printf("memfree: %p\n", mem);
+ aligned_free(mem);
+
+ return 0;
+}
+
+static int
+separation(void *handle, void *device,
+ int component, const char *component_name,
+ unsigned short c, unsigned short m,
+ unsigned short y, unsigned short k)
+{
+ teststate_t *ts = (teststate_t *)handle;
+
+ SANITY_CHECK(ts);
+ printf("separation: %d %s (%x,%x,%x,%x)\n",
+ component, component_name ? component_name : "<NULL>",
+ c, m, y, k);
+ ts->n++;
+
+ /* Update the plane_raster as n has changed. */
+ if (ts->format & DISPLAY_PLANAR_INTERLEAVED)
+ ts->pr = ts->r / ts->n;
+
+ return 0;
+}
+
+static int
+adjust_band_height(void *handle, void *device, int bandheight)
+{
+ teststate_t *ts = (teststate_t *)handle;
+
+ SANITY_CHECK(ts);
+ printf("adjust_band_height: %d - >", bandheight);
+
+ if (bandheight > ts->h / 4)
+ bandheight = ts->h / 4;
+
+ printf("%d\n", bandheight);
+
+ ts->bh = bandheight;
+
+ return bandheight;
+}
+
+static int
+rectangle_request(void *handle, void *device,
+ void **memory, int *ox, int *oy,
+ int *raster, int *plane_raster,
+ int *x, int *y, int *w, int *h)
+{
+ teststate_t *ts = (teststate_t *)handle;
+ size_t size;
+
+ SANITY_CHECK(ts);
+ printf("rectangle_request:");
+
+ if (ts->mem) {
+ /* Rectangle returned */
+ save_lines(ts, ts->lines_requested);
+ aligned_free(ts->mem);
+ ts->mem = NULL;
+ ts->y += ts->lines_requested;
+ ts->lines_requested = 0;
+ }
+
+ if (ts->y >= ts->h)
+ {
+ /* All banded out */
+ printf("Finished!\n");
+ *ox = 0;
+ *oy = 0;
+ *raster = 0;
+ *plane_raster = 0;
+ *x = 0;
+ *y = 0;
+ *w = 0;
+ *h = 0;
+ *memory = NULL;
+ save_end(ts);
+ return 0;
+ }
+ *ox = 0;
+ *oy = ts->y;
+ *x = 0;
+ *y = ts->y;
+ *w = ts->w;
+ *h = ts->bh;
+ if (ts->y + ts->bh > ts->h)
+ *h = ts->h - ts->y;
+ ts->lines_requested = *h;
+ switch (ts->format & (DISPLAY_PLANAR | DISPLAY_PLANAR_INTERLEAVED)) {
+ case DISPLAY_CHUNKY:
+ ts->r = (ts->w * ts->n + ts->align-1) & ~(ts->align-1);
+ ts->pr = 0;
+ size = ts->r * *h;
+ break;
+ case DISPLAY_PLANAR:
+ ts->r = (ts->w + ts->align-1) & ~(ts->align-1);
+ ts->pr = ts->r * *h;
+ size = ts->pr * ts->n;
+ break;
+ case DISPLAY_PLANAR_INTERLEAVED:
+ ts->pr = (ts->w + ts->align-1) & ~(ts->align-1);
+ ts->r = ts->pr * ts->n;
+ size = ts->r * *h;
+ break;
+ }
+ *raster = ts->r;
+ *plane_raster = ts->pr;
+ ts->mem = aligned_malloc(size, 64);
+ *memory = ts->mem;
+
+ printf("x=%d y=%d w=%d h=%d mem=%p\n", *x, *y, *w, *h, *memory);
+ if (ts->mem == NULL)
+ return -1;
+
+ return 0;
+}
+
+/*--------------------------------------------------------------------*/
+/* All those callback functions live in a display_callback structure
+ * that we return to the main code. This can be done using the modern
+ * "callout" method, or by using the legacy (deprecated) direct
+ * registration method. We strongly prefer the callout method as it
+ * avoids the need to pass a pointer using -sDisplayHandle. */
+static display_callback callbacks =
+{
+ sizeof(callbacks),
+ DISPLAY_VERSION_MAJOR,
+ DISPLAY_VERSION_MINOR,
+ open,
+ preclose,
+ close,
+ presize,
+ size,
+ sync,
+ page,
+ update,
+ memalloc,
+ memfree,
+ separation,
+ adjust_band_height,
+ rectangle_request
+};
+
+/*--------------------------------------------------------------------*/
+/* This is our callout handler. It handles callouts from devices within
+ * Ghostscript. It only handles a single callout, from the display
+ * device, to return the callback handler and callback handle. */
+static int
+callout(void *instance,
+ void *callout_handle,
+ const char *device_name,
+ int id,
+ int size,
+ void *data)
+{
+ teststate_t *ts = (teststate_t *)callout_handle;
+
+ SANITY_CHECK(ts);
+
+ /* We are only interested in callouts from the display device. */
+ if (strcmp(device_name, "display"))
+ return -1;
+
+ if (id == DISPLAY_CALLOUT_GET_CALLBACK)
+ {
+ /* Fill in the supplied block with the details of our callback
+ * handler, and the handle to use. In this instance, the handle
+ * is the pointer to our test structure. */
+ gs_display_get_callback_t *cb = (gs_display_get_callback_t *)data;
+ cb->callback = &callbacks;
+ cb->caller_handle = ts;
+ return 0;
+ }
+ return -1;
+}
+
+/*--------------------------------------------------------------------*/
+/* This is the function that actually runs a test. */
+static int do_ddtest(const char *title, int format,
+ int use_clist, int legacy,
+ const char *fname)
+{
+ int code;
+ void *instance = NULL;
+ char *clist_str = use_clist ? " (clist)" : "";
+ char *legacy_str = legacy ? " (legacy)" : "";
+ char *align_str = "";
+ char format_arg[64];
+ char handle_arg[64];
+
+ /* Make the teststate a blank slate for us to work with. */
+ teststate_t teststate = { SANITY_CHECK_VALUE };
+
+ /* Construct the argc/argv to pass to ghostscript. */
+ int argc = 0;
+ char *argv[10];
+
+ argv[argc++] = "gs";
+ argv[argc++] = "-sDEVICE=display";
+ argv[argc++] = "-dNOPAUSE";
+ argv[argc++] = format_arg;
+ if (legacy)
+ argv[argc++] = handle_arg;
+ if (format & DISPLAY_COLORS_SEPARATION)
+ argv[argc++] = "../../examples/spots.ps";
+ else
+ argv[argc++] = "../../examples/tiger.eps";
+
+ sprintf(format_arg, "-dDisplayFormat=16#%x", format);
+ sprintf(handle_arg, "-sDisplayHandle=16#%" FMT_PTR, PTR_CAST &teststate);
+
+ /* Setup the details to control the test. */
+ teststate.use_clist = use_clist;
+ teststate.legacy = legacy;
+ teststate.fname = fname;
+
+ switch (format & DISPLAY_ROW_ALIGN_MASK) {
+ default:
+ case DISPLAY_ROW_ALIGN_DEFAULT:
+ align_str = " (default alignment)";
+ teststate.align = 0;
+ break;
+ case DISPLAY_ROW_ALIGN_4:
+ align_str = " (align % 4)";
+ teststate.align = 4;
+ break;
+ case DISPLAY_ROW_ALIGN_8:
+ align_str = " (align % 8)";
+ teststate.align = 8;
+ break;
+ case DISPLAY_ROW_ALIGN_16:
+ align_str = " (align % 16)";
+ teststate.align = 16;
+ break;
+ case DISPLAY_ROW_ALIGN_32:
+ align_str = " (align % 32)";
+ teststate.align = 32;
+ break;
+ case DISPLAY_ROW_ALIGN_64:
+ align_str = " (align % 64)";
+ teststate.align = 64;
+ break;
+ }
+ /* Special case: alignments are always at least pointer sized. */
+ if (teststate.align <= sizeof(void *))
+ teststate.align = sizeof(void *);
+
+ /* Print the test title. */
+ printf("%s%s%s%s\n", title, clist_str, legacy_str, align_str);
+
+ /* Create a GS instance. */
+ code = gsapi_new_instance(&instance, INSTANCE_HANDLE);
+ if (code < 0) {
+ printf("Error %d in gsapi_new_instance\n", code);
+ goto failearly;
+ }
+
+ if (legacy) {
+ /* Directly pass in the callback structure. This relies on the
+ * handle being passed using -sDisplayHandle above. */
+ code = gsapi_set_display_callback(instance, &callbacks);
+ if (code < 0) {
+ printf("Error %d in gsapi_set_display_callback\n", code);
+ goto fail;
+ }
+ } else {
+ /* Register our callout handler. This will pass the display
+ * device the callback structure and handle when requested. */
+ code = gsapi_register_callout(instance, callout, &teststate);
+ if (code < 0) {
+ printf("Error %d in gsapi_register_callout\n", code);
+ goto fail;
+ }
+ }
+
+ /* Run our test. */
+ code = gsapi_init_with_args(instance, argc, argv);
+ if ((format & DISPLAY_ROW_ALIGN_MASK) == DISPLAY_ROW_ALIGN_4 &&
+ sizeof(void *) > 4) {
+ if (code == -100) {
+ printf("Got expected failure!\n");
+ code = 0;
+ goto fail;
+ } else if (code == 0) {
+ printf("Failed to get expected failure!\n");
+ code = -1;
+ goto fail;
+ }
+ }
+ if (code < 0) {
+ printf("Error %d in gsapi_init_with_args\n", code);
+ goto fail;
+ }
+
+ /* Close the interpreter down (important, or we will leak!) */
+ code = gsapi_exit(instance);
+ if (code < 0) {
+ printf("Error %d in gsapi_exit\n", code);
+ goto fail;
+ }
+
+fail:
+ /* Delete the gs instance. */
+ gsapi_delete_instance(instance);
+
+failearly:
+ /* All done! */
+ printf("%s%s%s%s %s\n", title, clist_str, legacy_str, align_str,
+ (code < 0) ? "failed" : "complete");
+
+ return code;
+}
+
+static int displaydev_test(const char *title, int format, const char *fname)
+{
+ int use_clist, legacy, align, code;
+
+ code = 0;
+ for (use_clist = 0; use_clist <= 1; use_clist++) {
+ for (legacy = 0; legacy <= 1; legacy++) {
+ for (align = 2; align <= 7; align++) {
+ int form = format;
+ if (align != 2) {
+ form |= align<<20;
+ }
+ code = do_ddtest(title, form, use_clist, legacy, fname);
+ if (code < 0)
+ return code;
+ }
+ }
+ }
+ return code;
+}
+
+static int
+runstring_test(const char *dev, char *outfile, ...)
+{
+ int code;
+ void *instance = NULL;
+ char devtext[64];
+ va_list args;
+ char *infile;
+ int error_code;
+
+ /* Construct the argc/argv to pass to ghostscript. */
+ int argc = 0;
+ char *argv[10];
+
+ sprintf(devtext, "-sDEVICE=%s", dev);
+ argv[argc++] = "gpdl";
+ argv[argc++] = devtext;
+ argv[argc++] = "-o";
+ argv[argc++] = outfile;
+
+ /* Create a GS instance. */
+ code = gsapi_new_instance(&instance, INSTANCE_HANDLE);
+ if (code < 0) {
+ printf("Error %d in gsapi_new_instance\n", code);
+ goto failearly;
+ }
+
+ /* Run our test. */
+ code = gsapi_init_with_args(instance, argc, argv);
+ if (code < 0) {
+ printf("Error %d in gsapi_init_with_args\n", code);
+ goto fail;
+ }
+
+ va_start(args, outfile);
+ while ((infile = va_arg(args, char *)) != NULL) {
+ printf("Feeding %s via runstring\n", infile);
+ code = gsapi_run_string_begin(instance, 0, &error_code);
+ if (code < 0) {
+ printf("Error %d in gsapi_run_string_begin\n", code);
+ goto fail;
+ }
+
+ {
+ FILE *file = fopen(infile, "rb");
+ char block[1024];
+ unsigned int len;
+ if (file == NULL) {
+ printf("Error: Failed to open %s for reading\n", infile);
+ code = -1;
+ goto fail;
+ }
+ while (!feof(file)) {
+ len = (unsigned int)fread(block, 1, 1024, file);
+
+ code = gsapi_run_string_continue(instance, block, len,
+ 0, &error_code);
+ if (code < 0) {
+ printf("Error %d in gsapi_run_string_continue\n", code);
+ goto fail;
+ }
+ }
+ }
+
+ code = gsapi_run_string_end(instance, 0, &error_code);
+ if (code < 0) {
+ printf("Error %d in gsapi_run_string_end\n", code);
+ goto fail;
+ }
+ }
+ va_end(args);
+
+ /* Close the interpreter down (important, or we will leak!) */
+ code = gsapi_exit(instance);
+ if (code < 0) {
+ printf("Error %d in gsapi_exit\n", code);
+ goto fail;
+ }
+
+fail:
+ /* Delete the gs instance. */
+ gsapi_delete_instance(instance);
+
+failearly:
+
+ return code;
+}
+
+char *types[] = {
+ "null",
+ "bool",
+ "int",
+ "float",
+ "name",
+ "string",
+ "long",
+ "i64",
+ "size_t",
+ "parsed"
+};
+
+static int
+list_params(void *instance)
+{
+ void *iter = NULL;
+ char *key;
+ gs_set_param_type type;
+ char buffer[1024];
+ int code;
+
+ while ((code = gsapi_enumerate_params(instance, &iter, &key, &type)) == 0) {
+ printf("Key=%s, type=%s: ", key, type >= 0 && type <= 9 ? types[type] : "invalid");
+ code = gsapi_get_param(instance, key, NULL, gs_spt_parsed);
+ if (code < 0)
+ break;
+ if (code > sizeof(buffer)) {
+ printf("<overly long value>\n");
+ continue;
+ }
+ code = gsapi_get_param(instance, key, buffer, gs_spt_parsed);
+ if (code < 0)
+ break;
+ printf("%s\n", buffer);
+ }
+ return code;
+}
+
+static int
+param_test(const char *dev, char *outfile)
+{
+ int code, len;
+ void *instance = NULL;
+ char devtext[64];
+ char buffer[4096];
+
+ /* Construct the argc/argv to pass to ghostscript. */
+ int argc = 0;
+ char *argv[10];
+ int i;
+
+ sprintf(devtext, "-sDEVICE=%s", dev);
+ argv[argc++] = "gpdl";
+ argv[argc++] = devtext;
+ argv[argc++] = "-o";
+ argv[argc++] = outfile;
+
+ /* Create a GS instance. */
+ code = gsapi_new_instance(&instance, INSTANCE_HANDLE);
+ if (code < 0) {
+ printf("Error %d in gsapi_new_instance\n", code);
+ goto failearly;
+ }
+
+ code = gsapi_set_param(instance, "Foo", "0", gs_spt_parsed);
+ if (code < 0) {
+ printf("Got error from early param setting.\n");
+ goto fail;
+ }
+
+ /* List the params: */
+ code = list_params(instance);
+ if (code < 0) {
+ printf("Error %d while listing params\n", code);
+ goto fail;
+ }
+
+ /* Run our test. */
+ code = gsapi_init_with_args(instance, argc, argv);
+ if (code < 0) {
+ printf("Error %d in gsapi_init_with_args\n", code);
+ goto fail;
+ }
+
+ code = gsapi_set_param(instance, "Bar", "1", gs_spt_parsed | gs_spt_more_to_come);
+ if (code < 0) {
+ printf("Error %d in gsapi_set_param\n", code);
+ goto fail;
+ }
+
+ code = gsapi_set_param(instance, "Baz", "<</Test[0 1 2.3]/Charm(>>)/Vixen<01234567>/Scented/Ephemeral>>", gs_spt_parsed);
+ if (code < 0) {
+ printf("Error %d in gsapi_set_param\n", code);
+ goto fail;
+ }
+
+ /* This should fail, as /Baz is not an expected param. */
+ code = gsapi_get_param(instance, "Baz", buffer, gs_spt_parsed);
+ if (code == -21) {
+ printf("Got expected error gsapi_get_param\n");
+ } else {
+ printf("Error %d in gsapi_get_param\n", code);
+ goto fail;
+ }
+
+ i = 32;
+ code = gsapi_set_param(instance, "foo", (void *)&i, gs_spt_int);
+ if (code < 0) {
+ printf("Error %d in gsapi_set_param\n", code);
+ goto fail;
+ }
+
+ code = gsapi_get_param(instance, "foo", (void *)&i, gs_spt_int);
+ if (code == -21)
+ printf("Got expected error gsapi_get_param\n");
+ else if (code < 0) {
+ printf("Error %d in gsapi_set_param\n", code);
+ goto fail;
+ }
+
+ code = gsapi_set_param(instance, "GrayImageDict", "<</QFactor 0.1 /Blend 0/HSamples [1 1 1 1] /VSamples [ 1 1 1 1 ] /Foo[/A/B/C/D/E] /Bar (123) /Baz <0123> /Sp#20ce /D#7fl>>", gs_spt_parsed);
+ if (code < 0) {
+ printf("Error %d in gsapi_set_param\n", code);
+ goto fail;
+ }
+
+ code = gsapi_get_param(instance, "GrayImageDict", NULL, gs_spt_parsed);
+ if (code < 0) {
+ printf("Error %d in gsapi_get_param\n", code);
+ goto fail;
+ }
+ len = code;
+ buffer[len-1] = 98;
+ buffer[len] = 99;
+ code = gsapi_get_param(instance, "GrayImageDict", buffer, gs_spt_parsed);
+ if (code < 0) {
+ printf("Error %d in gsapi_get_param\n", code);
+ goto fail;
+ }
+ if (buffer[len] != 99 || buffer[len-1] != 0) {
+ printf("Bad buffer return");
+ goto fail;
+ }
+ if (strcmp(buffer, "<</Sp#20ce/D#7Fl/Baz<0123>/Bar(123)/Foo[/A/B/C/D/E]/VSamples[1 1 1 1]/HSamples[1 1 1 1]/Blend 0/QFactor 0.1>>")) {
+ printf("Bad value return");
+ goto fail;
+ }
+
+ /* List the params: */
+ code = list_params(instance);
+ if (code < 0) {
+ printf("Error %d in while listing params\n", code);
+ goto fail;
+ }
+
+ /* Close the interpreter down (important, or we will leak!) */
+ code = gsapi_exit(instance);
+ if (code < 0) {
+ printf("Error %d in gsapi_exit\n", code);
+ goto fail;
+ }
+
+fail:
+ /* Delete the gs instance. */
+ gsapi_delete_instance(instance);
+
+failearly:
+
+ return code;
+}
+
+static int
+res_change_test(const char *dev, char *outfile)
+{
+ int code, dummy;
+ void *instance = NULL;
+ char devtext[64];
+
+ /* Construct the argc/argv to pass to ghostscript. */
+ int argc = 0;
+ char *argv[10];
+
+ sprintf(devtext, "-sDEVICE=%s", dev);
+ argv[argc++] = "gpdl";
+ argv[argc++] = devtext;
+ argv[argc++] = "-o";
+ argv[argc++] = outfile;
+ argv[argc++] = "-r100";
+ argv[argc++] = "../../examples/tiger.eps";
+
+ /* Create a GS instance. */
+ code = gsapi_new_instance(&instance, INSTANCE_HANDLE);
+ if (code < 0) {
+ printf("Error %d in gsapi_new_instance\n", code);
+ goto failearly;
+ }
+
+ /* Run our test. */
+ code = gsapi_init_with_args(instance, argc, argv);
+ if (code < 0) {
+ printf("Error %d in gsapi_init_with_args\n", code);
+ goto fail;
+ }
+
+ code = gsapi_set_param(instance, "HWResolution", "[200 200]", gs_spt_parsed);
+ if (code < 0) {
+ printf("Error %d in gsapi_set_param\n", code);
+ goto fail;
+ }
+
+ code = gsapi_run_file(instance, "../../examples/tiger.eps", 0, &dummy);
+ if (code < 0) {
+ printf("Error %d in gsapi_run_file\n", code);
+ goto fail;
+ }
+
+ /* Close the interpreter down (important, or we will leak!) */
+ code = gsapi_exit(instance);
+ if (code < 0) {
+ printf("Error %d in gsapi_exit\n", code);
+ goto fail;
+ }
+
+fail:
+ /* Delete the gs instance. */
+ gsapi_delete_instance(instance);
+
+failearly:
+
+ return code;
+}
+
+int main(int argc, char *argv[])
+{
+ int code = 0;
+
+#define RUNTEST(A)\
+ if (code >= 0) code = (A)
+
+ RUNTEST(param_test("pdfwrite", "apitest20.pdf"));
+ RUNTEST(res_change_test("ppmraw", "apitest21_%d.ppm"));
+
+#define RS(A)\
+ RUNTEST(runstring_test A )
+
+ RS(("pdfwrite", "apitest12.pdf", "../../examples/tiger.eps", NULL));
+ RS(("pdfwrite", "apitest13.pdf", "../../examples/golfer.eps", NULL));
+ RS(("pdfwrite", "apitest14.pdf", "../../examples/tiger.eps",
+ "../../examples/golfer.eps",
+ NULL));
+#if GHOSTPDL
+ RS(("pdfwrite", "apitest15.pdf", "../../pcl/examples/tiger.px3", NULL));
+ RS(("pdfwrite", "apitest16.pdf", "../../xps/tools/tiger.xps", NULL));
+ RS(("pdfwrite", "apitest17.pdf", "../../pcl/examples/tiger.px3",
+ "../../examples/golfer.eps",
+ "../../xps/tools/tiger.xps",
+ NULL));
+ RS(("pdfwrite", "apitest18.pdf", "../../zlib/zlib.3.pdf", NULL));
+ RS(("pdfwrite", "apitest19.pdf", "../../pcl/examples/tiger.px3",
+ "../../examples/tiger.eps",
+ "../../examples/golfer.eps",
+ "../../zlib/zlib.3.pdf",
+ "../../xps/tools/tiger.xps",
+ NULL));
+#endif
+
+#define DD(STR, FMT, FILE)\
+ RUNTEST(displaydev_test(STR, FMT, FILE))
+
+ /* Run a variety of tests for the display device. */
+ DD("Chunky Windows Gray", 0x030802, "apitest0");
+ DD("Chunky Windows RGB", 0x030804, "apitest1");
+ /* Display device does no support "little endian" CMYK */
+ DD("Chunky Windows CMYK", 0x020808, "apitest2");
+
+ DD("Planar Windows Gray", 0x830802, "apitest3");
+ DD("Planar Windows RGB", 0x830804, "apitest4");
+ DD("Planar Windows CMYK", 0x820808, "apitest5");
+
+ DD("Planar Interleaved Windows Gray", 0x1030802, "apitest6");
+ DD("Planar Interleaved Windows RGB", 0x1030804, "apitest7");
+ DD("Planar Interleaved Windows CMYK", 0x1020808, "apitest8");
+
+ DD("Chunky Spots", 0x0A0800, "apitest9");
+ DD("Planar Spots", 0x8A0800, "apitest10");
+ DD("Planar Interleaved Spots", 0x10A0800, "apitest11");
+
+ return 0;
+}
diff --git a/demos/c/api_test.vcxproj b/demos/c/api_test.vcxproj
new file mode 100644
index 00000000..32d2a174
--- /dev/null
+++ b/demos/c/api_test.vcxproj
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Memento|Win32">
+ <Configuration>Memento</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Memento|x64">
+ <Configuration>Memento</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <VCProjectVersion>16.0</VCProjectVersion>
+ <Keyword>Win32Proj</Keyword>
+ <ProjectGuid>{113ad66f-3533-47e5-8aa8-973d804443a0}</ProjectGuid>
+ <RootNamespace>apitest</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v142</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v142</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>$(ProjectDir)..\..\debugbin\</OutDir>
+ <TargetName>$(ProjectName)</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>$(ProjectDir)..\..\membin\</OutDir>
+ <TargetName>$(ProjectName)</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(ProjectDir)..\..\bin\</OutDir>
+ <TargetName>$(ProjectName)</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ <TargetName>$(ProjectName)64</TargetName>
+ <OutDir>$(ProjectDir)..\..\debugbin\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>$(ProjectDir)..\..\membin\</OutDir>
+ <TargetName>$(ProjectName)64</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(ProjectDir)..\..\bin\</OutDir>
+ <TargetName>$(ProjectName)64</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <AdditionalIncludeDirectories>..\..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>gpdldll32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\..\debugbin</AdditionalLibraryDirectories>
+ </Link>
+ <PostBuildEvent>
+ <Command>
+ </Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>MEMENTO;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <AdditionalIncludeDirectories>..\..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>gpdldll32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\..\membin</AdditionalLibraryDirectories>
+ </Link>
+ <PostBuildEvent>
+ <Command>
+ </Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <AdditionalIncludeDirectories>..\..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>gpdldll32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\..\bin</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <AdditionalIncludeDirectories>..\..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>gpdldll64.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\..\debugbin</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>MEMENTO;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <AdditionalIncludeDirectories>..\..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>gpdldll64.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\..\membin</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalLibraryDirectories>..\..\bin</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="api_test.c" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/demos/c/api_test.vcxproj.filters b/demos/c/api_test.vcxproj.filters
new file mode 100644
index 00000000..359a1a0a
--- /dev/null
+++ b/demos/c/api_test.vcxproj.filters
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="api_test.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/demos/csharp/README.txt b/demos/csharp/README.txt
new file mode 100644
index 00000000..1665c7cd
--- /dev/null
+++ b/demos/csharp/README.txt
@@ -0,0 +1,32 @@
+The following projects show the use of the Ghostscript API
+in a C# environment. A WPF C# Windows viewer application is
+contained in the windows folder. A MONO C# Gtk viewer
+application is contained in the Linux folder.
+
+The applications share the same API file to Ghostscript or GhostPDL
+which is in api/ghostapi.cs. In this file, lib_dll is set to the appropriate
+dll or so file that is create by the the compilation of Ghostscript. Note
+that to build libgpdl.so on Linux you use "make so". On windows gpdldll64.dll
+and variants are built depending upon the VS solution configurations.
+
+The applications each have another level of interface which is api/ghostnet.cs
+for the Windows application and api/ghostmono.cs for the Linux application.
+These files assemble the commands that are to be executed, creates the working
+threads that GhostPDL/Ghostscript will run on as well as handling the call backs
+from GhostPDL/Ghostscript. The Linux and Windows applications use different
+threading methods.
+
+The Windows application includes the ability to print the document via
+the Windows XPS print pipeline. The application will call into GhostPDL/Ghostscript
+with the xpswrite device to create the XPS content.
+
+Both applications will offer the user the chance to distill any non-PDF files
+that are opened with the application.
+
+Both applications should at some point be slightly reworked to provide improved
+performance on rendering only the visible pages when PDF is the document source.
+PCL and PS file formats are streamed and so cannot work in this manner without
+a severe performance penalty.
+
+
+
diff --git a/demos/csharp/api/ghostapi.cs b/demos/csharp/api/ghostapi.cs
new file mode 100644
index 00000000..b65aac9e
--- /dev/null
+++ b/demos/csharp/api/ghostapi.cs
@@ -0,0 +1,199 @@
+using System; /* IntPtr */
+using System.Runtime.InteropServices; /* DLLImport */
+
+namespace GhostAPI
+{
+ public struct gsapi_revision_t
+ {
+ public IntPtr product;
+ public IntPtr copyright;
+ public int revision;
+ public int revisiondate;
+ }
+
+ public enum gs_set_param_type
+ {
+ gs_spt_invalid = -1,
+ gs_spt_null = 0, /* void * is NULL */
+ gs_spt_bool = 1, /* void * is NULL (false) or non-NULL (true) */
+ gs_spt_int = 2, /* void * is a pointer to an int */
+ gs_spt_float = 3, /* void * is a float * */
+ gs_spt_name = 4, /* void * is a char * */
+ gs_spt_string = 5, /* void * is a char * */
+ gs_spt_long = 6, /* void * is a long * */
+ gs_spt_i64 = 7, /* void * is a int64_t * */
+ gs_spt_size_t = 8 /* void * is a size_t * */
+ };
+
+ public enum gsEncoding
+ {
+ GS_ARG_ENCODING_LOCAL = 0,
+ GS_ARG_ENCODING_UTF8 = 1,
+ GS_ARG_ENCODING_UTF16LE = 2
+ };
+
+ static class gsConstants
+ {
+ public const int E_QUIT = -101;
+ public const int GS_READ_BUFFER = 32768;
+ public const int DISPLAY_UNUSED_LAST = (1 << 7);
+ public const int DISPLAY_COLORS_RGB = (1 << 2);
+ public const int DISPLAY_DEPTH_8 = (1 << 11);
+ public const int DISPLAY_LITTLEENDIAN = (1 << 16);
+ public const int DISPLAY_BIGENDIAN = (0 << 16);
+ }
+
+ class ghostapi
+ {
+#if MONO
+ private const string lib_dll = "libgpdl.so";
+#else
+#if WIN64
+#if !GHOSTPDL
+ private const string lib_dll = "gsdll64.dll";
+#else
+ private const string lib_dll = "gpdldll64.dll";
+#endif
+#else
+#if !GHOSTPDL
+ private const string lib_dll = "gsdll32.dll";
+#else
+ private const string lib_dll = "gpdldll32.dll";
+#endif
+#endif
+#endif
+ /* Callback proto for stdio */
+ public delegate int gsStdIOHandler(IntPtr caller_handle, IntPtr buffer, int len);
+
+ /* Callback proto for poll function */
+ public delegate int gsPollHandler(IntPtr caller_handle);
+
+ /* Callout proto */
+ public delegate int gsCallOut(IntPtr callout_handle, IntPtr device_name, int id, int size, IntPtr data);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_revision", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_revision(ref gsapi_revision_t vers, int size);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_new_instance", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_new_instance(out IntPtr pinstance,
+ IntPtr caller_handle);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_delete_instance", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern void gsapi_delete_instance(IntPtr instance);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_init_with_args", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_init_with_args(IntPtr instance, int argc,
+ IntPtr argv);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_exit", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_exit(IntPtr instance);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_set_arg_encoding", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_set_arg_encoding(IntPtr instance,
+ int encoding);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_set_stdio", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_set_stdio(IntPtr instance,
+ gsStdIOHandler stdin, gsStdIOHandler stdout, gsStdIOHandler stderr);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_set_stdio_with_handle", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_set_stdio_with_handle(IntPtr instance,
+ gsStdIOHandler stdin, gsStdIOHandler stdout, gsStdIOHandler stderr, IntPtr caller_handle);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_set_poll", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_set_poll(IntPtr instance, gsPollHandler pollfn);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_set_poll_with_handle", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_set_poll_with_handle(IntPtr instance, gsPollHandler pollfn,
+ IntPtr caller_handle);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_get_default_device_list", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_get_default_device_list(IntPtr instance,
+ ref IntPtr list, ref int listlen);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_set_default_device_list", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_set_default_device_list(IntPtr instance,
+ IntPtr list, ref int listlen);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_run_string", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_run_string(IntPtr instance, IntPtr command,
+ int usererr, ref int exitcode);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_run_string_with_length", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_run_string_with_length(IntPtr instance, IntPtr command,
+ uint length, int usererr, ref int exitcode);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_run_file", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_run_file(IntPtr instance, IntPtr filename,
+ int usererr, ref int exitcode);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_run_string_begin", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_run_string_begin(IntPtr instance,
+ int usererr, ref int exitcode);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_run_string_continue", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_run_string_continue(IntPtr instance,
+ IntPtr command, int count, int usererr, ref int exitcode);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_run_string_end", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_run_string_end(IntPtr instance,
+ int usererr, ref int exitcode);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_set_display_callback", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_set_display_callback(IntPtr pinstance, IntPtr caller_handle);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_add_control_path", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_add_control_path(IntPtr instance, int type, IntPtr path);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_remove_control_path", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_remove_control_path(IntPtr instance, int type, IntPtr path);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_purge_control_paths", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern void gsapi_purge_control_paths(IntPtr instance, int type);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_activate_path_control", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern void gsapi_activate_path_control(IntPtr instance, int enable);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_is_path_control_active", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_is_path_control_active(IntPtr instance);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_set_param", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_set_param(IntPtr instance, gs_set_param_type type,
+ IntPtr param, IntPtr value);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_register_callout", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_register_callout(IntPtr instance, gsCallOut callout,
+ IntPtr callout_handle);
+
+ [DllImport(lib_dll, EntryPoint = "gsapi_deregister_callout", CharSet = CharSet.Ansi,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int gsapi_deregister_callout(IntPtr instance, gsCallOut callout,
+ IntPtr callout_handle);
+ }
+}
diff --git a/demos/csharp/api/ghostmono.cs b/demos/csharp/api/ghostmono.cs
new file mode 100644
index 00000000..850ff039
--- /dev/null
+++ b/demos/csharp/api/ghostmono.cs
@@ -0,0 +1,1088 @@
+using System;
+using System.Runtime.InteropServices; /* Marshaling */
+using System.Threading;
+using System.Collections.Generic; /* Use of List */
+using System.IO; /* Use of path */
+using GhostAPI; /* Use of Ghostscript API */
+
+namespace GhostMono
+{
+ public enum GS_Task_t
+ {
+ PS_DISTILL,
+ CREATE_XPS,
+ SAVE_RESULT,
+ GET_PAGE_COUNT,
+ GENERIC,
+ DISPLAY_DEV_THUMBS_NON_PDF,
+ DISPLAY_DEV_THUMBS_PDF,
+ DISPLAY_DEV_NON_PDF,
+ DISPLAY_DEV_PDF,
+ }
+ public enum GS_Result_t
+ {
+ gsOK,
+ gsFAILED,
+ gsCANCELLED
+ }
+ public enum gsStatus
+ {
+ GS_READY,
+ GS_BUSY,
+ GS_ERROR
+ };
+
+ /* Parameters */
+ public struct gsParamState_t
+ {
+ public String outputfile;
+ public String inputfile;
+ public GS_Task_t task;
+ public GS_Result_t result;
+ public int num_pages;
+ public List<int> pages;
+ public int firstpage;
+ public int lastpage;
+ public int currpage;
+ public List<String> args;
+ public int return_code;
+ public double zoom;
+ };
+
+ public class gsThreadCallBack
+ {
+ private bool m_completed;
+ private int m_progress;
+ private gsParamState_t m_param;
+ public bool Completed
+ {
+ get { return m_completed; }
+ }
+ public gsParamState_t Params
+ {
+ get { return m_param; }
+ }
+ public int Progress
+ {
+ get { return m_progress; }
+ }
+ public gsThreadCallBack(bool completed, int progress, gsParamState_t param)
+ {
+ m_completed = completed;
+ m_progress = progress;
+ m_param = param;
+ }
+ }
+
+ class ghostsharp
+ {
+ public class GhostscriptException : Exception
+ {
+ public GhostscriptException(string message) : base(message)
+ {
+ }
+ }
+
+ /* Ghostscript display device callback delegates. */
+
+ /* New device has been opened */
+ /* This is the first event from this device. */
+ public delegate int display_open_del(IntPtr handle, IntPtr device);
+
+ /* Device is about to be closed. */
+ /* Device will not be closed until this function returns. */
+ public delegate int display_preclose_del(IntPtr handle, IntPtr device);
+
+ /* Device has been closed. */
+ /* This is the last event from this device. */
+ public delegate int display_close_del(IntPtr handle, IntPtr device);
+
+ /* Device is about to be resized. */
+ /* Resize will only occur if this function returns 0. */
+ /* raster is byte count of a row. */
+ public delegate int display_presize_del(IntPtr handle, IntPtr device,
+ int width, int height, int raster, uint format);
+
+ /* Device has been resized. */
+ /* New pointer to raster returned in pimage */
+ public delegate int display_size_del(IntPtr handle, IntPtr device,
+ int width, int height, int raster, uint format,
+ IntPtr pimage);
+
+ /* flushpage */
+ public delegate int display_sync_del(IntPtr handle, IntPtr device);
+
+ /* showpage */
+ /* If you want to pause on showpage, then don't return immediately */
+ public delegate int display_page_del(IntPtr handle, IntPtr device, int copies, int flush);
+
+
+ /* Notify the caller whenever a portion of the raster is updated. */
+ /* This can be used for cooperative multitasking or for
+ * progressive update of the display.
+ * This function pointer may be set to NULL if not required.
+ */
+ public delegate int display_update_del(IntPtr handle, IntPtr device, int x, int y,
+ int w, int h);
+
+ /* Allocate memory for bitmap */
+ /* This is provided in case you need to create memory in a special
+ * way, e.g. shared. If this is NULL, the Ghostscript memory device
+ * allocates the bitmap. This will only called to allocate the
+ * image buffer. The first row will be placed at the address
+ * returned by display_memalloc.
+ */
+ public delegate int display_memalloc_del(IntPtr handle, IntPtr device, ulong size);
+
+ /* Free memory for bitmap */
+ /* If this is NULL, the Ghostscript memory device will free the bitmap */
+ public delegate int display_memfree_del(IntPtr handle, IntPtr device, IntPtr mem);
+
+ private int display_size(IntPtr handle, IntPtr device,
+ int width, int height, int raster, uint format,
+ IntPtr pimage)
+ {
+ m_pagewidth = width;
+ m_pageheight = height;
+ m_pageraster = raster;
+ m_pageptr = pimage;
+ return 0;
+ }
+
+ private int display_page(IntPtr handle, IntPtr device, int copies, int flush)
+ {
+ m_params.currpage += 1;
+ Gtk.Application.Invoke(delegate {
+ gsPageRenderedMain(m_pagewidth, m_pageheight, m_pageraster, m_pageptr, m_params);
+ });
+ return 0;
+ }
+
+ private int display_open(IntPtr handle, IntPtr device)
+ {
+ return 0;
+ }
+
+ private int display_preclose(IntPtr handle, IntPtr device)
+ {
+ return 0;
+ }
+
+ private int display_close(IntPtr handle, IntPtr device)
+ {
+ return 0;
+ }
+
+ private int display_presize(IntPtr handle, IntPtr device,
+ int width, int height, int raster, uint format)
+ {
+ return 0;
+ }
+
+ private int display_update(IntPtr handle, IntPtr device, int x, int y,
+ int w, int h)
+ {
+ return 0;
+ }
+
+ private int display_memalloc(IntPtr handle, IntPtr device, ulong size)
+ {
+ return 0;
+ }
+
+ private int display_memfree(IntPtr handle, IntPtr device, IntPtr mem)
+ {
+ return 0;
+ }
+ private int display_sync(IntPtr handle, IntPtr device)
+ {
+ return 0;
+ }
+
+ /* Delegate for stdio */
+ public delegate int gs_stdio_handler(IntPtr caller_handle, IntPtr buffer,
+ int len);
+
+ private int stdin_callback(IntPtr handle, IntPtr pointer, int count)
+ {
+ String output = Marshal.PtrToStringAnsi(pointer);
+ return count;
+ }
+
+ private int stdout_callback(IntPtr handle, IntPtr pointer, int count)
+ {
+ String output = null;
+ try
+ {
+ output = Marshal.PtrToStringAnsi(pointer);
+ Gtk.Application.Invoke(delegate {
+ gsIOUpdateMain(output, count);
+ });
+ }
+ catch (Exception excep2)
+ {
+ var mess = excep2.Message;
+ }
+
+ return count;
+
+ }
+
+ private int stderr_callback(IntPtr handle, IntPtr pointer, int count)
+ {
+ String output = Marshal.PtrToStringAnsi(pointer);
+ Gtk.Application.Invoke(delegate {
+ gsIOUpdateMain(output, count);
+ });
+
+ return count;
+ }
+
+ IntPtr gsInstance;
+ IntPtr dispInstance;
+ Thread m_worker;
+ bool m_worker_busy;
+ gsParamState_t m_params;
+ IntPtr m_pageptr;
+ int m_pagewidth;
+ int m_pageheight;
+ int m_pageraster;
+
+ display_callback_t m_display_callback;
+ IntPtr ptr_display_struct;
+
+ /* Callbacks to Main */
+ internal delegate void gsDLLProblem(String mess);
+ internal event gsDLLProblem gsDLLProblemMain;
+
+ internal delegate void gsIOCallBackMain(String mess, int len);
+ internal event gsIOCallBackMain gsIOUpdateMain;
+
+ internal delegate void gsCallBackMain(gsThreadCallBack info);
+ internal event gsCallBackMain gsUpdateMain;
+
+ internal delegate void gsCallBackPageRenderedMain(int width, int height, int raster,
+ IntPtr data, gsParamState_t state);
+ internal event gsCallBackPageRenderedMain gsPageRenderedMain;
+
+
+ /* From my understanding you cannot pin delegates. These need to be declared
+ * as members to keep a reference to the delegates and avoid their possible GC.
+ * since the C# GC has no idea that GS has a reference to these items. */
+ readonly gs_stdio_handler raise_stdin;
+ readonly gs_stdio_handler raise_stdout;
+ readonly gs_stdio_handler raise_stderr;
+
+ /* Ghostscript display callback struct */
+ public struct display_callback_t
+ {
+ public int sizeof_display_callback;
+ public int major_vers;
+ public int minor_vers;
+ public display_open_del display_open;
+ public display_preclose_del display_preclose;
+ public display_close_del display_close;
+ public display_presize_del display_presize;
+ public display_size_del display_size;
+ public display_sync_del display_sync;
+ public display_page_del display_page;
+ public display_update_del display_update;
+ public display_memalloc_del display_memalloc;
+ public display_memfree_del display_memfree;
+ };
+ public ghostsharp()
+ {
+ m_worker = null;
+ gsInstance = IntPtr.Zero;
+ dispInstance = IntPtr.Zero;
+
+ /* Avoiding delegate GC during the life of this object */
+ raise_stdin = stdin_callback;
+ raise_stdout = stdout_callback;
+ raise_stderr = stderr_callback;
+
+ m_display_callback.major_vers = 1;
+ m_display_callback.minor_vers = 0;
+ m_display_callback.display_open = display_open;
+ m_display_callback.display_preclose = display_preclose;
+ m_display_callback.display_close = display_close;
+ m_display_callback.display_presize = display_presize;
+ m_display_callback.display_size = display_size;
+ m_display_callback.display_sync = display_sync;
+ m_display_callback.display_page = display_page;
+ m_display_callback.display_update = display_update;
+ //m_display_callback.display_memalloc = display_memalloc;
+ //m_display_callback.display_memfree = display_memfree;
+ m_display_callback.display_memalloc = null;
+ m_display_callback.display_memfree = null;
+
+ /* The size the structure when marshalled to unmanaged code */
+ m_display_callback.sizeof_display_callback = Marshal.SizeOf(typeof(display_callback_t));
+
+ ptr_display_struct = Marshal.AllocHGlobal(m_display_callback.sizeof_display_callback);
+ Marshal.StructureToPtr(m_display_callback, ptr_display_struct, false);
+ m_worker_busy = false;
+ }
+
+
+ /* Callback upon worker all done */
+ private void gsCompleted(gsParamState_t Params)
+ {
+ gsThreadCallBack info = new gsThreadCallBack(true, 100, Params);
+ m_worker_busy = false;
+ Gtk.Application.Invoke(delegate {
+ gsUpdateMain(info);
+ });
+ }
+
+ /* Callback as worker progresses in run string case */
+ private void gsProgressChanged(gsParamState_t Params, int percent)
+ {
+ /* Callback with progress */
+ gsThreadCallBack info = new gsThreadCallBack(false, percent, Params);
+ Gtk.Application.Invoke(delegate {
+ gsUpdateMain(info);
+ });
+ }
+
+ /* Callback for problem */
+ private void gsErrorReport(string message)
+ {
+ Gtk.Application.Invoke(delegate {
+ gsDLLProblemMain(message);;
+ });
+ m_worker_busy = false;
+ }
+
+ private gsParamState_t gsFileSync(gsParamState_t in_params)
+ {
+ int num_params = in_params.args.Count;
+ var argParam = new GCHandle[num_params];
+ var argPtrs = new IntPtr[num_params];
+ List<byte[]> CharacterArray = new List<byte[]>(num_params);
+ GCHandle argPtrsStable = new GCHandle();
+ int code = 0;
+ bool cleanup = true;
+
+ try
+ {
+ code = ghostapi.gsapi_new_instance(out gsInstance, IntPtr.Zero);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileSync: gsapi_new_instance error");
+ }
+ code = ghostapi.gsapi_set_stdio(gsInstance, stdin_callback, stdout_callback, stderr_callback);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileSync: gsapi_set_stdio error");
+ }
+ code = ghostapi.gsapi_set_arg_encoding(gsInstance, (int)gsEncoding.GS_ARG_ENCODING_UTF8);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileSync: gsapi_set_arg_encoding error");
+ }
+
+ /* Now convert our Strings to char* and get pinned handles to these.
+ * This keeps the c# GC from moving stuff around on us */
+ String fullcommand = "";
+ for (int k = 0; k < num_params; k++)
+ {
+ CharacterArray.Add(System.Text.Encoding.UTF8.GetBytes((in_params.args[k]+"\0").ToCharArray()));
+ argParam[k] = GCHandle.Alloc(CharacterArray[k], GCHandleType.Pinned);
+ argPtrs[k] = argParam[k].AddrOfPinnedObject();
+ fullcommand = fullcommand + " " + in_params.args[k];
+ }
+
+ /* Also stick the array of pointers into memory that will not be GCd */
+ argPtrsStable = GCHandle.Alloc(argPtrs, GCHandleType.Pinned);
+
+ fullcommand = "Command Line: " + fullcommand + "\n";
+ gsIOUpdateMain(fullcommand, fullcommand.Length);
+ code = ghostapi.gsapi_init_with_args(gsInstance, num_params, argPtrsStable.AddrOfPinnedObject());
+ if (code < 0 && code != gsConstants.E_QUIT)
+ {
+ throw new GhostscriptException("gsFileSync: gsapi_init_with_args error");
+ }
+ }
+ catch (DllNotFoundException except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ in_params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ }
+ catch (BadImageFormatException except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ in_params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ }
+ catch (GhostscriptException except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ }
+ catch (Exception except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ }
+ finally
+ {
+ /* All the pinned items need to be freed so the GC can do its job */
+ if (cleanup)
+ {
+ for (int k = 0; k < num_params; k++)
+ {
+ argParam[k].Free();
+ }
+ argPtrsStable.Free();
+
+ int code1 = ghostapi.gsapi_exit(gsInstance);
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ code = code1;
+
+ ghostapi.gsapi_delete_instance(gsInstance);
+ in_params.return_code = code;
+
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ {
+ in_params.result = GS_Result_t.gsOK;
+ }
+ else
+ {
+ in_params.result = GS_Result_t.gsFAILED;
+ }
+ gsInstance = IntPtr.Zero;
+ }
+ }
+ return in_params;
+ }
+
+ /* Process command line with gsapi_init_with_args */
+ private void gsFileAsync(object data)
+ {
+ List<object> genericlist = data as List<object>;
+ gsParamState_t Params = (gsParamState_t)genericlist[0];
+ gsParamState_t Result = Params;
+ int num_params = Params.args.Count;
+ var argParam = new GCHandle[num_params];
+ var argPtrs = new IntPtr[num_params];
+ List<byte[]> CharacterArray = new List<byte[]>(num_params);
+ GCHandle argPtrsStable = new GCHandle();
+ int code = 0;
+ bool cleanup = true;
+
+ try
+ {
+ code = ghostapi.gsapi_new_instance(out gsInstance, IntPtr.Zero);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileAsync: gsapi_new_instance error");
+ }
+ code = ghostapi.gsapi_set_stdio(gsInstance, stdin_callback, stdout_callback, stderr_callback);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileAsync: gsapi_set_stdio error");
+ }
+ code = ghostapi.gsapi_set_arg_encoding(gsInstance, (int)gsEncoding.GS_ARG_ENCODING_UTF8);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileAsync: gsapi_set_arg_encoding error");
+ }
+
+ /* Now convert our Strings to char* and get pinned handles to these.
+ * This keeps the c# GC from moving stuff around on us */
+ String fullcommand = "";
+ for (int k = 0; k < num_params; k++)
+ {
+ CharacterArray.Add(System.Text.Encoding.UTF8.GetBytes((Params.args[k]+"\0").ToCharArray()));
+ argParam[k] = GCHandle.Alloc(CharacterArray[k], GCHandleType.Pinned);
+ argPtrs[k] = argParam[k].AddrOfPinnedObject();
+ fullcommand = fullcommand + " " + Params.args[k];
+ }
+
+ /* Also stick the array of pointers into memory that will not be GCd */
+ argPtrsStable = GCHandle.Alloc(argPtrs, GCHandleType.Pinned);
+
+ fullcommand = "Command Line: " + fullcommand + "\n";
+ gsIOUpdateMain(fullcommand, fullcommand.Length);
+ code = ghostapi.gsapi_init_with_args(gsInstance, num_params, argPtrsStable.AddrOfPinnedObject());
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileAsync: gsapi_init_with_args error");
+ }
+ }
+ catch (DllNotFoundException except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ Params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ Result = Params;
+ }
+ catch (BadImageFormatException except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ Params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ Result = Params;
+ }
+ catch (GhostscriptException except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ }
+ catch (Exception except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ }
+ finally
+ {
+ if (cleanup)
+ {
+ /* All the pinned items need to be freed so the GC can do its job */
+ for (int k = 0; k < num_params; k++)
+ {
+ argParam[k].Free();
+ }
+ argPtrsStable.Free();
+
+ int code1 = ghostapi.gsapi_exit(gsInstance);
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ code = code1;
+
+ ghostapi.gsapi_delete_instance(gsInstance);
+ Params.return_code = code;
+
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ {
+ Params.result = GS_Result_t.gsOK;
+ Result = Params;
+ }
+ else
+ {
+ Params.result = GS_Result_t.gsFAILED;
+ Result = Params;
+ }
+ gsInstance = IntPtr.Zero;
+ }
+ }
+
+ /* Completed. */
+ gsCompleted(Result);
+ return;
+ }
+
+ /* Processing with gsapi_run_string for callback progress */
+ private void gsBytesAsync(object data)
+ {
+ List<object> genericlist = data as List<object>;
+ gsParamState_t Params = (gsParamState_t)genericlist[0];
+ gsParamState_t Result = Params;
+ int num_params = Params.args.Count;
+ var argParam = new GCHandle[num_params];
+ var argPtrs = new IntPtr[num_params];
+ List<byte[]> CharacterArray = new List<byte[]>(num_params);
+ GCHandle argPtrsStable = new GCHandle();
+ Byte[] Buffer = new Byte[gsConstants.GS_READ_BUFFER];
+
+ int code = 0;
+ int exitcode = 0;
+ var Feed = new GCHandle();
+ var FeedPtr = new IntPtr();
+ String[] strParams = new String[num_params];
+ FileStream fs = null;
+ bool cleanup = true;
+
+ try
+ {
+ /* Open the file */
+ fs = new FileStream(Params.inputfile, FileMode.Open);
+ var len = (int)fs.Length;
+
+ code = ghostapi.gsapi_new_instance(out gsInstance, IntPtr.Zero);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsBytesAsync: gsapi_new_instance error");
+ }
+ code = ghostapi.gsapi_set_stdio(gsInstance, stdin_callback, stdout_callback, stderr_callback);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsBytesAsync: gsapi_set_stdio error");
+ }
+ code = ghostapi.gsapi_set_arg_encoding(gsInstance, (int)gsEncoding.GS_ARG_ENCODING_UTF8);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsBytesAsync: gsapi_set_arg_encoding error");
+ }
+
+ /* Now convert our Strings to char* and get pinned handles to these.
+ * This keeps the c# GC from moving stuff around on us */
+ String fullcommand = "";
+ for (int k = 0; k < num_params; k++)
+ {
+ CharacterArray.Add(System.Text.Encoding.UTF8.GetBytes((Params.args[k]+"\0").ToCharArray()));
+ argParam[k] = GCHandle.Alloc(CharacterArray[k], GCHandleType.Pinned);
+ argPtrs[k] = argParam[k].AddrOfPinnedObject();
+ fullcommand = fullcommand + " " + Params.args[k];
+ }
+
+ /* Also stick the array of pointers into memory that will not be GCd */
+ argPtrsStable = GCHandle.Alloc(argPtrs, GCHandleType.Pinned);
+
+ fullcommand = "Command Line: " + fullcommand + "\n";
+ gsIOUpdateMain(fullcommand, fullcommand.Length);
+ code = ghostapi.gsapi_init_with_args(gsInstance, num_params, argPtrsStable.AddrOfPinnedObject());
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsBytesAsync: gsapi_init_with_args error");
+ }
+
+ /* Pin data buffer */
+ Feed = GCHandle.Alloc(Buffer, GCHandleType.Pinned);
+ FeedPtr = Feed.AddrOfPinnedObject();
+
+ /* Now start feeding the input piece meal and do a call back
+ * with our progress */
+ if (code == 0)
+ {
+ int count;
+ double perc;
+ int total = 0;
+ int ret_code;
+
+ ret_code = ghostapi.gsapi_run_string_begin(gsInstance, 0, ref exitcode);
+ if (exitcode < 0)
+ {
+ code = exitcode;
+ throw new GhostscriptException("gsBytesAsync: gsapi_run_string_begin error");
+ }
+
+ while ((count = fs.Read(Buffer, 0, gsConstants.GS_READ_BUFFER)) > 0)
+ {
+ ret_code = ghostapi.gsapi_run_string_continue(gsInstance, FeedPtr, count, 0, ref exitcode);
+ if (exitcode < 0)
+ {
+ code = exitcode;
+ throw new GhostscriptException("gsBytesAsync: gsapi_run_string_continue error");
+ }
+
+ total = total + count;
+ perc = 100.0 * (double)total / (double)len;
+ gsProgressChanged(Params, (int)perc);
+ }
+ ret_code = ghostapi.gsapi_run_string_end(gsInstance, 0, ref exitcode);
+ if (exitcode < 0)
+ {
+ code = exitcode;
+ throw new GhostscriptException("gsBytesAsync: gsapi_run_string_end error");
+ }
+ }
+ }
+ catch (DllNotFoundException except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ Params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ Result = Params;
+ }
+ catch (BadImageFormatException except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ Params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ Result = Params;
+ }
+ catch (GhostscriptException except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ }
+ catch (Exception except)
+ {
+ /* Could be a file io issue */
+ gsErrorReport("Exception: " + except.Message);
+ Params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ Result = Params;
+ }
+ finally
+ {
+ if (cleanup)
+ {
+ fs.Close();
+
+ /* Free pinned items */
+ for (int k = 0; k < num_params; k++)
+ {
+ argParam[k].Free();
+ }
+ argPtrsStable.Free();
+ Feed.Free();
+
+ /* gs clean up */
+ int code1 = ghostapi.gsapi_exit(gsInstance);
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ code = code1;
+
+ ghostapi.gsapi_delete_instance(gsInstance);
+ Params.return_code = code;
+
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ {
+ Params.result = GS_Result_t.gsOK;
+ Result = Params;
+ }
+ else
+ {
+ Params.result = GS_Result_t.gsFAILED;
+ Result = Params;
+ }
+ gsInstance = IntPtr.Zero;
+ }
+ }
+ gsCompleted(Result);
+ return;
+ }
+
+ /* Worker task for using display device */
+ private void DisplayDeviceAsync(object data)
+ {
+ int code = 0;
+ List<object> genericlist = data as List<object>;
+ gsParamState_t gsparams = (gsParamState_t)genericlist[0];
+ gsParamState_t Result = gsparams;
+ GCHandle argPtrsStable = new GCHandle();
+ int num_params = gsparams.args.Count;
+ var argParam = new GCHandle[num_params];
+ var argPtrs = new IntPtr[num_params];
+ List<byte[]> CharacterArray = new List<byte[]>(num_params);
+ bool cleanup = true;
+
+ gsparams.result = GS_Result_t.gsOK;
+
+ try
+ {
+ code = ghostapi.gsapi_new_instance(out dispInstance, IntPtr.Zero);
+ if (code < 0)
+ {
+ throw new GhostscriptException("DisplayDeviceAsync: gsapi_new_instance error");
+ }
+
+ code = ghostapi.gsapi_set_stdio(dispInstance, stdin_callback, stdout_callback, stderr_callback);
+ if (code < 0)
+ {
+ throw new GhostscriptException("DisplayDeviceAsync: gsapi_set_stdio error");
+ }
+
+ code = ghostapi.gsapi_set_arg_encoding(dispInstance, (int)gsEncoding.GS_ARG_ENCODING_UTF8);
+ if (code < 0)
+ {
+ throw new GhostscriptException("DisplayDeviceAsync: gsapi_set_arg_encoding error");
+ }
+
+ code = ghostapi.gsapi_set_display_callback(dispInstance, ptr_display_struct);
+ if (code < 0)
+ {
+ throw new GhostscriptException("DisplayDeviceAsync: gsapi_set_display_callback error");
+ }
+
+ String fullcommand = "";
+ for (int k = 0; k < num_params; k++)
+ {
+ CharacterArray.Add(System.Text.Encoding.UTF8.GetBytes((gsparams.args[k] + "\0").ToCharArray()));
+ argParam[k] = GCHandle.Alloc(CharacterArray[k], GCHandleType.Pinned);
+ argPtrs[k] = argParam[k].AddrOfPinnedObject();
+ fullcommand = fullcommand + " " + gsparams.args[k];
+ }
+ argPtrsStable = GCHandle.Alloc(argPtrs, GCHandleType.Pinned);
+
+ fullcommand = "Command Line: " + fullcommand + "\n";
+ gsIOUpdateMain(fullcommand, fullcommand.Length);
+ code = ghostapi.gsapi_init_with_args(dispInstance, num_params, argPtrsStable.AddrOfPinnedObject());
+ if (code < 0)
+ {
+ throw new GhostscriptException("DisplayDeviceAsync: gsapi_init_with_args error");
+ }
+ }
+
+ catch (DllNotFoundException except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ gsparams.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ Result = gsparams;
+ }
+ catch (BadImageFormatException except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ gsparams.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ Result = gsparams;
+ }
+ catch (GhostscriptException except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ gsparams.result = GS_Result_t.gsFAILED;
+ if (dispInstance != IntPtr.Zero)
+ ghostapi.gsapi_delete_instance(dispInstance);
+ dispInstance = IntPtr.Zero;
+ }
+ catch (Exception except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ gsparams.result = GS_Result_t.gsFAILED;
+ if (dispInstance != IntPtr.Zero)
+ ghostapi.gsapi_delete_instance(dispInstance);
+ dispInstance = IntPtr.Zero;
+ }
+ finally
+ {
+ if (cleanup)
+ {
+ for (int k = 0; k < num_params; k++)
+ {
+ argParam[k].Free();
+ }
+ argPtrsStable.Free();
+ Result = gsparams;
+
+ if (gsparams.result == GS_Result_t.gsOK && (gsparams.task == GS_Task_t.DISPLAY_DEV_NON_PDF ||
+ gsparams.task == GS_Task_t.DISPLAY_DEV_THUMBS_NON_PDF))
+ {
+ gsParamState_t result = DisplayDeviceClose();
+ if (gsparams.result == 0)
+ {
+ gsparams.result = result.result;
+ }
+ }
+ }
+ }
+ gsCompleted(Result);
+ return;
+ }
+
+ /* Call the appropriate worker thread based upon the task
+ * that we have to do */
+ private gsStatus RunGhostscriptAsync(gsParamState_t Params)
+ {
+ try
+ {
+ if (m_worker_busy)
+ {
+ return gsStatus.GS_BUSY;
+ }
+
+ switch (Params.task)
+ {
+ case GS_Task_t.PS_DISTILL:
+ m_worker = new Thread(gsBytesAsync);
+ break;
+ case GS_Task_t.DISPLAY_DEV_NON_PDF:
+ case GS_Task_t.DISPLAY_DEV_PDF:
+ case GS_Task_t.DISPLAY_DEV_THUMBS_NON_PDF:
+ case GS_Task_t.DISPLAY_DEV_THUMBS_PDF:
+ m_worker = new Thread(DisplayDeviceAsync);
+ break;
+ case GS_Task_t.SAVE_RESULT:
+ case GS_Task_t.CREATE_XPS:
+ default:
+ m_worker = new Thread(gsFileAsync);
+ break;
+ }
+
+ var arguments = new List<object>();
+ arguments.Add(Params);
+ arguments.Add(this);
+ m_worker_busy = true;
+ m_worker.Start(arguments);
+
+ return gsStatus.GS_READY;
+ }
+ catch (OutOfMemoryException)
+ {
+ Console.WriteLine("Memory allocation failed during gs rendering\n");
+ return gsStatus.GS_ERROR;
+ }
+ }
+
+#region public_methods
+
+ /* Direct call on gsapi to get the version of the DLL we are using */
+ public String GetVersion()
+ {
+ gsapi_revision_t vers;
+ vers.copyright = IntPtr.Zero;
+ vers.product = IntPtr.Zero;
+ vers.revision = 0;
+ vers.revisiondate = 0;
+ int size = System.Runtime.InteropServices.Marshal.SizeOf(vers);
+
+ try
+ {
+ if (ghostapi.gsapi_revision(ref vers, size) == 0)
+ {
+ String product = Marshal.PtrToStringAnsi(vers.product);
+ String output;
+ int major = vers.revision / 100;
+ int minor = vers.revision - major * 100;
+ String versnum = major + "." + minor;
+ output = product + " " + versnum;
+ return output;
+ }
+ else
+ return null;
+ }
+ catch (Exception except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ }
+ return null;
+ }
+
+ /* Use syncronous call to ghostscript to get the
+ * number of pages in a PDF file */
+ public int GetPageCount(String fileName)
+ {
+ gsParamState_t gsparams = new gsParamState_t();
+ gsParamState_t result;
+ gsparams.args = new List<string>();
+
+ gsparams.args.Add("gs");
+ gsparams.args.Add("-dNODISPLAY");
+ gsparams.args.Add("-dNOPAUSE");
+ gsparams.args.Add("-dBATCH");
+ gsparams.args.Add("-I%rom%Resource/Init/");
+ //gsparams.args.Add("-q");
+ gsparams.args.Add("-sFile=\"" + fileName + "\"");
+ gsparams.args.Add("--permit-file-read=\"" + fileName + "\"");
+ gsparams.args.Add("-c");
+ gsparams.args.Add("\"File (r) file runpdfbegin pdfpagecount = quit\"");
+ gsparams.task = GS_Task_t.GET_PAGE_COUNT;
+ m_params = gsparams;
+
+ result = gsFileSync(gsparams);
+
+ if (result.result == GS_Result_t.gsOK)
+ return m_params.num_pages;
+ else
+ return -1;
+ }
+
+ /* Launch a thread rendering all the pages with the display device
+ * to distill an input PS file and save as a PDF. */
+ public gsStatus DistillPS(String fileName, int resolution)
+ {
+ gsParamState_t gsparams = new gsParamState_t();
+ gsparams.args = new List<string>();
+
+ gsparams.inputfile = fileName;
+ gsparams.args.Add("gs");
+ gsparams.args.Add("-dNOPAUSE");
+ gsparams.args.Add("-dBATCH");
+ gsparams.args.Add("-I%rom%Resource/Init/");
+ gsparams.args.Add("-dSAFER");
+ gsparams.args.Add("-sDEVICE=pdfwrite");
+ gsparams.outputfile = Path.GetTempFileName();
+ gsparams.args.Add("-o" + gsparams.outputfile);
+ gsparams.task = GS_Task_t.PS_DISTILL;
+
+ return RunGhostscriptAsync(gsparams);
+ }
+
+ /* Launch a thread rendering all the pages with the display device
+ * to collect thumbnail images or full resolution. */
+ public gsStatus gsDisplayDeviceRenderAll(String fileName, double zoom, bool aa, GS_Task_t task)
+ {
+ gsParamState_t gsparams = new gsParamState_t();
+ int format = (gsConstants.DISPLAY_COLORS_RGB |
+ gsConstants.DISPLAY_DEPTH_8 |
+ gsConstants.DISPLAY_BIGENDIAN);
+ int resolution = (int)(72.0 * zoom + 0.5);
+
+ gsparams.args = new List<string>();
+ gsparams.args.Add("gs");
+ gsparams.args.Add("-dNOPAUSE");
+ gsparams.args.Add("-dBATCH");
+ gsparams.args.Add("-I%rom%Resource/Init/");
+ gsparams.args.Add("-dSAFER");
+ gsparams.args.Add("-r" + resolution);
+ if (aa)
+ {
+ gsparams.args.Add("-dTextAlphaBits=4");
+ gsparams.args.Add("-dGraphicsAlphaBits=4");
+ }
+ gsparams.args.Add("-sDEVICE=display");
+ gsparams.args.Add("-dDisplayFormat=" + format);
+ gsparams.args.Add("-f");
+ gsparams.args.Add(fileName);
+ gsparams.task = task;
+ gsparams.currpage = 0;
+ m_params.currpage = 0;
+ return RunGhostscriptAsync(gsparams);
+ }
+
+
+ /* Launch a thread rendering a set of pages with the display device. For use with languages
+ that can be indexed via pages which include PDF and XPS */
+ public gsStatus gsDisplayDeviceRenderPages(String fileName, int first_page, int last_page, double zoom)
+ {
+ gsParamState_t gsparams = new gsParamState_t();
+ int format = (gsConstants.DISPLAY_COLORS_RGB |
+ gsConstants.DISPLAY_DEPTH_8 |
+ gsConstants.DISPLAY_LITTLEENDIAN);
+ int resolution = (int)(72.0 * zoom + 0.5);
+
+ gsparams.args = new List<string>();
+ gsparams.args.Add("gs");
+ gsparams.args.Add("-dNOPAUSE");
+ gsparams.args.Add("-dBATCH");
+ gsparams.args.Add("-I%rom%Resource/Init/");
+ gsparams.args.Add("-dSAFER");
+ gsparams.args.Add("-r" + resolution);
+ gsparams.args.Add("-sDEVICE=display");
+ gsparams.args.Add("-dDisplayFormat=" + format);
+ gsparams.args.Add("-dFirstPage=" + first_page);
+ gsparams.args.Add("-dLastPage=" + last_page);
+ gsparams.args.Add("-f");
+ gsparams.args.Add(fileName);
+ gsparams.task = GS_Task_t.DISPLAY_DEV_PDF;
+ gsparams.currpage = first_page - 1;
+ m_params.currpage = first_page - 1;
+
+ return RunGhostscriptAsync(gsparams);
+ }
+
+ /* Close the display device and delete the instance */
+ public gsParamState_t DisplayDeviceClose()
+ {
+ int code = 0;
+ gsParamState_t out_params = new gsParamState_t();
+
+ out_params.result = GS_Result_t.gsOK;
+
+ try
+ {
+ int code1 = ghostapi.gsapi_exit(dispInstance);
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ code = code1;
+
+ ghostapi.gsapi_delete_instance(dispInstance);
+ dispInstance = IntPtr.Zero;
+
+ }
+ catch (Exception except)
+ {
+ gsErrorReport("Exception: " + except.Message);
+ out_params.result = GS_Result_t.gsFAILED;
+ }
+
+ return out_params;
+ }
+
+ /* Check if gs is currently busy */
+ public gsStatus GetStatus()
+ {
+ if (m_worker_busy)
+ return gsStatus.GS_BUSY;
+ else
+ return gsStatus.GS_READY;
+ }
+#endregion
+ }
+}
diff --git a/demos/csharp/api/ghostnet.cs b/demos/csharp/api/ghostnet.cs
new file mode 100644
index 00000000..9011768e
--- /dev/null
+++ b/demos/csharp/api/ghostnet.cs
@@ -0,0 +1,1198 @@
+using System;
+using System.Runtime.InteropServices; /* Marshaling */
+using System.ComponentModel; /* Background threading */
+using System.Collections.Generic; /* Use of List */
+using System.IO; /* Use of path */
+using GhostAPI; /* Use of Ghostscript API */
+#if WPF
+using ghostnet_wpf_example; /* For Print control */
+#endif
+
+namespace GhostNET
+{
+ public enum GS_Task_t
+ {
+ PS_DISTILL,
+ CREATE_XPS,
+ SAVE_RESULT,
+ GET_PAGE_COUNT,
+ GENERIC,
+ DISPLAY_DEV_THUMBS_NON_PDF,
+ DISPLAY_DEV_THUMBS_PDF,
+ DISPLAY_DEV_NON_PDF,
+ DISPLAY_DEV_PDF,
+ }
+ public enum GS_Result_t
+ {
+ gsOK,
+ gsFAILED,
+ gsCANCELLED
+ }
+ public enum gsStatus
+ {
+ GS_READY,
+ GS_BUSY,
+ GS_ERROR
+ };
+
+ /* Parameters */
+ public struct gsParamState_t
+ {
+ public String outputfile;
+ public String inputfile;
+ public GS_Task_t task;
+ public GS_Result_t result;
+ public int num_pages;
+ public List<int> pages;
+ public int firstpage;
+ public int lastpage;
+ public int currpage;
+ public List<String> args;
+ public int return_code;
+ public double zoom;
+ };
+
+public class gsEventArgs : EventArgs
+ {
+ private bool m_completed;
+ private int m_progress;
+ private gsParamState_t m_param;
+ public bool Completed
+ {
+ get { return m_completed; }
+ }
+ public gsParamState_t Params
+ {
+ get { return m_param; }
+ }
+ public int Progress
+ {
+ get { return m_progress; }
+ }
+ public gsEventArgs(bool completed, int progress, gsParamState_t param)
+ {
+ m_completed = completed;
+ m_progress = progress;
+ m_param = param;
+ }
+ }
+
+ class ghostsharp
+ {
+ public class GhostscriptException : Exception
+ {
+ public GhostscriptException(string message) : base(message)
+ {
+ }
+ }
+
+ /* Ghostscript display device callback delegates. */
+
+ /* New device has been opened */
+ /* This is the first event from this device. */
+ public delegate int display_open_del(IntPtr handle, IntPtr device);
+
+ /* Device is about to be closed. */
+ /* Device will not be closed until this function returns. */
+ public delegate int display_preclose_del(IntPtr handle, IntPtr device);
+
+ /* Device has been closed. */
+ /* This is the last event from this device. */
+ public delegate int display_close_del(IntPtr handle, IntPtr device);
+
+ /* Device is about to be resized. */
+ /* Resize will only occur if this function returns 0. */
+ /* raster is byte count of a row. */
+ public delegate int display_presize_del(IntPtr handle, IntPtr device,
+ int width, int height, int raster, uint format);
+
+ /* Device has been resized. */
+ /* New pointer to raster returned in pimage */
+ public delegate int display_size_del(IntPtr handle, IntPtr device,
+ int width, int height, int raster, uint format,
+ IntPtr pimage);
+
+ /* flushpage */
+ public delegate int display_sync_del(IntPtr handle, IntPtr device);
+
+ /* showpage */
+ /* If you want to pause on showpage, then don't return immediately */
+ public delegate int display_page_del(IntPtr handle, IntPtr device, int copies, int flush);
+
+
+ /* Notify the caller whenever a portion of the raster is updated. */
+ /* This can be used for cooperative multitasking or for
+ * progressive update of the display.
+ * This function pointer may be set to NULL if not required.
+ */
+ public delegate int display_update_del(IntPtr handle, IntPtr device, int x, int y,
+ int w, int h);
+
+ /* Allocate memory for bitmap */
+ /* This is provided in case you need to create memory in a special
+ * way, e.g. shared. If this is NULL, the Ghostscript memory device
+ * allocates the bitmap. This will only called to allocate the
+ * image buffer. The first row will be placed at the address
+ * returned by display_memalloc.
+ */
+ public delegate int display_memalloc_del(IntPtr handle, IntPtr device, ulong size);
+
+ /* Free memory for bitmap */
+ /* If this is NULL, the Ghostscript memory device will free the bitmap */
+ public delegate int display_memfree_del(IntPtr handle, IntPtr device, IntPtr mem);
+
+ private int display_size(IntPtr handle, IntPtr device,
+ int width, int height, int raster, uint format,
+ IntPtr pimage)
+ {
+ m_pagewidth = width;
+ m_pageheight = height;
+ m_pageraster = raster;
+ m_pageptr = pimage;
+ return 0;
+ }
+
+ private int display_page(IntPtr handle, IntPtr device, int copies, int flush)
+ {
+ m_params.currpage += 1;
+ gsPageRenderedMain(m_pagewidth, m_pageheight, m_pageraster, m_pageptr, m_params);
+ return 0;
+ }
+
+ private int display_open(IntPtr handle, IntPtr device)
+ {
+ return 0;
+ }
+
+ private int display_preclose(IntPtr handle, IntPtr device)
+ {
+ return 0;
+ }
+
+ private int display_close(IntPtr handle, IntPtr device)
+ {
+ return 0;
+ }
+
+ private int display_presize(IntPtr handle, IntPtr device,
+ int width, int height, int raster, uint format)
+ {
+ return 0;
+ }
+
+ private int display_update(IntPtr handle, IntPtr device, int x, int y,
+ int w, int h)
+ {
+ return 0;
+ }
+
+ private int display_memalloc(IntPtr handle, IntPtr device, ulong size)
+ {
+ return 0;
+ }
+
+ private int display_memfree(IntPtr handle, IntPtr device, IntPtr mem)
+ {
+ return 0;
+ }
+ private int display_sync(IntPtr handle, IntPtr device)
+ {
+ return 0;
+ }
+
+ /* Delegate for stdio */
+ public delegate int gs_stdio_handler(IntPtr caller_handle, IntPtr buffer,
+ int len);
+
+ private int stdin_callback(IntPtr handle, IntPtr pointer, int count)
+ {
+ String output = Marshal.PtrToStringAnsi(pointer);
+ return count;
+ }
+
+ private int stdout_callback(IntPtr handle, IntPtr pointer, int count)
+ {
+ String output = null;
+ try
+ {
+ output = Marshal.PtrToStringAnsi(pointer);
+ }
+ catch (Exception except)
+ {
+ var mess = except.Message;
+ }
+
+ try
+ {
+ gsIOUpdateMain(output, count);
+ }
+ catch (Exception excep2)
+ {
+ var mess = excep2.Message;
+ }
+
+ return count;
+ }
+
+ private int stderr_callback(IntPtr handle, IntPtr pointer, int count)
+ {
+ String output = Marshal.PtrToStringAnsi(pointer);
+ gsIOUpdateMain(output, count);
+ return count;
+ }
+
+ IntPtr gsInstance;
+ IntPtr dispInstance;
+ BackgroundWorker m_worker;
+ gsParamState_t m_params;
+ IntPtr m_pageptr;
+ int m_pagewidth;
+ int m_pageheight;
+ int m_pageraster;
+
+ display_callback_t m_display_callback;
+ IntPtr ptr_display_struct;
+
+ /* Callbacks to Main */
+ internal delegate void gsDLLProblem(String mess);
+ internal event gsDLLProblem gsDLLProblemMain;
+
+ internal delegate void gsIOCallBackMain(String mess, int len);
+ internal event gsIOCallBackMain gsIOUpdateMain;
+
+ internal delegate void gsCallBackMain(gsEventArgs info);
+ internal event gsCallBackMain gsUpdateMain;
+
+ internal delegate void gsCallBackPageRenderedMain(int width, int height, int raster,
+ IntPtr data, gsParamState_t state);
+ internal event gsCallBackPageRenderedMain gsPageRenderedMain;
+
+
+ /* From my understanding you cannot pin delegates. These need to be declared
+ * as members to keep a reference to the delegates and avoid their possible GC.
+ * since the C# GC has no idea that GS has a reference to these items. */
+ readonly gs_stdio_handler raise_stdin;
+ readonly gs_stdio_handler raise_stdout;
+ readonly gs_stdio_handler raise_stderr;
+
+ /* Ghostscript display callback struct */
+ public struct display_callback_t
+ {
+ public int sizeof_display_callback;
+ public int major_vers;
+ public int minor_vers;
+ public display_open_del display_open;
+ public display_preclose_del display_preclose;
+ public display_close_del display_close;
+ public display_presize_del display_presize;
+ public display_size_del display_size;
+ public display_sync_del display_sync;
+ public display_page_del display_page;
+ public display_update_del display_update;
+ public display_memalloc_del display_memalloc;
+ public display_memfree_del display_memfree;
+ };
+ public ghostsharp()
+ {
+ m_worker = null;
+ gsInstance = IntPtr.Zero;
+ dispInstance = IntPtr.Zero;
+
+ /* Avoiding delegate GC during the life of this object */
+ raise_stdin = stdin_callback;
+ raise_stdout = stdout_callback;
+ raise_stderr = stderr_callback;
+
+ m_display_callback.major_vers = 1;
+ m_display_callback.minor_vers = 0;
+ m_display_callback.display_open = display_open;
+ m_display_callback.display_preclose = display_preclose;
+ m_display_callback.display_close = display_close;
+ m_display_callback.display_presize = display_presize;
+ m_display_callback.display_size = display_size;
+ m_display_callback.display_sync = display_sync;
+ m_display_callback.display_page = display_page;
+ m_display_callback.display_update = display_update;
+ //m_display_callback.display_memalloc = display_memalloc;
+ //m_display_callback.display_memfree = display_memfree;
+ m_display_callback.display_memalloc = null;
+ m_display_callback.display_memfree = null;
+
+ /* The size the structure when marshalled to unmanaged code */
+ m_display_callback.sizeof_display_callback = Marshal.SizeOf(typeof(display_callback_t));
+
+ ptr_display_struct = Marshal.AllocHGlobal(m_display_callback.sizeof_display_callback);
+ Marshal.StructureToPtr(m_display_callback, ptr_display_struct, false);
+ }
+
+
+ /* Callback upon worker all done */
+ private void gsCompleted(object sender, RunWorkerCompletedEventArgs e)
+ {
+ gsParamState_t Value;
+ gsEventArgs info;
+ gsParamState_t Params;
+
+ try
+ {
+ Params = (gsParamState_t)e.Result;
+ }
+ catch (System.Reflection.TargetInvocationException)
+ {
+ /* Something went VERY wrong with GS */
+ /* Following is to help debug these issues */
+ /* var inner = ee.InnerException;
+ var message = ee.Message;
+ var inner_message = inner.Message;
+ String bound = "\n************\n";
+ gsIOUpdateMain(this, bound, bound.Length);
+ gsIOUpdateMain(this, message, message.Length);
+ gsIOUpdateMain(this, bound, bound.Length);
+ gsIOUpdateMain(this, inner_message, inner_message.Length);
+ gsIOUpdateMain(this, bound, bound.Length);
+ var temp = inner.Source;
+ gsIOUpdateMain(this, bound, bound.Length);
+ gsIOUpdateMain(this, temp, temp.Length);
+ var method = inner.TargetSite;
+ gsIOUpdateMain(this, bound, bound.Length);
+ var method_name = method.Name;
+ gsIOUpdateMain(this, method_name, method_name.Length);
+ var stack = inner.StackTrace;
+ gsIOUpdateMain(this, bound, bound.Length);
+ gsIOUpdateMain(this, stack, stack.Length); */
+ String output = "Ghostscript DLL Invalid Access.";
+ gsDLLProblemMain(output);
+ return;
+ }
+ switch (Params.task)
+ {
+ case GS_Task_t.PS_DISTILL:
+ m_worker.DoWork -= new DoWorkEventHandler(gsBytesAsync);
+ break;
+ case GS_Task_t.DISPLAY_DEV_NON_PDF:
+ case GS_Task_t.DISPLAY_DEV_PDF:
+ case GS_Task_t.DISPLAY_DEV_THUMBS_NON_PDF:
+ case GS_Task_t.DISPLAY_DEV_THUMBS_PDF:
+ m_worker.DoWork -= new DoWorkEventHandler(DisplayDeviceAsync);
+ break;
+ default:
+ m_worker.DoWork -= new DoWorkEventHandler(gsFileAsync);
+ break;
+ }
+
+ if (e.Cancelled)
+ {
+ Value = new gsParamState_t();
+ Value.result = GS_Result_t.gsCANCELLED;
+ info = new gsEventArgs(true, 100, Value);
+ }
+ else
+ {
+ Value = (gsParamState_t)e.Result;
+ info = new gsEventArgs(true, 100, Value);
+ }
+ gsUpdateMain(info);
+ }
+
+ /* Callback as worker progresses */
+ private void gsProgressChanged(object sender, ProgressChangedEventArgs e)
+ {
+ /* Callback with progress */
+ gsParamState_t Value = new gsParamState_t();
+ gsEventArgs info = new gsEventArgs(false, e.ProgressPercentage, Value);
+ gsUpdateMain(info);
+ }
+ private gsParamState_t gsFileSync(gsParamState_t in_params)
+ {
+ int num_params = in_params.args.Count;
+ var argParam = new GCHandle[num_params];
+ var argPtrs = new IntPtr[num_params];
+ List<byte[]> CharacterArray = new List<byte[]>(num_params);
+ GCHandle argPtrsStable = new GCHandle();
+ int code = 0;
+ bool cleanup = true;
+
+ try
+ {
+ code = ghostapi.gsapi_new_instance(out gsInstance, IntPtr.Zero);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileSync: gsapi_new_instance error");
+ }
+ code = ghostapi.gsapi_set_stdio(gsInstance, stdin_callback, stdout_callback, stderr_callback);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileSync: gsapi_set_stdio error");
+ }
+ code = ghostapi.gsapi_set_arg_encoding(gsInstance, (int)gsEncoding.GS_ARG_ENCODING_UTF8);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileSync: gsapi_set_arg_encoding error");
+ }
+
+ /* Now convert our Strings to char* and get pinned handles to these.
+ * This keeps the c# GC from moving stuff around on us */
+ String fullcommand = "";
+ for (int k = 0; k < num_params; k++)
+ {
+ CharacterArray.Add(System.Text.Encoding.UTF8.GetBytes((in_params.args[k]+"\0").ToCharArray()));
+ argParam[k] = GCHandle.Alloc(CharacterArray[k], GCHandleType.Pinned);
+ argPtrs[k] = argParam[k].AddrOfPinnedObject();
+ fullcommand = fullcommand + " " + in_params.args[k];
+ }
+
+ /* Also stick the array of pointers into memory that will not be GCd */
+ argPtrsStable = GCHandle.Alloc(argPtrs, GCHandleType.Pinned);
+
+ fullcommand = "Command Line: " + fullcommand + "\n";
+ gsIOUpdateMain(fullcommand, fullcommand.Length);
+ code = ghostapi.gsapi_init_with_args(gsInstance, num_params, argPtrsStable.AddrOfPinnedObject());
+ if (code < 0 && code != gsConstants.E_QUIT)
+ {
+ throw new GhostscriptException("gsFileSync: gsapi_init_with_args error");
+ }
+ }
+ catch (DllNotFoundException except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ in_params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ }
+ catch (BadImageFormatException except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ in_params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ }
+ catch (GhostscriptException except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ }
+ catch (Exception except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ }
+ finally
+ {
+ /* All the pinned items need to be freed so the GC can do its job */
+ if (cleanup)
+ {
+ for (int k = 0; k < num_params; k++)
+ {
+ argParam[k].Free();
+ }
+ argPtrsStable.Free();
+
+ int code1 = ghostapi.gsapi_exit(gsInstance);
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ code = code1;
+
+ ghostapi.gsapi_delete_instance(gsInstance);
+ in_params.return_code = code;
+
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ {
+ in_params.result = GS_Result_t.gsOK;
+ }
+ else
+ {
+ in_params.result = GS_Result_t.gsFAILED;
+ }
+ gsInstance = IntPtr.Zero;
+ }
+ }
+ return in_params;
+ }
+
+ /* Process command line with gsapi_init_with_args */
+ private void gsFileAsync(object sender, DoWorkEventArgs e)
+ {
+ gsParamState_t Params = (gsParamState_t)e.Argument;
+ int num_params = Params.args.Count;
+ var argParam = new GCHandle[num_params];
+ var argPtrs = new IntPtr[num_params];
+ List<byte[]> CharacterArray = new List<byte[]>(num_params);
+ GCHandle argPtrsStable = new GCHandle();
+ int code = 0;
+ bool cleanup = true;
+
+ try
+ {
+ code = ghostapi.gsapi_new_instance(out gsInstance, IntPtr.Zero);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileAsync: gsapi_new_instance error");
+ }
+ code = ghostapi.gsapi_set_stdio(gsInstance, stdin_callback, stdout_callback, stderr_callback);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileAsync: gsapi_set_stdio error");
+ }
+ code = ghostapi.gsapi_set_arg_encoding(gsInstance, (int)gsEncoding.GS_ARG_ENCODING_UTF8);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileAsync: gsapi_set_arg_encoding error");
+ }
+
+ /* Now convert our Strings to char* and get pinned handles to these.
+ * This keeps the c# GC from moving stuff around on us */
+ String fullcommand = "";
+ for (int k = 0; k < num_params; k++)
+ {
+ CharacterArray.Add(System.Text.Encoding.UTF8.GetBytes((Params.args[k]+"\0").ToCharArray()));
+ argParam[k] = GCHandle.Alloc(CharacterArray[k], GCHandleType.Pinned);
+ argPtrs[k] = argParam[k].AddrOfPinnedObject();
+ fullcommand = fullcommand + " " + Params.args[k];
+ }
+
+ /* Also stick the array of pointers into memory that will not be GCd */
+ argPtrsStable = GCHandle.Alloc(argPtrs, GCHandleType.Pinned);
+
+ fullcommand = "Command Line: " + fullcommand + "\n";
+ gsIOUpdateMain(fullcommand, fullcommand.Length);
+ code = ghostapi.gsapi_init_with_args(gsInstance, num_params, argPtrsStable.AddrOfPinnedObject());
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsFileAsync: gsapi_init_with_args error");
+ }
+ }
+ catch (DllNotFoundException except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ Params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ e.Result = Params;
+ }
+ catch (BadImageFormatException except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ Params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ e.Result = Params;
+ }
+ catch (GhostscriptException except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ }
+ catch (Exception except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ }
+ finally
+ {
+ if (cleanup)
+ {
+ /* All the pinned items need to be freed so the GC can do its job */
+ for (int k = 0; k < num_params; k++)
+ {
+ argParam[k].Free();
+ }
+ argPtrsStable.Free();
+
+ int code1 = ghostapi.gsapi_exit(gsInstance);
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ code = code1;
+
+ ghostapi.gsapi_delete_instance(gsInstance);
+ Params.return_code = code;
+
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ {
+ Params.result = GS_Result_t.gsOK;
+ e.Result = Params;
+ }
+ else
+ {
+ Params.result = GS_Result_t.gsFAILED;
+ e.Result = Params;
+ }
+ gsInstance = IntPtr.Zero;
+ }
+ }
+ return;
+ }
+
+ /* Processing with gsapi_run_string for callback progress */
+ private void gsBytesAsync(object sender, DoWorkEventArgs e)
+ {
+ gsParamState_t Params = (gsParamState_t)e.Argument;
+ int num_params = Params.args.Count;
+ var argParam = new GCHandle[num_params];
+ var argPtrs = new IntPtr[num_params];
+ List<byte[]> CharacterArray = new List<byte[]>(num_params);
+ GCHandle argPtrsStable = new GCHandle();
+ Byte[] Buffer = new Byte[gsConstants.GS_READ_BUFFER];
+ BackgroundWorker worker = sender as BackgroundWorker;
+ int code = 0;
+ int exitcode = 0;
+ var Feed = new GCHandle();
+ var FeedPtr = new IntPtr();
+ String[] strParams = new String[num_params];
+ FileStream fs = null;
+ bool cleanup = true;
+
+ try
+ {
+ /* Open the file */
+ fs = new FileStream(Params.inputfile, FileMode.Open);
+ var len = (int)fs.Length;
+
+ code = ghostapi.gsapi_new_instance(out gsInstance, IntPtr.Zero);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsBytesAsync: gsapi_new_instance error");
+ }
+ code = ghostapi.gsapi_set_stdio(gsInstance, stdin_callback, stdout_callback, stderr_callback);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsBytesAsync: gsapi_set_stdio error");
+ }
+ code = ghostapi.gsapi_set_arg_encoding(gsInstance, (int)gsEncoding.GS_ARG_ENCODING_UTF8);
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsBytesAsync: gsapi_set_arg_encoding error");
+ }
+
+ /* Now convert our Strings to char* and get pinned handles to these.
+ * This keeps the c# GC from moving stuff around on us */
+ String fullcommand = "";
+ for (int k = 0; k < num_params; k++)
+ {
+ CharacterArray.Add(System.Text.Encoding.UTF8.GetBytes((Params.args[k]+"\0").ToCharArray()));
+ argParam[k] = GCHandle.Alloc(CharacterArray[k], GCHandleType.Pinned);
+ argPtrs[k] = argParam[k].AddrOfPinnedObject();
+ fullcommand = fullcommand + " " + Params.args[k];
+ }
+
+ /* Also stick the array of pointers into memory that will not be GCd */
+ argPtrsStable = GCHandle.Alloc(argPtrs, GCHandleType.Pinned);
+
+ fullcommand = "Command Line: " + fullcommand + "\n";
+ gsIOUpdateMain(fullcommand, fullcommand.Length);
+ code = ghostapi.gsapi_init_with_args(gsInstance, num_params, argPtrsStable.AddrOfPinnedObject());
+ if (code < 0)
+ {
+ throw new GhostscriptException("gsBytesAsync: gsapi_init_with_args error");
+ }
+
+ /* Pin data buffer */
+ Feed = GCHandle.Alloc(Buffer, GCHandleType.Pinned);
+ FeedPtr = Feed.AddrOfPinnedObject();
+
+ /* Now start feeding the input piece meal and do a call back
+ * with our progress */
+ if (code == 0)
+ {
+ int count;
+ double perc;
+ int total = 0;
+ int ret_code;
+
+ ret_code = ghostapi.gsapi_run_string_begin(gsInstance, 0, ref exitcode);
+ if (exitcode < 0)
+ {
+ code = exitcode;
+ throw new GhostscriptException("gsBytesAsync: gsapi_run_string_begin error");
+ }
+
+ while ((count = fs.Read(Buffer, 0, gsConstants.GS_READ_BUFFER)) > 0)
+ {
+ ret_code = ghostapi.gsapi_run_string_continue(gsInstance, FeedPtr, count, 0, ref exitcode);
+ if (exitcode < 0)
+ {
+ code = exitcode;
+ throw new GhostscriptException("gsBytesAsync: gsapi_run_string_continue error");
+ }
+
+ total = total + count;
+ perc = 100.0 * (double)total / (double)len;
+ worker.ReportProgress((int)perc);
+ if (worker.CancellationPending == true)
+ {
+ e.Cancel = true;
+ break;
+ }
+ }
+ ret_code = ghostapi.gsapi_run_string_end(gsInstance, 0, ref exitcode);
+ if (exitcode < 0)
+ {
+ code = exitcode;
+ throw new GhostscriptException("gsBytesAsync: gsapi_run_string_end error");
+ }
+ }
+ }
+ catch (DllNotFoundException except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ Params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ e.Result = Params;
+ }
+ catch (BadImageFormatException except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ Params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ e.Result = Params;
+ }
+ catch (GhostscriptException except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ }
+ catch (Exception except)
+ {
+ /* Could be a file io issue */
+ gsDLLProblemMain("Exception: " + except.Message);
+ Params.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ e.Result = Params;
+ }
+ finally
+ {
+ if (cleanup)
+ {
+ fs.Close();
+
+ /* Free pinned items */
+ for (int k = 0; k < num_params; k++)
+ {
+ argParam[k].Free();
+ }
+ argPtrsStable.Free();
+ Feed.Free();
+
+ /* gs clean up */
+ int code1 = ghostapi.gsapi_exit(gsInstance);
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ code = code1;
+
+ ghostapi.gsapi_delete_instance(gsInstance);
+ Params.return_code = code;
+
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ {
+ Params.result = GS_Result_t.gsOK;
+ e.Result = Params;
+ }
+ else
+ {
+ Params.result = GS_Result_t.gsFAILED;
+ e.Result = Params;
+ }
+ gsInstance = IntPtr.Zero;
+ }
+ }
+ return;
+ }
+
+ /* Worker task for using display device */
+ private void DisplayDeviceAsync(object sender, DoWorkEventArgs e)
+ {
+ int code = 0;
+ gsParamState_t gsparams = (gsParamState_t)e.Argument;
+ GCHandle argPtrsStable = new GCHandle();
+
+ int num_params = gsparams.args.Count;
+ var argParam = new GCHandle[num_params];
+ var argPtrs = new IntPtr[num_params];
+ List<byte[]> CharacterArray = new List<byte[]>(num_params);
+ bool cleanup = true;
+
+ gsparams.result = GS_Result_t.gsOK;
+
+ try
+ {
+ code = ghostapi.gsapi_new_instance(out dispInstance, IntPtr.Zero);
+ if (code < 0)
+ {
+ throw new GhostscriptException("DisplayDeviceAsync: gsapi_new_instance error");
+ }
+
+ code = ghostapi.gsapi_set_stdio(dispInstance, stdin_callback, stdout_callback, stderr_callback);
+ if (code < 0)
+ {
+ throw new GhostscriptException("DisplayDeviceAsync: gsapi_set_stdio error");
+ }
+
+ code = ghostapi.gsapi_set_arg_encoding(dispInstance, (int)gsEncoding.GS_ARG_ENCODING_UTF8);
+ if (code < 0)
+ {
+ throw new GhostscriptException("DisplayDeviceAsync: gsapi_set_arg_encoding error");
+ }
+
+ code = ghostapi.gsapi_set_display_callback(dispInstance, ptr_display_struct);
+ if (code < 0)
+ {
+ throw new GhostscriptException("DisplayDeviceAsync: gsapi_set_display_callback error");
+ }
+
+ String fullcommand = "";
+ for (int k = 0; k < num_params; k++)
+ {
+ CharacterArray.Add(System.Text.Encoding.UTF8.GetBytes((gsparams.args[k] + "\0").ToCharArray()));
+ argParam[k] = GCHandle.Alloc(CharacterArray[k], GCHandleType.Pinned);
+ argPtrs[k] = argParam[k].AddrOfPinnedObject();
+ fullcommand = fullcommand + " " + gsparams.args[k];
+ }
+ argPtrsStable = GCHandle.Alloc(argPtrs, GCHandleType.Pinned);
+
+ fullcommand = "Command Line: " + fullcommand + "\n";
+ gsIOUpdateMain(fullcommand, fullcommand.Length);
+ code = ghostapi.gsapi_init_with_args(dispInstance, num_params, argPtrsStable.AddrOfPinnedObject());
+ if (code < 0)
+ {
+ throw new GhostscriptException("DisplayDeviceAsync: gsapi_init_with_args error");
+ }
+ }
+
+ catch (DllNotFoundException except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ gsparams.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ e.Result = gsparams;
+ }
+ catch (BadImageFormatException except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ gsparams.result = GS_Result_t.gsFAILED;
+ cleanup = false;
+ e.Result = gsparams;
+ }
+ catch (GhostscriptException except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ gsparams.result = GS_Result_t.gsFAILED;
+ if (dispInstance != IntPtr.Zero)
+ ghostapi.gsapi_delete_instance(dispInstance);
+ dispInstance = IntPtr.Zero;
+ }
+ catch (Exception except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ gsparams.result = GS_Result_t.gsFAILED;
+ if (dispInstance != IntPtr.Zero)
+ ghostapi.gsapi_delete_instance(dispInstance);
+ dispInstance = IntPtr.Zero;
+ }
+ finally
+ {
+ if (cleanup)
+ {
+ for (int k = 0; k < num_params; k++)
+ {
+ argParam[k].Free();
+ }
+ argPtrsStable.Free();
+ e.Result = gsparams;
+
+ if (gsparams.result == GS_Result_t.gsOK && (gsparams.task == GS_Task_t.DISPLAY_DEV_NON_PDF ||
+ gsparams.task == GS_Task_t.DISPLAY_DEV_THUMBS_NON_PDF))
+ {
+ gsParamState_t result = DisplayDeviceClose();
+ if (gsparams.result == 0)
+ {
+ gsparams.result = result.result;
+ }
+ }
+ }
+ }
+ return;
+ }
+
+ /* Call the appropriate worker thread based upon the task
+ * that we have to do */
+ private gsStatus RunGhostscriptAsync(gsParamState_t Params)
+ {
+ try
+ {
+ if (m_worker != null && m_worker.IsBusy)
+ {
+ m_worker.CancelAsync();
+ return gsStatus.GS_BUSY;
+ }
+ if (m_worker == null)
+ {
+ m_worker = new BackgroundWorker();
+ m_worker.WorkerReportsProgress = true;
+ m_worker.WorkerSupportsCancellation = true;
+ m_worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(gsCompleted);
+ m_worker.ProgressChanged += new ProgressChangedEventHandler(gsProgressChanged);
+ }
+
+ switch (Params.task)
+ {
+ case GS_Task_t.PS_DISTILL:
+ m_worker.DoWork += new DoWorkEventHandler(gsBytesAsync);
+ break;
+ case GS_Task_t.DISPLAY_DEV_NON_PDF:
+ case GS_Task_t.DISPLAY_DEV_PDF:
+ case GS_Task_t.DISPLAY_DEV_THUMBS_NON_PDF:
+ case GS_Task_t.DISPLAY_DEV_THUMBS_PDF:
+ m_worker.DoWork += new DoWorkEventHandler(DisplayDeviceAsync);
+ break;
+ case GS_Task_t.SAVE_RESULT:
+ case GS_Task_t.CREATE_XPS:
+ default:
+ m_worker.DoWork += new DoWorkEventHandler(gsFileAsync);
+ break;
+ }
+
+ m_params = Params;
+ m_worker.RunWorkerAsync(Params);
+ return gsStatus.GS_READY;
+ }
+ catch (OutOfMemoryException)
+ {
+ Console.WriteLine("Memory allocation failed during gs rendering\n");
+ return gsStatus.GS_ERROR;
+ }
+ }
+
+#region public_methods
+
+ /* Direct call on gsapi to get the version of the DLL we are using */
+ public String GetVersion()
+ {
+ gsapi_revision_t vers;
+ vers.copyright = IntPtr.Zero;
+ vers.product = IntPtr.Zero;
+ vers.revision = 0;
+ vers.revisiondate = 0;
+ int size = System.Runtime.InteropServices.Marshal.SizeOf(vers);
+
+ try
+ {
+ if (ghostapi.gsapi_revision(ref vers, size) == 0)
+ {
+ String product = Marshal.PtrToStringAnsi(vers.product);
+ String output;
+ int major = vers.revision / 100;
+ int minor = vers.revision - major * 100;
+ String versnum = major + "." + minor;
+ output = product + " " + versnum;
+ return output;
+ }
+ else
+ return null;
+ }
+ catch (Exception except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ }
+ return null;
+ }
+
+ /* Use syncronous call to ghostscript to get the
+ * number of pages in a PDF file */
+ public int GetPageCount(String fileName)
+ {
+ gsParamState_t gsparams = new gsParamState_t();
+ gsParamState_t result;
+ gsparams.args = new List<string>();
+
+ gsparams.args.Add("gs");
+ gsparams.args.Add("-dNODISPLAY");
+ gsparams.args.Add("-dNOPAUSE");
+ gsparams.args.Add("-dBATCH");
+ gsparams.args.Add("-I%rom%Resource/Init/");
+ //gsparams.args.Add("-q");
+ gsparams.args.Add("-sFile=\"" + fileName + "\"");
+ gsparams.args.Add("--permit-file-read=\"" + fileName + "\"");
+ gsparams.args.Add("-c");
+ gsparams.args.Add("\"File (r) file runpdfbegin pdfpagecount = quit\"");
+ gsparams.task = GS_Task_t.GET_PAGE_COUNT;
+ m_params = gsparams;
+
+ result = gsFileSync(gsparams);
+
+ if (result.result == GS_Result_t.gsOK)
+ return m_params.num_pages;
+ else
+ return -1;
+ }
+
+#if WPF
+ /* Launch a thread to create XPS document for windows printing */
+ public gsStatus CreateXPS(String fileName, int resolution, int num_pages,
+ Print printsettings, int firstpage, int lastpage)
+ {
+ gsParamState_t gsparams = new gsParamState_t();
+ gsparams.args = new List<string>();
+
+ gsparams.inputfile = fileName;
+ gsparams.args.Add("gs");
+ gsparams.args.Add("-dNOPAUSE");
+ gsparams.args.Add("-dBATCH");
+ gsparams.args.Add("-I%rom%Resource/Init/");
+ gsparams.args.Add("-dSAFER");
+ gsparams.args.Add("-r" + resolution.ToString());
+ gsparams.args.Add("-dNOCACHE");
+ gsparams.args.Add("-sDEVICE=xpswrite");
+ gsparams.args.Add("-dFirstPage=" + firstpage.ToString());
+ gsparams.args.Add("-dLastPage=" + lastpage.ToString());
+
+ if (printsettings != null)
+ {
+ double paperheight;
+ double paperwidth;
+
+ if (printsettings.m_pagedetails.Landscape == true)
+ {
+ paperheight = printsettings.m_pagedetails.PrintableArea.Width;
+ paperwidth = printsettings.m_pagedetails.PrintableArea.Height;
+ }
+ else
+ {
+ paperheight = printsettings.m_pagedetails.PrintableArea.Height;
+ paperwidth = printsettings.m_pagedetails.PrintableArea.Width;
+ }
+
+ double width = paperwidth * 72.0 / 100.0;
+ double height = paperheight * 72.0 / 100.0;
+ gsparams.args.Add("-dDEVICEWIDTHPOINTS=" + width);
+ gsparams.args.Add("-dDEVICEHEIGHTPOINTS=" + height);
+ gsparams.args.Add("-dFIXEDMEDIA");
+
+ /* Scale and translate and rotate if needed */
+ if (printsettings.xaml_autofit.IsChecked == true)
+ gsparams.args.Add("-dFitPage");
+ }
+ gsparams.outputfile = Path.GetTempFileName();
+ gsparams.args.Add("-o");
+ gsparams.args.Add(gsparams.outputfile);
+ gsparams.args.Add("-f");
+ gsparams.args.Add(fileName);
+ gsparams.task = GS_Task_t.CREATE_XPS;
+
+ return RunGhostscriptAsync(gsparams);
+ }
+#endif
+
+ /* Launch a thread rendering all the pages with the display device
+ * to distill an input PS file and save as a PDF. */
+ public gsStatus DistillPS(String fileName, int resolution)
+ {
+ gsParamState_t gsparams = new gsParamState_t();
+ gsparams.args = new List<string>();
+
+ gsparams.inputfile = fileName;
+ gsparams.args.Add("gs");
+ gsparams.args.Add("-dNOPAUSE");
+ gsparams.args.Add("-dBATCH");
+ gsparams.args.Add("-I%rom%Resource/Init/");
+ gsparams.args.Add("-dSAFER");
+ gsparams.args.Add("-sDEVICE=pdfwrite");
+ gsparams.outputfile = Path.GetTempFileName();
+ gsparams.args.Add("-o" + gsparams.outputfile);
+ gsparams.task = GS_Task_t.PS_DISTILL;
+
+ return RunGhostscriptAsync(gsparams);
+ }
+
+ /* Launch a thread rendering all the pages with the display device
+ * to collect thumbnail images or full resolution. */
+ public gsStatus gsDisplayDeviceRenderAll(String fileName, double zoom, bool aa, GS_Task_t task)
+ {
+ gsParamState_t gsparams = new gsParamState_t();
+ int format = (gsConstants.DISPLAY_COLORS_RGB |
+ gsConstants.DISPLAY_DEPTH_8 |
+ gsConstants.DISPLAY_LITTLEENDIAN);
+ int resolution = (int)(72.0 * zoom + 0.5);
+
+ gsparams.args = new List<string>();
+ gsparams.args.Add("gs");
+ gsparams.args.Add("-dNOPAUSE");
+ gsparams.args.Add("-dBATCH");
+ gsparams.args.Add("-I%rom%Resource/Init/");
+ gsparams.args.Add("-dSAFER");
+ gsparams.args.Add("-r" + resolution);
+ if (aa)
+ {
+ gsparams.args.Add("-dTextAlphaBits=4");
+ gsparams.args.Add("-dGraphicsAlphaBits=4");
+ }
+ gsparams.args.Add("-sDEVICE=display");
+ gsparams.args.Add("-dDisplayFormat=" + format);
+ gsparams.args.Add("-f");
+ gsparams.args.Add(fileName);
+ gsparams.task = task;
+ gsparams.currpage = 0;
+
+ return RunGhostscriptAsync(gsparams);
+ }
+
+
+ /* Launch a thread rendering a set of pages with the display device. For use with languages
+ that can be indexed via pages which include PDF and XPS */
+ public gsStatus gsDisplayDeviceRenderPages(String fileName, int first_page, int last_page, double zoom)
+ {
+ gsParamState_t gsparams = new gsParamState_t();
+ int format = (gsConstants.DISPLAY_COLORS_RGB |
+ gsConstants.DISPLAY_DEPTH_8 |
+ gsConstants.DISPLAY_LITTLEENDIAN);
+ int resolution = (int)(72.0 * zoom + 0.5);
+
+ gsparams.args = new List<string>();
+ gsparams.args.Add("gs");
+ gsparams.args.Add("-dNOPAUSE");
+ gsparams.args.Add("-dBATCH");
+ gsparams.args.Add("-I%rom%Resource/Init/");
+ gsparams.args.Add("-dSAFER");
+ gsparams.args.Add("-r" + resolution);
+ gsparams.args.Add("-sDEVICE=display");
+ gsparams.args.Add("-dDisplayFormat=" + format);
+ gsparams.args.Add("-dFirstPage=" + first_page);
+ gsparams.args.Add("-dLastPage=" + last_page);
+ gsparams.args.Add("-f");
+ gsparams.args.Add(fileName);
+ gsparams.task = GS_Task_t.DISPLAY_DEV_PDF;
+ gsparams.currpage = first_page - 1;
+
+ return RunGhostscriptAsync(gsparams);
+ }
+
+ /* Close the display device and delete the instance */
+ public gsParamState_t DisplayDeviceClose()
+ {
+ int code = 0;
+ gsParamState_t out_params = new gsParamState_t();
+
+ out_params.result = GS_Result_t.gsOK;
+
+ try
+ {
+ int code1 = ghostapi.gsapi_exit(dispInstance);
+ if ((code == 0) || (code == gsConstants.E_QUIT))
+ code = code1;
+
+ ghostapi.gsapi_delete_instance(dispInstance);
+ dispInstance = IntPtr.Zero;
+
+ }
+ catch (Exception except)
+ {
+ gsDLLProblemMain("Exception: " + except.Message);
+ out_params.result = GS_Result_t.gsFAILED;
+ }
+
+ return out_params;
+ }
+
+ /* Check if gs is currently busy */
+ public gsStatus GetStatus()
+ {
+ if (m_worker != null && m_worker.IsBusy)
+ return gsStatus.GS_BUSY;
+ else
+ return gsStatus.GS_READY;
+ }
+
+ /* Cancel worker */
+ public void Cancel()
+ {
+ m_worker.CancelAsync();
+ }
+#endregion
+ }
+}
diff --git a/demos/csharp/linux/gs_mono.sln b/demos/csharp/linux/gs_mono.sln
new file mode 100644
index 00000000..c3a015a1
--- /dev/null
+++ b/demos/csharp/linux/gs_mono.sln
@@ -0,0 +1,17 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gtk_viewer", "gtk_viewer\gtk_viewer.csproj", "{8941969C-A209-4109-AF7B-E4CF9D309B5B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x86 = Debug|x86
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8941969C-A209-4109-AF7B-E4CF9D309B5B}.Debug|x86.ActiveCfg = Debug|x86
+ {8941969C-A209-4109-AF7B-E4CF9D309B5B}.Debug|x86.Build.0 = Debug|x86
+ {8941969C-A209-4109-AF7B-E4CF9D309B5B}.Release|x86.ActiveCfg = Release|x86
+ {8941969C-A209-4109-AF7B-E4CF9D309B5B}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+EndGlobal
diff --git a/demos/csharp/linux/gtk_viewer/Properties/AssemblyInfo.cs b/demos/csharp/linux/gtk_viewer/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..a9d0d285
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/Properties/AssemblyInfo.cs
@@ -0,0 +1,26 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("gs_mono_example")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("${AuthorCopyright}")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
diff --git a/demos/csharp/linux/gtk_viewer/gtk-gui/generated.cs b/demos/csharp/linux/gtk_viewer/gtk-gui/generated.cs
new file mode 100644
index 00000000..4842e95d
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/gtk-gui/generated.cs
@@ -0,0 +1,30 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace Stetic
+{
+ internal class Gui
+ {
+ private static bool initialized;
+
+ internal static void Initialize(Gtk.Widget iconRenderer)
+ {
+ if ((Stetic.Gui.initialized == false))
+ {
+ Stetic.Gui.initialized = true;
+ }
+ }
+ }
+
+ internal class ActionGroups
+ {
+ public static Gtk.ActionGroup GetActionGroup(System.Type type)
+ {
+ return Stetic.ActionGroups.GetActionGroup(type.FullName);
+ }
+
+ public static Gtk.ActionGroup GetActionGroup(string name)
+ {
+ return null;
+ }
+ }
+}
diff --git a/demos/csharp/linux/gtk_viewer/gtk-gui/gtk_viewer.src.gsOutput.cs b/demos/csharp/linux/gtk_viewer/gtk-gui/gtk_viewer.src.gsOutput.cs
new file mode 100644
index 00000000..0eab65c6
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/gtk-gui/gtk_viewer.src.gsOutput.cs
@@ -0,0 +1,10 @@
+
+namespace gtk_viewer.src
+{
+ public partial class gsOutput
+ {
+ private void Build()
+ {
+ }
+ }
+}
diff --git a/demos/csharp/linux/gtk_viewer/gtk-gui/gui.stetic b/demos/csharp/linux/gtk_viewer/gtk-gui/gui.stetic
new file mode 100644
index 00000000..172ba497
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/gtk-gui/gui.stetic
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<stetic-interface>
+ <configuration>
+ <images-root-path>..</images-root-path>
+ <target-gtk-version>2.12</target-gtk-version>
+ </configuration>
+ <import>
+ <widget-library name="../bin/Debug/gtk_viewer.exe" internal="true" />
+ </import>
+ <widget class="Gtk.Window" id="gtk_viewer.src.gsOutput" design-size="400 300">
+ <property name="MemberName" />
+ <property name="Title" translatable="yes">gsOutput</property>
+ <property name="WindowPosition">CenterOnParent</property>
+ <child>
+ <placeholder />
+ </child>
+ </widget>
+</stetic-interface> \ No newline at end of file
diff --git a/demos/csharp/linux/gtk_viewer/gtk_viewer.csproj b/demos/csharp/linux/gtk_viewer/gtk_viewer.csproj
new file mode 100644
index 00000000..ee512951
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/gtk_viewer.csproj
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+ <ProjectGuid>{8941969C-A209-4109-AF7B-E4CF9D309B5B}</ProjectGuid>
+ <OutputType>WinExe</OutputType>
+ <RootNamespace>gtk_viewer</RootNamespace>
+ <AssemblyName>gtk_viewer</AssemblyName>
+ <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug</OutputPath>
+ <DefineConstants>DEBUG;MONO</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <PlatformTarget>x64</PlatformTarget>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release</OutputPath>
+ <DefineConstants>MONO</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <PlatformTarget>x64</PlatformTarget>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="Mono.Posix" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="Mono.CSharp" />
+ <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <Package>gtk-sharp-2.0</Package>
+ </Reference>
+ <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <Package>gtk-sharp-2.0</Package>
+ </Reference>
+ <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <Package>glib-sharp-2.0</Package>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="gtk-gui\gui.stetic">
+ <LogicalName>gui.stetic</LogicalName>
+ </EmbeddedResource>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="gtk-gui\generated.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="src\MainWindow.cs" />
+ <Compile Include="src\Program.cs" />
+ <Compile Include="src\MainThumbRendering.cs" />
+ <Compile Include="src\DocPage.cs" />
+ <Compile Include="src\MainRender.cs" />
+ <Compile Include="src\TempFile.cs" />
+ <Compile Include="src\MainZoom.cs" />
+ <Compile Include="..\..\api\ghostapi.cs">
+ <Link>src\ghostapi.cs</Link>
+ </Compile>
+ <Compile Include="src\gsOutput.cs" />
+ <Compile Include="gtk-gui\gtk_viewer.src.gsOutput.cs" />
+ <Compile Include="..\..\api\ghostmono.cs">
+ <Link>src\ghostmono.cs</Link>
+ </Compile>
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <Import Project="packages\GtkSharp.3.22.25.98\build\GtkSharp.targets" Condition="Exists('packages\GtkSharp.3.22.25.98\build\GtkSharp.targets')" />
+</Project> \ No newline at end of file
diff --git a/demos/csharp/linux/gtk_viewer/gtk_viewer.sln b/demos/csharp/linux/gtk_viewer/gtk_viewer.sln
new file mode 100644
index 00000000..229145da
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/gtk_viewer.sln
@@ -0,0 +1,17 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gtk_viewer", "gtk_viewer.csproj", "{8941969C-A209-4109-AF7B-E4CF9D309B5B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x86 = Debug|x86
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8941969C-A209-4109-AF7B-E4CF9D309B5B}.Debug|x86.ActiveCfg = Debug|x86
+ {8941969C-A209-4109-AF7B-E4CF9D309B5B}.Debug|x86.Build.0 = Debug|x86
+ {8941969C-A209-4109-AF7B-E4CF9D309B5B}.Release|x86.ActiveCfg = Release|x86
+ {8941969C-A209-4109-AF7B-E4CF9D309B5B}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+EndGlobal
diff --git a/demos/csharp/linux/gtk_viewer/src/DocPage.cs b/demos/csharp/linux/gtk_viewer/src/DocPage.cs
new file mode 100644
index 00000000..d1cb5493
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/src/DocPage.cs
@@ -0,0 +1,108 @@
+using System;
+using System.ComponentModel;
+using System.Collections.ObjectModel;
+
+namespace gs_mono_example
+{
+ public class DocPage : INotifyPropertyChanged
+ {
+ private int height;
+ private int width;
+ private double zoom;
+ private Gdk.Pixbuf pixbuf;
+ private String pagename;
+ private int pagenum;
+ private Page_Content_t content;
+
+ public int Height
+ {
+ get { return height; }
+ set
+ {
+ height = value;
+ OnPropertyChanged("Height");
+ }
+ }
+
+ public int Width
+ {
+ get { return width; }
+ set
+ {
+ width = value;
+ OnPropertyChanged("Width");
+ }
+ }
+
+ public double Zoom
+ {
+ get { return zoom; }
+ set { zoom = value; }
+ }
+
+ public Gdk.Pixbuf PixBuf
+ {
+ get { return pixbuf; }
+ set
+ {
+ pixbuf = value;
+ OnPropertyChanged("PixBuf");
+ }
+ }
+
+ public String PageName
+ {
+ get { return pagename; }
+ set { pagename = value; }
+ }
+
+ public int PageNum
+ {
+ get { return pagenum; }
+ set { pagenum = value; }
+ }
+ public Page_Content_t Content
+ {
+ get { return content; }
+ set { content = value; }
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ // Create the OnPropertyChanged method to raise the event
+ protected void OnPropertyChanged(string name)
+ {
+ PropertyChangedEventHandler handler = PropertyChanged;
+ if (handler != null)
+ {
+ handler(this, new PropertyChangedEventArgs(name));
+ }
+ }
+
+ public DocPage()
+ {
+ this.height = 0;
+ this.width = 0;
+ this.zoom = 0;
+ this.pixbuf = null;
+ this.pagenum = -1;
+ this.pagename = "";
+ }
+
+ public DocPage(int Height, int Width, double Zoom, Gdk.Pixbuf PixBuf, int PageNum)
+ {
+ this.height = Height;
+ this.width = Width;
+ this.zoom = Zoom;
+ this.pixbuf = PixBuf;
+ this.pagename = ("Page " + (pagenum + 1));
+ }
+ };
+ public class Pages : ObservableCollection<DocPage>
+ {
+ public Pages()
+ : base()
+ {
+ }
+ }
+}
diff --git a/demos/csharp/linux/gtk_viewer/src/MainRender.cs b/demos/csharp/linux/gtk_viewer/src/MainRender.cs
new file mode 100644
index 00000000..e4749f1c
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/src/MainRender.cs
@@ -0,0 +1,136 @@
+using System;
+using System.Runtime;
+using System.Runtime.InteropServices;
+using GhostMono;
+
+namespace gs_mono_example
+{
+ public partial class MainWindow
+ {
+ int m_firstpage;
+ int m_lastpage;
+ int m_current_page;
+ Gtk.TreeIter m_tree_iter;
+
+ /* For PDF optimization */
+ private void PageRangeRender(int first_page, int last_page)
+ {
+ bool render_pages = false;
+ for (int k = first_page; k <= last_page; k++)
+ {
+ if (m_docPages[k].Content != Page_Content_t.FULL_RESOLUTION)
+ {
+ render_pages = true;
+ break;
+ }
+ }
+ if (!render_pages)
+ return;
+
+ m_busy_render = true;
+ m_firstpage = first_page;
+ m_lastpage = last_page;
+ //m_ghostscript.gsDisplayDeviceRender(m_currfile, first_page + 1, last_page + 1, 1.0);
+ }
+
+ /* Callback from ghostscript with the rendered image. */
+ private void MainPageCallback(int width, int height, int raster, double zoom_in,
+ int page_num, IntPtr data)
+ {
+ Byte[] bitmap = null;
+
+ bitmap = new byte[raster * height];
+ Marshal.Copy(data, bitmap, 0, raster * height);
+ DocPage doc_page = m_docPages[m_current_page];
+
+ if (doc_page.Content != Page_Content_t.FULL_RESOLUTION ||
+ m_aa_change)
+ {
+ doc_page.Width = width;
+ doc_page.Height = height;
+ doc_page.Content = Page_Content_t.FULL_RESOLUTION;
+
+ doc_page.Zoom = m_doczoom;
+ doc_page.PixBuf = new Gdk.Pixbuf(bitmap,
+ Gdk.Colorspace.Rgb, false, 8, width,
+ height, raster);
+
+ m_GtkimageStoreMain.SetValue(m_tree_iter, 0, doc_page.PixBuf);
+ }
+
+ if (page_num == 1)
+ m_page_scroll_pos[0] = height;
+ else
+ m_page_scroll_pos[page_num - 1] = height + m_page_scroll_pos[page_num - 2];
+
+ m_GtkimageStoreMain.IterNext(ref m_tree_iter);
+ m_current_page += 1;
+ m_GtkProgressBar.Fraction = ((double)page_num / ((double)page_num + 1));
+ return;
+ }
+
+ private void RenderingDone()
+ {
+ if (m_firstime)
+ {
+ for (int k = 0; k < m_numpages; k++)
+ {
+ pagesizes_t size = new pagesizes_t();
+ size.height = m_docPages[k].Height;
+ size.width = m_docPages[k].Width;
+ m_page_sizes.Add(size);
+ }
+ }
+
+ m_aa_change = false;
+ m_firstime = false;
+ m_busy_render = false;
+
+ /* Free up the large objects generated from the image pages. If
+ * this is not done, the application will run out of memory as
+ * the user does repeated zoom or aa changes, generating more and
+ * more pages without freeing previous ones. The large object heap
+ * is handled differently than other memory in terms of its GC */
+ GCSettings.LargeObjectHeapCompactionMode =
+ GCLargeObjectHeapCompactionMode.CompactOnce;
+ GC.Collect();
+
+ RemoveProgressBar();
+ m_file_open = true;
+ m_ghostscript.gsPageRenderedMain -= new ghostsharp.gsCallBackPageRenderedMain(gsPageRendered);
+ m_GtkaaCheck.Sensitive = true;
+ m_GtkZoomMinus.Sensitive = true;
+ m_GtkZoomPlus.Sensitive = true;
+ }
+
+ /* Render all pages full resolution */
+ private void RenderMainFirst()
+ {
+ m_firstpage = 1;
+ m_current_page = 0;
+ m_GtkimageStoreMain.GetIterFirst(out m_tree_iter);
+ m_busy_render = true;
+ m_ghostscript.gsPageRenderedMain += new ghostsharp.gsCallBackPageRenderedMain(gsPageRendered);
+ AddProgressBar("Rendering Pages");
+ m_ghostscript.gsDisplayDeviceRenderAll(m_currfile, m_doczoom, m_aa, GS_Task_t.DISPLAY_DEV_NON_PDF);
+ }
+
+ /* Render all, but only if not already busy, called via zoom or aa changes */
+ private void RenderMainAll()
+ {
+ try
+ {
+ if (!m_init_done)
+ return;
+ m_GtkaaCheck.Sensitive = false;
+ m_GtkZoomMinus.Sensitive = false;
+ m_GtkZoomPlus.Sensitive = false;
+ RenderMainFirst();
+ }
+ catch(Exception except)
+ {
+ var mess = except.Message;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs b/demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs
new file mode 100644
index 00000000..0d64fa13
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs
@@ -0,0 +1,91 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using GhostMono;
+
+namespace gs_mono_example
+{
+ public partial class MainWindow
+ {
+ private static List<DocPage> m_thumbnails;
+
+ /* Assign current pages to blown up thumbnail images */
+ private void ThumbAssignMain(int page_num, int width, int height, double zoom_in)
+ {
+ DocPage doc_page = new DocPage();
+ doc_page.Content = Page_Content_t.THUMBNAIL;
+ doc_page.Zoom = zoom_in;
+ doc_page.Width = (int)(width / (Constants.SCALE_THUMB));
+ doc_page.Height = (int)(height / (Constants.SCALE_THUMB));
+ doc_page.PixBuf = m_thumbnails[page_num - 1].PixBuf.ScaleSimple(doc_page.Width, doc_page.Height, Gdk.InterpType.Nearest);
+ doc_page.PageNum = page_num;
+ m_docPages.Add(doc_page);
+
+ if (page_num == 1)
+ m_page_scroll_pos.Add(height);
+ else
+ m_page_scroll_pos.Add(height + m_page_scroll_pos[page_num - 2]);
+ }
+
+ private void ThumbsDone()
+ {
+ m_GtkProgressBar.Fraction = 1.0;
+ m_ghostscript.gsPageRenderedMain -= new ghostsharp.gsCallBackPageRenderedMain(gsThumbRendered);
+ m_numpages = m_thumbnails.Count;
+ if (m_numpages < 1)
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "File failed to open properly");
+ CleanUp();
+ }
+ else
+ {
+ m_currpage = 1;
+ m_GtkpageEntry.Text = "1";
+ m_GtkpageTotal.Text = "/" + m_numpages;
+ m_GtkzoomEntry.Text = "100";
+
+ m_GtkmainScroll.ShowAll();
+ m_init_done = true;
+ RemoveProgressBar();
+ RenderMainFirst();
+ }
+ }
+
+ /* Callback from GS with the rendered thumbnail. Also update progress */
+ private void ThumbPageCallback(int width, int height, int raster, double zoom_in,
+ int page_num, IntPtr data)
+ {
+ Byte[] bitmap = null;
+
+ bitmap = new byte[raster * height];
+ Marshal.Copy(data, bitmap, 0, raster * height);
+ DocPage doc_page = new DocPage();
+ m_thumbnails.Add(doc_page);
+
+ doc_page.Content = Page_Content_t.THUMBNAIL;
+ doc_page.Width = width;
+ doc_page.Height = height;
+ doc_page.Zoom = zoom_in;
+ doc_page.PixBuf = new Gdk.Pixbuf(bitmap,
+ Gdk.Colorspace.Rgb, false, 8, width,
+ height, raster);
+ m_GtkimageStoreThumb.AppendValues(doc_page.PixBuf);
+
+ ThumbAssignMain(page_num, width, height, 1.0);
+ m_GtkimageStoreMain.AppendValues(m_docPages[page_num-1].PixBuf);
+
+ m_GtkProgressBar.Fraction = ((double)page_num / ((double)page_num + 1));
+ return;
+ }
+
+ /* Render the thumbnail images */
+ private void RenderThumbs()
+ {
+ AddProgressBar("Rendering Thumbs");
+ m_ghostscript.gsPageRenderedMain +=
+ new ghostsharp.gsCallBackPageRenderedMain(gsThumbRendered);
+ m_ghostscript.gsDisplayDeviceRenderAll(m_currfile,
+ Constants.SCALE_THUMB, false, GS_Task_t.DISPLAY_DEV_THUMBS_NON_PDF);
+ }
+ }
+} \ No newline at end of file
diff --git a/demos/csharp/linux/gtk_viewer/src/MainWindow.cs b/demos/csharp/linux/gtk_viewer/src/MainWindow.cs
new file mode 100644
index 00000000..f621cd47
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/src/MainWindow.cs
@@ -0,0 +1,713 @@
+using System;
+using System.Collections.Generic;
+using Gtk;
+using GhostMono;
+using System.Diagnostics;
+
+namespace gs_mono_example
+{
+ static class Constants
+ {
+ public const double SCALE_THUMB = 0.1;
+ public const int DEFAULT_GS_RES = 300;
+ public const int ZOOM_MAX = 4;
+ public const double ZOOM_MIN = .25;
+ }
+
+ public enum NotifyType_t
+ {
+ MESS_STATUS,
+ MESS_ERROR
+ };
+
+ public enum Page_Content_t
+ {
+ FULL_RESOLUTION = 0,
+ THUMBNAIL,
+ OLD_RESOLUTION,
+ LOW_RESOLUTION,
+ NOTSET,
+ BLANK
+ };
+
+ public struct pagesizes_t
+ {
+ public double width;
+ public double height;
+ }
+
+ public partial class MainWindow : Gtk.Window
+ {
+ ghostsharp m_ghostscript;
+ bool m_file_open;
+ String m_currfile;
+ String m_extension;
+ List<TempFile> m_tempfiles;
+ String m_origfile;
+ int m_currpage;
+ gsOutput m_gsoutput;
+ public int m_numpages;
+ private static Pages m_docPages;
+ private static double m_doczoom;
+ public List<pagesizes_t> m_page_sizes;
+ bool m_init_done;
+ bool m_busy_render;
+ bool m_firstime;
+ bool m_aa;
+ bool m_aa_change;
+ List<int> m_page_scroll_pos;
+ Gtk.ProgressBar m_GtkProgressBar;
+ Label m_GtkProgressLabel;
+ HBox m_GtkProgressBox;
+ Gtk.TreeView m_GtkTreeThumb;
+ Gtk.TreeView m_GtkTreeMain;
+ Gtk.VBox m_GtkvBoxMain;
+ Label m_GtkpageTotal;
+ Entry m_GtkpageEntry;
+ Gtk.ListStore m_GtkimageStoreThumb;
+ Gtk.ListStore m_GtkimageStoreMain;
+ Gtk.ScrolledWindow m_GtkthumbScroll;
+ Gtk.ScrolledWindow m_GtkmainScroll;
+ Gtk.Entry m_GtkzoomEntry;
+ Gtk.CheckButton m_GtkaaCheck;
+ Gtk.Button m_GtkZoomPlus;
+ Gtk.Button m_GtkZoomMinus;
+ String m_zoom_txt;
+ String m_page_txt;
+ bool m_ignore_scroll_change;
+
+ void ShowMessage(NotifyType_t type, string message)
+ {
+ Gtk.MessageType mess;
+
+ if (type == NotifyType_t.MESS_ERROR)
+ {
+ mess = MessageType.Error;
+ }
+ else
+ {
+ mess = MessageType.Warning;
+ }
+
+ /* Dispatch on UI thread */
+ Gtk.Application.Invoke(delegate
+ {
+ MessageDialog md = new MessageDialog(null,
+ DialogFlags.Modal,
+ mess,
+ ButtonsType.Ok,
+ message);
+ md.SetPosition(WindowPosition.Center);
+ md.ShowAll();
+ md.Run();
+ md.Destroy();
+ });
+ }
+
+ public MainWindow() : base(Gtk.WindowType.Toplevel)
+ {
+ /* Set up ghostscript calls for progress update */
+ m_ghostscript = new ghostsharp();
+ m_ghostscript.gsUpdateMain += new ghostsharp.gsCallBackMain(gsProgress);
+ m_ghostscript.gsIOUpdateMain += new ghostsharp.gsIOCallBackMain(gsIO);
+ m_ghostscript.gsDLLProblemMain += new ghostsharp.gsDLLProblem(gsDLL);
+
+ DeleteEvent += delegate { Application.Quit(); };
+
+ m_currpage = 0;
+ m_gsoutput = new gsOutput();
+ m_gsoutput.Activate();
+ m_tempfiles = new List<TempFile>();
+ m_thumbnails = new List<DocPage>();
+ m_docPages = new Pages();
+ m_page_sizes = new List<pagesizes_t>();
+ m_page_scroll_pos = new List<int>();
+ m_file_open = false;
+ m_doczoom = 1.0;
+ m_init_done = false;
+ m_busy_render = true;
+ m_firstime = true;
+ m_aa = true;
+ m_aa_change = false;
+ m_zoom_txt = "100";
+ m_page_txt = "1";
+ m_ignore_scroll_change = false;
+
+ /* Set up Vbox in main window */
+ this.SetDefaultSize(500, 700);
+ this.Title = "GhostPDL Mono GTK Demo";
+ m_GtkvBoxMain = new VBox(false, 0);
+ this.Add(m_GtkvBoxMain);
+
+ /* Add Menu Bar to vBox */
+ Gtk.MenuBar menu_bar = new MenuBar();
+ Menu filemenu = new Menu();
+ MenuItem file = new MenuItem("File");
+ file.Submenu = filemenu;
+
+ AccelGroup agr = new AccelGroup();
+ AddAccelGroup(agr);
+
+ ImageMenuItem openi = new ImageMenuItem(Stock.Open, agr);
+ openi.AddAccelerator("activate", agr, new AccelKey(
+ Gdk.Key.o, Gdk.ModifierType.ControlMask, AccelFlags.Visible));
+ openi.Activated += OnOpen;
+ filemenu.Append(openi);
+
+ ImageMenuItem closei = new ImageMenuItem(Stock.Close, agr);
+ closei.AddAccelerator("activate", agr, new AccelKey(
+ Gdk.Key.w, Gdk.ModifierType.ControlMask, AccelFlags.Visible));
+ closei.Activated += OnClose;
+ filemenu.Append(closei);
+
+ MenuItem messagesi = new MenuItem("Show Messages");
+ messagesi.Activated += OnShowMessages;
+ filemenu.Append(messagesi);
+
+ MenuItem about = new MenuItem("About");
+ about.Activated += OnAboutClicked;
+ filemenu.Append(about);
+
+ SeparatorMenuItem sep = new SeparatorMenuItem();
+ filemenu.Append(sep);
+
+ ImageMenuItem quiti = new ImageMenuItem(Stock.Quit, agr);
+ quiti.AddAccelerator("activate", agr, new AccelKey(
+ Gdk.Key.q, Gdk.ModifierType.ControlMask, AccelFlags.Visible));
+ filemenu.Append(quiti);
+ quiti.Activated += OnQuit;
+
+ menu_bar.Append(file);
+
+ m_GtkvBoxMain.PackStart(menu_bar, false, false, 0);
+
+ /* Add a hbox with the page information, zoom control, and aa to vbox */
+ HBox pageBox = new HBox(false, 0);
+ m_GtkpageEntry = new Entry();
+ m_GtkpageEntry.Activated += PageChanged;
+ m_GtkpageEntry.WidthChars = 4;
+ m_GtkpageTotal = new Label("/0");
+ pageBox.PackStart(m_GtkpageEntry, false, false, 0);
+ pageBox.PackStart(m_GtkpageTotal, false, false, 0);
+
+ HBox zoomBox = new HBox(false, 0);
+ m_GtkZoomPlus = new Button();
+ m_GtkZoomPlus.Label = "+";
+ m_GtkZoomPlus.Clicked += ZoomIn;
+ m_GtkZoomMinus = new Button();
+ m_GtkZoomMinus.Label = "–";
+ m_GtkZoomMinus.Clicked += ZoomOut;
+ m_GtkzoomEntry = new Entry();
+ m_GtkzoomEntry.WidthChars = 3;
+ m_GtkzoomEntry.Activated += ZoomChanged;
+ Label precentLabel = new Label("%");
+ zoomBox.PackStart(m_GtkZoomPlus, false, false, 0);
+ zoomBox.PackStart(m_GtkZoomMinus, false, false, 0);
+ zoomBox.PackStart(m_GtkzoomEntry, false, false, 0);
+ zoomBox.PackStart(precentLabel, false, false, 0);
+
+ HBox hBoxControls = new HBox(false, 0);
+ m_GtkaaCheck = new CheckButton("Enable Antialias:");
+ m_GtkaaCheck.Active = true;
+ m_GtkaaCheck.Clicked += AaCheck_Clicked;
+ hBoxControls.PackStart(pageBox, false, false, 0);
+ hBoxControls.PackStart(zoomBox, false, false, 20);
+ hBoxControls.PackStart(m_GtkaaCheck, false, false, 0);
+
+ m_GtkvBoxMain.PackStart(hBoxControls, false, false, 0);
+
+ /* Tree view containing thumbnail and main images */
+ HBox hBoxPages = new HBox(false, 0);
+
+ /* Must be scrollable */
+ m_GtkthumbScroll = new ScrolledWindow();
+ m_GtkthumbScroll.BorderWidth = 5;
+ m_GtkthumbScroll.ShadowType = ShadowType.In;
+
+ m_GtkmainScroll = new ScrolledWindow();
+ m_GtkmainScroll.BorderWidth = 5;
+ m_GtkmainScroll.ShadowType = ShadowType.In;
+ m_GtkmainScroll.Vadjustment.ValueChanged += Vadjustment_Changed;
+
+ m_GtkTreeThumb = new Gtk.TreeView();
+ m_GtkTreeThumb.HeadersVisible = false;
+ m_GtkimageStoreThumb = new Gtk.ListStore(typeof(Gdk.Pixbuf));
+ m_GtkTreeThumb.AppendColumn("Thumb", new Gtk.CellRendererPixbuf(), "pixbuf", 0);
+ m_GtkTreeThumb.Style.YThickness = 100;
+ m_GtkthumbScroll.Add(m_GtkTreeThumb);
+ m_GtkTreeThumb.RowActivated += M_GtkTreeThumb_RowActivated;
+
+ m_GtkTreeMain = new Gtk.TreeView();
+ m_GtkTreeMain.HeadersVisible = false;
+ m_GtkTreeMain.RulesHint = false;
+
+ m_GtkimageStoreMain = new Gtk.ListStore(typeof(Gdk.Pixbuf));
+ m_GtkTreeMain.AppendColumn("Main", new Gtk.CellRendererPixbuf(), "pixbuf", 0);
+ m_GtkmainScroll.Add(m_GtkTreeMain);
+
+ // Separate with gridlines
+ m_GtkTreeMain.EnableGridLines = TreeViewGridLines.Horizontal;
+
+ //To disable selections, set the selection mode to None:
+ m_GtkTreeMain.Selection.Mode = SelectionMode.None;
+
+ hBoxPages.PackStart(m_GtkthumbScroll, false, false, 0);
+ hBoxPages.PackStart(m_GtkmainScroll, true, true, 0);
+
+ m_GtkTreeThumb.Model = m_GtkimageStoreThumb;
+ m_GtkTreeMain.Model = m_GtkimageStoreMain;
+
+ m_GtkvBoxMain.PackStart(hBoxPages, true, true, 0);
+
+ /* For case of opening another file */
+ string[] arguments = Environment.GetCommandLineArgs();
+ if (arguments.Length > 1)
+ {
+ m_currfile = arguments[1];
+ ProcessFile();
+ }
+ }
+
+ void Vadjustment_Changed(object sender, EventArgs e)
+ {
+ if (!m_init_done)
+ {
+ return;
+ }
+
+ if (m_ignore_scroll_change)
+ {
+ m_ignore_scroll_change = false;
+ return;
+ }
+
+ Gtk.Adjustment zz = sender as Gtk.Adjustment;
+ double val = zz.Value;
+ int page = 1;
+
+ for (int k = 0; k < m_numpages; k++)
+ {
+ if (val <= m_page_scroll_pos[k])
+ {
+ m_GtkpageEntry.Text = page.ToString();
+ m_page_txt = m_GtkpageEntry.Text;
+ return;
+ }
+ page += 1;
+ }
+ m_GtkpageEntry.Text = m_numpages.ToString();
+ m_page_txt = m_GtkpageEntry.Text;
+ }
+
+ void OnAboutClicked(object sender, EventArgs args)
+ {
+ AboutDialog about = new AboutDialog();
+ about.ProgramName = "GhostPDL Gtk# Viewer";
+ about.Version = "0.1";
+ about.Copyright = "(c) Artifex Software";
+ about.Comments = @"A demo of GhostPDL API with C# Mono";
+ about.Website = "http://www.artifex.com";
+ about.Run();
+ about.Destroy();
+ }
+
+ /* C# Insanity to get the index of the selected item */
+ void M_GtkTreeThumb_RowActivated(object o, RowActivatedArgs args)
+ {
+ TreeModel treeModel;
+ TreeSelection my_selected_row = m_GtkTreeThumb.Selection;
+
+ var TreePath = my_selected_row.GetSelectedRows(out treeModel);
+ var item = TreePath.GetValue(0);
+ var result = item.ToString();
+ int index = System.Convert.ToInt32(result);
+
+ ScrollMainTo(index);
+ }
+
+ void ScrollMainTo(int index)
+ {
+ m_ignore_scroll_change = true;
+
+ if (index < 0 || index > m_numpages - 1)
+ return;
+
+ if (index == 0)
+ m_GtkmainScroll.Vadjustment.Value = 0;
+ else
+ m_GtkmainScroll.Vadjustment.Value = m_page_scroll_pos[index-1];
+
+ m_currpage = index + 1;
+ m_GtkpageEntry.Text = m_currpage.ToString();
+ m_page_txt = m_GtkpageEntry.Text;
+ }
+
+ void AddProgressBar(String text)
+ {
+ /* Progress bar */
+ m_GtkProgressBox = new HBox(false, 0);
+ m_GtkProgressBar = new ProgressBar();
+ m_GtkProgressBar.Orientation = ProgressBarOrientation.LeftToRight;
+ m_GtkProgressBox.PackStart(m_GtkProgressBar, true, true, 0);
+ m_GtkProgressLabel = new Label(text);
+ m_GtkProgressBox.PackStart(m_GtkProgressLabel, false, false, 0);
+ m_GtkvBoxMain.PackStart(m_GtkProgressBox, false, false, 0);
+ m_GtkProgressBar.Fraction = 0.0;
+ this.ShowAll();
+ }
+
+ void RemoveProgressBar()
+ {
+ m_GtkvBoxMain.Remove(m_GtkProgressBox);
+ this.ShowAll();
+ }
+
+ void AaCheck_Clicked(object sender, EventArgs e)
+ {
+ m_aa = !m_aa;
+ m_aa_change = true;
+ if (m_init_done && !m_busy_render)
+ RenderMainAll();
+ }
+
+ private void OnQuit(object sender, EventArgs e)
+ {
+ Application.Quit();
+ }
+
+ private void OnShowMessages(object sender, EventArgs e)
+ {
+ m_gsoutput.Show();
+ }
+
+ private void OnClose(object sender, EventArgs e)
+ {
+ if (m_init_done)
+ CleanUp();
+ }
+
+ private void gsIO(String mess, int len)
+ {
+ Gtk.TextBuffer buffer = m_gsoutput.m_textView.Buffer;
+ Gtk.TextIter ti = buffer.EndIter;
+
+ var part = mess.Substring(0, len);
+ buffer.Insert(ref ti, part);
+ }
+
+ private void gsDLL(String mess)
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, mess);
+ }
+
+ private void gsThumbRendered(int width, int height, int raster,
+ IntPtr data, gsParamState_t state)
+ {
+ ThumbPageCallback(width, height, raster, state.zoom, state.currpage, data);
+ }
+
+ private void gsPageRendered(int width, int height, int raster,
+ IntPtr data, gsParamState_t state)
+ {
+ MainPageCallback(width, height, raster, state.zoom, state.currpage, data);
+ }
+
+ private void gsProgress(gsThreadCallBack info)
+ {
+ if (info.Completed)
+ {
+ switch (info.Params.task)
+ {
+ case GS_Task_t.PS_DISTILL:
+ m_GtkProgressBar.Fraction = 1.0;
+ RemoveProgressBar();
+ break;
+
+ case GS_Task_t.SAVE_RESULT:
+ break;
+
+ case GS_Task_t.DISPLAY_DEV_THUMBS_NON_PDF:
+ case GS_Task_t.DISPLAY_DEV_THUMBS_PDF:
+ ThumbsDone();
+ break;
+
+ case GS_Task_t.DISPLAY_DEV_PDF:
+ case GS_Task_t.DISPLAY_DEV_NON_PDF:
+ RenderingDone();
+ break;
+ }
+
+ if (info.Params.result == GS_Result_t.gsFAILED)
+ {
+ switch (info.Params.task)
+ {
+ case GS_Task_t.CREATE_XPS:
+ ShowMessage(NotifyType_t.MESS_STATUS, "Ghostscript failed to create XPS");
+ break;
+
+ case GS_Task_t.PS_DISTILL:
+ ShowMessage(NotifyType_t.MESS_STATUS, "Ghostscript failed to distill PS");
+ break;
+
+ case GS_Task_t.SAVE_RESULT:
+ ShowMessage(NotifyType_t.MESS_STATUS, "Ghostscript failed to convert document");
+ break;
+
+ default:
+ ShowMessage(NotifyType_t.MESS_STATUS, "Ghostscript failed.");
+ break;
+ }
+ return;
+ }
+ GSResult(info.Params);
+ }
+ else
+ {
+ switch (info.Params.task)
+ {
+ case GS_Task_t.CREATE_XPS:
+ case GS_Task_t.PS_DISTILL:
+ m_GtkProgressBar.Fraction = (double)(info.Progress) / 100.0;
+ break;
+
+ case GS_Task_t.SAVE_RESULT:
+ break;
+ }
+ }
+ }
+
+ /* GS Result*/
+ public void GSResult(gsParamState_t gs_result)
+ {
+ TempFile tempfile = null;
+
+ if (gs_result.outputfile != null)
+ tempfile = new TempFile(gs_result.outputfile);
+
+ if (gs_result.result == GS_Result_t.gsCANCELLED)
+ {
+ if (tempfile != null)
+ {
+ try
+ {
+ tempfile.DeleteFile();
+ }
+ catch
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "Problem Deleting Temp File");
+ }
+ }
+ return;
+ }
+ if (gs_result.result == GS_Result_t.gsFAILED)
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "GS Failed Conversion");
+ if (tempfile != null)
+ {
+ try
+ {
+ tempfile.DeleteFile();
+ }
+ catch
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "Problem Deleting Temp File");
+ }
+ }
+ return;
+ }
+
+ switch (gs_result.task)
+ {
+ case GS_Task_t.PS_DISTILL:
+ m_origfile = gs_result.inputfile;
+
+ Gtk.FileChooserDialog dialog = new Gtk.FileChooserDialog("Save Document",
+ (Gtk.Window)this.Toplevel,
+ Gtk.FileChooserAction.Save);
+ dialog.LocalOnly = true;
+ dialog.AddButton(Gtk.Stock.Cancel, Gtk.ResponseType.Cancel);
+ dialog.AddButton(Gtk.Stock.Save, Gtk.ResponseType.Yes);
+ dialog.SetFilename(System.IO.Path.GetFileNameWithoutExtension(m_origfile) + ".pdf");
+
+ Gtk.FileFilter filter = new Gtk.FileFilter();
+ filter.Name = "doc/pdf";
+ filter.AddMimeType("application/pdf");
+ filter.AddPattern("*.pdf");
+ dialog.Filter = filter;
+
+ int response = dialog.Run();
+ if (response == (int)Gtk.ResponseType.Yes)
+ {
+ m_currfile = dialog.Filename;
+ try
+ {
+ if (System.IO.File.Exists(m_currfile))
+ {
+ System.IO.File.Delete(m_currfile);
+ }
+
+ var res = System.IO.File.Exists(tempfile.Filename);
+ System.IO.File.Copy(tempfile.Filename, dialog.Filename);
+ }
+ catch (Exception except)
+ {
+ ShowMessage(NotifyType_t.MESS_ERROR, "Exception Saving Distilled Result:" + except.Message);
+ }
+ }
+
+ dialog.Destroy();
+ tempfile.DeleteFile();
+ break;
+ }
+ }
+
+ protected void OnDeleteEvent(object sender, DeleteEventArgs a)
+ {
+ Application.Quit();
+ a.RetVal = true;
+ }
+
+ protected void OnOpen(object sender, EventArgs e)
+ {
+ Gtk.FileChooserDialog dialog = new Gtk.FileChooserDialog("Open Document",
+ (Gtk.Window)this.Toplevel,
+ Gtk.FileChooserAction.Open);
+
+ dialog.AddButton(Gtk.Stock.Cancel, Gtk.ResponseType.Cancel);
+ dialog.AddButton(Gtk.Stock.Open, Gtk.ResponseType.Accept);
+
+ dialog.DefaultResponse = Gtk.ResponseType.Cancel;
+ dialog.LocalOnly = true;
+
+ Gtk.FileFilter filter = new Gtk.FileFilter();
+ filter.Name = "doc/pdf";
+ filter.AddMimeType("application/pdf");
+ filter.AddMimeType("application/ps");
+ filter.AddMimeType("application/eps");
+ filter.AddMimeType("application/pcl");
+ filter.AddMimeType("application/xps");
+ filter.AddMimeType("application/oxps");
+ filter.AddPattern("*.pdf");
+ filter.AddPattern("*.ps");
+ filter.AddPattern("*.eps");
+ filter.AddPattern("*.bin");
+ filter.AddPattern("*.xps");
+ filter.AddPattern("*.oxps");
+ dialog.Filter = filter;
+ int response = dialog.Run();
+
+ if (response != (int)Gtk.ResponseType.Accept)
+ {
+ dialog.Destroy();
+ return;
+ }
+
+ if (m_file_open)
+ {
+ /* launch a new process */
+ string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
+
+ Process p = new Process();
+ try
+ {
+ String name = dialog.Filename;
+ Process.Start(path, name);
+ }
+ catch (Exception except)
+ {
+ Console.WriteLine("Problem opening file: " + except.Message);
+ }
+ dialog.Destroy();
+ return;
+ }
+
+ m_currfile = dialog.Filename;
+ dialog.Destroy();
+ ProcessFile();
+ }
+
+ public void ProcessFile()
+ {
+ m_extension = m_currfile.Split('.')[1];
+ int result;
+ if (!(m_extension.ToUpper() == "PDF" || m_extension.ToUpper() == "pdf"))
+ {
+ MessageDialog md = new MessageDialog(this,
+ DialogFlags.DestroyWithParent, MessageType.Question,
+ ButtonsType.YesNo, "Would you like to Distill this file ?");
+
+ result = md.Run();
+ md.Destroy();
+ if ((ResponseType)result == ResponseType.Yes)
+ {
+ AddProgressBar("Distilling");
+ if (m_ghostscript.DistillPS(m_currfile, Constants.DEFAULT_GS_RES) == gsStatus.GS_BUSY)
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "GS currently busy");
+ return;
+ }
+ return;
+ }
+ }
+ m_file_open = true;
+ RenderThumbs();
+ }
+
+ private void CleanUp()
+ {
+ /* Clear out everything */
+ if (m_docPages != null && m_docPages.Count > 0)
+ m_docPages.Clear();
+ if (m_thumbnails != null && m_thumbnails.Count > 0)
+ m_thumbnails.Clear();
+ if (m_page_sizes != null && m_page_sizes.Count > 0)
+ m_page_sizes.Clear();
+ if (m_page_scroll_pos != null && m_page_scroll_pos.Count > 0)
+ m_page_scroll_pos.Clear();
+
+ m_GtkimageStoreThumb.Clear();
+ m_GtkimageStoreMain.Clear();
+
+ m_currpage = 0;
+ m_thumbnails = new List<DocPage>();
+ m_docPages = new Pages();
+ m_page_sizes = new List<pagesizes_t>();
+ m_page_scroll_pos = new List<int>();
+
+ m_file_open = false;
+ m_doczoom = 1.0;
+ m_init_done = false;
+ m_busy_render = true;
+ m_firstime = true;
+ m_aa = true;
+ m_aa_change = false;
+ m_zoom_txt = "100";
+ m_page_txt = "0";
+ m_GtkpageTotal.Text = "/ 0";
+ m_ignore_scroll_change = false;
+ m_currfile = null;
+ m_origfile = null;
+ m_numpages = -1;
+ m_file_open = false;
+ CleanUpTempFiles();
+ m_tempfiles = new List<TempFile>();
+ return;
+ }
+
+ private void CleanUpTempFiles()
+ {
+ for (int k = 0; k < m_tempfiles.Count; k++)
+ {
+ try
+ {
+ m_tempfiles[k].DeleteFile();
+ }
+ catch
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "Problem Deleting Temp File");
+ }
+ }
+ m_tempfiles.Clear();
+ }
+ }
+}
diff --git a/demos/csharp/linux/gtk_viewer/src/MainZoom.cs b/demos/csharp/linux/gtk_viewer/src/MainZoom.cs
new file mode 100644
index 00000000..5d415351
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/src/MainZoom.cs
@@ -0,0 +1,203 @@
+using System;
+using System.Text.RegularExpressions;
+
+namespace gs_mono_example
+{
+ public partial class MainWindow
+ {
+ static double[] ZoomSteps = new double[]
+ {0.25, 0.333, 0.482, 0.667, 0.75, 1.0, 1.25, 1.37,
+ 1.50, 2.00, 3.00, 4.00};
+
+ public double GetNextZoom(double curr_zoom, int direction)
+ {
+ int k = 0;
+
+ /* Find segement we are in */
+ for (k = 0; k < ZoomSteps.Length - 1; k++)
+ {
+ if (curr_zoom >= ZoomSteps[k] && curr_zoom <= ZoomSteps[k + 1])
+ break;
+ }
+
+ /* Handling increasing zoom case. Look at upper boundary */
+ if (curr_zoom < ZoomSteps[k + 1] && direction > 0)
+ return ZoomSteps[k + 1];
+
+ if (Math.Abs(curr_zoom - ZoomSteps[k + 1]) <= Single.Epsilon && direction > 0)
+ {
+ if (k + 1 < ZoomSteps.Length - 1)
+ return ZoomSteps[k + 2];
+ else
+ return ZoomSteps[k + 1];
+ }
+
+ /* Handling decreasing zoom case. Look at lower boundary */
+ if (curr_zoom > ZoomSteps[k] && direction < 0)
+ return ZoomSteps[k];
+
+ if (Math.Abs(curr_zoom - ZoomSteps[k]) <= Single.Epsilon && direction < 0)
+ {
+ if (k > 0)
+ return ZoomSteps[k - 1];
+ else
+ return ZoomSteps[k];
+ }
+ return curr_zoom;
+ }
+
+ private bool ZoomDisabled()
+ {
+ if (!m_init_done || m_busy_render)
+ return true;
+ else
+ return false;
+ }
+
+ private void ZoomOut(object sender, EventArgs e)
+ {
+ if (ZoomDisabled())
+ return;
+ if (!m_init_done || m_doczoom <= Constants.ZOOM_MIN)
+ return;
+
+ m_busy_render = true;
+ m_doczoom = GetNextZoom(m_doczoom, -1);
+ m_GtkzoomEntry.Text = Math.Round(m_doczoom * 100.0).ToString();
+ m_zoom_txt = m_GtkzoomEntry.Text;
+ ResizePages();
+ RenderMainAll();
+ }
+
+ private void ZoomIn(object sender, EventArgs e)
+ {
+ if (ZoomDisabled())
+ return;
+ if (!m_init_done || m_doczoom >= Constants.ZOOM_MAX)
+ return;
+
+ m_busy_render = true;
+ m_doczoom = GetNextZoom(m_doczoom, 1);
+ m_GtkzoomEntry.Text = Math.Round(m_doczoom * 100.0).ToString();
+ m_zoom_txt = m_GtkzoomEntry.Text;
+ ResizePages();
+ RenderMainAll();
+ }
+
+ void ZoomChanged(object sender, EventArgs e)
+ {
+ Regex regex = new Regex("[^0-9.]+");
+
+ var text_entered = m_GtkzoomEntry.Text;
+ if (text_entered == "")
+ {
+ return;
+ }
+
+ if (!m_init_done)
+ {
+ m_GtkzoomEntry.Text = "100";
+ return;
+ }
+
+ bool ok = !regex.IsMatch(text_entered);
+ if (!ok)
+ {
+ m_GtkzoomEntry.Text = m_zoom_txt;
+ return;
+ }
+
+ double zoom = (double)System.Convert.ToDouble(text_entered);
+ zoom = zoom / 100.0;
+
+ if (zoom > Constants.ZOOM_MAX)
+ {
+ zoom = Constants.ZOOM_MAX;
+ m_GtkzoomEntry.Text = (zoom * 100).ToString();
+ }
+ if (zoom < Constants.ZOOM_MIN)
+ {
+ zoom = Constants.ZOOM_MIN;
+ m_GtkzoomEntry.Text = (zoom * 100).ToString();
+ }
+
+ m_doczoom = zoom;
+ m_busy_render = true;
+ m_zoom_txt = m_GtkzoomEntry.Text;
+ ResizePages();
+ RenderMainAll();
+ }
+
+ void PageChanged(object sender, EventArgs e)
+ {
+ Regex regex = new Regex("[^0-9.]+");
+
+ var text_entered = m_GtkpageEntry.Text;
+ if (text_entered == "")
+ {
+ return;
+ }
+
+ if (!m_init_done)
+ {
+ m_GtkpageEntry.Text = "";
+ return;
+ }
+
+ bool ok = !regex.IsMatch(text_entered);
+ if (!ok)
+ {
+ m_GtkpageEntry.Text = m_page_txt;
+ return;
+ }
+
+ int page = (Int32)System.Convert.ToInt32(text_entered);
+ if (page > m_numpages)
+ {
+ page = m_numpages;
+ }
+ if (page < 1)
+ {
+ page = 1;
+ }
+
+ m_GtkpageEntry.Text = page.ToString();
+ m_page_txt = m_GtkpageEntry.Text;
+ ScrollMainTo(page - 1);
+ }
+
+ private void ResizePages()
+ {
+ Gtk.TreeIter tree_iter;
+ m_GtkimageStoreMain.GetIterFirst(out tree_iter);
+
+ if (m_page_sizes.Count < 1)
+ return;
+
+ for (int k = 0; k < m_numpages; k++)
+ {
+ var doc_page = m_docPages[k];
+ if (Math.Abs(doc_page.Zoom - m_doczoom) <= Single.Epsilon)
+ continue;
+ else
+ {
+ /* Resize it now */
+ doc_page.PixBuf =
+ doc_page.PixBuf.ScaleSimple((int)(m_doczoom * m_page_sizes[k].width),
+ (int)(m_doczoom * m_page_sizes[k].height), Gdk.InterpType.Nearest);
+ doc_page.Width = (int)(m_doczoom * m_page_sizes[k].width);
+ doc_page.Height = (int)(m_doczoom * m_page_sizes[k].height);
+ doc_page.Zoom = m_doczoom;
+ doc_page.Content= Page_Content_t.OLD_RESOLUTION;
+ m_GtkimageStoreMain.SetValue(tree_iter, 0, doc_page.PixBuf);
+ m_GtkimageStoreMain.IterNext(ref tree_iter);
+
+ if (k == 0)
+ m_page_scroll_pos[0] = doc_page.Height;
+ else
+ m_page_scroll_pos[k] = doc_page.Height + m_page_scroll_pos[k - 1];
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/demos/csharp/linux/gtk_viewer/src/Program.cs b/demos/csharp/linux/gtk_viewer/src/Program.cs
new file mode 100644
index 00000000..7446f0bc
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/src/Program.cs
@@ -0,0 +1,25 @@
+using System;
+using Gtk;
+
+namespace gs_mono_example
+{
+
+ class MainClass
+ {
+ public static void Main(string[] args)
+ {
+ Application.Init();
+ MainWindow win = new MainWindow();
+ win.ShowAll();
+
+ try
+ {
+ Application.Run();
+ }
+ catch(Exception except)
+ {
+ var mess = except.Message;
+ }
+ }
+ }
+}
diff --git a/demos/csharp/linux/gtk_viewer/src/TempFile.cs b/demos/csharp/linux/gtk_viewer/src/TempFile.cs
new file mode 100644
index 00000000..c6c313de
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/src/TempFile.cs
@@ -0,0 +1,34 @@
+using System;
+using System.IO;
+
+/* A class to help in the management of temp files */
+namespace gs_mono_example
+{
+ class TempFile
+ {
+ private String m_filename;
+
+ public TempFile(String Name)
+ {
+ m_filename = Name;
+ }
+
+ public String Filename
+ {
+ get { return m_filename; }
+ }
+
+ public void DeleteFile()
+ {
+ try
+ {
+ if (File.Exists(m_filename))
+ File.Delete(m_filename);
+ }
+ catch (Exception)
+ {
+ throw;
+ }
+ }
+ }
+}
diff --git a/demos/csharp/linux/gtk_viewer/src/gsOutput.cs b/demos/csharp/linux/gtk_viewer/src/gsOutput.cs
new file mode 100644
index 00000000..c74dc7a3
--- /dev/null
+++ b/demos/csharp/linux/gtk_viewer/src/gsOutput.cs
@@ -0,0 +1,41 @@
+using System;
+using Gtk;
+
+namespace gs_mono_example
+{
+ public class gsOutput : Gtk.Window
+ {
+ public Gtk.TextView m_textView;
+ public Gtk.ScrolledWindow m_scrolledWindow;
+
+ public gsOutput() : base(Gtk.WindowType.Toplevel)
+ {
+ this.SetDefaultSize(500, 500);
+ this.Title = "GhostPDL Standard Output";
+
+ m_scrolledWindow = new ScrolledWindow();
+ m_scrolledWindow.BorderWidth = 5;
+ m_scrolledWindow.ShadowType = ShadowType.In;
+
+ DeleteEvent += Handle_DeleteEvent;
+
+ m_textView = new Gtk.TextView();
+ m_textView.Editable = false;
+
+ /* To force resize and scroll to bottom when text view is update */
+ m_scrolledWindow.Add(m_textView);
+
+ Add(m_scrolledWindow);
+ ShowAll();
+ Hide();
+ }
+
+ /* Don't actually destroy this window */
+ void Handle_DeleteEvent(object o, DeleteEventArgs args)
+ {
+ this.Hide();
+ args.RetVal = true;
+ }
+
+ }
+}
diff --git a/demos/csharp/windows/ghostnet.sln b/demos/csharp/windows/ghostnet.sln
new file mode 100644
index 00000000..e073dd1e
--- /dev/null
+++ b/demos/csharp/windows/ghostnet.sln
@@ -0,0 +1,37 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30104.148
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ghostnet_simple_viewer", "ghostnet_wpf_example\ghostnet_simple_viewer.csproj", "{8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}.Debug|x64.ActiveCfg = Debug|x64
+ {8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}.Debug|x64.Build.0 = Debug|x64
+ {8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}.Debug|x86.ActiveCfg = Debug|x86
+ {8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}.Debug|x86.Build.0 = Debug|x86
+ {8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}.Release|x64.ActiveCfg = Release|x64
+ {8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}.Release|x64.Build.0 = Release|x64
+ {8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}.Release|x86.ActiveCfg = Release|x86
+ {8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {80DE35D1-60F8-4E3C-A76B-3BDEFEA3E288}
+ EndGlobalSection
+EndGlobal
diff --git a/demos/csharp/windows/ghostnet_wpf_example/About.xaml b/demos/csharp/windows/ghostnet_wpf_example/About.xaml
new file mode 100644
index 00000000..0221ebc6
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/About.xaml
@@ -0,0 +1,94 @@
+<Window
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="ghostnet_wpf_example.About"
+ Title="ghostnet_wpf_example"
+ x:Uid="idAboutBox"
+ Style="{DynamicResource AboutDialogStyle}" WindowStartupLocation="CenterOwner" Height="353" Width="501">
+ <Window.Resources>
+ <XmlDataProvider x:Key="aboutProvider" XPath="ApplicationInfo" IsAsynchronous="False" IsInitialLoadEnabled="True">
+ <x:XData>
+ <ApplicationInfo xmlns="">
+ <Link Uri="http://www.artifex.com">More Info</Link>
+ </ApplicationInfo>
+ </x:XData>
+ </XmlDataProvider>
+ <Style x:Key="AboutDialogStyle" TargetType="{x:Type Window}">
+ <Setter Property="Height" Value="Auto" />
+ <Setter Property="Width" Value="500" />
+ <Setter Property="ShowInTaskbar" Value="False" />
+ <Setter Property="ResizeMode" Value="NoResize" />
+ <Setter Property="WindowStyle" Value="SingleBorderWindow" />
+ <Setter Property="SizeToContent" Value="Height" />
+ </Style>
+ <Style x:Key="DisplayAreaStyle" TargetType="{x:Type StackPanel}">
+ <Setter Property="Margin" Value="10,10,10,5" />
+ </Style>
+ <Style x:Key="BackgroundStyle" TargetType="{x:Type StackPanel}">
+ <Setter Property="Background">
+ <Setter.Value>
+ <LinearGradientBrush EndPoint="0,1">
+ <GradientStop Offset="0" Color="#FF317896" />
+ <GradientStop Offset="0.27" Color="White" />
+ <GradientStop Offset="0.85" Color="#FF317896" />
+ <GradientStop Offset="1" Color="#FF317896" />
+ </LinearGradientBrush>
+ </Setter.Value>
+ </Setter>
+ </Style>
+ <Style TargetType="{x:Type Label}">
+ <Setter Property="Padding" Value="0" />
+ </Style>
+ <Style x:Key="ParagraphSeparator" TargetType="{x:Type Label}">
+ <Setter Property="Padding" Value="0,10,0,0" />
+ </Style>
+ <Style x:Key="LinkLabelStyle">
+ <Setter Property="Control.Padding" Value="0" />
+ <Setter Property="FrameworkElement.VerticalAlignment" Value="Center" />
+ </Style>
+ <Style x:Key="ReadOnlyDescStyle" TargetType="{x:Type TextBox}">
+ <Setter Property="MinLines" Value="6" />
+ <Setter Property="MaxLines" Value="6" />
+ <Setter Property="IsReadOnly" Value="True" />
+ <Setter Property="TextWrapping" Value="WrapWithOverflow" />
+ <Setter Property="VerticalScrollBarVisibility" Value="Visible" />
+ </Style>
+ <Style x:Key="OkButtonStyle" TargetType="{x:Type Button}">
+ <Setter Property="MinWidth" Value="75" />
+ <Setter Property="Margin" Value="0,5" />
+ <Setter Property="DockPanel.Dock" Value="Right" />
+ <Setter Property="IsDefault" Value="True" />
+ <Setter Property="IsCancel" Value="True" />
+ </Style>
+ </Window.Resources>
+ <StackPanel x:Uid="clientArea" Style="{StaticResource BackgroundStyle}">
+ <StackPanel x:Uid="displayArea" Style="{StaticResource DisplayAreaStyle}"
+ DataContext="{Binding Mode=OneTime, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}">
+ <Label x:Name="productName" x:Uid="productName"
+ Content="{Binding Product, Mode=OneTime}" />
+ <StackPanel x:Uid="versionArea" Orientation="Horizontal">
+ <Label x:Name="versionLabel" x:Uid="VersionLabel" Content="Version - " />
+ <Label x:Name="version" x:Uid="version" Content="{Binding Version, Mode=OneTime}" />
+ </StackPanel>
+ <Label x:Name="copyright" x:Uid="copyright" Content="{Binding Copyright, Mode=OneTime}" />
+ <Label x:Name="company" x:Uid="company" Content="{Binding Company, Mode=OneTime}" />
+ <Label x:Name="reserved" x:Uid="reserved" Content="All Rights Reserved." />
+ <Label x:Name="info" x:Uid="info" Style="{StaticResource ParagraphSeparator}"
+ Content="Product details:" />
+ <TextBox x:Name="description" x:Uid="description" Text=""
+ Style="{StaticResource ReadOnlyDescStyle}" Height="140" />
+ <DockPanel x:Uid="buttonArea">
+ <Button x:Name="okButton" x:Uid="okButton" Style="{StaticResource OkButtonStyle}"
+ Content="OK" />
+ <Label x:Name="productLink" x:Uid="productLink" Style="{StaticResource LinkLabelStyle}" >
+ <Hyperlink x:Name="hyperlink" x:Uid="hyperlink" NavigateUri="{Binding LinkUri, Mode=OneTime}" Style="{StaticResource LinkLabelStyle}"
+ RequestNavigate="hyperlink_RequestNavigate">
+ <InlineUIContainer>
+ <TextBlock Text="{Binding LinkText, Mode=OneTime}" />
+ </InlineUIContainer>
+ </Hyperlink>
+ </Label>
+ </DockPanel>
+ </StackPanel>
+ </StackPanel>
+</Window> \ No newline at end of file
diff --git a/demos/csharp/windows/ghostnet_wpf_example/About.xaml.cs b/demos/csharp/windows/ghostnet_wpf_example/About.xaml.cs
new file mode 100644
index 00000000..3b4a7285
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/About.xaml.cs
@@ -0,0 +1,254 @@
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Reflection;
+using System.Windows;
+using System.Windows.Data;
+using System.Xml;
+using System.ComponentModel;
+
+namespace ghostnet_wpf_example
+{
+ /// <summary>
+ /// Interaction logic for About.xaml
+ /// </summary>
+ public partial class About : Window
+ {
+ /// <summary>
+ /// Default constructor is protected so callers must use one with a parent.
+ /// </summary>
+ protected About()
+ {
+ InitializeComponent();
+ }
+
+
+ /// <summary>
+ /// Constructor that takes a parent for this About dialog.
+ /// </summary>
+ /// <param name="parent">Parent window for this dialog.</param>
+ public About(Window parent)
+ : this()
+ {
+ this.Owner = parent;
+ }
+
+ /// <summary>
+ /// Handles click navigation on the hyperlink in the About dialog.
+ /// </summary>
+ /// <param name="sender">Object the sent the event.</param>
+ /// <param name="e">Navigation events arguments.</param>
+ private void hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)
+ {
+ if (e.Uri != null && string.IsNullOrEmpty(e.Uri.OriginalString) == false)
+ {
+ string uri = e.Uri.AbsoluteUri;
+ Process.Start(new ProcessStartInfo(uri));
+ e.Handled = true;
+ }
+ }
+
+ #region AboutData Provider
+ #region Member data
+ private XmlDocument xmlDoc = null;
+ private const string propertyNameTitle = "Title";
+ private const string propertyNameDescription = "Description";
+ private const string propertyNameProduct = "Product";
+ private const string propertyNameCopyright = "Copyright";
+ private const string propertyNameCompany = "Company";
+ private const string xPathRoot = "ApplicationInfo/";
+ private const string xPathTitle = xPathRoot + propertyNameTitle;
+ private const string xPathVersion = xPathRoot + "Version";
+ private const string xPathDescription = xPathRoot + propertyNameDescription;
+ private const string xPathProduct = xPathRoot + propertyNameProduct;
+ private const string xPathCopyright = xPathRoot + propertyNameCopyright;
+ private const string xPathCompany = xPathRoot + propertyNameCompany;
+ private const string xPathLink = xPathRoot + "Link";
+ private const string xPathLinkUri = xPathRoot + "Link/@Uri";
+ #endregion
+
+ #region Properties
+ /// <summary>
+ /// Gets the title property, which is display in the About dialogs window title.
+ /// </summary>
+ public string ProductTitle
+ {
+ get
+ {
+ string result = CalculatePropertyValue<AssemblyTitleAttribute>(propertyNameTitle, xPathTitle);
+ if (string.IsNullOrEmpty(result))
+ {
+ // otherwise, just get the name of the assembly itself.
+ result = Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
+ }
+ return result;
+ }
+ }
+
+ /// <summary>
+ /// Gets the application's version information to show.
+ /// </summary>
+ public string Version
+ {
+ get
+ {
+ string result = string.Empty;
+ // first, try to get the version string from the assembly.
+ Version version = Assembly.GetExecutingAssembly().GetName().Version;
+ if (version != null)
+ {
+ result = version.ToString();
+ }
+ else
+ {
+ // if that fails, try to get the version from a resource in the Application.
+ result = GetLogicalResourceString(xPathVersion);
+ }
+ return result;
+ }
+ }
+
+ /// <summary>
+ /// Gets the description about the application.
+ /// </summary>
+ public string Description
+ {
+ get { return CalculatePropertyValue<AssemblyDescriptionAttribute>(propertyNameDescription, xPathDescription);}
+ }
+
+ public string VariableDescription
+ {
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// Gets the product's full name.
+ /// </summary>
+ public string Product
+ {
+ get { return CalculatePropertyValue<AssemblyProductAttribute>(propertyNameProduct, xPathProduct); }
+ }
+
+ /// <summary>
+ /// Gets the copyright information for the product.
+ /// </summary>
+ public string Copyright
+ {
+ get { return CalculatePropertyValue<AssemblyCopyrightAttribute>(propertyNameCopyright, xPathCopyright); }
+ }
+
+ /// <summary>
+ /// Gets the product's company name.
+ /// </summary>
+ public string Company
+ {
+ get { return CalculatePropertyValue<AssemblyCompanyAttribute>(propertyNameCompany, xPathCompany); }
+ }
+
+ /// <summary>
+ /// Gets the link text to display in the About dialog.
+ /// </summary>
+ public string LinkText
+ {
+ get { return GetLogicalResourceString(xPathLink); }
+ }
+
+ /// <summary>
+ /// Gets the link uri that is the navigation target of the link.
+ /// </summary>
+ public string LinkUri
+ {
+ get { return GetLogicalResourceString(xPathLinkUri); }
+ }
+ #endregion
+
+ #region Resource location methods
+ /// <summary>
+ /// Gets the specified property value either from a specific attribute, or from a resource dictionary.
+ /// </summary>
+ /// <typeparam name="T">Attribute type that we're trying to retrieve.</typeparam>
+ /// <param name="propertyName">Property name to use on the attribute.</param>
+ /// <param name="xpathQuery">XPath to the element in the XML data resource.</param>
+ /// <returns>The resulting string to use for a property.
+ /// Returns null if no data could be retrieved.</returns>
+ private string CalculatePropertyValue<T>(string propertyName, string xpathQuery)
+ {
+ string result = string.Empty;
+ // first, try to get the property value from an attribute.
+ object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(T), false);
+ if (attributes.Length > 0)
+ {
+ T attrib = (T)attributes[0];
+ PropertyInfo property = attrib.GetType().GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance);
+ if (property != null)
+ {
+ result = property.GetValue(attributes[0], null) as string;
+ }
+ }
+
+ // if the attribute wasn't found or it did not have a value, then look in an xml resource.
+ if (result == string.Empty)
+ {
+ // if that fails, try to get it from a resource.
+ result = GetLogicalResourceString(xpathQuery);
+ }
+ return result;
+ }
+
+ /// <summary>
+ /// Gets the XmlDataProvider's document from the resource dictionary.
+ /// </summary>
+ protected virtual XmlDocument ResourceXmlDocument
+ {
+ get
+ {
+ if (xmlDoc == null)
+ {
+ // if we haven't already found the resource XmlDocument, then try to find it.
+ XmlDataProvider provider = this.TryFindResource("aboutProvider") as XmlDataProvider;
+ if (provider != null)
+ {
+ // save away the XmlDocument, so we don't have to get it multiple times.
+ xmlDoc = provider.Document;
+ }
+ }
+ return xmlDoc;
+ }
+ }
+
+ /// <summary>
+ /// Gets the specified data element from the XmlDataProvider in the resource dictionary.
+ /// </summary>
+ /// <param name="xpathQuery">An XPath query to the XML element to retrieve.</param>
+ /// <returns>The resulting string value for the specified XML element.
+ /// Returns empty string if resource element couldn't be found.</returns>
+ protected virtual string GetLogicalResourceString(string xpathQuery)
+ {
+ string result = string.Empty;
+ // get the About xml information from the resources.
+ XmlDocument doc = this.ResourceXmlDocument;
+ if (doc != null)
+ {
+ // if we found the XmlDocument, then look for the specified data.
+ XmlNode node = doc.SelectSingleNode(xpathQuery);
+ if (node != null)
+ {
+ if (node is XmlAttribute)
+ {
+ // only an XmlAttribute has a Value set.
+ result = node.Value;
+ }
+ else
+ {
+ // otherwise, need to just return the inner text.
+ result = node.InnerText;
+ }
+ }
+ }
+ return result;
+ }
+ #endregion
+ #endregion
+ }
+}
diff --git a/demos/csharp/windows/ghostnet_wpf_example/App.config b/demos/csharp/windows/ghostnet_wpf_example/App.config
new file mode 100644
index 00000000..56efbc7b
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/App.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+ </startup>
+</configuration> \ No newline at end of file
diff --git a/demos/csharp/windows/ghostnet_wpf_example/App.xaml b/demos/csharp/windows/ghostnet_wpf_example/App.xaml
new file mode 100644
index 00000000..8f382dcc
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/App.xaml
@@ -0,0 +1,9 @@
+<Application x:Class="ghostnet_wpf_example.App"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="clr-namespace:ghostnet_wpf_example"
+ StartupUri="MainWindow.xaml">
+ <Application.Resources>
+
+ </Application.Resources>
+</Application>
diff --git a/demos/csharp/windows/ghostnet_wpf_example/App.xaml.cs b/demos/csharp/windows/ghostnet_wpf_example/App.xaml.cs
new file mode 100644
index 00000000..79444fe4
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/App.xaml.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace ghostnet_wpf_example
+{
+ /// <summary>
+ /// Interaction logic for App.xaml
+ /// </summary>
+ public partial class App : Application
+ {
+ }
+}
diff --git a/demos/csharp/windows/ghostnet_wpf_example/DocPage.cs b/demos/csharp/windows/ghostnet_wpf_example/DocPage.cs
new file mode 100644
index 00000000..c28bd62d
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/DocPage.cs
@@ -0,0 +1,109 @@
+using System;
+using System.ComponentModel;
+using System.Windows.Media.Imaging;
+using System.Collections.ObjectModel;
+
+namespace ghostnet_wpf_example
+{
+ public class DocPage : INotifyPropertyChanged
+ {
+ private int height;
+ private int width;
+ private double zoom;
+ private BitmapSource bitmap;
+ private String pagename;
+ private int pagenum;
+ private Page_Content_t content;
+
+ public int Height
+ {
+ get { return height; }
+ set
+ {
+ height = value;
+ OnPropertyChanged("Height");
+ }
+ }
+
+ public int Width
+ {
+ get { return width; }
+ set
+ {
+ width = value;
+ OnPropertyChanged("Width");
+ }
+ }
+
+ public double Zoom
+ {
+ get { return zoom; }
+ set { zoom = value; }
+ }
+
+ public BitmapSource BitMap
+ {
+ get { return bitmap; }
+ set
+ {
+ bitmap = value;
+ OnPropertyChanged("BitMap");
+ }
+ }
+
+ public String PageName
+ {
+ get { return pagename; }
+ set { pagename = value; }
+ }
+
+ public int PageNum
+ {
+ get { return pagenum; }
+ set { pagenum = value; }
+ }
+ public Page_Content_t Content
+ {
+ get { return content; }
+ set { content = value; }
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ // Create the OnPropertyChanged method to raise the event
+ protected void OnPropertyChanged(string name)
+ {
+ PropertyChangedEventHandler handler = PropertyChanged;
+ if (handler != null)
+ {
+ handler(this, new PropertyChangedEventArgs(name));
+ }
+ }
+
+ public DocPage()
+ {
+ this.height = 0;
+ this.width = 0;
+ this.zoom = 0;
+ this.bitmap = null;
+ this.pagenum = -1;
+ this.pagename = "";
+ }
+
+ public DocPage(int Height, int Width, double Zoom, BitmapSource BitMap, int PageNum)
+ {
+ this.height = Height;
+ this.width = Width;
+ this.zoom = Zoom;
+ this.bitmap = BitMap;
+ this.pagename = ("Page " + (pagenum + 1));
+ }
+ };
+ public class Pages : ObservableCollection<DocPage>
+ {
+ public Pages()
+ : base()
+ {
+ }
+ }
+}
diff --git a/demos/csharp/windows/ghostnet_wpf_example/MainPrint.cs b/demos/csharp/windows/ghostnet_wpf_example/MainPrint.cs
new file mode 100644
index 00000000..e1c7a1e3
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/MainPrint.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Windows;
+using System.Collections.Generic;
+using System.Threading;
+using System.Windows.Xps.Packaging;
+using System.Printing;
+using System.Windows.Input;
+using System.IO;
+using GhostNET;
+
+namespace ghostnet_wpf_example
+{
+ public partial class MainWindow
+ {
+ Print m_printcontrol = null;
+ private xpsprint m_xpsprint = null;
+
+ public void PrintDiagPrint(object PrintDiag)
+ {
+ bool print_all = false;
+ int first_page = 1;
+ int last_page = 1;
+
+ if (!m_printcontrol.RangeOK())
+ return;
+
+ /* Create only the page range that is needed. */
+ switch (m_printcontrol.m_pages_setting)
+ {
+ case PrintPages_t.RANGE:
+ first_page = m_printcontrol.m_from;
+ last_page = m_printcontrol.m_to;
+ break;
+ case PrintPages_t.CURRENT:
+ first_page = m_currpage + 1;
+ last_page = m_currpage + 1;
+ break;
+ case PrintPages_t.ALL:
+ print_all = true;
+ first_page = 1;
+ last_page = m_numpages + 1;
+ break;
+ }
+
+ /* If file is already xps then gs need not do this */
+ if (!(m_document_type == doc_t.XPS))
+ {
+ xaml_DistillProgress.Value = 0;
+
+ if (m_ghostscript.CreateXPS(m_currfile, Constants.DEFAULT_GS_RES,
+ last_page - first_page + 1, m_printcontrol, first_page, last_page) == gsStatus.GS_BUSY)
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "GS currently busy");
+ return;
+ }
+ else
+ {
+ xaml_CancelDistill.Visibility = System.Windows.Visibility.Collapsed;
+ xaml_DistillName.Text = "Convert to XPS";
+ xaml_DistillName.FontWeight = FontWeights.Bold;
+ xaml_DistillGrid.Visibility = System.Windows.Visibility.Visible;
+ }
+ }
+ else
+ PrintXPS(m_currfile, print_all, first_page, last_page, false);
+ }
+
+ private void PrintCommand(object sender, ExecutedRoutedEventArgs e)
+ {
+ Print(sender, e);
+ }
+
+ /* Printing is achieved using xpswrite device in ghostscript and
+ * pushing that file through the XPS print queue */
+ private void Print(object sender, ExecutedRoutedEventArgs e)
+ {
+ if (!m_file_open)
+ return;
+
+ if (m_printcontrol == null)
+ {
+ m_printcontrol = new Print(this, m_numpages);
+ m_printcontrol.Activate();
+ m_printcontrol.Show(); /* Makes it modal */
+ }
+ else
+ m_printcontrol.Show();
+ return;
+ }
+
+ /* Do the actual printing on a different thread. This is an STA
+ thread due to the UI like commands that the XPS document
+ processing performs. */
+ private void PrintXPS(String file, bool print_all, int from, int to,
+ bool istempfile)
+ {
+ Thread PrintThread = new Thread(MainWindow.PrintWork);
+ PrintThread.SetApartmentState(ApartmentState.STA);
+
+ var arguments = new List<object>();
+ arguments.Add(file);
+ arguments.Add(print_all);
+ arguments.Add(from);
+ arguments.Add(to);
+ arguments.Add(m_printcontrol.m_selectedPrinter.FullName);
+ arguments.Add(m_printcontrol);
+ arguments.Add(istempfile);
+
+ m_xpsprint = new xpsprint();
+ m_xpsprint.PrintUpdate += PrintProgress;
+ arguments.Add(m_xpsprint);
+
+ xaml_PrintGrid.Visibility = System.Windows.Visibility.Visible;
+ xaml_PrintProgress.Value = 0;
+ PrintThread.Start(arguments);
+ }
+
+ /* The thread that is actually doing the print work */
+ public static void PrintWork(object data)
+ {
+ List<object> genericlist = data as List<object>;
+ String file = (String)genericlist[0];
+ bool print_all = (bool)genericlist[1];
+ int from = (int)genericlist[2];
+ int to = (int)genericlist[3];
+ String printer_name = (String)genericlist[4];
+ Print printcontrol = (Print)genericlist[5];
+ bool istempfile = (bool)genericlist[6];
+ xpsprint xps_print = (xpsprint)genericlist[7];
+ String filename = "";
+
+ if (istempfile == true)
+ filename = file;
+
+ /* We have to get our own copy of the print queue for the thread */
+ LocalPrintServer m_printServer = new LocalPrintServer();
+ PrintQueue m_selectedPrinter = m_printServer.GetPrintQueue(printer_name);
+
+ XpsDocument xpsDocument = new XpsDocument(file, FileAccess.Read);
+ xps_print.Print(m_selectedPrinter, xpsDocument, printcontrol, print_all,
+ from, to, filename, istempfile);
+
+ /* Once we are done, go ahead and delete the file */
+ if (istempfile == true)
+ xpsDocument.Close();
+ xps_print.Done();
+ }
+
+ private void PrintProgress(object printHelper, gsPrintEventArgs Information)
+ {
+ switch (Information.Status)
+ {
+ case PrintStatus_t.PRINT_ERROR:
+ System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() =>
+ {
+ ShowMessage(NotifyType_t.MESS_ERROR, "Printer Driver Error");
+ xaml_PrintGrid.Visibility = System.Windows.Visibility.Collapsed;
+ }));
+ break;
+ case PrintStatus_t.PRINT_CANCELLED:
+ case PrintStatus_t.PRINT_READY:
+ System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() =>
+ {
+ xaml_PrintGrid.Visibility = System.Windows.Visibility.Collapsed;
+ }));
+ break;
+ case PrintStatus_t.PRINT_DONE:
+ System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() =>
+ {
+ xaml_PrintGrid.Visibility = System.Windows.Visibility.Collapsed;
+ DeleteTempFile(Information.FileName);
+ }));
+ break;
+ case PrintStatus_t.PRINT_BUSY:
+ System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() =>
+ {
+ xaml_PrintProgress.Value = 100.0 * (double)(Information.Page - Information.PageStart) / (double)Information.NumPages;
+ if (Information.Page == Information.NumPages)
+ {
+ xaml_PrintGrid.Visibility = System.Windows.Visibility.Collapsed;
+ }
+ }));
+ break;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/demos/csharp/windows/ghostnet_wpf_example/MainRender.cs b/demos/csharp/windows/ghostnet_wpf_example/MainRender.cs
new file mode 100644
index 00000000..016c86bb
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/MainRender.cs
@@ -0,0 +1,135 @@
+using System;
+using System.Windows.Media;
+using System.Collections.Generic;
+using System.Windows.Media.Imaging;
+using System.Runtime.InteropServices;
+using GhostNET;
+
+namespace ghostnet_wpf_example
+{
+ public partial class MainWindow
+ {
+ bool m_busy_rendering;
+ int m_firstpage;
+ int m_lastpage;
+
+ /* For PDF optimization */
+ private void PageRangeRender(int first_page, int last_page)
+ {
+ bool render_pages = false;
+ for (int k = first_page; k <= last_page; k++)
+ {
+ if (m_docPages[k].Content != Page_Content_t.FULL_RESOLUTION)
+ {
+ render_pages = true;
+ break;
+ }
+ }
+ if (!render_pages)
+ return;
+
+ m_busy_rendering = true;
+ m_firstpage = first_page;
+ m_lastpage = last_page;
+ //m_ghostscript.gsDisplayDeviceRender(m_currfile, first_page + 1, last_page + 1, 1.0);
+ }
+
+ /* Callback from ghostscript with the rendered image. */
+ private void MainPageCallback(int width, int height, int raster, double zoom_in,
+ int page_num, IntPtr data)
+ {
+ Byte[] bitmap = new byte[raster * height];
+ idata_t image_data = new idata_t();
+
+ Marshal.Copy(data, bitmap, 0, raster * height);
+
+ image_data.bitmap = bitmap;
+ image_data.page_num = page_num;
+ image_data.width = width;
+ image_data.height = height;
+ image_data.raster = raster;
+ image_data.zoom = zoom_in;
+ m_images_rendered.Add(image_data);
+
+ /* Get the 1.0 page scalings */
+ if (m_firstime)
+ {
+ pagesizes_t page_size = new pagesizes_t();
+ page_size.size.X = width;
+ page_size.size.Y = height;
+ m_page_sizes.Add(page_size);
+ }
+
+ /* Dispatch progress bar update on UI thread */
+ System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
+ {
+ m_page_progress_count += 1;
+ xaml_RenderProgress.Value = ((double)m_page_progress_count / (double) m_numpages) * 100.0;
+ }));
+ }
+
+ /* Done rendering. Update the pages with the new raster information if needed */
+ private void RenderingDone()
+ {
+ int page_index = m_firstpage - 1;
+ m_toppage_pos = new List<int>(m_images_rendered.Count + 1);
+ int offset = 0;
+
+ for (int k = 0; k < m_images_rendered.Count; k++)
+ {
+ DocPage doc_page = m_docPages[page_index + k];
+
+ if (doc_page.Content != Page_Content_t.FULL_RESOLUTION ||
+ m_aa_change)
+ {
+ doc_page.Width = m_images_rendered[k].width;
+ doc_page.Height = m_images_rendered[k].height;
+ doc_page.Content = Page_Content_t.FULL_RESOLUTION;
+
+ doc_page.Zoom = m_doczoom;
+ doc_page.BitMap = BitmapSource.Create(doc_page.Width, doc_page.Height,
+ 72, 72, PixelFormats.Bgr24, BitmapPalettes.Halftone256, m_images_rendered[k].bitmap, m_images_rendered[k].raster);
+ }
+ m_toppage_pos.Add(offset + Constants.PAGE_VERT_MARGIN);
+ offset += doc_page.Height + Constants.PAGE_VERT_MARGIN;
+ }
+
+ xaml_ProgressGrid.Visibility = System.Windows.Visibility.Collapsed;
+ xaml_RenderProgress.Value = 0;
+ m_aa_change = false;
+ m_firstime = false;
+ m_toppage_pos.Add(offset);
+ m_busy_rendering = false;
+ m_images_rendered.Clear();
+ m_file_open = true;
+ m_busy_render = false;
+ m_ghostscript.gsPageRenderedMain -= new ghostsharp.gsCallBackPageRenderedMain(gsPageRendered);
+ }
+
+ /* Render all pages full resolution */
+ private void RenderMainFirst()
+ {
+ m_firstpage = 1;
+ m_busy_render = true;
+ xaml_RenderProgress.Value = 0;
+ xaml_ProgressGrid.Visibility = System.Windows.Visibility.Visible;
+ m_page_progress_count = 0;
+ xaml_RenderProgressText.Text = "Rendering";
+ if (m_firstime)
+ {
+ xaml_Zoomsize.Text = "100";
+ }
+
+ m_ghostscript.gsPageRenderedMain += new ghostsharp.gsCallBackPageRenderedMain(gsPageRendered);
+ m_ghostscript.gsDisplayDeviceRenderAll(m_currfile, m_doczoom, m_aa, GS_Task_t.DISPLAY_DEV_NON_PDF);
+ }
+
+ /* Render all, but only if not already busy, called via zoom or aa changes */
+ private void RenderMainAll()
+ {
+ if (m_busy_render || !m_init_done)
+ return;
+ RenderMainFirst();
+ }
+ }
+}
diff --git a/demos/csharp/windows/ghostnet_wpf_example/MainThumbRendering.cs b/demos/csharp/windows/ghostnet_wpf_example/MainThumbRendering.cs
new file mode 100644
index 00000000..5db50389
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/MainThumbRendering.cs
@@ -0,0 +1,116 @@
+using System;
+using System.Collections.Generic;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Runtime.InteropServices;
+using GhostNET;
+
+namespace ghostnet_wpf_example
+{
+ public partial class MainWindow
+ {
+ private static List<DocPage> m_thumbnails;
+
+ /* Assign current pages to blown up thumbnail images */
+ private void ThumbAssignMain(int page_num, int width, int height, double zoom_in, ref int offset)
+ {
+ m_pageType.Add(Page_Content_t.THUMBNAIL);
+ DocPage doc_page = new DocPage();
+ doc_page.Content = Page_Content_t.THUMBNAIL;
+ doc_page.Zoom = zoom_in;
+ doc_page.BitMap = m_thumbnails[page_num - 1].BitMap;
+ doc_page.Width = (int)(width / (Constants.SCALE_THUMB));
+ doc_page.Height = (int)(height / (Constants.SCALE_THUMB));
+ doc_page.PageNum = page_num;
+ m_docPages.Add(doc_page);
+ m_toppage_pos.Add(offset + Constants.PAGE_VERT_MARGIN);
+ offset += doc_page.Height + Constants.PAGE_VERT_MARGIN;
+ }
+
+ /* Rendered all the thumbnail pages. Stick them in the appropriate lists */
+ private void ThumbsDone()
+ {
+ int offset = 0;
+ m_toppage_pos = new List<int>(m_list_thumb.Count);
+
+ for (int k = 0; k < m_list_thumb.Count; k++)
+ {
+ DocPage doc_page = new DocPage();
+ m_thumbnails.Add(doc_page);
+
+ doc_page.Width = m_list_thumb[k].width;
+ doc_page.Height = m_list_thumb[k].height;
+ doc_page.Content = Page_Content_t.THUMBNAIL;
+ doc_page.Zoom = m_list_thumb[k].zoom;
+ doc_page.BitMap = BitmapSource.Create(doc_page.Width, doc_page.Height,
+ 72, 72, PixelFormats.Bgr24, BitmapPalettes.Halftone256, m_list_thumb[k].bitmap, m_list_thumb[k].raster);
+ doc_page.PageNum = m_list_thumb[k].page_num;
+ ThumbAssignMain(m_list_thumb[k].page_num, m_list_thumb[k].width, m_list_thumb[k].height, 1.0, ref offset);
+ }
+
+ m_toppage_pos.Add(offset);
+ xaml_ProgressGrid.Visibility = System.Windows.Visibility.Collapsed;
+ xaml_RenderProgress.Value = 0;
+ xaml_PageList.ItemsSource = m_docPages;
+ xaml_ThumbList.ItemsSource = m_thumbnails;
+ xaml_ThumbList.Items.Refresh();
+ xaml_ThumbGrid.Visibility = System.Windows.Visibility.Visible;
+
+ m_ghostscript.gsPageRenderedMain -= new ghostsharp.gsCallBackPageRenderedMain(gsThumbRendered);
+
+
+ m_numpages = m_list_thumb.Count;
+ if (m_numpages < 1)
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "File failed to open properly");
+ CleanUp();
+ }
+ else
+ {
+ m_init_done = true;
+ xaml_TotalPages.Text = "/" + m_numpages;
+ xaml_currPage.Text = m_currpage.ToString();
+ m_list_thumb.Clear();
+
+ /* If non-pdf, kick off full page rendering */
+ RenderMainFirst();
+ }
+ }
+
+ /* Callback from ghostscript with the rendered thumbnail. Also update progress */
+ private void ThumbPageCallback(int width, int height, int raster, double zoom_in,
+ int page_num, IntPtr data)
+ {
+ Byte[] bitmap = new byte[raster * height];
+ idata_t thumb = new idata_t();
+
+ Marshal.Copy(data, bitmap, 0, raster * height);
+
+ thumb.bitmap = bitmap;
+ thumb.page_num = page_num;
+ thumb.width = width;
+ thumb.height = height;
+ thumb.raster = raster;
+ thumb.zoom = zoom_in;
+ m_list_thumb.Add(thumb);
+
+ /* Dispatch progress bar update on UI thread */
+ System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
+ {
+ /* Logrithmic but it will show progress */
+ xaml_RenderProgress.Value = ((double) page_num / ((double) page_num + 1))* 100.0;
+ }));
+ }
+
+ /* Render the thumbnail images */
+ private void RenderThumbs()
+ {
+ xaml_RenderProgress.Value = 0;
+ xaml_RenderProgressText.Text = "Creating Thumbs";
+ xaml_ProgressGrid.Visibility = System.Windows.Visibility.Visible;
+
+ m_ghostscript.gsPageRenderedMain += new ghostsharp.gsCallBackPageRenderedMain(gsThumbRendered);
+ m_ghostscript.gsDisplayDeviceRenderAll(m_currfile, Constants.SCALE_THUMB, false, GS_Task_t.DISPLAY_DEV_THUMBS_NON_PDF);
+ }
+ }
+}
diff --git a/demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml b/demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml
new file mode 100644
index 00000000..d4f752d4
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml
@@ -0,0 +1,214 @@
+<Window x:Class="ghostnet_wpf_example.MainWindow"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:local="clr-namespace:ghostnet_wpf_example"
+ mc:Ignorable="d" UseLayoutRounding="True"
+ Title="GhostNet WPF example" Height="880" Width="870">
+ <!-- UseLayoutRounding needed to avoid funny interpolation effects on pages -->
+ <Window.Resources>
+ <ItemsPanelTemplate x:Key="MenuItemPanelTemplateNoIcon">
+ <StackPanel Margin="-20,0,0,0" Background="WhiteSmoke"/>
+ </ItemsPanelTemplate>
+ <DataTemplate x:Key="PageTemplate">
+ <Canvas Tag="{Binding Path=pagename}" HorizontalAlignment="Center" VerticalAlignment="Top" Height="{Binding Height}" Width="{Binding Width}" Margin="0,0,0,0" ClipToBounds="True">
+ <Image Width="{Binding Width}" Height="{Binding Height}" Stretch="Fill" HorizontalAlignment="Center" Source="{Binding BitMap}">
+ <Image.BitmapEffect>
+ <DropShadowBitmapEffect Color="Black" Direction="-50" ShadowDepth="40" Softness=".7" />
+ </Image.BitmapEffect>
+ </Image>
+ </Canvas>
+ </DataTemplate>
+
+ <DataTemplate x:Key="ThumbTemplate">
+ <Image Width="{Binding Width}" Height="{Binding Height}" Stretch="Fill" HorizontalAlignment="Center" Source="{Binding BitMap}" Margin="24,24,0,0">
+ <Image.BitmapEffect>
+ <DropShadowBitmapEffect Color="Black" Direction="-50"
+ ShadowDepth="5" Softness=".7" />
+ </Image.BitmapEffect>
+ </Image>
+ </DataTemplate>
+
+ </Window.Resources>
+
+ <!-- The following is needed to set up all the keyboard short cuts -->
+ <Window.CommandBindings>
+ <CommandBinding Command="Open" Executed="OpenFileCommand"></CommandBinding>
+ <CommandBinding Command="Close" Executed="CloseCommand"></CommandBinding>
+ <CommandBinding Command="Print" Executed="PrintCommand"></CommandBinding>
+ </Window.CommandBindings>
+ <Window.InputBindings>
+ <KeyBinding Key="O" Modifiers="Control" Command="Open"></KeyBinding>
+ <KeyBinding Key="W" Modifiers="Control" Command="Close"></KeyBinding>
+ <KeyBinding Key="P" Modifiers="Control" Command="Print"></KeyBinding>
+ </Window.InputBindings>
+
+ <DockPanel LastChildFill="True">
+ <Menu IsMainMenu="True" DockPanel.Dock="Top" Background="WhiteSmoke" FocusManager.IsFocusScope="False">
+ <MenuItem Header="_File" x:Name="xaml_file" VerticalAlignment="Center">
+ <MenuItem VerticalAlignment="Center" Padding="5" InputGestureText="Ctrl+O" Command="Open" >
+ <MenuItem.Header>
+ <TextBlock Margin="5,0,0,0" VerticalAlignment="Center" Text="Open..." ></TextBlock>
+ </MenuItem.Header>
+ </MenuItem>
+ <MenuItem Padding="5" Command="Close" InputGestureText="Ctrl+W" x:Name="xaml_closefile" VerticalAlignment="Center">
+ <MenuItem.Header>
+ <TextBlock Margin="5,0,0,0" Text="Close" VerticalAlignment="Center"></TextBlock>
+ </MenuItem.Header>
+ </MenuItem>
+ <MenuItem Padding="5" Command="Print" InputGestureText="Ctrl+W" x:Name="xaml_printfile" VerticalAlignment="Center">
+ <MenuItem.Header>
+ <TextBlock Margin="5,0,0,0" Text="Print" VerticalAlignment="Center"></TextBlock>
+ </MenuItem.Header>
+ </MenuItem>
+ <MenuItem Padding="5" Click="ShowGSMessage" x:Name="xaml_gsmessage" VerticalAlignment="Center" >
+ <MenuItem.Header>
+ <TextBlock Margin="5,0,0,0" Text="Show Messages" VerticalAlignment="Center"></TextBlock>
+ </MenuItem.Header>
+ </MenuItem>
+ </MenuItem>
+ <MenuItem Header="About" Click="OnAboutClick"/>
+ </Menu>
+ <WrapPanel Orientation="Horizontal" DockPanel.Dock="Top" Background="WhiteSmoke">
+ <TextBox x:Name="xaml_currPage" Grid.Row="0" Width="40" Height="20" VerticalScrollBarVisibility="Hidden" Padding="0"
+ HorizontalScrollBarVisibility="Hidden" TextAlignment="Center" Margin="20,2,0,2" PreviewKeyDown="PageEnterClicked" VerticalAlignment="Center"/>
+ <TextBlock Margin="2,0,0,0" Height="20" Text="/ 0" x:Name="xaml_TotalPages" Padding="0" VerticalAlignment="Center" Focusable="False">
+ <TextBlock.FontSize>12</TextBlock.FontSize>
+ </TextBlock>
+
+ <Button Margin="20 0 2 0" Width="20" Height="20" Click="ZoomIn" Background="Transparent" BorderBrush="DarkBlue" x:Name="xaml_zoomIn" Focusable="False">
+ <TextBlock Margin="0,0,0,0" Height="20" Text="+" FontWeight="Bold">
+ <TextBlock.FontSize>12</TextBlock.FontSize>
+ </TextBlock>
+ </Button>
+ <Button Margin="0 0 2 0" x:Name="xaml_zoomOut" Width="20" Height="20" Click="ZoomOut" Background="Transparent" BorderBrush="DarkBlue">
+ <TextBlock Margin="0,0,0,0" Height="20" Text="–" FontWeight="Bold">
+ <TextBlock.FontSize>12</TextBlock.FontSize>
+ </TextBlock>
+ </Button>
+ <TextBox Grid.Row="0" Grid.Column="2" Margin="0 0 0 0" Width="30" Height="20" VerticalScrollBarVisibility="Hidden"
+ HorizontalScrollBarVisibility="Hidden" TextAlignment="Left" x:Name="xaml_Zoomsize"
+ PreviewKeyDown="ZoomEnterClicked" TextChanged="ZoomTextChanged" VerticalAlignment="Center" Padding="0"/>
+ <TextBlock Margin="2,0,0,0" Height="20" Text="%">
+ <TextBlock.FontSize>12</TextBlock.FontSize>
+ </TextBlock>
+
+ <TextBlock Margin="20,0,0,0" Height="20" Text="Enable Antialias:">
+ <TextBlock.FontSize>12</TextBlock.FontSize>
+ </TextBlock>
+ <CheckBox x:Name="xaml_aa" Margin="2,2,0,0" Unchecked="AA_uncheck" Checked="AA_check" IsChecked="True"></CheckBox>
+ </WrapPanel>
+
+ <!-- The progress bar that runs during GS distilling -->
+ <Grid x:Name="xaml_DistillGrid" DockPanel.Dock="Bottom" Visibility="Collapsed">
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="*" />
+ <ColumnDefinition Width="Auto" />
+ <ColumnDefinition Width="Auto" />
+ </Grid.ColumnDefinitions>
+ <ProgressBar x:Name="xaml_DistillProgress" Grid.Row="0" Grid.Column="0" Margin="3" Minimum="0"
+ Maximum="100" Height="20" HorizontalAlignment="Stretch"/>
+ <TextBlock x:Name="xaml_DistillName" Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" Margin="5, 0, 5, 0"><Bold>Distilling</Bold></TextBlock>
+ <Button Grid.Row="0" Grid.Column="2" Width="50" Height="20" Name="xaml_CancelDistill" Click="CancelDistillClick" Background="Transparent" BorderBrush="Transparent" Margin="5,0,5,0">
+ <Button.Template>
+ <ControlTemplate TargetType="{x:Type Button}">
+ <Grid>
+ <Rectangle Height="Auto" RadiusX="5" RadiusY="5">
+ <Rectangle.Fill >
+ <SolidColorBrush Color="LightSlateGray"></SolidColorBrush>
+ </Rectangle.Fill>
+ </Rectangle>
+ <ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+ </Grid>
+ </ControlTemplate>
+ </Button.Template>
+ <TextBlock><Bold>Cancel</Bold></TextBlock>
+ </Button>
+ </Grid>
+
+ <Grid x:Name="xaml_PrintGrid" DockPanel.Dock="Bottom" Visibility="Collapsed">
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="*" />
+ <ColumnDefinition Width="Auto" />
+ <ColumnDefinition Width="Auto" />
+ </Grid.ColumnDefinitions>
+ <ProgressBar x:Name="xaml_PrintProgress" Grid.Row="0" Grid.Column="0" Margin="3" Minimum="0"
+ Maximum="100" Height="20" HorizontalAlignment="Stretch" />
+ <TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" Margin="5, 0, 5, 0"><Bold>Printing</Bold></TextBlock>
+ </Grid>
+
+ <!-- The progress bar that runs while the pages are rendered -->
+ <Grid x:Name="xaml_ProgressGrid" DockPanel.Dock="Bottom" Visibility="Collapsed">
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="*" />
+ <ColumnDefinition Width="Auto" />
+ <ColumnDefinition Width="Auto" />
+ </Grid.ColumnDefinitions>
+ <ProgressBar x:Name="xaml_RenderProgress" Grid.Row="0" Grid.Column="0" Margin="3" Minimum="0"
+ Maximum="100" Height="20" HorizontalAlignment="Stretch" />
+ <TextBlock x:Name="xaml_RenderProgressText" Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" Margin="5, 0, 5, 0"><Bold>Creating Thumbs</Bold></TextBlock>
+ </Grid>
+
+ <!-- Thumb viewer/selector -->
+ <Grid x:Name="xaml_ThumbGrid" Width="150" Background="DarkGray" DockPanel.Dock="Left" Visibility="Collapsed">
+ <ListView x:Name="xaml_ThumbList" HorizontalAlignment="Stretch"
+ ItemTemplate="{StaticResource ThumbTemplate}"
+ ScrollViewer.CanContentScroll="False"
+ Background="DarkGray"
+ PreviewMouseLeftButtonUp="ThumbSelected">
+ </ListView>
+ </Grid>
+
+ <!-- Pages are last child fill. This goes in the center of dock panel ScrollViewer.CanContentScroll False allows continuous scrolling-->
+ <!-- <Grid x:Name="xaml_PageGrid" HorizontalAlignment="Stretch" Background="DarkGray" DockPanel.Dock="Left" AllowDrop="True"> -->
+ <ListView x:Name="xaml_PageList" HorizontalAlignment="Stretch"
+ ItemTemplate="{StaticResource PageTemplate}"
+ ScrollViewer.CanContentScroll="False"
+ Background="DarkGray"
+ ScrollViewer.IsDeferredScrollingEnabled="False"
+ IsHitTestVisible="True"
+ SelectionMode="Single"
+ ScrollViewer.HorizontalScrollBarVisibility="Auto"
+ ScrollViewer.VerticalScrollBarVisibility="Visible"
+ ScrollViewer.ScrollChanged="PageScrollChanged"
+ DockPanel.Dock="Left" AllowDrop="True"
+ >
+
+ <!-- This keeps the pages in the center of the panel -->
+ <ListView.ItemContainerStyle>
+ <Style TargetType="ListViewItem">
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="Margin" Value="10"/>
+ <!-- This should be changed with PAGE_MARGIN -->
+ <Setter Property="Padding" Value="0"/>
+ <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
+ <!-- This overrides the blue back ground color of the current selection or mouse over -->
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="ListViewItem">
+ <Border x:Name="border" Background="Transparent">
+ <VisualStateManager.VisualStateGroups>
+ <VisualStateGroup x:Name="CommonStates">
+ <VisualState x:Name="Normal" />
+ <VisualState x:Name="Disabled" />
+ </VisualStateGroup>
+ <VisualStateGroup x:Name="SelectionStates">
+ <VisualState x:Name="Unselected" />
+ <VisualState x:Name="Selected">
+ </VisualState>
+ <VisualState x:Name="SelectedUnfocused">
+ </VisualState>
+ </VisualStateGroup>
+ </VisualStateManager.VisualStateGroups>
+ <ContentPresenter/>
+ </Border>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
+ </ListView.ItemContainerStyle>
+ </ListView>
+ </DockPanel>
+
+</Window>
diff --git a/demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml.cs b/demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml.cs
new file mode 100644
index 00000000..7ac077c2
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml.cs
@@ -0,0 +1,739 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Input;
+using System.ComponentModel;
+using System.Diagnostics;
+using Microsoft.Win32;
+using GhostNET;
+using System.IO;
+
+static class Constants
+{
+ public const double SCALE_THUMB = 0.1;
+ public const int BLANK_WIDTH = 17;
+ public const int BLANK_HEIGHT = 22;
+ public const int DEFAULT_GS_RES = 300;
+ public const int PAGE_VERT_MARGIN = 10;
+ public const int MAX_PRINT_PREVIEW_LENGTH = 250;
+ public const int ZOOM_MAX = 4;
+ public const double ZOOM_MIN = 0.25;
+}
+
+namespace ghostnet_wpf_example
+{
+ /// <summary>
+ /// Interaction logic for MainWindow.xaml
+ /// </summary>
+ ///
+ public enum NotifyType_t
+ {
+ MESS_STATUS,
+ MESS_ERROR
+ };
+
+ public enum status_t
+ {
+ S_ISOK,
+ E_FAILURE,
+ E_OUTOFMEM,
+ E_NEEDPASSWORD
+ };
+
+ public enum Page_Content_t
+ {
+ FULL_RESOLUTION = 0,
+ THUMBNAIL,
+ OLD_RESOLUTION,
+ LOW_RESOLUTION,
+ NOTSET,
+ BLANK
+ };
+ public enum zoom_t
+ {
+ NO_ZOOM,
+ ZOOM_IN,
+ ZOOM_OUT
+ }
+
+ public enum doc_t
+ {
+ UNKNOWN,
+ PDF,
+ PS,
+ PCL,
+ XPS
+ }
+
+ public struct idata_t
+ {
+ public int page_num;
+ public Byte[] bitmap;
+ public int height;
+ public int width;
+ public int raster;
+ public double zoom;
+ }
+
+ public struct pagesizes_t
+ {
+ public Point size;
+ public double cummulative_y;
+ }
+
+ public partial class MainWindow : Window
+ {
+
+ ghostsharp m_ghostscript;
+ bool m_file_open;
+ doc_t m_document_type;
+ String m_currfile;
+ List<TempFile> m_tempfiles;
+ String m_origfile;
+ int m_currpage;
+ gsOutput m_gsoutput;
+ public int m_numpages;
+ private static Pages m_docPages;
+ private static double m_doczoom;
+ public List<pagesizes_t> m_page_sizes;
+ List<idata_t> m_list_thumb;
+ List<idata_t> m_images_rendered;
+ bool m_init_done;
+ bool m_busy_render;
+ bool m_firstime;
+ bool m_validZoom;
+ bool m_aa;
+ bool m_aa_change;
+ List<int> m_toppage_pos;
+ int m_page_progress_count;
+
+ private static List<Page_Content_t> m_pageType;
+
+ public void ShowMessage(NotifyType_t type, String Message)
+ {
+ if (type == NotifyType_t.MESS_ERROR)
+ {
+ MessageBox.Show(Message, "Error", MessageBoxButton.OK);
+ }
+ else
+ {
+ MessageBox.Show(Message, "Notice", MessageBoxButton.OK);
+ }
+ }
+ public MainWindow()
+ {
+ InitializeComponent();
+ this.Closing += new System.ComponentModel.CancelEventHandler(Window_Closing);
+
+ /* Set up ghostscript calls for progress update */
+ m_ghostscript = new ghostsharp();
+ m_ghostscript.gsUpdateMain += new ghostsharp.gsCallBackMain(gsProgress);
+ m_ghostscript.gsIOUpdateMain += new ghostsharp.gsIOCallBackMain(gsIO);
+ m_ghostscript.gsDLLProblemMain += new ghostsharp.gsDLLProblem(gsDLL);
+
+ m_currpage = 0;
+ m_gsoutput = new gsOutput();
+ m_gsoutput.Activate();
+ m_tempfiles = new List<TempFile>();
+ m_thumbnails = new List<DocPage>();
+ m_docPages = new Pages();
+ m_pageType = new List<Page_Content_t>();
+ m_page_sizes = new List<pagesizes_t>();
+ m_file_open = false;
+ m_document_type = doc_t.UNKNOWN;
+ m_doczoom = 1.0;
+ m_init_done = false;
+ m_busy_render = true;
+ m_validZoom = true;
+ m_firstime = true;
+ m_list_thumb = new List<idata_t>();
+ m_images_rendered = new List<idata_t>();
+ m_busy_rendering = false;
+ m_aa = true;
+ m_aa_change = false;
+
+ xaml_PageList.AddHandler(Grid.DragOverEvent, new System.Windows.DragEventHandler(Grid_DragOver), true);
+ xaml_PageList.AddHandler(Grid.DropEvent, new System.Windows.DragEventHandler(Grid_Drop), true);
+
+ /* For case of opening another file */
+ string[] arguments = Environment.GetCommandLineArgs();
+ if (arguments.Length > 1)
+ {
+ string filePath = arguments[1];
+ ProcessFile(filePath);
+ }
+ }
+ private void gsIO(String mess, int len)
+ {
+ m_gsoutput.Update(mess, len);
+ }
+ private void ShowGSMessage(object sender, RoutedEventArgs e)
+ {
+ m_gsoutput.Show();
+ }
+ private void gsDLL(String mess)
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, mess);
+ }
+
+ private void gsThumbRendered(int width, int height, int raster,
+ IntPtr data, gsParamState_t state)
+ {
+ ThumbPageCallback(width, height, raster, state.zoom, state.currpage, data);
+ }
+
+ private void gsPageRendered(int width, int height, int raster,
+ IntPtr data, gsParamState_t state)
+ {
+ MainPageCallback(width, height, raster, state.zoom, state.currpage, data);
+ }
+
+ private void gsProgress(gsEventArgs asyncInformation)
+ {
+ if (asyncInformation.Completed)
+ {
+ switch (asyncInformation.Params.task)
+ {
+
+ case GS_Task_t.CREATE_XPS:
+ xaml_DistillProgress.Value = 100;
+ xaml_DistillGrid.Visibility = System.Windows.Visibility.Collapsed;
+ break;
+
+ case GS_Task_t.PS_DISTILL:
+ xaml_DistillProgress.Value = 100;
+ xaml_DistillGrid.Visibility = System.Windows.Visibility.Collapsed;
+ break;
+
+ case GS_Task_t.SAVE_RESULT:
+ break;
+
+ case GS_Task_t.DISPLAY_DEV_THUMBS_NON_PDF:
+ case GS_Task_t.DISPLAY_DEV_THUMBS_PDF:
+ ThumbsDone();
+ break;
+
+ case GS_Task_t.DISPLAY_DEV_PDF:
+ case GS_Task_t.DISPLAY_DEV_NON_PDF:
+ RenderingDone();
+ break;
+
+ }
+ if (asyncInformation.Params.result == GS_Result_t.gsFAILED)
+ {
+ switch (asyncInformation.Params.task)
+ {
+ case GS_Task_t.CREATE_XPS:
+ ShowMessage(NotifyType_t.MESS_STATUS, "Ghostscript failed to create XPS");
+ break;
+
+ case GS_Task_t.PS_DISTILL:
+ ShowMessage(NotifyType_t.MESS_STATUS, "Ghostscript failed to distill PS");
+ break;
+
+ case GS_Task_t.SAVE_RESULT:
+ ShowMessage(NotifyType_t.MESS_STATUS, "Ghostscript failed to convert document");
+ break;
+
+ default:
+ ShowMessage(NotifyType_t.MESS_STATUS, "Ghostscript failed.");
+ break;
+
+ }
+ return;
+ }
+ GSResult(asyncInformation.Params);
+ }
+ else
+ {
+ switch (asyncInformation.Params.task)
+ {
+ case GS_Task_t.CREATE_XPS:
+ this.xaml_DistillProgress.Value = asyncInformation.Progress;
+ break;
+
+ case GS_Task_t.PS_DISTILL:
+ this.xaml_DistillProgress.Value = asyncInformation.Progress;
+ break;
+
+ case GS_Task_t.SAVE_RESULT:
+ break;
+ }
+ }
+ }
+
+ /* GS Result*/
+ public void GSResult(gsParamState_t gs_result)
+ {
+ TempFile tempfile = null;
+
+ if (gs_result.outputfile != null)
+ tempfile = new TempFile(gs_result.outputfile);
+
+ if (gs_result.result == GS_Result_t.gsCANCELLED)
+ {
+ xaml_DistillGrid.Visibility = System.Windows.Visibility.Collapsed;
+ if (tempfile != null)
+ {
+ try
+ {
+ tempfile.DeleteFile();
+ }
+ catch
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "Problem Deleting Temp File");
+ }
+ }
+ return;
+ }
+ if (gs_result.result == GS_Result_t.gsFAILED)
+ {
+ xaml_DistillGrid.Visibility = System.Windows.Visibility.Collapsed;
+ ShowMessage(NotifyType_t.MESS_STATUS, "GS Failed Conversion");
+ if (tempfile != null)
+ {
+ try
+ {
+ tempfile.DeleteFile();
+ }
+ catch
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "Problem Deleting Temp File");
+ }
+ }
+ return;
+ }
+ switch (gs_result.task)
+ {
+ case GS_Task_t.CREATE_XPS:
+ xaml_DistillGrid.Visibility = System.Windows.Visibility.Collapsed;
+ /* Always do print all from xps conversion as it will do
+ * the page range handling for us */
+ /* Add file to temp file list */
+ m_tempfiles.Add(tempfile);
+ PrintXPS(gs_result.outputfile, true, -1, -1, true);
+ break;
+
+ case GS_Task_t.PS_DISTILL:
+ xaml_DistillGrid.Visibility = System.Windows.Visibility.Collapsed;
+ m_origfile = gs_result.inputfile;
+
+ /* Save distilled result */
+ SaveFileDialog dlg = new SaveFileDialog();
+ dlg.Filter = "PDF file (*.pdf)|*.pdf";
+ dlg.FileName = System.IO.Path.GetFileNameWithoutExtension(m_origfile) + ".pdf";
+ if (dlg.ShowDialog() == true)
+ {
+ try
+ {
+ if (File.Exists(dlg.FileName))
+ {
+ File.Delete(dlg.FileName);
+ }
+ File.Copy(tempfile.Filename, dlg.FileName);
+ }
+ catch (Exception except)
+ {
+ ShowMessage(NotifyType_t.MESS_ERROR, "Exception Saving Distilled Result:" + except.Message);
+ }
+
+ }
+ tempfile.DeleteFile();
+ break;
+
+ case GS_Task_t.SAVE_RESULT:
+ /* Don't delete file in this case as this was our output! */
+ ShowMessage(NotifyType_t.MESS_STATUS, "GS Completed Conversion");
+ break;
+ }
+ }
+
+ private void OpenFileCommand(object sender, ExecutedRoutedEventArgs e)
+ {
+ OpenFile(sender, e);
+ }
+
+ private void CleanUp()
+ {
+ m_init_done = false;
+
+ /* Collapse this stuff since it is going to be released */
+ xaml_ThumbGrid.Visibility = System.Windows.Visibility.Collapsed;
+
+ /* Clear out everything */
+ if (m_docPages != null && m_docPages.Count > 0)
+ m_docPages.Clear();
+ if (m_pageType != null && m_pageType.Count > 0)
+ m_pageType.Clear();
+ if (m_thumbnails != null && m_thumbnails.Count > 0)
+ m_thumbnails.Clear();
+ if (m_toppage_pos != null && m_toppage_pos.Count > 0)
+ m_toppage_pos.Clear();
+ if (m_list_thumb != null && m_list_thumb.Count > 0)
+ m_list_thumb.Clear();
+ if (m_images_rendered != null && m_images_rendered.Count > 0)
+ m_images_rendered.Clear();
+ if (m_page_sizes != null && m_page_sizes.Count > 0)
+ m_page_sizes.Clear();
+
+ m_currfile = null;
+ m_origfile = null;
+ m_numpages = -1;
+ m_file_open = false;
+ m_firstime = true;
+ m_document_type = doc_t.UNKNOWN;
+ m_origfile = null;
+ CleanUpTempFiles();
+ m_file_open = false;
+ m_busy_render = true;
+ xaml_TotalPages.Text = "/ 0";
+ xaml_currPage.Text = "0";
+ CloseExtraWindows(false);
+
+ return;
+ }
+
+ private void CloseCommand(object sender, ExecutedRoutedEventArgs e)
+ {
+ if (m_init_done)
+ CleanUp();
+ }
+
+ private bool ReadyForOpen()
+ {
+ /* Check if gs is currently busy. If it is then don't allow a new
+ * file to be opened. They can cancel gs with the cancel button if
+ * they want */
+ if (m_ghostscript.GetStatus() != gsStatus.GS_READY)
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "GS busy. Cancel to open new file.");
+ return false;
+ }
+ return true;
+ }
+
+ private void OpenFile(object sender, RoutedEventArgs e)
+ {
+ if (!ReadyForOpen())
+ return;
+
+ OpenFileDialog dlg = new OpenFileDialog();
+ dlg.Filter = "Document Files(*.ps;*.eps;*.pdf)|*.ps;*.eps;*.pdf;|All files (*.*)|*.*";
+ dlg.FilterIndex = 1;
+ if (dlg.ShowDialog() == true)
+ ProcessFile(dlg.FileName);
+ }
+
+ public void ProcessFile(String FileName)
+ {
+ /* Before we even get started check for issues */
+ /* First check if file exists and is available */
+ if (!System.IO.File.Exists(FileName))
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "File not found!");
+ return;
+ }
+ if (m_file_open)
+ {
+ /* In this case, we want to go ahead and launch a new process
+ * handing it the filename */
+ /* We need to get the location */
+ string path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
+ try
+ {
+ Process.Start(path, FileName);
+ }
+ catch (InvalidOperationException)
+ {
+ Console.WriteLine("InvalidOperationException");
+ }
+ catch (Win32Exception)
+ {
+ Console.WriteLine("Win32 Exception: There was an error in opening the associated file. ");
+ }
+ return;
+ }
+
+ /* If we have a ps or eps file then launch the distiller first
+ * and then we will get a temp pdf file which we will open. This is done
+ * to demo both methods of doing callbacks from gs worker thread. Either
+ * progress as we distill the stream for PS or page by page for PDF */
+ string extension = System.IO.Path.GetExtension(FileName);
+
+ /* We are doing this based on the extension but like should do
+ * it based upon the content */
+ switch (extension.ToUpper())
+ {
+ case ".PS":
+ m_document_type = doc_t.PS;
+ break;
+ case ".EPS":
+ m_document_type = doc_t.PS;
+ break;
+ case ".PDF":
+ m_document_type = doc_t.PDF;
+ break;
+ case ".XPS":
+ m_document_type = doc_t.XPS;
+ break;
+ case ".BIN":
+ m_document_type = doc_t.PCL;
+ break;
+ default:
+ {
+ m_document_type = doc_t.UNKNOWN;
+ ShowMessage(NotifyType_t.MESS_STATUS, "Unknown File Type");
+ return;
+ }
+ }
+ if (extension.ToUpper() != ".PDF")
+ {
+
+ MessageBoxResult result = MessageBox.Show("Would you like to Distill this file?", "ghostnet", MessageBoxButton.YesNoCancel);
+ switch (result)
+ {
+ case MessageBoxResult.Yes:
+ xaml_DistillProgress.Value = 0;
+ if (m_ghostscript.DistillPS(FileName, Constants.DEFAULT_GS_RES) == gsStatus.GS_BUSY)
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "GS currently busy");
+ return;
+ }
+ xaml_DistillName.Text = "Distilling";
+ xaml_CancelDistill.Visibility = System.Windows.Visibility.Visible;
+ xaml_DistillName.FontWeight = FontWeights.Bold;
+ xaml_DistillGrid.Visibility = System.Windows.Visibility.Visible;
+ return;
+ case MessageBoxResult.No:
+ break;
+ case MessageBoxResult.Cancel:
+ return;
+ }
+ }
+ m_currfile = FileName;
+ //m_numpages = m_ghostscript.GetPageCount(m_currfile);
+ RenderThumbs();
+ return;
+
+ }
+ private void CancelDistillClick(object sender, RoutedEventArgs e)
+ {
+
+ }
+ private void DeleteTempFile(String file)
+ {
+ for (int k = 0; k < m_tempfiles.Count; k++)
+ {
+ if (String.Compare(file, m_tempfiles[k].Filename) == 0)
+ {
+ try
+ {
+ m_tempfiles[k].DeleteFile();
+ m_tempfiles.RemoveAt(k);
+ }
+ catch
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "Problem Deleting Temp File");
+ }
+ break;
+ }
+ }
+ }
+
+ private void CleanUpTempFiles()
+ {
+ for (int k = 0; k < m_tempfiles.Count; k++)
+ {
+ try
+ {
+ m_tempfiles[k].DeleteFile();
+ }
+ catch
+ {
+ ShowMessage(NotifyType_t.MESS_STATUS, "Problem Deleting Temp File");
+ }
+ }
+ m_tempfiles.Clear();
+ }
+ private void OnAboutClick(object sender, RoutedEventArgs e)
+ {
+ About about = new About(this);
+ var desc_static = about.Description;
+ String desc;
+
+ String gs_vers = m_ghostscript.GetVersion();
+ if (gs_vers == null)
+ desc = "\nGhostscript DLL: Not Found";
+ else
+ desc = "\nGhostscript DLL: Using " + gs_vers + " 64 bit\n";
+
+ about.description.Text = desc;
+ about.ShowDialog();
+ }
+
+ private static DocPage InitDocPage()
+ {
+ DocPage doc_page = new DocPage();
+
+ doc_page.BitMap = null;
+ doc_page.Height = Constants.BLANK_HEIGHT;
+ doc_page.Width = Constants.BLANK_WIDTH;
+ return doc_page;
+ }
+
+ private void ThumbSelected(object sender, MouseButtonEventArgs e)
+ {
+ var item = ((FrameworkElement)e.OriginalSource).DataContext as DocPage;
+
+ if (item != null)
+ {
+ if (item.PageNum < 0)
+ return;
+
+ var obj = xaml_PageList.Items[item.PageNum - 1];
+ xaml_PageList.ScrollIntoView(obj);
+ }
+ }
+
+ void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+ {
+ CloseExtraWindows(true);
+ }
+
+ void CloseExtraWindows(bool shutdown)
+ {
+ if (shutdown)
+ {
+ if (m_gsoutput != null)
+ m_gsoutput.RealWindowClosing();
+ if (m_printcontrol != null)
+ m_printcontrol.RealWindowClosing();
+ }
+ else
+ {
+ if (m_gsoutput != null)
+ m_gsoutput.Hide();
+ if (m_printcontrol != null)
+ m_printcontrol.Hide();
+ }
+ }
+
+ private void PageScrollChanged(object sender, ScrollChangedEventArgs e)
+ {
+ e.Handled = true;
+
+ if (!m_init_done || m_busy_rendering || m_toppage_pos == null)
+ return;
+
+ /* Find the pages that are visible. */
+ double top_window = e.VerticalOffset;
+ double bottom_window = top_window + e.ViewportHeight;
+ int first_page = -1;
+ int last_page = -1;
+
+ if (top_window > m_toppage_pos[m_numpages - 1])
+ {
+ first_page = m_numpages - 1;
+ last_page = first_page;
+ }
+ else
+ {
+ for (int k = 0; k < (m_toppage_pos.Count() - 1); k++)
+ {
+ if (top_window <= m_toppage_pos[k + 1] && bottom_window >= m_toppage_pos[k])
+ {
+ if (first_page == -1)
+ first_page = k;
+ else
+ {
+ last_page = k;
+ break;
+ }
+ }
+ else
+ {
+ if (first_page != -1)
+ {
+ last_page = first_page;
+ break;
+ }
+ }
+ }
+ }
+
+ m_currpage = first_page;
+ xaml_currPage.Text = (m_currpage + 1).ToString();
+
+ /* Only PDF does this page sensitive approach */
+ if (m_document_type != doc_t.PDF)
+ return;
+
+ /* Disable for now. All do full doc rendering. NB implement
+ * for XPS and PDF which allow direct page access */
+ //PageRangeRender(first_page, last_page);
+ return;
+ }
+ private void Grid_DragOver(object sender, System.Windows.DragEventArgs e)
+ {
+ if (e.Data.GetDataPresent(System.Windows.DataFormats.FileDrop))
+ {
+ e.Effects = System.Windows.DragDropEffects.All;
+ }
+ else
+ {
+ e.Effects = System.Windows.DragDropEffects.None;
+ }
+ e.Handled = false;
+ }
+
+ private void Grid_Drop(object sender, System.Windows.DragEventArgs e)
+ {
+ if (e.Data.GetDataPresent(System.Windows.DataFormats.FileDrop))
+ {
+ string[] docPath = (string[])e.Data.GetData(System.Windows.DataFormats.FileDrop);
+ ProcessFile(String.Join("", docPath));
+ }
+ }
+ private void PageEnterClicked(object sender, KeyEventArgs e)
+ {
+ if (e.Key == Key.Return)
+ {
+ e.Handled = true;
+ var desired_page = xaml_currPage.Text;
+ try
+ {
+ int page = System.Convert.ToInt32(desired_page);
+ if (page > 0 && page < (m_numpages + 1))
+ {
+ var obj = xaml_PageList.Items[page - 1];
+ xaml_PageList.ScrollIntoView(obj);
+ }
+ }
+ catch (FormatException)
+ {
+ Console.WriteLine("String is not a sequence of digits.");
+ }
+ catch (OverflowException)
+ {
+ Console.WriteLine("The number cannot fit in an Int32.");
+ }
+ }
+ }
+
+ private void AA_uncheck(object sender, RoutedEventArgs e)
+ {
+ m_aa = false;
+ m_aa_change = true;
+ RenderMainAll();
+ }
+
+ private void AA_check(object sender, RoutedEventArgs e)
+ {
+ m_aa = true;
+ m_aa_change = true;
+ RenderMainAll();
+ }
+ }
+}
diff --git a/demos/csharp/windows/ghostnet_wpf_example/MainZoom.cs b/demos/csharp/windows/ghostnet_wpf_example/MainZoom.cs
new file mode 100644
index 00000000..0502e6c7
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/MainZoom.cs
@@ -0,0 +1,168 @@
+using System;
+using System.Windows;
+using System.Windows.Controls;
+using System.Text.RegularExpressions;
+using System.Windows.Input;
+
+namespace ghostnet_wpf_example
+{
+ public partial class MainWindow
+ {
+ static double[] ZoomSteps = new double[]
+ {0.25, 0.333, 0.482, 0.667, 0.75, 1.0, 1.25, 1.37,
+ 1.50, 2.00, 3.00, 4.00};
+
+ public double GetNextZoom(double curr_zoom, int direction)
+ {
+ int k = 0;
+
+ /* Find segement we are in */
+ for (k = 0; k < ZoomSteps.Length - 1; k++)
+ {
+ if (curr_zoom >= ZoomSteps[k] && curr_zoom <= ZoomSteps[k + 1])
+ break;
+ }
+
+ /* Handling increasing zoom case. Look at upper boundary */
+ if (curr_zoom < ZoomSteps[k + 1] && direction > 0)
+ return ZoomSteps[k + 1];
+
+ if (curr_zoom == ZoomSteps[k + 1] && direction > 0)
+ {
+ if (k + 1 < ZoomSteps.Length - 1)
+ return ZoomSteps[k + 2];
+ else
+ return ZoomSteps[k + 1];
+ }
+
+ /* Handling decreasing zoom case. Look at lower boundary */
+ if (curr_zoom > ZoomSteps[k] && direction < 0)
+ return ZoomSteps[k];
+
+ if (curr_zoom == ZoomSteps[k] && direction < 0)
+ {
+ if (k > 0)
+ return ZoomSteps[k - 1];
+ else
+ return ZoomSteps[k];
+ }
+ return curr_zoom;
+ }
+
+ private bool ZoomDisabled()
+ {
+ if (!m_init_done || m_busy_render)
+ return true;
+ else
+ return false;
+ }
+
+ private void ZoomOut(object sender, RoutedEventArgs e)
+ {
+ if (ZoomDisabled())
+ return;
+ if (!m_init_done || m_doczoom <= Constants.ZOOM_MIN)
+ return;
+
+ m_doczoom = GetNextZoom(m_doczoom, -1);
+ xaml_Zoomsize.Text = Math.Round(m_doczoom * 100.0).ToString();
+ ResizePages();
+ RenderMainAll();
+ }
+
+ private void ZoomIn(object sender, RoutedEventArgs e)
+ {
+ if (ZoomDisabled())
+ return;
+ if (!m_init_done || m_doczoom >= Constants.ZOOM_MAX)
+ return;
+
+ m_doczoom = GetNextZoom(m_doczoom, 1);
+ xaml_Zoomsize.Text = Math.Round(m_doczoom * 100.0).ToString();
+ ResizePages();
+ RenderMainAll();
+ }
+
+ private void ZoomTextChanged(object sender, TextChangedEventArgs e)
+ {
+ Regex regex = new Regex("[^0-9.]+");
+ System.Windows.Controls.TextBox tbox =
+ (System.Windows.Controls.TextBox)sender;
+
+ if (tbox.Text == "")
+ {
+ e.Handled = true;
+ return;
+ }
+
+ /* Need to check it again. back space does not cause PreviewTextInputTo
+ * to fire */
+ bool ok = !regex.IsMatch(tbox.Text);
+ if (ok)
+ m_validZoom = true;
+ else
+ {
+ m_validZoom = false;
+ tbox.Text = "";
+ }
+ }
+
+ private void ZoomEnterClicked(object sender, System.Windows.Input.KeyEventArgs e)
+ {
+ if (!m_validZoom)
+ return;
+
+ if (e.Key == Key.Return)
+ {
+ e.Handled = true;
+ var desired_zoom = xaml_Zoomsize.Text;
+ try
+ {
+ double zoom = (double)System.Convert.ToDouble(desired_zoom) / 100.0;
+ if (zoom > Constants.ZOOM_MAX)
+ zoom = Constants.ZOOM_MAX;
+ if (zoom < Constants.ZOOM_MIN)
+ zoom = Constants.ZOOM_MIN;
+
+ m_doczoom = zoom;
+ ResizePages();
+ RenderMainAll();
+ xaml_Zoomsize.Text = Math.Round(zoom * 100.0).ToString();
+ }
+ catch (FormatException)
+ {
+ xaml_Zoomsize.Text = "";
+ Console.WriteLine("String is not a sequence of digits.");
+ }
+ catch (OverflowException)
+ {
+ xaml_Zoomsize.Text = "";
+ Console.WriteLine("The number cannot fit");
+ }
+ }
+ }
+
+ private void ResizePages()
+ {
+ if (m_page_sizes.Count == 0)
+ return;
+
+ for (int k = 0; k < m_numpages; k++)
+ {
+ var doc_page = m_docPages[k];
+ if (doc_page.Zoom == m_doczoom &&
+ doc_page.Width == (int)(m_doczoom * m_page_sizes[k].size.X) &&
+ doc_page.Height == (int)(m_doczoom * m_page_sizes[k].size.Y))
+ continue;
+ else
+ {
+ /* Resize it now */
+ doc_page.Width = (int)(m_doczoom * m_page_sizes[k].size.X);
+ doc_page.Height = (int)(m_doczoom * m_page_sizes[k].size.Y);
+ doc_page.Zoom = m_doczoom;
+ doc_page.Content= Page_Content_t.OLD_RESOLUTION;
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/demos/csharp/windows/ghostnet_wpf_example/PrintControl.xaml b/demos/csharp/windows/ghostnet_wpf_example/PrintControl.xaml
new file mode 100644
index 00000000..cc7bb6b6
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/PrintControl.xaml
@@ -0,0 +1,148 @@
+<Window x:Class="ghostnet_wpf_example.Print"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:local="clr-namespace:ghostnet_wpf_example"
+ mc:Ignorable="d"
+ Title="Ghostnet XPS Print" Height="325" Width="550"
+ SizeToContent="WidthAndHeight" ResizeMode="NoResize"
+ FontFamily="Segou UI" FontSize="12">
+
+
+ <Window.Resources>
+ <Style x:Key="MySimpleScrollBar" TargetType="{x:Type ScrollBar}">
+ <Setter Property="Stylus.IsFlicksEnabled" Value="false"/>
+ <Setter Property="Width" Value="Auto"/>
+ <Setter Property="MinHeight" Value="30"/>
+ <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type ScrollBar}">
+ <Border BorderThickness="1" BorderBrush="Gray">
+ <Grid Margin="2">
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition/>
+ <ColumnDefinition />
+ </Grid.ColumnDefinitions>
+ <TextBox VerticalAlignment="Center" FontSize="12" MinWidth="25" Text="{Binding Value, RelativeSource={RelativeSource TemplatedParent}}"/>
+ <Grid Grid.Column="1" x:Name="GridRoot" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Background="{TemplateBinding Background}">
+ <Grid.RowDefinitions>
+ <RowDefinition MaxHeight="18"/>
+ <RowDefinition Height="0.00001*"/>
+ <RowDefinition MaxHeight="18"/>
+ </Grid.RowDefinitions>
+ <RepeatButton x:Name="DecreaseRepeat" Command="ScrollBar.LineDownCommand" Focusable="False">
+ <Grid>
+ <Path x:Name="DecreaseArrow" Stroke="{TemplateBinding Foreground}" StrokeThickness="1" Data="M 0 4 L 8 4 L 4 0 Z"/>
+ </Grid>
+ </RepeatButton>
+ <RepeatButton Grid.Row="2" x:Name="IncreaseRepeat" Command="ScrollBar.LineUpCommand" Focusable="False">
+ <Grid>
+ <Path x:Name="IncreaseArrow" Stroke="{TemplateBinding Foreground}" StrokeThickness="1" Data="M 0 0 L 4 4 L 8 0 Z"/>
+ </Grid>
+ </RepeatButton>
+ </Grid>
+ </Grid>
+ </Border>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
+ </Window.Resources>
+
+ <DockPanel Background="WhiteSmoke" LastChildFill="False" Margin="0,0,0,0">
+ <GroupBox Header="Printer" Height="100" Width="500" DockPanel.Dock="Top" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="15,15,0,0">
+ <Grid Background="WhiteSmoke" Visibility="Visible" >
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="Auto" />
+ <ColumnDefinition Width="*" />
+ <ColumnDefinition Width="Auto" />
+ </Grid.ColumnDefinitions>
+ <Grid Grid.Column="0" Grid.Row="0" Background="WhiteSmoke">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="30" />
+ <RowDefinition Height="30" />
+ </Grid.RowDefinitions>
+ <TextBox Grid.Column="0" Grid.Row="0" Text="Name:" FontSize="12" FontFamily="Segoe UI" Background="WhiteSmoke" BorderThickness="0" VerticalAlignment="Center"/>
+ <TextBox Grid.Column="0" Grid.Row="1" Text="Status:" FontSize="12" FontFamily="Segoe UI" Background="WhiteSmoke" BorderThickness="0" VerticalAlignment="Center"/>
+ </Grid>
+ <Grid Grid.Column="1" Grid.Row="0" Background="WhiteSmoke">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="30" />
+ <RowDefinition Height="30" />
+ </Grid.RowDefinitions>
+ <ComboBox Grid.Column="0" Grid.Row="0" x:Name="xaml_selPrinter" SelectionChanged="selPrinterChanged" Width="225" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Center" >
+ <ComboBox.ItemTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal">
+ <TextBlock FontSize="11" FontFamily="Segoe UI" Text="{Binding Name}" />
+ </StackPanel>
+ </DataTemplate>
+ </ComboBox.ItemTemplate>
+ </ComboBox>
+ <TextBox Grid.Column="0" Grid.Row="1" x:Name="xaml_Status" FontSize="12" FontFamily="Segoe UI" Text="" Margin="105,92,497,301" Background="WhiteSmoke" BorderThickness="0"/>
+ </Grid>
+ <Grid Grid.Column="2" Grid.Row="0" Background="WhiteSmoke">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="30" />
+ </Grid.RowDefinitions>
+ <Button Grid.Column="0" Grid.Row="0" Content="Properties" FontSize="12" FontFamily="Segoe UI" HorizontalAlignment="Center" Margin="0, 0, 30, 0" VerticalAlignment="Center" Width="75" Click="ShowProperties"/>
+ </Grid>
+ </Grid>
+ </GroupBox>
+ <Grid DockPanel.Dock="Top" Background="WhiteSmoke" Visibility="Visible">
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="Auto" />
+ <ColumnDefinition Width="Auto" />
+ </Grid.ColumnDefinitions>
+ <GroupBox Grid.Column="0" Grid.Row="0" Header="Print Range" Height="130" Width="250" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="15,15,0,0">
+ <Grid Background="WhiteSmoke" Visibility="Visible" >
+ <Grid.RowDefinitions>
+ <RowDefinition Height="30" />
+ <RowDefinition Height="30" />
+ <RowDefinition Height="20" />
+ <RowDefinition Height="30" />
+ </Grid.RowDefinitions>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="90" />
+ <ColumnDefinition Width="Auto" />
+ </Grid.ColumnDefinitions>
+ <RadioButton Grid.Column="0" Grid.Row="0" Name="xaml_rbAll" VerticalAlignment="Center" GroupName="PageRange" Checked="AllPages">All</RadioButton>
+ <RadioButton Grid.Column="0" Grid.Row="1" Name="xaml_rbCurrent" VerticalAlignment="Center" GroupName="PageRange" Checked="CurrentPage">Current page</RadioButton>
+ <RadioButton Grid.Column="0" Grid.Row="3" Name="xaml_rbPages" VerticalAlignment="Center" GroupName="PageRange" Checked="PageRange">Pages</RadioButton>
+
+ <TextBox Grid.Column="1" Grid.Row="2" VerticalAlignment="Center" Text="From" FontSize="12" FontFamily="Segoe UI" Background="WhiteSmoke" BorderThickness="0" />
+ <TextBox Grid.Column="1" Grid.Row="2" VerticalAlignment="Center" Text="To" FontSize="12" Margin="70,0,0,0" FontFamily="Segoe UI" Background="WhiteSmoke" BorderThickness="0" />
+ <TextBox x:Name="xaml_pagestart" Grid.Column="1" Grid.Row="3" Width="50" Height="20" VerticalScrollBarVisibility="Hidden" HorizontalAlignment="Left"
+ HorizontalScrollBarVisibility="Hidden" VerticalAlignment="Center" FontSize="12" FontFamily="Segoe UI" Margin="0,0,0,0" PreviewTextInput="PreviewTextInputFrom"
+ TextChanged="FromChanged"/>
+ <TextBox x:Name="xaml_pageend" Grid.Column="1" Grid.Row="3" Width="50" Height="20" VerticalScrollBarVisibility="Hidden" HorizontalAlignment="Left"
+ HorizontalScrollBarVisibility="Hidden" VerticalAlignment="Center" FontSize="12" FontFamily="Segoe UI" Margin="70,0,0,0" PreviewTextInput="PreviewTextInputTo"
+ TextChanged="ToChanged"/>
+ </Grid>
+ </GroupBox>
+
+ <GroupBox Grid.Column="1" Grid.Row="0" Header="Page Handling" Height="90" Width="250" Margin="0,-25,0,0" DockPanel.Dock="Right" HorizontalAlignment="Center" >
+ <Grid Background="WhiteSmoke" Visibility="Visible" Height="103" VerticalAlignment="Top">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto" />
+ <RowDefinition Height="Auto" />
+ </Grid.RowDefinitions>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="90" />
+ <ColumnDefinition Width="Auto" />
+ </Grid.ColumnDefinitions>
+ <TextBox Grid.Column="0" Grid.Row="0" VerticalAlignment="Center" Text="Copies:" FontSize="12" FontFamily="Segoe UI" Background="WhiteSmoke" BorderThickness="0" />
+ <ScrollBar Grid.Column="1" Grid.Row="0" x:Name="xaml_Copies" HorizontalAlignment="Left" Style="{DynamicResource MySimpleScrollBar}" VerticalAlignment="Top" Value="1" Maximum="999" SmallChange="1" Height="15" ValueChanged="xaml_Copies_ValueChanged"/>
+ <CheckBox x:Name="xaml_autofit" Grid.Column="0" Grid.Row="2" Content="Auto-Fit" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Checked="AutoFit_Checked" Unchecked="AutoFit_Unchecked" Grid.ColumnSpan="2"/>
+ </Grid>
+ </GroupBox>
+ </Grid>
+
+ <Button Content="OK" FontSize="12" FontFamily="Segoe UI" HorizontalAlignment="Center" VerticalAlignment="Top" Width="74" Click="ClickOK" Margin="300,-30,0,0"/>
+ <Button Content="Cancel" FontSize="12" FontFamily="Segoe UI" HorizontalAlignment="Center" VerticalAlignment="Top" Width="74" Click="ClickCancel" Margin="40,-30,0,0"/>
+
+
+ </DockPanel>
+</Window>
diff --git a/demos/csharp/windows/ghostnet_wpf_example/PrintControl.xaml.cs b/demos/csharp/windows/ghostnet_wpf_example/PrintControl.xaml.cs
new file mode 100644
index 00000000..bd5454b5
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/PrintControl.xaml.cs
@@ -0,0 +1,517 @@
+using System;
+using System.Collections.Generic;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Printing;
+using System.Drawing.Printing;
+using System.Text.RegularExpressions;
+using System.Runtime.InteropServices; /* DLLImport */
+using System.Windows.Interop;
+
+namespace ghostnet_wpf_example
+{
+
+ internal enum fModes
+ {
+ DM_SIZEOF = 0,
+ DM_UPDATE = 1,
+ DM_COPY = 2,
+ DM_PROMPT = 4,
+ DM_MODIFY = 8,
+ DM_OUT_DEFAULT = DM_UPDATE,
+ DM_OUT_BUFFER = DM_COPY,
+ DM_IN_PROMPT = DM_PROMPT,
+ DM_IN_BUFFER = DM_MODIFY,
+ }
+
+ /* Needed native methods for more advanced printing control */
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+ internal class PRINTER_INFO_9
+ {
+ /// <summary>
+ /// A pointer to a DEVMODE structure that defines the per-user
+ /// default printer data such as the paper orientation and the resolution.
+ /// The DEVMODE is stored in the user's registry.
+ /// </summary>
+ public IntPtr pDevMode;
+ }
+
+ static class print_nativeapi
+ {
+ [DllImport("kernel32.dll")]
+ public static extern IntPtr GlobalLock(IntPtr hMem);
+
+ [DllImport("kernel32.dll")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ public static extern bool GlobalUnlock(IntPtr hMem);
+
+ [DllImport("kernel32.dll")]
+ public static extern IntPtr GlobalFree(IntPtr hMem);
+
+ [DllImport("winspool.drv", SetLastError = true)]
+ public static extern int OpenPrinter(string pPrinterName, out IntPtr phPrinter, IntPtr pDefault);
+
+ [DllImport("winspool.drv", SetLastError = true)]
+ public static extern int SetPrinter(IntPtr phPrinter, UInt32 Level , IntPtr pPrinter, UInt32 Command);
+
+ [DllImport("winspool.Drv", EntryPoint = "DocumentPropertiesW", SetLastError = true, ExactSpelling = true,
+ CallingConvention = CallingConvention.StdCall)]
+ public static extern int DocumentProperties(IntPtr hwnd, IntPtr hPrinter, [MarshalAs(UnmanagedType.LPWStr)] string pDeviceName,
+ IntPtr pDevModeOutput, IntPtr pDevModeInput, int fMode);
+
+ [DllImport("winspool.drv", CharSet = CharSet.Unicode, SetLastError = true)]
+ public static extern int DocumentProperties(IntPtr hWnd, IntPtr hPrinter, string pDeviceName, IntPtr pDevModeOutput,
+ IntPtr pDevModeInput, fModes fMode);
+ }
+
+ static class NATIVEWIN
+ {
+ public const int IDOK = 1;
+ public const int IDCANCEL = 2;
+ public const int DM_OUT_BUFFER = 2;
+ public const int DM_IN_BUFFER = 8;
+ public const int DM_IN_PROMPT = 4;
+ public const int DM_ORIENTATION = 1;
+ public const int DM_PAPERSIZE = 2;
+ public const int DM_PAPERLENGTH = 4;
+ public const int DM_WIDTH = 8;
+ public const int DMORIENT_PORTRAIT = 1;
+ public const int DMORIENT_LANDSCAPE = 2;
+ }
+ public enum PrintPages_t
+ {
+ RANGE = 2,
+ CURRENT = 1,
+ ALL = 0
+ }
+
+ public enum PageScale_t
+ {
+ NONE = 0,
+ FIT = 1,
+ }
+
+ public class PrintDiagEventArgs : EventArgs
+ {
+ public int m_page;
+
+ public PrintDiagEventArgs(int page)
+ {
+ m_page = page;
+ }
+ }
+
+ public class PrintRanges
+ {
+ public List<bool> ToPrint;
+ public bool HasEvens;
+ public bool HasOdds;
+ public int NumberPages;
+
+ public PrintRanges(int number_pages)
+ {
+ ToPrint = new List<bool>(number_pages);
+ NumberPages = 0;
+ HasEvens = false;
+ HasOdds = false;
+ }
+
+ public void InitRange(Match match)
+ {
+ NumberPages = 0;
+ HasEvens = false;
+ HasOdds = false;
+
+ for (int k = 0; k < ToPrint.Count; k++)
+ {
+ if (CheckValue(match, k))
+ {
+ NumberPages = NumberPages + 1;
+ ToPrint[k] = true;
+ if ((k + 1) % 2 != 0)
+ HasOdds = true;
+ else
+ HasEvens = true;
+ }
+ else
+ ToPrint[k] = false;
+ }
+ }
+
+ private bool CheckValue(Match match, int k)
+ {
+ return false;
+ }
+ }
+
+ public partial class Print : Window
+ {
+ private LocalPrintServer m_printServer;
+ public PrintQueue m_selectedPrinter = null;
+ String m_status;
+ public PrintPages_t m_pages_setting;
+ public double m_page_scale;
+ int m_numpages;
+ PrintCapabilities m_printcap;
+ public PageSettings m_pagedetails;
+ TranslateTransform m_trans_pap;
+ TranslateTransform m_trans_doc;
+ public bool m_isrotated;
+ PrintRanges m_range_pages;
+ public int m_numcopies;
+ bool m_invalidTo;
+ bool m_invalidFrom;
+ public int m_from;
+ public int m_to;
+ ghostnet_wpf_example.MainWindow main;
+ PrinterSettings m_ps;
+
+ public Print(ghostnet_wpf_example.MainWindow main_in, int num_pages)
+ {
+ InitializeComponent();
+
+ m_ps = new PrinterSettings();
+ main = main_in;
+
+ this.Closing += new System.ComponentModel.CancelEventHandler(FakeWindowClosing);
+ InitializeComponent();
+ m_printServer = new LocalPrintServer();
+ m_selectedPrinter = LocalPrintServer.GetDefaultPrintQueue();
+ m_ps.PrinterName = m_selectedPrinter.FullName;
+ m_pagedetails = m_ps.DefaultPageSettings;
+
+
+ xaml_rbAll.IsChecked = true;
+ m_pages_setting = PrintPages_t.ALL;
+
+ xaml_autofit.IsChecked = false;
+
+ m_numpages = num_pages;
+
+ m_printcap = m_selectedPrinter.GetPrintCapabilities();
+
+ m_trans_pap = new TranslateTransform(0, 0);
+ m_trans_doc = new TranslateTransform(0, 0);
+ m_isrotated = false;
+
+ /* Data range case */
+ m_range_pages = new PrintRanges(m_numpages);
+ m_page_scale = 1.0;
+
+ m_numcopies = 1;
+
+ m_invalidTo = true;
+ m_invalidFrom = true;
+ m_from = -1;
+ m_to = -1;
+
+ InitPrinterList();
+ }
+ void FakeWindowClosing(object sender, System.ComponentModel.CancelEventArgs e)
+ {
+ e.Cancel = true;
+ this.Hide();
+ }
+
+ public void RealWindowClosing()
+ {
+ this.Closing -= new System.ComponentModel.CancelEventHandler(FakeWindowClosing);
+ this.Close();
+ }
+
+ private void InitPrinterList()
+ {
+ PrintQueueCollection printQueuesOnLocalServer =
+ m_printServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });
+
+ this.xaml_selPrinter.ItemsSource = printQueuesOnLocalServer;
+ if (m_selectedPrinter != null)
+ {
+ foreach (PrintQueue pq in printQueuesOnLocalServer)
+ {
+ if (pq.FullName == m_selectedPrinter.FullName)
+ {
+ this.xaml_selPrinter.SelectedItem = pq;
+ break;
+ }
+ }
+ }
+ }
+
+ /* Printer Status */
+ private void GetPrinterStatus()
+ {
+ if (m_selectedPrinter != null)
+ {
+ if (m_selectedPrinter.IsBusy)
+ m_status = "Busy";
+ else if (m_selectedPrinter.IsNotAvailable)
+ m_status = "Not Available";
+ else if (m_selectedPrinter.IsOffline)
+ m_status = "Offline";
+ else if (m_selectedPrinter.IsOutOfMemory)
+ m_status = "Out Of Memory";
+ else if (m_selectedPrinter.IsOutOfPaper)
+ m_status = "Out Of Paper";
+ else if (m_selectedPrinter.IsOutputBinFull)
+ m_status = "Output Bin Full";
+ else if (m_selectedPrinter.IsPaperJammed)
+ m_status = "Paper Jam";
+ else if (m_selectedPrinter.IsPaused)
+ m_status = "Paused";
+ else if (m_selectedPrinter.IsPendingDeletion)
+ m_status = "Paused";
+ else if (m_selectedPrinter.IsPrinting)
+ m_status = "Printing";
+ else if (m_selectedPrinter.IsProcessing)
+ m_status = "Processing";
+ else if (m_selectedPrinter.IsWaiting)
+ m_status = "Waiting";
+ else if (m_selectedPrinter.IsWarmingUp)
+ m_status = "Warming Up";
+ else
+ m_status = "Ready";
+ xaml_Status.Text = m_status;
+ }
+ }
+
+ private void selPrinterChanged(object sender, SelectionChangedEventArgs e)
+ {
+ m_selectedPrinter = this.xaml_selPrinter.SelectedItem as PrintQueue;
+ GetPrinterStatus();
+ m_ps.PrinterName = m_selectedPrinter.FullName;
+ m_pagedetails = m_ps.DefaultPageSettings;
+ }
+
+ /* We have to do some calling into native methods to deal with and show
+ * the advanced properties referenced by the DEVMODE struture. Ugly,
+ * but I could not figure out how to do with direct WPF C# methods */
+ private void ShowProperties(object sender, RoutedEventArgs e)
+ {
+ try
+ {
+ /* First try to open the printer */
+ IntPtr phPrinter;
+ int result = print_nativeapi.OpenPrinter(m_ps.PrinterName, out phPrinter, IntPtr.Zero);
+ if (result == 0)
+ {
+ return;
+ }
+
+ /* Get a pointer to the DEVMODE */
+ IntPtr hDevMode = m_ps.GetHdevmode(m_ps.DefaultPageSettings);
+ IntPtr pDevMode = print_nativeapi.GlobalLock(hDevMode);
+
+ /* Native method wants a handle to our main window */
+ IntPtr hwin = new WindowInteropHelper(this).Handle;
+
+ /* Get size of DEVMODE */
+ int sizeNeeded = print_nativeapi.DocumentProperties(hwin, IntPtr.Zero, m_ps.PrinterName, IntPtr.Zero, pDevMode, 0);
+
+ /* Allocate */
+ IntPtr devModeData = Marshal.AllocHGlobal(sizeNeeded);
+
+ /* Get devmode and show properties window */
+ print_nativeapi.DocumentProperties(hwin, IntPtr.Zero, m_ps.PrinterName, devModeData, pDevMode, fModes.DM_IN_PROMPT | fModes.DM_OUT_BUFFER);
+
+ /* Set the properties, 9 = PRINTER_INFO_9. This was
+ tricky to figure out how to do */
+ PRINTER_INFO_9 info = new PRINTER_INFO_9();
+ info.pDevMode = devModeData;
+ IntPtr infoPtr = Marshal.AllocHGlobal(Marshal.SizeOf<PRINTER_INFO_9>());
+ Marshal.StructureToPtr<PRINTER_INFO_9>(info, infoPtr, false);
+ result = print_nativeapi.SetPrinter(phPrinter, 9, infoPtr, 0);
+
+ /* Clean up */
+ print_nativeapi.GlobalUnlock(hDevMode);
+ print_nativeapi.GlobalFree(hDevMode);
+ Marshal.FreeHGlobal(infoPtr);
+ //Marshal.FreeHGlobal(devModeData); /* NB: Freeing this causes bad things for some reason. */
+ }
+ catch (Exception except)
+ {
+ main.ShowMessage(NotifyType_t.MESS_ERROR, "Exception in native print interface:" + except.Message);
+ }
+ }
+
+ private void AllPages(object sender, RoutedEventArgs e)
+ {
+ m_pages_setting = PrintPages_t.ALL;
+ }
+
+ private void CurrentPage(object sender, RoutedEventArgs e)
+ {
+ m_pages_setting = PrintPages_t.CURRENT;
+ }
+
+ private void UpdatePageRange()
+ {
+ PrintDiagEventArgs info = new PrintDiagEventArgs(m_from - 1);
+ }
+ public bool RangeOK()
+ {
+ if (m_pages_setting == PrintPages_t.ALL ||
+ m_pages_setting == PrintPages_t.CURRENT)
+ return true;
+
+ if (!m_invalidFrom && !m_invalidTo &&
+ m_pages_setting == PrintPages_t.RANGE &&
+ m_to >= m_from && m_to > 0 && m_from > 0)
+ return true;
+
+ return false;
+ }
+
+ private void PageRange(object sender, RoutedEventArgs e)
+ {
+ m_pages_setting = PrintPages_t.RANGE;
+ if (RangeOK())
+ {
+ UpdatePageRange();
+ }
+ }
+
+ private void PreviewTextInputFrom(object sender, TextCompositionEventArgs e)
+ {
+ Regex regex = new Regex("[^0-9]+");
+ bool ok = !regex.IsMatch(e.Text);
+
+ if (!ok)
+ m_invalidFrom = true;
+ else
+ m_invalidFrom = false;
+ }
+
+ private void PreviewTextInputTo(object sender, TextCompositionEventArgs e)
+ {
+ Regex regex = new Regex("[^0-9]+");
+ bool ok = !regex.IsMatch(e.Text);
+
+ if (!ok)
+ m_invalidTo = true;
+ else
+ m_invalidTo = false;
+ }
+ private void FromChanged(object sender, TextChangedEventArgs e)
+ {
+ Regex regex = new Regex("[^0-9]+");
+ TextBox tbox = (TextBox)sender;
+
+ if (tbox.Text == "")
+ {
+ e.Handled = true;
+ return;
+ }
+
+ /* Need to check it again. back space does not cause PreviewTextInputFrom
+ * to fire */
+ bool ok = !regex.IsMatch(tbox.Text);
+ if (!ok)
+ m_invalidFrom = true;
+ else
+ m_invalidFrom = false;
+
+ if (m_invalidFrom)
+ {
+ xaml_pagestart.Text = "";
+ e.Handled = true;
+ m_from = -1;
+ }
+ else
+ {
+ m_from = System.Convert.ToInt32(xaml_pagestart.Text);
+ if (m_from > m_numpages)
+ {
+ m_from = m_numpages;
+ xaml_pagestart.Text = System.Convert.ToString(m_numpages);
+ }
+ if (m_from < 1)
+ {
+ m_from = 1;
+ xaml_pagestart.Text = System.Convert.ToString(m_numpages);
+ }
+ if (!m_invalidFrom && !m_invalidTo &&
+ m_pages_setting == PrintPages_t.RANGE &&
+ m_to >= m_from)
+ {
+ UpdatePageRange();
+ }
+ }
+ }
+
+ private void ToChanged(object sender, TextChangedEventArgs e)
+ {
+ Regex regex = new Regex("[^0-9]+");
+ TextBox tbox = (TextBox)sender;
+
+ if (tbox.Text == "")
+ {
+ e.Handled = true;
+ return;
+ }
+
+ /* Need to check it again. back space does not cause PreviewTextInputTo
+ * to fire */
+ bool ok = !regex.IsMatch(tbox.Text);
+ if (!ok)
+ m_invalidTo = true;
+ else
+ m_invalidTo = false;
+
+ if (m_invalidTo)
+ {
+ xaml_pageend.Text = "";
+ e.Handled = true;
+ m_to = -1;
+ }
+ else
+ {
+ m_to = System.Convert.ToInt32(xaml_pageend.Text);
+ if (m_to > m_numpages)
+ {
+ m_to = m_numpages;
+ xaml_pageend.Text = System.Convert.ToString(m_numpages);
+ }
+ if (m_to < 1)
+ {
+ m_to = 1;
+ xaml_pagestart.Text = System.Convert.ToString(m_numpages);
+ }
+ if (!m_invalidFrom && !m_invalidTo &&
+ m_pages_setting == PrintPages_t.RANGE &&
+ m_to >= m_from)
+ {
+ UpdatePageRange();
+ }
+ }
+ }
+
+ private void xaml_Copies_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
+ {
+ m_numcopies = (int)e.NewValue;
+ }
+
+ private void AutoFit_Checked(object sender, RoutedEventArgs e)
+ {
+
+ }
+
+ private void ClickOK(object sender, RoutedEventArgs e)
+ {
+ main.PrintDiagPrint(this);
+ this.Hide();
+ }
+
+ private void ClickCancel(object sender, RoutedEventArgs e)
+ {
+ this.Hide();
+ }
+
+ private void AutoFit_Unchecked(object sender, RoutedEventArgs e)
+ {
+
+ }
+ }
+}
diff --git a/demos/csharp/windows/ghostnet_wpf_example/Properties/AssemblyInfo.cs b/demos/csharp/windows/ghostnet_wpf_example/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..c869281c
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ghostnet_wpf_example")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ghostnet_wpf_example")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+//In order to begin building localizable applications, set
+//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
+//inside a <PropertyGroup>. For example, if you are using US english
+//in your source files, set the <UICulture> to en-US. Then uncomment
+//the NeutralResourceLanguage attribute below. Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
+
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/demos/csharp/windows/ghostnet_wpf_example/Properties/Resources.Designer.cs b/demos/csharp/windows/ghostnet_wpf_example/Properties/Resources.Designer.cs
new file mode 100644
index 00000000..f322f66b
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ghostnet_wpf_example.Properties
+{
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ghostnet_wpf_example.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/demos/csharp/windows/ghostnet_wpf_example/Properties/Resources.resx b/demos/csharp/windows/ghostnet_wpf_example/Properties/Resources.resx
new file mode 100644
index 00000000..af7dbebb
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/Properties/Resources.resx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root> \ No newline at end of file
diff --git a/demos/csharp/windows/ghostnet_wpf_example/Properties/Settings.Designer.cs b/demos/csharp/windows/ghostnet_wpf_example/Properties/Settings.Designer.cs
new file mode 100644
index 00000000..10b32c2c
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ghostnet_wpf_example.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/demos/csharp/windows/ghostnet_wpf_example/Properties/Settings.settings b/demos/csharp/windows/ghostnet_wpf_example/Properties/Settings.settings
new file mode 100644
index 00000000..033d7a5e
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/Properties/Settings.settings
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+ <Profiles>
+ <Profile Name="(Default)" />
+ </Profiles>
+ <Settings />
+</SettingsFile> \ No newline at end of file
diff --git a/demos/csharp/windows/ghostnet_wpf_example/TempFile.cs b/demos/csharp/windows/ghostnet_wpf_example/TempFile.cs
new file mode 100644
index 00000000..db0c50cb
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/TempFile.cs
@@ -0,0 +1,34 @@
+using System;
+using System.IO;
+
+/* A class to help in the management of temp files */
+namespace ghostnet_wpf_example
+{
+ class TempFile
+ {
+ private String m_filename;
+
+ public TempFile(String Name)
+ {
+ m_filename = Name;
+ }
+
+ public String Filename
+ {
+ get { return m_filename; }
+ }
+
+ public void DeleteFile()
+ {
+ try
+ {
+ if (File.Exists(m_filename))
+ File.Delete(m_filename);
+ }
+ catch (Exception)
+ {
+ throw;
+ }
+ }
+ }
+}
diff --git a/demos/csharp/windows/ghostnet_wpf_example/XPSprint.cs b/demos/csharp/windows/ghostnet_wpf_example/XPSprint.cs
new file mode 100644
index 00000000..f6934467
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/XPSprint.cs
@@ -0,0 +1,587 @@
+using System;
+using System.Printing;
+using System.Windows.Documents;
+using System.Windows.Documents.Serialization;
+using System.Windows.Media;
+using System.Windows.Xps;
+using System.Windows.Xps.Packaging;
+using System.Drawing.Printing;
+using System.Reflection;
+
+namespace ghostnet_wpf_example
+{
+ public enum PrintStatus_t
+ {
+ PRINT_READY,
+ PRINT_BUSY,
+ PRINT_ERROR,
+ PRINT_CANCELLED,
+ PRINT_DONE
+ };
+
+ /* Class for handling async print progress callback */
+ public class gsPrintEventArgs : EventArgs
+ {
+ private PrintStatus_t m_status;
+ private bool m_completed;
+ private int m_page;
+ private int m_page_start;
+ private int m_num_pages;
+ private String m_filename;
+
+ public String FileName
+ {
+ get { return m_filename; }
+ }
+ public PrintStatus_t Status
+ {
+ get { return m_status; }
+ }
+
+ public bool Completed
+ {
+ get { return m_completed; }
+ }
+
+ public int Page
+ {
+ get { return m_page; }
+ }
+
+ public int PageStart
+ {
+ get { return m_page_start; }
+ }
+
+ public int NumPages
+ {
+ get { return m_num_pages; }
+ }
+
+ public gsPrintEventArgs(PrintStatus_t status, bool completed, int page,
+ int page_start, int num_pages, String filename)
+ {
+ m_completed = completed;
+ m_status = status;
+ m_page = page;
+ m_page_start = page_start;
+ m_num_pages = num_pages;
+ m_filename = filename;
+ }
+ }
+
+ /* A page range paginator to override the DocumentPaginator */
+ public class GSDocumentPaginator : DocumentPaginator
+ {
+ private int _first;
+ private int _last;
+ private DocumentPaginator _basepaginator;
+ public GSDocumentPaginator(DocumentPaginator inpaginator, int firstpage,
+ int lastpage)
+ {
+ _first = firstpage - 1;
+ _last = lastpage - 1;
+ _basepaginator = inpaginator;
+
+ _last = Math.Min(_last, _basepaginator.PageCount - 1);
+ }
+
+ /* Wrap fixed page to avoid exception of fixed page in fixed page */
+ public override DocumentPage GetPage(int page_num)
+ {
+ var page = _basepaginator.GetPage(page_num + _first);
+
+ var vis_cont = new ContainerVisual();
+ if (page.Visual is FixedPage)
+ {
+ foreach (var child in ((FixedPage)page.Visual).Children)
+ {
+ var clone = (System.Windows.UIElement)child.GetType().GetMethod("MemberwiseClone",
+ BindingFlags.Instance | BindingFlags.NonPublic).Invoke(child, null);
+
+ var parentField = clone.GetType().GetField("_parent",
+ BindingFlags.Instance | BindingFlags.NonPublic);
+ if (parentField != null)
+ {
+ parentField.SetValue(clone, null);
+ vis_cont.Children.Add(clone);
+ }
+ }
+ return new DocumentPage(vis_cont, page.Size, page.BleedBox,
+ page.ContentBox);
+ }
+ return page;
+ }
+
+ public override bool IsPageCountValid
+ {
+ get { return true; }
+ }
+
+ public override int PageCount
+ {
+ get
+ {
+ if (_first > _basepaginator.PageCount - 1)
+ return 0;
+ if (_first > _last)
+ return 0;
+ return _last - _first + 1;
+ }
+ }
+
+ public override System.Windows.Size PageSize
+ {
+ get { return _basepaginator.PageSize; }
+ set { _basepaginator.PageSize = value; }
+ }
+
+ public override IDocumentPaginatorSource Source
+ {
+ get { return _basepaginator.Source; }
+ }
+
+ public override void ComputePageCount()
+ {
+ base.ComputePageCount();
+ }
+
+ protected override void OnGetPageCompleted(GetPageCompletedEventArgs e)
+ {
+ base.OnGetPageCompleted(e);
+ }
+ }
+
+ public class xpsprint
+ {
+ private XpsDocumentWriter m_docWriter = null;
+ internal delegate void AsyncPrintCallBack(object printObject, gsPrintEventArgs info);
+ internal event AsyncPrintCallBack PrintUpdate;
+ private bool m_busy;
+ private int m_num_pages;
+ private int m_first_page;
+ private String m_filename;
+
+ public bool IsBusy()
+ {
+ return m_busy;
+ }
+
+ public xpsprint()
+ {
+ m_busy = false;
+ }
+
+ public void Done()
+ {
+ gsPrintEventArgs info = new gsPrintEventArgs(PrintStatus_t.PRINT_DONE,
+ true, 0, 0, 0, this.m_filename);
+ PrintUpdate(this, info);
+ m_busy = false;
+ }
+
+ /* Main print entry point */
+ public void Print(PrintQueue queu, XpsDocument xpsDocument, Print printcontrol,
+ bool print_all, int from, int to, String filename, bool tempfile)
+ {
+ XpsDocumentWriter docwrite;
+ FixedDocumentSequence fixedDocSeq = xpsDocument.GetFixedDocumentSequence();
+ DocumentReference docReference = fixedDocSeq.References[0] ;
+ FixedDocument doc = docReference.GetDocument(false);
+
+ PrintTicket Ticket = SetUpTicket(queu, printcontrol, fixedDocSeq, tempfile);
+ docwrite = GetDocWriter(queu);
+ m_busy = true;
+ m_filename = filename;
+#if DISABLED_FOR_NOW
+ docwrite.WritingPrintTicketRequired +=
+ new WritingPrintTicketRequiredEventHandler(PrintTicket);
+#endif
+ PrintPages(docwrite, doc, print_all, from, to, Ticket);
+ }
+
+ /* Set up the print ticket */
+ private PrintTicket SetUpTicket(PrintQueue queue, Print printcontrol,
+ FixedDocumentSequence fixdoc, bool tempfile)
+ {
+ PrintTicket Ticket = new PrintTicket();
+
+ PageMediaSizeName name = PaperKindToPageMediaSize(printcontrol.m_pagedetails.PaperSize.Kind);
+ PageMediaSize mediasize = new PageMediaSize(name, printcontrol.m_pagedetails.PaperSize.Width, printcontrol.m_pagedetails.PaperSize.Height);
+
+ /* Media size */
+ Ticket.PageMediaSize = mediasize;
+ /* Scale to fit */
+ Ticket.PageScalingFactor = (int)Math.Round(printcontrol.m_page_scale * 100.0);
+
+ System.Windows.Size page_size = new System.Windows.Size(mediasize.Width.Value, mediasize.Height.Value);
+ DocumentPaginator paginator = fixdoc.DocumentPaginator;
+ paginator.PageSize = page_size;
+
+ /* Copy Count */
+ Ticket.CopyCount = printcontrol.m_numcopies;
+
+ if (printcontrol.m_pagedetails.Landscape)
+ Ticket.PageOrientation = PageOrientation.Landscape;
+ else
+ Ticket.PageOrientation = PageOrientation.Portrait;
+
+ /* Orientation. If we had a tempfile, then gs did a conversion
+ * and adjusted everything for us. Other wise we may need to
+ * rotate the document if it was xps to start with. */
+ if (printcontrol.m_isrotated && !tempfile)
+ if (printcontrol.m_pagedetails.Landscape)
+ Ticket.PageOrientation = PageOrientation.Portrait;
+ else
+ Ticket.PageOrientation = PageOrientation.Landscape;
+
+ System.Printing.ValidationResult result = queue.MergeAndValidatePrintTicket(queue.UserPrintTicket, Ticket);
+ queue.UserPrintTicket = result.ValidatedPrintTicket;
+ queue.Commit();
+ return result.ValidatedPrintTicket;
+ }
+
+ /* Send it */
+ private void PrintPages(XpsDocumentWriter xpsdw, FixedDocument fixdoc,
+ bool print_all, int from, int to, PrintTicket Ticket)
+ {
+ m_docWriter = xpsdw;
+ xpsdw.WritingCompleted +=
+ new WritingCompletedEventHandler(AsyncCompleted);
+ xpsdw.WritingProgressChanged +=
+ new WritingProgressChangedEventHandler(AsyncProgress);
+
+ DocumentPaginator paginator = fixdoc.DocumentPaginator;
+ try
+ {
+ if (print_all)
+ {
+ m_first_page = 1;
+ m_num_pages = paginator.PageCount;
+ xpsdw.Write(paginator, Ticket);
+ }
+ else
+ {
+ /* Create an override paginator to pick only the pages we want */
+ GSDocumentPaginator gspaginator =
+ new GSDocumentPaginator(paginator, from, to);
+ m_first_page = from;
+ m_num_pages = paginator.PageCount;
+ xpsdw.Write(gspaginator, Ticket);
+ }
+ }
+ catch (Exception)
+ {
+ /* Something went wrong with this particular print driver
+ * simply notify the user and clean up everything */
+ gsPrintEventArgs info = new gsPrintEventArgs(PrintStatus_t.PRINT_ERROR,
+ false, 0, this.m_first_page, this.m_num_pages, this.m_filename);
+ PrintUpdate(this, info);
+ return;
+ }
+ }
+ public void CancelAsync()
+ {
+ /* ick. This does not work in windows 8. causes crash. */
+ /* https://connect.microsoft.com/VisualStudio/feedback/details/778145/xpsdocumentwriter-cancelasync-cause-crash-in-win8 */
+ m_docWriter.CancelAsync();
+ }
+
+ /* Done */
+ private void AsyncCompleted(object sender, WritingCompletedEventArgs e)
+ {
+ PrintStatus_t status;
+
+ if (e.Cancelled)
+ status = PrintStatus_t.PRINT_CANCELLED;
+ else if (e.Error != null)
+ status = PrintStatus_t.PRINT_ERROR;
+ else
+ status = PrintStatus_t.PRINT_READY;
+
+ if (PrintUpdate != null)
+ {
+ gsPrintEventArgs info = new gsPrintEventArgs(status, true, 0,
+ this.m_first_page, this.m_num_pages, this.m_filename);
+ PrintUpdate(this, info);
+ }
+ m_busy = false;
+ }
+
+ /* Do this update with each fixed document (page) that is handled */
+ private void AsyncProgress(object sender, WritingProgressChangedEventArgs e)
+ {
+ if (PrintUpdate != null)
+ {
+ gsPrintEventArgs info = new gsPrintEventArgs(PrintStatus_t.PRINT_BUSY,
+ false, e.Number, this.m_first_page, this.m_num_pages,
+ this.m_filename);
+ PrintUpdate(this, info);
+ }
+ }
+#if DISABLED_FOR_NOW
+ /* Print ticket handling. You can customize for PrintTicketLevel at
+ FixedDocumentSequencePrintTicket, FixedDocumentPrintTicket,
+ or FixedPagePrintTicket. We may want to play around with this some */
+ private void PrintTicket(Object sender, WritingPrintTicketRequiredEventArgs e)
+ {
+ if (e.CurrentPrintTicketLevel ==
+ PrintTicketLevel.FixedDocumentSequencePrintTicket)
+ {
+ PrintTicket pts = new PrintTicket();
+ e.CurrentPrintTicket = pts;
+ }
+ }
+#endif
+ /* Create the document write */
+ private XpsDocumentWriter GetDocWriter(PrintQueue pq)
+ {
+ XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
+ return xpsdw;
+ }
+
+ /* Two paths for designating printing = a pain in the ass.*/
+ static PageMediaSizeName PaperKindToPageMediaSize(PaperKind paperKind)
+ {
+ switch (paperKind)
+ {
+ case PaperKind.Custom:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.Letter:
+ return PageMediaSizeName.NorthAmericaLetter;
+ case PaperKind.Legal:
+ return PageMediaSizeName.NorthAmericaLegal;
+ case PaperKind.A4:
+ return PageMediaSizeName.ISOA4;
+ case PaperKind.CSheet:
+ return PageMediaSizeName.NorthAmericaCSheet;
+ case PaperKind.DSheet:
+ return PageMediaSizeName.NorthAmericaDSheet;
+ case PaperKind.ESheet:
+ return PageMediaSizeName.NorthAmericaESheet;
+ case PaperKind.LetterSmall:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.Tabloid:
+ return PageMediaSizeName.NorthAmericaTabloid;
+ case PaperKind.Ledger:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.Statement:
+ return PageMediaSizeName.NorthAmericaStatement;
+ case PaperKind.Executive:
+ return PageMediaSizeName.NorthAmericaExecutive;
+ case PaperKind.A3:
+ return PageMediaSizeName.ISOA3;
+ case PaperKind.A4Small:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.A5:
+ return PageMediaSizeName.ISOA5;
+ case PaperKind.B4:
+ return PageMediaSizeName.ISOB4;
+ case PaperKind.B5:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.Folio:
+ return PageMediaSizeName.OtherMetricFolio;
+ case PaperKind.Quarto:
+ return PageMediaSizeName.NorthAmericaQuarto;
+ case PaperKind.Standard10x14:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.Standard11x17:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.Note:
+ return PageMediaSizeName.NorthAmericaNote;
+ case PaperKind.Number9Envelope:
+ return PageMediaSizeName.NorthAmericaNumber9Envelope;
+ case PaperKind.Number10Envelope:
+ return PageMediaSizeName.NorthAmericaNumber10Envelope;
+ case PaperKind.Number11Envelope:
+ return PageMediaSizeName.NorthAmericaNumber11Envelope;
+ case PaperKind.Number12Envelope:
+ return PageMediaSizeName.NorthAmericaNumber12Envelope;
+ case PaperKind.Number14Envelope:
+ return PageMediaSizeName.NorthAmericaNumber14Envelope;
+ case PaperKind.DLEnvelope:
+ return PageMediaSizeName.ISODLEnvelope;
+ case PaperKind.C5Envelope:
+ return PageMediaSizeName.ISOC5Envelope;
+ case PaperKind.C3Envelope:
+ return PageMediaSizeName.ISOC3Envelope;
+ case PaperKind.C4Envelope:
+ return PageMediaSizeName.ISOC4Envelope;
+ case PaperKind.C6Envelope:
+ return PageMediaSizeName.ISOC6Envelope;
+ case PaperKind.C65Envelope:
+ return PageMediaSizeName.ISOC6C5Envelope;
+ case PaperKind.B4Envelope:
+ return PageMediaSizeName.ISOB4Envelope;
+ case PaperKind.B5Envelope:
+ return PageMediaSizeName.ISOB5Envelope;
+ case PaperKind.B6Envelope:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.ItalyEnvelope:
+ return PageMediaSizeName.OtherMetricItalianEnvelope;
+ case PaperKind.MonarchEnvelope:
+ return PageMediaSizeName.NorthAmericaMonarchEnvelope;
+ case PaperKind.PersonalEnvelope:
+ return PageMediaSizeName.NorthAmericaPersonalEnvelope;
+ case PaperKind.USStandardFanfold:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.GermanStandardFanfold:
+ return PageMediaSizeName.NorthAmericaGermanStandardFanfold;
+ case PaperKind.GermanLegalFanfold:
+ return PageMediaSizeName.NorthAmericaGermanLegalFanfold;
+ case PaperKind.IsoB4:
+ return PageMediaSizeName.ISOB4;
+ case PaperKind.JapanesePostcard:
+ return PageMediaSizeName.JapanHagakiPostcard;
+ case PaperKind.Standard9x11:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.Standard10x11:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.Standard15x11:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.InviteEnvelope:
+ return PageMediaSizeName.OtherMetricInviteEnvelope;
+ case PaperKind.LetterExtra:
+ return PageMediaSizeName.NorthAmericaLetterExtra;
+ case PaperKind.LegalExtra:
+ return PageMediaSizeName.NorthAmericaLegalExtra;
+ case PaperKind.TabloidExtra:
+ return PageMediaSizeName.NorthAmericaTabloidExtra;
+ case PaperKind.A4Extra:
+ return PageMediaSizeName.ISOA4Extra;
+ case PaperKind.LetterTransverse:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.A4Transverse:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.LetterExtraTransverse:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.APlus:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.BPlus:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.LetterPlus:
+ return PageMediaSizeName.NorthAmericaLetterPlus;
+ case PaperKind.A4Plus:
+ return PageMediaSizeName.OtherMetricA4Plus;
+ case PaperKind.A5Transverse:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.B5Transverse:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.A3Extra:
+ return PageMediaSizeName.ISOA3Extra;
+ case PaperKind.A5Extra:
+ return PageMediaSizeName.ISOA5Extra;
+ case PaperKind.B5Extra:
+ return PageMediaSizeName.ISOB5Extra;
+ case PaperKind.A2:
+ return PageMediaSizeName.ISOA2;
+ case PaperKind.A3Transverse:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.A3ExtraTransverse:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.JapaneseDoublePostcard:
+ return PageMediaSizeName.JapanDoubleHagakiPostcard;
+ case PaperKind.A6:
+ return PageMediaSizeName.ISOA6;
+ case PaperKind.JapaneseEnvelopeKakuNumber2:
+ return PageMediaSizeName.JapanKaku2Envelope;
+ case PaperKind.JapaneseEnvelopeKakuNumber3:
+ return PageMediaSizeName.JapanKaku3Envelope;
+ case PaperKind.JapaneseEnvelopeChouNumber3:
+ return PageMediaSizeName.JapanChou3Envelope;
+ case PaperKind.JapaneseEnvelopeChouNumber4:
+ return PageMediaSizeName.JapanChou4Envelope;
+ case PaperKind.LetterRotated:
+ return PageMediaSizeName.NorthAmericaLetterRotated;
+ case PaperKind.A3Rotated:
+ return PageMediaSizeName.ISOA3Rotated;
+ case PaperKind.A4Rotated:
+ return PageMediaSizeName.ISOA4Rotated;
+ case PaperKind.A5Rotated:
+ return PageMediaSizeName.ISOA5Rotated;
+ case PaperKind.B4JisRotated:
+ return PageMediaSizeName.JISB4Rotated;
+ case PaperKind.B5JisRotated:
+ return PageMediaSizeName.JISB5Rotated;
+ case PaperKind.JapanesePostcardRotated:
+ return PageMediaSizeName.JapanHagakiPostcardRotated;
+ case PaperKind.JapaneseDoublePostcardRotated:
+ return PageMediaSizeName.JapanHagakiPostcardRotated;
+ case PaperKind.A6Rotated:
+ return PageMediaSizeName.ISOA6Rotated;
+ case PaperKind.JapaneseEnvelopeKakuNumber2Rotated:
+ return PageMediaSizeName.JapanKaku2EnvelopeRotated;
+ case PaperKind.JapaneseEnvelopeKakuNumber3Rotated:
+ return PageMediaSizeName.JapanKaku3EnvelopeRotated;
+ case PaperKind.JapaneseEnvelopeChouNumber3Rotated:
+ return PageMediaSizeName.JapanChou3EnvelopeRotated;
+ case PaperKind.JapaneseEnvelopeChouNumber4Rotated:
+ return PageMediaSizeName.JapanChou4EnvelopeRotated;
+ case PaperKind.B6Jis:
+ return PageMediaSizeName.JISB6;
+ case PaperKind.B6JisRotated:
+ return PageMediaSizeName.JISB6Rotated;
+ case PaperKind.Standard12x11:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.JapaneseEnvelopeYouNumber4:
+ return PageMediaSizeName.JapanYou4Envelope;
+ case PaperKind.JapaneseEnvelopeYouNumber4Rotated:
+ return PageMediaSizeName.JapanYou4EnvelopeRotated;
+ case PaperKind.Prc16K:
+ return PageMediaSizeName.PRC16K;
+ case PaperKind.Prc32K:
+ return PageMediaSizeName.PRC32K;
+ case PaperKind.Prc32KBig:
+ return PageMediaSizeName.PRC32KBig;
+ case PaperKind.PrcEnvelopeNumber1:
+ return PageMediaSizeName.PRC1Envelope;
+ case PaperKind.PrcEnvelopeNumber2:
+ return PageMediaSizeName.PRC2Envelope;
+ case PaperKind.PrcEnvelopeNumber3:
+ return PageMediaSizeName.PRC3Envelope;
+ case PaperKind.PrcEnvelopeNumber4:
+ return PageMediaSizeName.PRC4Envelope;
+ case PaperKind.PrcEnvelopeNumber5:
+ return PageMediaSizeName.PRC5Envelope;
+ case PaperKind.PrcEnvelopeNumber6:
+ return PageMediaSizeName.PRC6Envelope;
+ case PaperKind.PrcEnvelopeNumber7:
+ return PageMediaSizeName.PRC7Envelope;
+ case PaperKind.PrcEnvelopeNumber8:
+ return PageMediaSizeName.PRC8Envelope;
+ case PaperKind.PrcEnvelopeNumber9:
+ return PageMediaSizeName.PRC9Envelope;
+ case PaperKind.PrcEnvelopeNumber10:
+ return PageMediaSizeName.PRC10Envelope;
+ case PaperKind.Prc16KRotated:
+ return PageMediaSizeName.PRC16KRotated;
+ case PaperKind.Prc32KRotated:
+ return PageMediaSizeName.PRC32KRotated;
+ case PaperKind.Prc32KBigRotated:
+ return PageMediaSizeName.Unknown;
+ case PaperKind.PrcEnvelopeNumber1Rotated:
+ return PageMediaSizeName.PRC1EnvelopeRotated;
+ case PaperKind.PrcEnvelopeNumber2Rotated:
+ return PageMediaSizeName.PRC2EnvelopeRotated;
+ case PaperKind.PrcEnvelopeNumber3Rotated:
+ return PageMediaSizeName.PRC3EnvelopeRotated;
+ case PaperKind.PrcEnvelopeNumber4Rotated:
+ return PageMediaSizeName.PRC4EnvelopeRotated;
+ case PaperKind.PrcEnvelopeNumber5Rotated:
+ return PageMediaSizeName.PRC5EnvelopeRotated;
+ case PaperKind.PrcEnvelopeNumber6Rotated:
+ return PageMediaSizeName.PRC6EnvelopeRotated;
+ case PaperKind.PrcEnvelopeNumber7Rotated:
+ return PageMediaSizeName.PRC7EnvelopeRotated;
+ case PaperKind.PrcEnvelopeNumber8Rotated:
+ return PageMediaSizeName.PRC8EnvelopeRotated;
+ case PaperKind.PrcEnvelopeNumber9Rotated:
+ return PageMediaSizeName.PRC9EnvelopeRotated;
+ case PaperKind.PrcEnvelopeNumber10Rotated:
+ return PageMediaSizeName.PRC10EnvelopeRotated;
+ default:
+ throw new ArgumentOutOfRangeException("paperKind");
+ }
+ }
+ }
+}
diff --git a/demos/csharp/windows/ghostnet_wpf_example/ghostnet_simple_viewer.csproj b/demos/csharp/windows/ghostnet_wpf_example/ghostnet_simple_viewer.csproj
new file mode 100644
index 00000000..895bff82
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/ghostnet_simple_viewer.csproj
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{8BA5EDEE-8C5F-46A1-8471-EC234737AE7B}</ProjectGuid>
+ <OutputType>WinExe</OutputType>
+ <RootNamespace>ghostnet_wpf_example</RootNamespace>
+ <AssemblyName>ghostnet_wpf_example</AssemblyName>
+ <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <WarningLevel>4</WarningLevel>
+ <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+ <Deterministic>true</Deterministic>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\x64\Debug\</OutputPath>
+ <DefineConstants>TRACE;DEBUG;WIN64;GHOSTPDL;WPF</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>x64</PlatformTarget>
+ <LangVersion>7.3</LangVersion>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+ <OutputPath>bin\x64\Release\</OutputPath>
+ <DefineConstants>TRACE;WIN64</DefineConstants>
+ <Optimize>true</Optimize>
+ <DebugType>pdbonly</DebugType>
+ <PlatformTarget>x64</PlatformTarget>
+ <LangVersion>7.3</LangVersion>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\x86\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>x86</PlatformTarget>
+ <LangVersion>7.3</LangVersion>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+ <OutputPath>bin\x86\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <Optimize>true</Optimize>
+ <DebugType>pdbonly</DebugType>
+ <PlatformTarget>x86</PlatformTarget>
+ <LangVersion>7.3</LangVersion>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="ReachFramework" />
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Printing" />
+ <Reference Include="System.Xml" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xaml">
+ <RequiredTargetFramework>4.0</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="WindowsBase" />
+ <Reference Include="PresentationCore" />
+ <Reference Include="PresentationFramework" />
+ </ItemGroup>
+ <ItemGroup>
+ <ApplicationDefinition Include="App.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </ApplicationDefinition>
+ <Compile Include="..\..\api\ghostapi.cs">
+ <Link>ghostapi.cs</Link>
+ </Compile>
+ <Compile Include="..\..\api\ghostnet.cs">
+ <Link>ghostnet.cs</Link>
+ </Compile>
+ <Compile Include="About.xaml.cs">
+ <DependentUpon>About.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="DocPage.cs" />
+ <Compile Include="gsIO.cs" />
+ <Compile Include="gsOutput.xaml.cs">
+ <DependentUpon>gsOutput.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="MainPrint.cs" />
+ <Compile Include="MainRender.cs" />
+ <Compile Include="MainThumbRendering.cs" />
+ <Compile Include="MainZoom.cs" />
+ <Compile Include="PrintControl.xaml.cs">
+ <DependentUpon>PrintControl.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="TempFile.cs" />
+ <Compile Include="XPSprint.cs" />
+ <Page Include="About.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
+ <Page Include="gsOutput.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
+ <Page Include="MainWindow.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
+ <Compile Include="App.xaml.cs">
+ <DependentUpon>App.xaml</DependentUpon>
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="MainWindow.xaml.cs">
+ <DependentUpon>MainWindow.xaml</DependentUpon>
+ <SubType>Code</SubType>
+ </Compile>
+ <Page Include="PrintControl.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Properties\AssemblyInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Properties\Resources.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Resources.resx</DependentUpon>
+ </Compile>
+ <Compile Include="Properties\Settings.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Settings.settings</DependentUpon>
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>
+ </Compile>
+ <EmbeddedResource Include="Properties\Resources.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+ </EmbeddedResource>
+ <None Include="Properties\Settings.settings">
+ <Generator>SettingsSingleFileGenerator</Generator>
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <PropertyGroup>
+ <PostBuildEvent>if $(ConfigurationName) == Debug (
+ if exist $(SolutionDir)..\..\..\debugbin\gsdll64.dll copy $(SolutionDir)..\..\..\debugbin\gsdll64.dll $(ProjectDir)$(OutDir)
+ if exist $(SolutionDir)..\..\..\debugbin\gpdldll64.dll copy $(SolutionDir)..\..\..\debugbin\gpdldll64.dll $(ProjectDir)$(OutDir)
+ if exist $(SolutionDir)..\..\..\debugbin\gsdll32.dll copy $(SolutionDir)..\..\..\debugbin\gsdll32.dll $(ProjectDir)$(OutDir)
+ if exist $(SolutionDir)..\..\..\debugbin\gpdldll32.dll copy $(SolutionDir)..\..\..\debugbin\gpdldll32.dll $(ProjectDir)$(OutDir)
+ )
+
+if $(ConfigurationName) == Release (
+ if exist $(SolutionDir)..\..\..\bin\gsdll64.dll copy $(SolutionDir)..\..\..\bin\gsdll64.dll $(ProjectDir)$(OutDir)
+ if exist $(SolutionDir)..\..\..\bin\gpdldll64.dll copy $(SolutionDir)..\..\..\bin\gpdldll64.dll $(ProjectDir)$(OutDir)
+ if exist $(SolutionDir)..\..\..\bin\gsdll32.dll copy $(SolutionDir)..\..\..\bin\gsdll32.dll $(ProjectDir)$(OutDir)
+ if exist $(SolutionDir)..\..\..\bin\gpdldll32.dll copy $(SolutionDir)..\..\..\bin\gpdldll32.dll $(ProjectDir)$(OutDir)
+)
+
+
+</PostBuildEvent>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/demos/csharp/windows/ghostnet_wpf_example/gsIO.cs b/demos/csharp/windows/ghostnet_wpf_example/gsIO.cs
new file mode 100644
index 00000000..0b2d0fd8
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/gsIO.cs
@@ -0,0 +1,29 @@
+using System;
+using System.ComponentModel;
+
+namespace ghostnet_wpf_example
+{
+ class gsIO : INotifyPropertyChanged
+ {
+ public String gsIOString
+ {
+ get;
+ set;
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ public void PageRefresh()
+ {
+ if (PropertyChanged != null)
+ {
+ PropertyChanged(this, new PropertyChangedEventArgs("gsIOString"));
+ }
+ }
+
+ public gsIO()
+ {
+ this.gsIOString = "";
+ }
+ }
+}
diff --git a/demos/csharp/windows/ghostnet_wpf_example/gsOutput.xaml b/demos/csharp/windows/ghostnet_wpf_example/gsOutput.xaml
new file mode 100644
index 00000000..cb4261ba
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/gsOutput.xaml
@@ -0,0 +1,28 @@
+<Window x:Class="ghostnet_wpf_example.gsOutput"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ Title="Ghostscript Messages" Height="500" Width="500"
+ FontFamily="Segou UI" FontSize="12" >
+
+ <DockPanel LastChildFill="True">
+ <Grid DockPanel.Dock="Bottom" Visibility="Visible" Background="WhiteSmoke" >
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="133*" />
+ <ColumnDefinition Width="43*"/>
+ <ColumnDefinition Width="Auto" />
+ <ColumnDefinition Width="Auto" />
+ </Grid.ColumnDefinitions>
+ <Button Grid.Row="0" Grid.Column="2" Width="50" Height="20" Click="ClearContents" Margin="5,0,15,0">
+ <TextBlock>Clear</TextBlock>
+ </Button>
+ <Button Grid.Row="0" Grid.Column="3" Width="50" Height="20" Click="HideWindow" Margin="5,0,15,0">
+ <TextBlock>OK</TextBlock>
+ </Button>
+ </Grid>
+ <!-- Pages are last child fill. This goes in the center of our dock panel -->
+ <Grid HorizontalAlignment="Stretch" Background="DarkGray">
+ <TextBox x:Name="xaml_gsText" Margin="1, 1, 1, 1" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible" Text="{Binding gsIOString}" IsReadOnly="True"/>
+ </Grid>
+
+ </DockPanel>
+</Window>
diff --git a/demos/csharp/windows/ghostnet_wpf_example/gsOutput.xaml.cs b/demos/csharp/windows/ghostnet_wpf_example/gsOutput.xaml.cs
new file mode 100644
index 00000000..01075cd2
--- /dev/null
+++ b/demos/csharp/windows/ghostnet_wpf_example/gsOutput.xaml.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Windows;
+
+namespace ghostnet_wpf_example
+{
+ /// <summary>
+ /// Interaction logic for gsOutput.xaml
+ /// </summary>
+ public partial class gsOutput : Window
+ {
+ gsIO m_gsIO;
+ public gsOutput()
+ {
+ InitializeComponent();
+ this.Closing += new System.ComponentModel.CancelEventHandler(FakeWindowClosing);
+ m_gsIO = new gsIO();
+ xaml_gsText.DataContext = m_gsIO;
+ }
+
+ void FakeWindowClosing(object sender, System.ComponentModel.CancelEventArgs e)
+ {
+ e.Cancel = true;
+ this.Hide();
+ }
+
+ private void HideWindow(object sender, RoutedEventArgs e)
+ {
+ this.Hide();
+ }
+
+ public void RealWindowClosing()
+ {
+ this.Closing -= new System.ComponentModel.CancelEventHandler(FakeWindowClosing);
+ this.Close();
+ }
+
+ public void Update(String newstring, int len)
+ {
+ m_gsIO.gsIOString += newstring.Substring(0, len);
+ m_gsIO.PageRefresh();
+ }
+
+ private void ClearContents(object sender, RoutedEventArgs e)
+ {
+ m_gsIO.gsIOString = null;
+ m_gsIO.PageRefresh();
+ }
+ }
+}
diff --git a/demos/python/README.txt b/demos/python/README.txt
new file mode 100644
index 00000000..2e5d4052
--- /dev/null
+++ b/demos/python/README.txt
@@ -0,0 +1,17 @@
+The following projects show the use of the Ghostscript API
+in a Python environment. The file gsapi.py contains the
+API methods and they have the same names and usage as described
+in the Ghostscript API documentation.
+
+If you are working in a Linux based system, _libgs in gsapi.py is specified to
+use libgs.so . If you are working on Windows, you will be using either gpddll32.dll
+or gpdldll64.dll. You will need to build the appropriate library with the ghostscript
+build process.
+
+The file examples.py demonstrates several examples using the gsapi methods.
+These include, text extraction, object dependent color conversion, distillation,
+running of multiple files with the same GhostPDL instance and feeding
+chunks of data to the interpreter.
+
+
+
diff --git a/demos/python/examples.py b/demos/python/examples.py
new file mode 100755
index 00000000..d5c8b6ad
--- /dev/null
+++ b/demos/python/examples.py
@@ -0,0 +1,171 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+Created on Tue Jul 21 10:05:07 2020
+Example use of gsapi for various tasks.
+
+@author: Michael Vrhel
+"""
+
+try:
+ import gsapi
+except Exception:
+ print('Failure to import gsapi. Check shared library path')
+ raise
+
+import os
+
+ghostpdl_root = os.path.abspath('%s/../../..' % __file__)
+print('ghostpdl_root=%s' % ghostpdl_root)
+
+def run_gpdl(params, path):
+ instance = gsapi.gsapi_new_instance(0)
+ gsapi.gsapi_set_arg_encoding(instance, gsapi.GS_ARG_ENCODING_UTF8)
+ gsapi.gsapi_add_control_path(instance, gsapi.GS_PERMIT_FILE_READING, path)
+ gsapi.gsapi_init_with_args(instance, params)
+ end_gpdl(instance)
+
+def init_gpdl(params):
+ instance = gsapi.gsapi_new_instance(0)
+ gsapi.gsapi_set_arg_encoding(instance, gsapi.GS_ARG_ENCODING_UTF8)
+ gsapi.gsapi_init_with_args(instance, params)
+ return instance
+
+def run_file(instance, filename):
+ exitcode = gsapi.gsapi_run_file(instance, filename, None)
+ return exitcode
+
+def end_gpdl(instance):
+ gsapi.gsapi_exit(instance)
+ gsapi.gsapi_delete_instance(instance)
+
+# run multiple files through same instance
+def multiple_files():
+
+ out_filename = 'multi_file_output_%d.png'
+
+ params =['gs', '-dNOPAUSE', '-dBATCH', '-sDEVICE=pngalpha',
+ '-r72', '-o', out_filename]
+ instance = init_gpdl(params)
+ run_file(instance, '%s/examples/tiger.eps' % ghostpdl_root)
+ run_file(instance, '%s/examples/snowflak.ps' % ghostpdl_root)
+ run_file(instance, '%s/examples/annots.pdf' % ghostpdl_root)
+
+ end_gpdl(instance)
+
+# Extract text from source file
+def extract_text():
+
+ in_filename = '%s/examples/alphabet.ps' % ghostpdl_root
+ out_filename = 'alphabet.txt'
+ print('Extracting text from %s to %s' % (in_filename, out_filename))
+
+ params =['gs', '-dNOPAUSE', '-dBATCH','-sDEVICE=txtwrite',
+ '-dTextFormat=3','-o', out_filename, '-f', in_filename]
+ run_gpdl(params, in_filename)
+
+# Perform different color conversions on text, graphic, and image content
+# through the use of different destination ICC profiles
+def object_dependent_color_conversion():
+
+ in_filename = '%s/examples/text_graph_image_cmyk_rgb.pdf' % ghostpdl_root
+ out_filename = 'rendered_profile.tif'
+ image_icc = '%s/toolbin/color/icc_creator/effects/cyan_output.icc' % ghostpdl_root
+ graphic_icc = '%s/toolbin/color/icc_creator/effects/magenta_output.icc' % ghostpdl_root
+ text_icc = '%s/toolbin/color/icc_creator/effects/yellow_output.icc' % ghostpdl_root
+ print('Object dependent color conversion on %s to %s' % (in_filename, out_filename))
+
+ params =['gs', '-dNOPAUSE', '-dBATCH', '-sDEVICE=tiff32nc',
+ '-r72','-sImageICCProfile=' + image_icc,
+ '-sTextICCProfile=' + text_icc,
+ '-sGraphicICCProfile=' + graphic_icc,
+ '-o', out_filename, '-f', in_filename]
+
+ # Include ICC profile location to readable path
+ run_gpdl(params, '../../toolbin/color/icc_creator/effects/')
+
+# Perform different color conversions on text, graphic, and image content
+# through the use of different rendering intents
+def object_dependent_rendering_intent():
+
+ in_filename = '%s/examples/text_graph_image_cmyk_rgb.pdf' % ghostpdl_root
+ out_filename = 'rendered_intent.tif'
+ output_icc_profile = '%s/toolbin/color/src_color/cmyk_des_renderintent.icc' % ghostpdl_root
+ print('Object dependent rendering intents on %s to %s' % (in_filename, out_filename))
+
+ params =['gs', '-dNOPAUSE', '-dBATCH', '-sDEVICE=tiff32nc',
+ '-r72', '-sOutputICCProfile=' + output_icc_profile,
+ '-sImageICCIntent=0', '-sTextICCIntent=1',
+ '-sGraphicICCIntent=2', '-o', out_filename,
+ '-f', in_filename]
+
+ # Include ICC profile location to readable path
+ run_gpdl(params, '../../toolbin/color/src_color/')
+
+# Distill
+def distill():
+
+ in_filename = '%s/examples/tiger.eps' % ghostpdl_root
+ out_filename = 'tiger.pdf'
+ print('Distilling %s to %s' % (in_filename, out_filename))
+
+ params =['gs', '-dNOPAUSE', '-dBATCH', '-sDEVICE=pdfwrite',
+ '-o', out_filename, '-f', in_filename]
+ run_gpdl(params, in_filename)
+
+# Transparency in Postscript
+def trans_ps():
+
+ in_filename = '%s/examples/transparency_example.ps' % ghostpdl_root
+ out_filename = 'transparency.png'
+ print('Rendering Transparency PS file %s to %s' % (in_filename, out_filename))
+
+ params =['gs', '-dNOPAUSE', '-dBATCH', '-sDEVICE=pngalpha',
+ '-dALLOWPSTRANSPARENCY', '-o', out_filename, '-f', in_filename]
+ run_gpdl(params, in_filename)
+
+# Run string to feed chunks
+def run_string():
+
+ f = None
+ size = 1024;
+ in_filename = '%s/examples/tiger.eps' % ghostpdl_root
+ out_filename = 'tiger_byte_fed.png'
+ params =['gs', '-dNOPAUSE', '-dBATCH', '-sDEVICE=pngalpha',
+ '-o', out_filename]
+
+ instance = gsapi.gsapi_new_instance(0)
+
+ gsapi.gsapi_set_arg_encoding(instance, gsapi.GS_ARG_ENCODING_UTF8)
+ gsapi.gsapi_init_with_args(instance, params)
+
+ exitcode = gsapi.gsapi_run_string_begin(instance, 0)
+
+ with open(in_filename,"rb") as f:
+ while True:
+ data = f.read(size)
+ if not data:
+ break
+ exitcode = gsapi.gsapi_run_string_continue(instance, data, 0)
+
+ exitcode = gsapi.gsapi_run_string_end(instance, 0)
+
+ end_gpdl(instance)
+
+
+# Examples
+print('***********Text extraction***********');
+extract_text()
+print('***********Color conversion***********')
+object_dependent_color_conversion()
+print('***********Rendering intent***********')
+object_dependent_rendering_intent()
+print('***********Distillation***************')
+distill()
+print('***********Postscript with transparency********')
+trans_ps()
+print('***********Multiple files********')
+multiple_files()
+print('***********Run string********')
+run_string()
+wait = input("press enter to exit")
diff --git a/demos/python/gsapi.py b/demos/python/gsapi.py
new file mode 100755
index 00000000..ea2fa6bb
--- /dev/null
+++ b/demos/python/gsapi.py
@@ -0,0 +1,1049 @@
+#! /usr/bin/env python3
+
+'''
+Python version of the C API in psi/iapi.h, using ctypes.
+
+Overview:
+
+ All functions have the same name as the C function that they wrap.
+
+ Functions raise a GSError exception if the underlying function returned a
+ negative error code.
+
+ Functions that don't have out-params return None. Out-params are returned
+ directly (using tuples if there are more than one).
+
+ See examples.py for sample usage.
+
+Usage:
+
+ make sodebug
+ LD_LIBRARY_PATH=sodebugbin ./demos/python/gsapi.py
+
+ On Windows perform Release build (x64 or Win32).
+
+Requirements:
+
+ Should work on python-2.5+ and python-3.0+, but this might change in
+ future.
+
+Limitations as of 2020-07-21:
+
+ Only very limited testing on has been done.
+
+ Tested on Linux, OpenBSD and Windows.
+
+ Only tested with python-3.7 and 2.7.
+
+ We don't provide gsapi_add_fs() or gsapi_remove_fs().
+
+ We only provide display_callback V2, without V3's
+ display_adjust_band_height and display_rectangle_request.
+
+'''
+
+import ctypes
+import platform
+import sys
+
+
+if platform.system() in ('Linux', 'OpenBSD'):
+ _libgs = ctypes.CDLL('libgs.so')
+
+elif platform.system() == 'Windows':
+ if sys.maxsize == 2**31 - 1:
+ _libgs = ctypes.CDLL('../../bin/gpdldll32.dll')
+ elif sys.maxsize == 2**63 - 1:
+ _libgs = ctypes.CDLL('../../bin/gpdldll64.dll')
+ else:
+ raise Exception('Unrecognised sys.maxsize=0x%x' % sys.maxsize)
+
+else:
+ raise Exception('Unrecognised platform.system()=%s' % platform.system())
+
+
+class GSError(Exception):
+ '''
+ Exception type for all errors from underlying C library.
+ '''
+ def __init__(self, gs_error):
+ self.gs_error = gs_error
+ def __str__(self):
+ return 'Ghostscript exception %i: %s' % (
+ self.gs_error,
+ _gs_error_text(self.gs_error),
+ )
+
+class gsapi_revision_t:
+ def __init__(self, product, copyright, revision, revisiondate):
+ self.product = product
+ self.copyright = copyright
+ self.revision = revision
+ self.revisiondate = revisiondate
+ def __str__(self):
+ return 'product=%r copyright=%r revision=%r revisiondate=%r' % (
+ self.product,
+ self.copyright,
+ self.revision,
+ self.revisiondate,
+ )
+
+def gsapi_revision():
+ '''
+ Returns (e, r) where <r> is a gsapi_revision_t.
+ '''
+ # [unicode: we assume that underlying gsapi_revision() returns utf-8
+ # strings.]
+ _r = _gsapi_revision_t()
+ e = _libgs.gsapi_revision(ctypes.byref(_r), ctypes.sizeof(_r))
+ if e < 0:
+ raise GSError(e)
+ r = gsapi_revision_t(
+ _r.product.decode('utf-8'),
+ _r.copyright.decode('utf-8'),
+ _r.revision,
+ _r.revisiondate,
+ )
+ return r
+
+
+def gsapi_new_instance(caller_handle):
+ '''
+ Returns (e, instance).
+ '''
+ instance = ctypes.c_void_p()
+ e = _libgs.gsapi_new_instance(
+ ctypes.byref(instance),
+ ctypes.c_void_p(caller_handle),
+ )
+ if e < 0:
+ raise GSError(e)
+ return instance
+
+
+def gsapi_delete_instance(instance):
+ e = _libgs.gsapi_delete_instance(instance)
+ if e < 0:
+ raise GSError(e)
+
+
+def gsapi_set_stdio(instance, stdin_fn, stdout_fn, stderr_fn):
+ '''
+ stdin_fn:
+ If not None, will be called with (caller_handle, text, len_)
+ where <text> is a ctypes.LP_c_char of length <len_>.
+
+ [todo: wrap this to be easier to use from Python?]
+
+ stdout_fn and stderr_fn:
+ If not None, called with (caller_handle, text):
+ caller_handle:
+ As passed originally to gsapi_new_instance().
+ text:
+ A Python bytes object.
+ Should return the number of bytes of <text> that they handled; for
+ convenience None is converted to len(text).
+ '''
+ # [unicode: we do not do any encoding or decoding; stdin_fn should encode
+ # and stdout_fn and stderr_fn should decode. ]
+ def make_out(fn):
+ if not fn:
+ return None
+ def out(caller_handle, text, len_):
+ text2 = text[:len_] # converts from ctypes.LP_c_char to bytes.
+ ret = fn(caller_handle, text2)
+ if ret is None:
+ return len_
+ return ret
+ return _stdio_fn(out)
+ def make_in(fn):
+ if not fn:
+ return None
+ return _stdio_fn(fn)
+
+ stdout_fn2 = make_out(stdout_fn)
+ stderr_fn2 = make_out(stderr_fn)
+ stdin_fn2 = make_in(stdin_fn)
+ e = _libgs.gsapi_set_stdio(instance, stdout_fn2, stdout_fn2, stdout_fn2)
+ if e < 0:
+ raise GSError(e)
+ # Need to keep references to call-back functions.
+ global _gsapi_set_stdio_refs
+ _gsapi_set_stdio_refs = stdin_fn2, stdout_fn2, stderr_fn2
+
+
+def gsapi_set_poll(instance, poll_fn):
+ poll_fn2 = _poll_fn(poll_fn)
+ e = _libgs.gsapi_set_poll(instance, poll_fn2)
+ if e < 0:
+ raise GSError(e)
+ global _gsapi_set_poll_refs
+ _gsapi_set_poll_refs = poll_fn2
+
+
+class display_callback:
+ def __init__(self,
+ version_major = 0,
+ version_minor = 0,
+ display_open = 0,
+ display_preclose = 0,
+ display_close = 0,
+ display_presize = 0,
+ display_size = 0,
+ display_sync = 0,
+ display_page = 0,
+ display_update = 0,
+ display_memalloc = 0,
+ display_memfree = 0,
+ display_separation = 0,
+ display_adjust_band_height = 0,
+ ):
+ self.version_major = version_major
+ self.version_minor = version_minor
+ self.display_open = display_open
+ self.display_preclose = display_preclose
+ self.display_close = display_close
+ self.display_presize = display_presize
+ self.display_size = display_size
+ self.display_sync = display_sync
+ self.display_page = display_page
+ self.display_update = display_update
+ self.display_memalloc = display_memalloc
+ self.display_memfree = display_memfree
+ self.display_separation = display_separation
+ self.display_adjust_band_height = display_adjust_band_height
+
+
+def gsapi_set_display_callback(instance, callback):
+ assert isinstance(callback, display_callback)
+ callback2 = _display_callback()
+ callback2.size = ctypes.sizeof(callback2)
+ # Copy from <callback> into <callback2>.
+ for name, type_ in _display_callback._fields_:
+ if name == 'size':
+ continue
+ value = getattr(callback, name)
+ value2 = type_(value)
+ setattr(callback2, name, value2)
+
+ e = _libgs.gsapi_set_display_callback(instance, ctypes.byref(callback2))
+ if e < 0:
+ raise GSError(e)
+ # Ensure that we keep references to callbacks.
+ global _gsapi_set_display_callback_refs
+ _gsapi_set_display_callback_refs = callback2
+
+
+def gsapi_set_default_device_list(instance, list_):
+ # [unicode: we assume that underlying gsapi_set_default_device_list() is
+ # expecting list_ to be in utf-8 encoding.]
+ assert isinstance(list_, str)
+ list_2 = list_.encode('utf-8')
+ e = _libgs.gsapi_set_default_device_list(instance, list_2, len(list_))
+ if e < 0:
+ raise GSError(e)
+
+
+def gsapi_get_default_device_list(instance):
+ '''
+ Returns (e, list) where <list> is a string.
+ '''
+ # [unicode: we assume underlying gsapi_get_default_device_list() returns
+ # strings encoded as latin-1.]
+ list_ = ctypes.POINTER(ctypes.c_char)()
+ len_ = ctypes.c_int()
+ e = _libgs.gsapi_get_default_device_list(
+ instance,
+ ctypes.byref(list_),
+ ctypes.byref(len_),
+ )
+ if e < 0:
+ raise GSError(e)
+ return list_[:len_.value].decode('latin-1')
+
+
+GS_ARG_ENCODING_LOCAL = 0
+GS_ARG_ENCODING_UTF8 = 1
+GS_ARG_ENCODING_UTF16LE = 2
+
+
+def gsapi_set_arg_encoding(instance, encoding):
+ assert encoding in (
+ GS_ARG_ENCODING_LOCAL,
+ GS_ARG_ENCODING_UTF8,
+ GS_ARG_ENCODING_UTF16LE,
+ )
+ e = _libgs.gsapi_set_arg_encoding(instance, encoding)
+ if e < 0:
+ raise GSError(e)
+ if encoding == GS_ARG_ENCODING_LOCAL:
+ # This is probably wrong on Windows.
+ _encoding = 'utf-8'
+ elif encoding == GS_ARG_ENCODING_UTF8:
+ _encoding = 'utf-8'
+ elif encoding == GS_ARG_ENCODING_UTF16LE:
+ _encoding = 'utf-16-le'
+
+
+def gsapi_init_with_args(instance, args):
+ # [unicode: we assume that underlying gsapi_init_with_args()
+ # expects strings in args[] to be encoded in encoding set by
+ # gsapi_set_arg_encoding().]
+
+ # Create copy of args in format expected by C.
+ argc = len(args)
+ argv = (_pchar * (argc + 1))()
+ for i, arg in enumerate(args):
+ enc_arg = arg.encode(_encoding)
+ argv[i] = ctypes.create_string_buffer(enc_arg)
+ argv[argc] = None
+
+ e = _libgs.gsapi_init_with_args(instance, argc, argv)
+ if e < 0:
+ raise GSError(e)
+
+
+def gsapi_run_string_begin(instance, user_errors):
+ '''
+ Returns (e, exit_code).
+ '''
+ pexit_code = ctypes.c_int()
+ e = _libgs.gsapi_run_string_begin(instance, user_errors, ctypes.byref(pexit_code))
+ if e < 0:
+ raise GSError(e)
+ return pexit_code.value
+
+
+def gsapi_run_string_continue(instance, str_, user_errors):
+ '''
+ <str_> should be either a python string or a bytes object. If the former,
+ it is converted into a bytes object using utf-8 encoding.
+
+ We don't raise exception for gs_error_NeedInput.
+
+ Returns exit_code.
+ '''
+ if isinstance(str_, str):
+ str_ = str_.encode('utf-8')
+ assert isinstance(str_, bytes)
+ pexit_code = ctypes.c_int()
+ e = _libgs.gsapi_run_string_continue(
+ instance,
+ str_,
+ len(str_),
+ user_errors,
+ ctypes.byref(pexit_code),
+ )
+ if e == gs_error_NeedInput.num:
+ # This is normal, so we don't raise.
+ pass
+ elif e < 0:
+ raise GSError(e)
+ return pexit_code.value
+
+
+def gsapi_run_string_end(instance, user_errors):
+ '''
+ Returns (e, exit_code).
+ '''
+ pexit_code = ctypes.c_int()
+ e = _libgs.gsapi_run_string_end(
+ instance,
+ user_errors,
+ ctypes.byref(pexit_code),
+ )
+ if e < 0:
+ raise GSError(e)
+ return pexit_code.value
+
+
+def gsapi_run_string_with_length(instance, str_, length, user_errors):
+ '''
+ <str_> should be either a python string or a bytes object. If the former,
+ it is converted into a bytes object using utf-8 encoding.
+
+ Returns (e, exit_code).
+ '''
+ e = gsapi_run_string(instance, str_[:length], user_errors)
+ if e < 0:
+ raise GSError(e)
+
+
+def gsapi_run_string(instance, str_, user_errors):
+ '''
+ <str_> should be either a python string or a bytes object. If the former,
+ it is converted into a bytes object using utf-8 encoding.
+
+ Returns (e, exit_code).
+ '''
+ if isinstance(str_, str):
+ str_ = str_.encode('utf-8')
+ assert isinstance(str_, bytes)
+ pexit_code = ctypes.c_int()
+ # We use gsapi_run_string_with_length() because str_ might contain zeros.
+ e = _libgs.gsapi_run_string_with_length(
+ instance,
+ str_,
+ len(str_),
+ user_errors,
+ ctypes.byref(pexit_code),
+ )
+ if e < 0:
+ raise GSError(e)
+ return pexit_code.value
+
+
+def gsapi_run_file(instance, filename, user_errors):
+ '''
+ Returns (e, exit_code).
+ '''
+ # [unicode: we assume that underlying gsapi_run_file() expects <filename>
+ # to be encoded in encoding set by gsapi_set_arg_encoding().]
+ pexit_code = ctypes.c_int()
+ filename2 = filename.encode(_encoding)
+ e = _libgs.gsapi_run_file(instance, filename2, user_errors, ctypes.byref(pexit_code))
+ if e < 0:
+ raise GSError(e)
+ return pexit_code.value
+
+
+def gsapi_exit(instance):
+ e = _libgs.gsapi_exit(instance)
+ if e < 0:
+ raise GSError(e)
+
+
+gs_spt_invalid = -1
+gs_spt_null = 0 # void * is NULL.
+gs_spt_bool = 1 # void * is NULL (false) or non-NULL (true).
+gs_spt_int = 2 # void * is a pointer to an int.
+gs_spt_float = 3 # void * is a float *.
+gs_spt_name = 4 # void * is a char *.
+gs_spt_string = 5 # void * is a char *.
+gs_spt_long = 6 # void * is a long *.
+gs_spt_i64 = 7 # void * is an int64_t *.
+gs_spt_size_t = 8 # void * is a size_t *.
+gs_spt_parsed = 9 # void * is a pointer to a char * to be parsed.
+gs_spt__end = 10
+
+gs_spt_more_to_come = 2**31
+
+
+def gsapi_set_param(instance, param, value, type_=None):
+ '''
+ We behave much like the underlying gsapi_set_param() C function, except
+ that we also support automatic inference of type type_ arg by looking at
+ the type of <value>.
+
+ param:
+ Name of parameter, either a bytes or a str; if str it is encoded using
+ latin-1.
+ value:
+ A bool, int, float, bytes or str. If str, it is encoded into a bytes
+ using utf-8.
+
+ If <type_> is not None, <value> must be convertible to the Python type
+ implied by <type_>:
+
+ type_ Python type(s)
+ -----------------------------------------
+ gs_spt_null [Ignored]
+ gs_spt_bool bool
+ gs_spt_int int
+ gs_spt_float float
+ gs_spt_name [Error]
+ gs_spt_string (bytes, str)
+ gs_spt_long int
+ gs_spt_i64 int
+ gs_spt_size_t int
+ gs_spt_parsed (bytes, str)
+
+ We raise an exception if <type_> is an integer type and <value> is
+ outside its range.
+ type_:
+ If None, we choose something suitable for type of <value>:
+
+ Python type of <value> type_
+ -----------------------------
+ bool gs_spt_bool
+ int gs_spt_i64
+ float gs_spt_float
+ bytes gs_spt_parsed
+ str gs_spt_parsed (encoded with utf-8)
+
+ If <value> is None, we use gs_spt_null.
+
+ Otherwise type_ must be a gs_spt_* except for gs_spt_invalid and
+ gs_spt_name (we don't allow psapi_spt_name because the underlying C
+ does not copy the string, so cannot be safely used from Python).
+ '''
+ # [unicode: we assume that underlying gsapi_set_param() expects <param> and
+ # string <value> to be encoded as latin-1.]
+
+ if isinstance(param, str):
+ param = param.encode('latin-1')
+ assert isinstance(param, bytes)
+
+ if type_ is None:
+ # Choose a gs_spt_* that matches the Python type of <value>.
+ if 0: pass
+ elif value is None:
+ type_ = gs_spt_null
+ elif isinstance(value, bool):
+ type_ = gs_spt_bool
+ elif isinstance(value, int):
+ type_ = gs_spt_i64
+ elif isinstance(value, float):
+ type_ = gs_spt_float
+ elif isinstance(value, (bytes, str)):
+ type_ = gs_spt_parsed
+ else:
+ raise Exception('Unrecognised Python type (must be bool, int, float, bytes or str): %s' % type(value))
+
+ # Make a <value2> suitable for the underlying C gsapi_set_param() function.
+ #
+ if type_ == gs_spt_null:
+ # special-case, we pass value2=None.
+ value2 = None
+ elif type_ == gs_spt_name:
+ # Unsupported.
+ raise Exception('gs_spt_name is not supported from Python')
+ elif type_ in (gs_spt_string, gs_spt_parsed):
+ # String.
+ value2 = value
+ if isinstance(value2, str):
+ value2 = value2.encode('utf-8')
+ assert isinstance(value2, bytes)
+ else:
+ # Bool/int/float.
+ type2 = None
+ if 0: pass
+ elif type_ == gs_spt_bool:
+ type2 = ctypes.c_int
+ elif type_ == gs_spt_int:
+ type2 = ctypes.c_int
+ elif type_ == gs_spt_float:
+ type2 = ctypes.c_float
+ elif type_ == gs_spt_long:
+ type2 = ctypes.c_long
+ elif type_ == gs_spt_i64:
+ type2 = ctypes.c_int64
+ elif type_ == gs_spt_size_t:
+ type2 = ctypes.c_size_t
+ else:
+ assert 0, 'unrecognised gs_spt_ value: %s' % type_
+ value2 = type2(value)
+ if type_ not in (gs_spt_float, gs_spt_bool):
+ # Check for out-of-range integers.
+ if value2.value != value:
+ raise Exception('Value %s => %s is out of range for type %s (%s)' % (
+ value, value2.value, type_, type2))
+ value2 = ctypes.byref(value2)
+
+ e = _libgs.gsapi_set_param(instance, param, value2, type_)
+ if e < 0:
+ raise GSError(e)
+
+
+def gsapi_get_param(instance, param, type_=None, encoding=None):
+ '''
+ Returns value of specified parameter, or None if parameter type is
+ gs_spt_null.
+
+ param:
+ Name of parameter, either a bytes or str; if a str it is encoded using
+ latin-1.
+ type:
+ A gs_spt_* constant or None. If None we try each gs_spt_* until one
+ succeeds; if none succeeds we raise the last error.
+ encoding:
+ Only affects string values. If None we return a bytes object, otherwise
+ it should be the encoding to use to decode into a string, e.g. 'utf-8'.
+ '''
+ # [unicode: we assume that underlying gsapi_get_param() expects <param> to
+ # be encoded as latin-1.]
+ #
+ param2 = param
+ if isinstance(param2, str):
+ param2 = param2.encode('latin-1')
+ assert isinstance(param2, bytes)
+
+ def _get_simple(value_type):
+ value = value_type()
+ e = _libgs.gsapi_get_param(instance, param2, ctypes.byref(value), type_)
+ if e < 0:
+ raise GSError(e)
+ return value.value
+
+ if type_ is None:
+ # Try each type until one succeeds. We raise the last error if no type
+ # works.
+ for type_ in range(0, gs_spt__end):
+ try:
+ ret = gsapi_get_param(instance, param2, type_, encoding)
+ return ret
+ except GSError as e:
+ last_error = e
+ raise last_error
+
+ elif type_ == gs_spt_null:
+ e = _libgs.gsapi_get_param(instance, param2, None, type_)
+ if e < 0:
+ raise GSError(e)
+ return None
+
+ elif type_ == gs_spt_bool:
+ ret = _get_simple(ctypes.c_int)
+ return ret != 0
+ elif type_ == gs_spt_int:
+ return _get_simple(ctypes.c_int)
+ elif type_ == gs_spt_float:
+ return _get_simple(ctypes.c_float)
+ elif type_ == gs_spt_long:
+ return _get_simple(ctypes.c_long)
+ elif type_ == gs_spt_i64:
+ return _get_simple(ctypes.c_int64)
+ elif type_ == gs_spt_size_t:
+ return _get_simple(ctypes.c_size_t)
+
+ elif type_ in (gs_spt_name, gs_spt_string, gs_spt_parsed):
+ # Value is a string, so get required buffer size.
+ e = _libgs.gsapi_get_param(instance, param2, None, type_)
+ if e < 0:
+ raise GSError(e)
+ value = ctypes.create_string_buffer(e)
+ e = _libgs.gsapi_get_param(instance, param2, ctypes.byref(value), type_)
+ if e < 0:
+ raise GSError(e)
+ ret = value.value
+ if encoding:
+ ret = ret.decode(encoding)
+ return ret
+
+ else:
+ raise Exception('Unrecognised type_=%s' % type_)
+
+
+def gsapi_enumerate_params(instance):
+ '''
+ Yields (key, value) for each param. <key> is decoded as latin-1.
+ '''
+ # [unicode: we assume that param names are encoded as latin-1.]
+ iterator = ctypes.c_void_p()
+ key = ctypes.c_char_p()
+ type_ = ctypes.c_int()
+ while 1:
+ e = _libgs.gsapi_enumerate_params(
+ instance,
+ ctypes.byref(iterator),
+ ctypes.byref(key),
+ ctypes.byref(type_),
+ )
+ if e == 1:
+ break
+ if e:
+ raise GSError(e)
+ yield key.value.decode('latin-1'), type_.value
+
+
+GS_PERMIT_FILE_READING = 0
+GS_PERMIT_FILE_WRITING = 1
+GS_PERMIT_FILE_CONTROL = 2
+
+
+def gsapi_add_control_path(instance, type_, path):
+ # [unicode: we assume that underlying gsapi_add_control_path() expects
+ # <path> to be encoded in encoding set by gsapi_set_arg_encoding().]
+ path2 = path.encode(_encoding)
+ e = _libgs.gsapi_add_control_path(instance, type_, path2)
+ if e < 0:
+ raise GSError(e)
+
+
+def gsapi_remove_control_path(instance, type_, path):
+ # [unicode: we assume that underlying gsapi_remove_control_path() expects
+ # <path> to be encoded in encoding set by gsapi_set_arg_encoding().]
+ path2 = path.encode(_encoding)
+ e = _libgs.gsapi_remove_control_path(instance, type_, path2)
+ if e < 0:
+ raise GSError(e)
+
+
+def gsapi_purge_control_paths(instance, type_):
+ e = _libgs.gsapi_purge_control_paths(instance, type_)
+ if e < 0:
+ raise GSError(e)
+
+
+def gsapi_activate_path_control(instance, enable):
+ e = _libgs.gsapi_activate_path_control(instance, enable)
+ if e < 0:
+ raise GSError(e)
+
+
+def gsapi_is_path_control_active(instance):
+ e = _libgs.gsapi_is_path_control_active(instance)
+ if e < 0:
+ raise GSError(e)
+
+
+
+# Implementation details.
+#
+
+_Error_num_to_error = dict()
+class _Error:
+ def __init__(self, num, desc):
+ self.num = num
+ self.desc = desc
+ _Error_num_to_error[self.num] = self
+
+gs_error_ok = _Error( 0, 'ok')
+gs_error_unknownerror = _Error( -1, 'unknown error')
+gs_error_dictfull = _Error( -2, 'dict full')
+gs_error_dictstackoverflow = _Error( -3, 'dict stack overflow')
+gs_error_dictstackunderflow = _Error( -4, 'dict stack underflow')
+gs_error_execstackoverflow = _Error( -5, 'exec stack overflow')
+gs_error_interrupt = _Error( -6, 'interrupt')
+gs_error_invalidaccess = _Error( -7, 'invalid access')
+gs_error_invalidexit = _Error( -8, 'invalid exit')
+gs_error_invalidfileaccess = _Error( -9, 'invalid fileaccess')
+gs_error_invalidfont = _Error( -10, 'invalid font')
+gs_error_invalidrestore = _Error( -11, 'invalid restore')
+gs_error_ioerror = _Error( -12, 'ioerror')
+gs_error_limitcheck = _Error( -13, 'limit check')
+gs_error_nocurrentpoint = _Error( -14, 'no current point')
+gs_error_rangecheck = _Error( -15, 'range check')
+gs_error_stackoverflow = _Error( -16, 'stack overflow')
+gs_error_stackunderflow = _Error( -17, 'stack underflow')
+gs_error_syntaxerror = _Error( -18, 'syntax error')
+gs_error_timeout = _Error( -19, 'timeout')
+gs_error_typecheck = _Error( -20, 'type check')
+gs_error_undefined = _Error( -21, 'undefined')
+gs_error_undefinedfilename = _Error( -22, 'undefined filename')
+gs_error_undefinedresult = _Error( -23, 'undefined result')
+gs_error_unmatchedmark = _Error( -24, 'unmatched mark')
+gs_error_VMerror = _Error( -25, 'VMerror')
+
+gs_error_configurationerror = _Error( -26, 'configuration error')
+gs_error_undefinedresource = _Error( -27, 'undefined resource')
+gs_error_unregistered = _Error( -28, 'unregistered')
+gs_error_invalidcontext = _Error( -29, 'invalid context')
+gs_error_invalidid = _Error( -30, 'invalid id')
+
+gs_error_hit_detected = _Error( -99, 'hit detected')
+gs_error_Fatal = _Error(-100, 'Fatal')
+gs_error_Quit = _Error(-101, 'Quit')
+gs_error_InterpreterExit = _Error(-102, 'Interpreter Exit')
+gs_error_Remap_Color = _Error(-103, 'Remap Color')
+gs_error_ExecStackUnderflow = _Error(-104, 'Exec Stack Underflow')
+gs_error_VMreclaim = _Error(-105, 'VM reclaim')
+gs_error_NeedInput = _Error(-106, 'Need Input')
+gs_error_NeedFile = _Error(-107, 'Need File')
+gs_error_Info = _Error(-110, 'Info')
+gs_error_handled = _Error(-111, 'handled')
+
+def _gs_error_text(gs_error):
+ '''
+ Returns text description of <gs_error>. See base/gserrors.h.
+ '''
+ e = _Error_num_to_error.get(gs_error)
+ if e:
+ return e.desc
+ return 'no error'
+
+
+# The encoding that we use when passing strings to the underlying gsapi_*() C
+# functions. Changed by gsapi_set_arg_encoding().
+#
+# This default is probably incorrect on Windows.
+#
+_encoding = 'utf-8'
+
+class _gsapi_revision_t(ctypes.Structure):
+ _fields_ = [
+ ('product', ctypes.c_char_p),
+ ('copyright', ctypes.c_char_p),
+ ('revision', ctypes.c_long),
+ ('revisiondate', ctypes.c_long),
+ ]
+
+
+_stdio_fn = ctypes.CFUNCTYPE(
+ ctypes.c_int, # return
+ ctypes.c_void_p, # caller_handle
+ ctypes.POINTER(ctypes.c_char), # str
+ ctypes.c_int, # len
+ )
+
+_gsapi_set_stdio_refs = None
+
+
+# ctypes representation of int (*poll_fn)(void* caller_handle).
+#
+_poll_fn = ctypes.CFUNCTYPE(
+ ctypes.c_int, # return
+ ctypes.c_void_p, # caller_handle
+ )
+
+_gsapi_set_poll_refs = None
+
+
+# ctypes representation of display_callback.
+#
+class _display_callback(ctypes.Structure):
+ _fields_ = [
+ ('size', ctypes.c_int),
+ ('version_major', ctypes.c_int),
+ ('version_minor', ctypes.c_int),
+ ('display_open',
+ ctypes.CFUNCTYPE(ctypes.c_int,
+ ctypes.c_void_p, # handle
+ ctypes.c_void_p, # device
+ )),
+ ('display_preclose',
+ ctypes.CFUNCTYPE(ctypes.c_int,
+ ctypes.c_void_p, # handle
+ ctypes.c_void_p, # device
+ )),
+ ('display_close',
+ ctypes.CFUNCTYPE(ctypes.c_int,
+ ctypes.c_void_p, # handle
+ ctypes.c_void_p, # device
+ )),
+ ('display_presize',
+ ctypes.CFUNCTYPE(ctypes.c_int,
+ ctypes.c_void_p, # handle
+ ctypes.c_void_p, # device
+ ctypes.c_int, # width
+ ctypes.c_int, # height
+ ctypes.c_int, # raster
+ ctypes.c_uint, # format
+ )),
+ ('display_size',
+ ctypes.CFUNCTYPE(ctypes.c_int,
+ ctypes.c_void_p, # handle
+ ctypes.c_void_p, # device
+ ctypes.c_int, # width
+ ctypes.c_int, # height
+ ctypes.c_int, # raster
+ ctypes.c_uint, # format
+ ctypes.c_char_p, # pimage
+ )),
+ ('display_sync',
+ ctypes.CFUNCTYPE(ctypes.c_int,
+ ctypes.c_void_p, # handle
+ ctypes.c_void_p, # device
+ )),
+ ('display_page',
+ ctypes.CFUNCTYPE(ctypes.c_int,
+ ctypes.c_void_p, # handle
+ ctypes.c_void_p, # device
+ ctypes.c_int, # copies
+ ctypes.c_int, # flush
+ )),
+ ('display_update',
+ ctypes.CFUNCTYPE(ctypes.c_int,
+ ctypes.c_void_p, # handle
+ ctypes.c_void_p, # device
+ ctypes.c_int, # x
+ ctypes.c_int, # y
+ ctypes.c_int, # w
+ ctypes.c_int, # h
+ )),
+ ('display_memalloc',
+ ctypes.CFUNCTYPE(ctypes.c_int,
+ ctypes.c_void_p, # handle
+ ctypes.c_void_p, # device
+ ctypes.c_ulong, # size
+ )),
+ ('display_memfree',
+ ctypes.CFUNCTYPE(ctypes.c_int,
+ ctypes.c_void_p, # handle
+ ctypes.c_void_p, # device
+ ctypes.c_void_p, # mem
+ )),
+ ('display_separation',
+ ctypes.CFUNCTYPE(ctypes.c_int,
+ ctypes.c_void_p, # handle
+ ctypes.c_void_p, # device
+ ctypes.c_int, # component
+ ctypes.c_char_p, # component_name
+ ctypes.c_ushort, # c
+ ctypes.c_ushort, # m
+ ctypes.c_ushort, # y
+ ctypes.c_ushort, # k
+ )),
+ ]
+
+
+_libgs.gsapi_set_display_callback.argtypes = (
+ ctypes.c_void_p, # instance
+ ctypes.POINTER(_display_callback), # callback
+ )
+
+
+_gsapi_set_display_callback_refs = None
+
+
+# See:
+#
+# https://stackoverflow.com/questions/58598012/ctypes-errors-with-argv
+#
+_pchar = ctypes.POINTER(ctypes.c_char)
+_ppchar = ctypes.POINTER(_pchar)
+
+_libgs.gsapi_init_with_args.argtypes = (
+ ctypes.c_void_p, # instance
+ ctypes.c_int, # argc
+ _ppchar, # argv
+ )
+
+
+if 0:
+ # Not implemented yet:
+ # gsapi_add_fs()
+ # gsapi_remove_fs()
+ #
+ class gsapi_fs_t(ctypes.Structure):
+ _fields_ = [
+ ('open_file',
+ ctypes.CFUNCTYPE(ctypes.c_int,
+ ctypes.c_pvoid, # const gs_memory_t *mem
+ ctypes.c_pvoid, # secret
+ ctypes.c_char_p, # fname
+ ctypes.c_char_p, # mode
+ )),
+ ]
+
+
+
+if __name__ == '__main__':
+
+ # test
+ #
+
+ print('Running some very simple and incomplete tests...')
+
+ print('libgs: %s' % _libgs)
+
+ revision = gsapi_revision()
+ print('libgs.gsapi_revision() ok: %s' % revision)
+
+ instance = gsapi_new_instance(1)
+ print('gsapi_new_instance() ok: %s' % instance)
+
+ gsapi_set_arg_encoding(instance, GS_ARG_ENCODING_UTF8)
+ print('gsapi_set_arg_encoding() ok.')
+
+ def stdout_fn(caller_handle, bytes_):
+ sys.stdout.write(bytes_.decode('latin-1'))
+ gsapi_set_stdio(instance, None, stdout_fn, None)
+ print('gsapi_set_stdio() ok.')
+
+ d = display_callback()
+ gsapi_set_display_callback(instance, d)
+ print('gsapi_set_display_callback() ok.')
+
+ gsapi_set_default_device_list(instance, 'bmp256 bmp32b bmpgray bmpmono bmpsep1 bmpsep8 ccr cdeskjet cdj1600 cdj500')
+ print('gsapi_set_default_device_list() ok.')
+
+ l = gsapi_get_default_device_list(instance)
+ print('gsapi_get_default_device_list() ok: l=%s' % l)
+
+ gsapi_init_with_args(instance, ['gs',])
+ print('gsapi_init_with_args() ok')
+
+ gsapi_set_param(instance, "foo", 100, gs_spt_i64)
+
+ try:
+ gsapi_get_param(instance, "foo", gs_spt_i64)
+ except GSError as e:
+ assert e.gs_error == gs_error_undefined.num, e.gs_error
+ else:
+ assert 0, 'expected gsapi_get_param() to fail'
+
+ # Check specifying invalid type raises exception.
+ try:
+ gsapi_get_param(instance, None, -1)
+ except Exception as e:
+ pass
+ else:
+ assert 0
+
+ # Check specifying invalid param name raises exception.
+ try:
+ gsapi_get_param(instance, -1, None)
+ except Exception as e:
+ pass
+ else:
+ assert 0
+
+ # Check we can write 64-bit value.
+ gsapi_set_param(instance, 'foo', 2**40, None)
+
+ # Check specifying out-of-range raises exception.
+ try:
+ gsapi_set_param(instance, 'foo', 2**40, gs_spt_int)
+ except Exception as e:
+ print(e)
+ assert 'out of range' in str(e)
+ else:
+ assert 0
+
+ # Check specifying out-of-range raises exception.
+ try:
+ gsapi_set_param(instance, 'foo', 2**70, None)
+ except Exception as e:
+ print(e)
+ assert 'out of range' in str(e)
+ else:
+ assert 0
+
+ print('Checking that we can set and get NumCompies and get same result back')
+ gsapi_set_param(instance, "NumCopies", 10, gs_spt_i64)
+ v = gsapi_get_param(instance, "NumCopies", gs_spt_i64)
+ assert v == 10
+
+ for value in False, True:
+ gsapi_set_param(instance, "DisablePageHandler", value)
+ v = gsapi_get_param(instance, "DisablePageHandler")
+ assert v is value
+
+ for value in 32, True, 3.14:
+ gsapi_set_param(instance, "foo", value);
+ print('gsapi_set_param() %s ok.' % value)
+ try:
+ gsapi_get_param(instance, 'foo')
+ except GSError as e:
+ pass
+ else:
+ assert 0, 'expected gsapi_get_param() to fail'
+
+ value = "hello world"
+ gsapi_set_param(instance, "foo", value, gs_spt_string)
+ print('gsapi_set_param() %s ok.' % value)
+
+ gsapi_set_param(instance, "foo", 123, gs_spt_bool)
+
+ try:
+ gsapi_set_param(instance, "foo", None, gs_spt_bool)
+ except Exception:
+ pass
+ else:
+ assert 0
+ if 0: assert gsapi_get_param(instance, "foo") is None
+
+ # Enumerate all params and print name/value.
+ print('gsapi_enumerate_params():')
+ for param, type_ in gsapi_enumerate_params(instance):
+ value = gsapi_get_param(instance, param, type_)
+ value2 = gsapi_get_param(instance, param)
+ assert value2 == value, 'value=%s value2=%s' % (value, value2)
+ value3 = gsapi_get_param(instance, param, encoding='utf-8')
+ print(' %-24s type_=%-5s %r %r' % (param, type_, value, value3))
+ assert not isinstance(value, str)
+ if isinstance(value, bytes):
+ assert isinstance(value3, str)
+
+ print('Finished')
diff --git a/demos/python/gsapiwrap.py b/demos/python/gsapiwrap.py
new file mode 100755
index 00000000..0ef0bb08
--- /dev/null
+++ b/demos/python/gsapiwrap.py
@@ -0,0 +1,699 @@
+#! /usr/bin/env python3
+
+'''
+Use Swig to build wrappers for gsapi.
+
+Example usage:
+
+ Note that we use mupdf's scripts/jlib.py, and assume that there is a mupdf
+ checkout in the parent directory of the ghostpdl checkout - see 'import
+ jlib' below.
+
+ ./toolbin/gsapiwrap.py --python -l -0 -1 -t
+ Build python wrapper for gsapi and run simple test.
+
+ ./toolbin/gsapiwrap.py --csharp -l -0 -1 -t
+ Build C# wrapper for gsapi and run simple test.
+
+Args:
+
+ -c:
+ Clean language-specific out-dir.
+
+ -l:
+ Build libgs.so (by running make).
+
+ -0:
+ Run swig to generate language-specific files.
+
+ -1:
+ Generate language wrappers by compiling/linking the files generated by
+ -0.
+
+ --csharp:
+ Generate C# wrappers (requires Mono on Linux). Should usually be first
+ param.
+
+ --python
+ Generate Python wrappers. Should usually be first param.
+
+ --swig <swig>
+ Set location of swig binary.
+
+ -t
+ Run simple test of language wrappers generated by -1.
+
+Status:
+ As of 2020-05-22:
+ Some python wrappers seem to work ok.
+
+ C# wrappers are not implemented for gsapi_set_poll() and
+ gsapi_set_stdio().
+'''
+
+import os
+import re
+import sys
+import textwrap
+
+import jlib
+
+
+def devpython_info():
+ '''
+ Use python3-config to find libpython.so and python-dev include path etc.
+ '''
+ python_configdir = jlib.system( 'python3-config --configdir', out='return')
+ libpython_so = os.path.join(
+ python_configdir.strip(),
+ f'libpython{sys.version_info[0]}.{sys.version_info[1]}.so',
+ )
+ assert os.path.isfile( libpython_so), f'cannot find libpython_so={libpython_so}'
+
+ python_includes = jlib.system( 'python3-config --includes', out='return')
+ python_includes = python_includes.strip()
+ return python_includes, libpython_so
+
+def swig_version( swig='swig'):
+ t = jlib.system( f'{swig} -version', out='return')
+ m = re.search( 'SWIG Version ([0-9]+)[.]([0-9]+)[.]([0-9]+)', t)
+ assert m
+ swig_major = int( m.group(1))
+ return swig_major
+
+
+dir_ghostpdl = os.path.abspath( f'{__file__}/../../') + '/'
+
+
+def out_dir( language):
+ if language == 'python':
+ return 'gsapiwrap/python/'
+ if language == 'csharp':
+ return 'gsapiwrap/csharp/'
+ assert 0
+
+def out_so( language):
+ '''
+ Returns name of .so that implements language-specific wrapper. I think
+ these names have to match what the language runtime requires.
+
+ For python, Swig generates a module foo.py which does 'import _foo'.
+
+ Similarly C# assumes a file called 'libfoo.so'.
+ '''
+ if language == 'python':
+ return f'{out_dir(language)}_gsapi.so'
+ if language == 'csharp':
+ return f'{out_dir(language)}libgsapi.so'
+ assert 0
+
+def lib_gs_info():
+ return f'{dir_ghostpdl}sodebugbin/libgs.so', 'make sodebug'
+ return f'{dir_ghostpdl}sobin/libgs.so', 'make so'
+
+def lib_gs():
+ '''
+ Returns name of the gs shared-library.
+ '''
+ return lib_gs_info()[0]
+
+
+def swig_i( swig, language):
+ '''
+ Returns text for a swig .i file for psi/iapi.h.
+ '''
+ swig_major = swig_version( swig)
+
+
+ # We need to redeclare or wrap some functions, e.g. to add OUTPUT
+ # annotations. We use #define, %ignore and #undef to hide the original
+ # declarations in the .h file.
+ #
+ fns_redeclare = (
+ 'gsapi_run_file',
+ 'gsapi_run_string',
+ 'gsapi_run_string_begin',
+ 'gsapi_run_string_continue',
+ 'gsapi_run_string_end',
+ 'gsapi_run_string_with_length',
+ 'gsapi_set_poll',
+ 'gsapi_set_poll_with_handle',
+ 'gsapi_set_stdio',
+ 'gsapi_set_stdio_with_handle',
+ 'gsapi_new_instance',
+ )
+
+
+ swig_i_text = textwrap.dedent(f'''
+ %module(directors="1") gsapi
+
+ %include cpointer.i
+ %pointer_functions(int, pint);
+
+ // This seems to be necessary to make csharp handle OUTPUT args.
+ //
+ %include typemaps.i
+
+ // For gsapi_init_with_args().
+ %include argcargv.i
+
+ %include cstring.i
+
+ // Include type information in python doc strings. If we have
+ // swig-4, we can propogate comments from the C api instead, which
+ // is preferred.
+ //
+ {'%feature("autodoc", "3");' if swig_major < 4 else ''}
+
+ %{{
+ #include "psi/iapi.h"
+ //#include "base/gserrors.h"
+
+ // Define wrapper functions that present a modified API that
+ // swig can cope with.
+ //
+
+ // Swig cannot handle void** out-param.
+ //
+ static void* new_instance( void* caller_handle, int* out)
+ {{
+ void* ret = NULL;
+ *out = gsapi_new_instance( &ret, caller_handle);
+ printf( "gsapi_new_instance() returned *out=%i ret=%p\\n", *out, ret);
+ fflush( stdout);
+ return ret;
+ }}
+
+ // Swig cannot handle (const char* str, int strlen) args.
+ //
+ static int run_string_continue(void *instance, const char *str, int user_errors, int *pexit_code) {{
+
+ return gsapi_run_string_continue( instance, str, strlen(str), user_errors, pexit_code);
+ }}
+ %}}
+
+ // Strip gsapi_ prefix from all generated names.
+ //
+ %rename("%(strip:[gsapi_])s") "";
+
+ // Tell Swig about gsapi_get_default_device_list()'s out-params, so
+ // it adds them to the returned object.
+ //
+ // I think the '(void) *$1' will ensure that swig code doesn't
+ // attempt to free() the returned string.
+ //
+ {'%cstring_output_allocate_size(char **list, int *listlen, (void) *$1);' if language == 'python' else ''}
+
+ // Tell swig about the (argc,argv) args in gsapi_init_with_args().
+ //
+ %apply (int ARGC, char **ARGV) {{ (int argc, char **argv) }}
+
+ // Support for wrapping various functions that take function
+ // pointer args. For each, we define a wrapper function that,
+ // instead of having function pointer args, takes a class with
+ // virtual methods. This allows swig to wrap things - python/c# etc
+ // can create a derived class that implements these virtual methods
+ // in the python/c# world.
+ //
+
+ // Wrap gsapi_set_stdio_with_handle().
+ //
+ %feature("director") set_stdio_class;
+
+ %inline {{
+ struct set_stdio_class {{
+
+ virtual int stdin_fn( char* buf, int len) = 0;
+ virtual int stdout_fn( const char* buf, int len) = 0;
+ virtual int stderr_fn( const char* buf, int len) = 0;
+
+ static int stdin_fn_wrap( void *caller_handle, char *buf, int len) {{
+ return ((set_stdio_class*) caller_handle)->stdin_fn(buf, len);
+ }}
+ static int stdout_fn_wrap( void *caller_handle, const char *buf, int len) {{
+ return ((set_stdio_class*) caller_handle)->stdout_fn(buf, len);
+ }}
+ static int stderr_fn_wrap( void *caller_handle, const char *buf, int len) {{
+ return ((set_stdio_class*) caller_handle)->stderr_fn(buf, len);
+ }}
+
+ virtual ~set_stdio_class() {{}}
+ }};
+
+ int set_stdio_with_class( void *instance, set_stdio_class* class_) {{
+ return gsapi_set_stdio_with_handle(
+ instance,
+ set_stdio_class::stdin_fn_wrap,
+ set_stdio_class::stdout_fn_wrap,
+ set_stdio_class::stderr_fn_wrap,
+ (void*) class_
+ );
+ }}
+
+
+ }}
+
+ // Wrap gsapi_set_poll().
+ //
+ %feature("director") set_poll_class;
+
+ %inline {{
+ struct set_poll_class {{
+ virtual int poll_fn() = 0;
+
+ static int poll_fn_wrap( void* caller_handle) {{
+ return ((set_poll_class*) caller_handle)->poll_fn();
+ }}
+
+ virtual ~set_poll_class() {{}}
+ }};
+
+ int set_poll_with_class( void* instance, set_poll_class* class_) {{
+ return gsapi_set_poll_with_handle(
+ instance,
+ set_poll_class::poll_fn_wrap,
+ (void*) class_
+ );
+ }}
+
+ }}
+
+ // For functions that we re-declare (typically to specify OUTPUT on
+ // one or more args), use a macro to rename the declaration in the
+ // header file and tell swig to ignore these renamed declarations.
+ //
+ ''')
+
+ for fn in fns_redeclare:
+ swig_i_text += f'#define {fn} {fn}0\n'
+
+ for fn in fns_redeclare:
+ swig_i_text += f'%ignore {fn}0;\n'
+
+ swig_i_text += textwrap.dedent(f'''
+ #include "psi/iapi.h"
+ //#include "base/gserrors.h"
+ ''')
+
+ for fn in fns_redeclare:
+ swig_i_text += f'#undef {fn}\n'
+
+
+ swig_i_text += textwrap.dedent(f'''
+ // Tell swig about our wrappers and altered declarations.
+ //
+
+ // Use swig's OUTPUT annotation for out-parameters.
+ //
+ int gsapi_run_file(void *instance, const char *file_name, int user_errors, int *OUTPUT);
+ int gsapi_run_string_begin(void *instance, int user_errors, int *OUTPUT);
+ int gsapi_run_string_end(void *instance, int user_errors, int *OUTPUT);
+ //int gsapi_run_string_with_length(void *instance, const char *str, unsigned int length, int user_errors, int *OUTPUT);
+ int gsapi_run_string(void *instance, const char *str, int user_errors, int *OUTPUT);
+
+ // Declare functions defined above that we want swig to wrap. These
+ // don't have the gsapi_ prefix, so that they can internally call
+ // the wrapped gsapi_*() function. [We've told swig to strip the
+ // gsapi_ prefix on generated functions anyway, so this doesn't
+ // afffect the generated names.]
+ //
+ static int run_string_continue(void *instance, const char *str, int user_errors, int *OUTPUT);
+ static void* new_instance(void* caller_handle, int* OUTPUT);
+ ''')
+
+ if language == 'python':
+ swig_i_text += textwrap.dedent(f'''
+
+ // Define python code that is needed to handle functions with
+ // function-pointer args.
+ //
+ %pythoncode %{{
+
+ set_stdio_g = None
+ def set_stdio( instance, stdin, stdout, stderr):
+ class derived( set_stdio_class):
+ def stdin_fn( self):
+ return stdin()
+ def stdout_fn( self, text, len):
+ return stdout( text, len)
+ def stderr_fn( self, text, len):
+ return stderr( text)
+
+ global set_stdio_g
+ set_stdio_g = derived()
+ return set_stdio_with_class( instance, set_stdio_g)
+
+ set_poll_g = None
+ def set_poll( instance, fn):
+ class derived( set_poll_class):
+ def poll_fn( self):
+ return fn()
+ global set_poll_g
+ set_poll_g = derived()
+ return set_poll_with_class( instance, set_poll_g)
+ %}}
+ ''')
+
+ return swig_i_text
+
+
+
+def run_swig( swig, language):
+ '''
+ Runs swig using a generated .i file.
+
+ The .i file modifies the gsapi API in places to allow specification of
+ out-parameters that swig understands - e.g. void** OUTPUT doesn't work.
+ '''
+ os.makedirs( out_dir(language), exist_ok=True)
+ swig_major = swig_version( swig)
+
+ swig_i_text = swig_i( swig, language)
+ swig_i_filename = f'{out_dir(language)}iapi.i'
+ jlib.update_file( swig_i_text, swig_i_filename)
+
+ out_cpp = f'{out_dir(language)}gsapi.cpp'
+
+ if language == 'python':
+ out_lang = f'{out_dir(language)}gsapi.py'
+ elif language == 'csharp':
+ out_lang = f'{out_dir(language)}gsapi.cs'
+ else:
+ assert 0
+
+ out_files = (out_cpp, out_lang)
+
+ doxygen_arg = ''
+ if swig_major >= 4 and language == 'python':
+ doxygen_arg = '-doxygen'
+
+ extra = ''
+ if language == 'csharp':
+ # Tell swig to put all generated csharp code into a single file.
+ extra = f'-outfile gsapi.cs'
+
+ command = (textwrap.dedent(f'''
+ {swig}
+ -Wall
+ -c++
+ -{language}
+ {doxygen_arg}
+ -module gsapi
+ -outdir {out_dir(language)}
+ -o {out_cpp}
+ {extra}
+ -includeall
+ -I{dir_ghostpdl}
+ -ignoremissing
+ {swig_i_filename}
+ ''').strip().replace( '\n', ' \\\n')
+ )
+
+ jlib.build(
+ (swig_i_filename,),
+ out_files,
+ command,
+ prefix=' ',
+ )
+
+
+def main( argv):
+
+ swig = 'swig'
+ language = 'python'
+
+ args = jlib.Args( sys.argv[1:])
+ while 1:
+ try:
+ arg = args.next()
+ except StopIteration:
+ break
+
+ if 0:
+ pass
+
+ elif arg == '-c':
+ jlib.system( f'rm {out_dir(language)}* || true', verbose=1, prefix=' ')
+
+ elif arg == '-l':
+ command = lib_gs_info()[1]
+ jlib.system( command, verbose=1, prefix=' ')
+
+ elif arg == '-0':
+ run_swig( swig, language)
+
+ elif arg == '-1':
+
+ libs = [lib_gs()]
+ includes = [dir_ghostpdl]
+ file_cpp = f'{out_dir(language)}gsapi.cpp'
+
+ if language == 'python':
+ python_includes, libpython_so = devpython_info()
+ libs.append( libpython_so)
+ includes.append( python_includes)
+
+ includes_text = ''
+ for i in includes:
+ includes_text += f' -I{i}'
+ command = textwrap.dedent(f'''
+ g++
+ -g
+ -Wall -W
+ -o {out_so(language)}
+ -fPIC
+ -shared
+ {includes_text}
+ {jlib.link_l_flags(libs)}
+ {file_cpp}
+ ''').strip().replace( '\n', ' \\\n')
+ jlib.build(
+ (file_cpp, lib_gs(), 'psi/iapi.h'),
+ (out_so(language),),
+ command,
+ prefix=' ',
+ )
+
+ elif arg == '--csharp':
+ language = 'csharp'
+
+ elif arg == '--python':
+ language = 'python'
+
+ elif arg == '--swig':
+ swig = args.next()
+
+ elif arg == '-t':
+
+ if language == 'python':
+ text = textwrap.dedent('''
+ #!/usr/bin/env python3
+
+ import os
+ import sys
+
+ import gsapi
+
+ gsapi.gs_error_Quit = -101
+
+ def main():
+ minst, code = gsapi.new_instance(None)
+ print( f'minst={minst} code={code}')
+
+ if 1:
+ def stdin_local(len):
+ # Not sure whether this is right.
+ return sys.stdin.read(len)
+ def stdout_local(text, l):
+ sys.stdout.write(text[:l])
+ return l
+ def stderr_local(text, l):
+ sys.stderr.write(text[:l])
+ return l
+ gsapi.set_stdio( minst, None, stdout_local, stderr_local);
+
+ if 1:
+ def poll_fn():
+ return 0
+ gsapi.set_poll(minst, poll_fn)
+ if 1:
+ s = 'display x11alpha x11 bbox'
+ gsapi.set_default_device_list( minst, s, len(s))
+
+ e, text = gsapi.get_default_device_list( minst)
+ print( f'gsapi.get_default_device_list() returned e={e} text={text!r}')
+
+ out = 'out.pdf'
+ if os.path.exists( out):
+ os.remove( out)
+ assert not os.path.exists( out)
+
+ gsargv = ['']
+ gsargv += f'-dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile={out} contrib/pcl3/ps/levels-test.ps'.split()
+ print( f'gsargv={gsargv}')
+ code = gsapi.set_arg_encoding(minst, gsapi.GS_ARG_ENCODING_UTF8)
+ if code == 0:
+ code = gsapi.init_with_args(minst, gsargv)
+
+ code, exit_code = gsapi.run_string_begin( minst, 0)
+ print( f'gsapi.run_string_begin() returned code={code} exit_code={exit_code}')
+ assert code == 0
+ assert exit_code == 0
+
+ gsapi.run_string
+
+ code1 = gsapi.exit(minst)
+ if (code == 0 or code == gsapi.gs_error_Quit):
+ code = code1
+ gsapi.delete_instance(minst)
+ assert os.path.isfile( out)
+ if code == 0 or code == gsapi.gs_error_Quit:
+ return 0
+ return 1
+
+ if __name__ == '__main__':
+ code = main()
+ assert code == 0
+ sys.exit( code)
+ ''')
+ text = text[1:] # skip leading \n.
+ test_py = f'{out_dir(language)}test.py'
+ jlib.update_file( text, test_py)
+ os.chmod( test_py, 0o744)
+
+ jlib.system(
+ f'LD_LIBRARY_PATH={os.path.abspath( f"{lib_gs()}/..")}'
+ f' PYTHONPATH={out_dir(language)}'
+ f' {test_py}'
+ ,
+ verbose = 1,
+ prefix=' ',
+ )
+
+ elif language == 'csharp':
+ # See: https://github.com/swig/swig/blob/master/Lib/csharp/typemaps.i
+ #
+ text = textwrap.dedent('''
+ using System;
+ public class runme {
+ static void Main() {
+ int code;
+ SWIGTYPE_p_void instance;
+ Console.WriteLine("hello world");
+ instance = gsapi.new_instance(null, out code);
+ Console.WriteLine("code is: " + code);
+ gsapi.add_control_path(instance, 0, "hello");
+ }
+ }
+ ''')
+ test_cs = f'{out_dir(language)}test.cs'
+ jlib.update_file( text, test_cs)
+ files_in = f'{out_dir(language)}gsapi.cs', test_cs
+ file_out = f'{out_dir(language)}test.exe'
+ command = f'mono-csc -debug+ -out:{file_out} {" ".join(files_in)}'
+ jlib.build( files_in, (file_out,), command, prefix=' ')
+
+ ld_library_path = f'{dir_ghostpdl}sobin'
+ jlib.system( f'LD_LIBRARY_PATH={ld_library_path} {file_out}', verbose=jlib.log, prefix=' ')
+
+ elif arg == '--tt':
+ # small swig test case.
+ os.makedirs( 'swig-tt', exist_ok=True)
+ i = textwrap.dedent(f'''
+ %include cpointer.i
+ %include cstring.i
+ %feature("autodoc", "3");
+ %cstring_output_allocate_size(char **list, int *listlen, (void) *$1);
+ %inline {{
+ static inline int gsapi_get_default_device_list(void *instance, char **list, int *listlen)
+ {{
+ *list = (char*) "hello world";
+ *listlen = 6;
+ return 0;
+ }}
+ }}
+ ''')
+ jlib.update_file(i, 'swig-tt/tt.i')
+ jlib.system('swig -c++ -python -module tt -outdir swig-tt -o swig-tt/tt.cpp swig-tt/tt.i', verbose=1)
+ p = textwrap.dedent(f'''
+ #!/usr/bin/env python3
+ import tt
+ print( tt.gsapi_get_default_device_list(None))
+ ''')[1:]
+ jlib.update_file( p, 'swig-tt/test.py')
+ python_includes, python_so = devpython_info()
+ includes = f'-I {python_includes}'
+ link_flags = jlib.link_l_flags( [python_so])
+ jlib.system( f'g++ -shared -fPIC {includes} {link_flags} -o swig-tt/_tt.so swig-tt/tt.cpp', verbose=1)
+ jlib.system( f'cd swig-tt; python3 test.py', verbose=1)
+
+ elif arg == '-T':
+ # Very simple test that we can create c# wrapper for trivial code.
+ os.makedirs( 'swig-cs-test', exist_ok=True)
+ example_cpp = textwrap.dedent('''
+ #include <time.h>
+ double My_variable = 3.0;
+
+ int fact(int n) {
+ if (n <= 1) return 1;
+ else return n*fact(n-1);
+ }
+
+ int my_mod(int x, int y) {
+ return (x%y);
+ }
+
+ char *get_time()
+ {
+ time_t ltime;
+ time(&ltime);
+ return ctime(&ltime);
+ }
+ ''')
+ jlib.update_file( example_cpp, 'swig-cs-test/example.cpp')
+
+ example_i = textwrap.dedent('''
+ %module example
+ %{
+ /* Put header files here or function declarations like below */
+ extern double My_variable;
+ extern int fact(int n);
+ extern int my_mod(int x, int y);
+ extern char *get_time();
+ %}
+
+ extern double My_variable;
+ extern int fact(int n);
+ extern int my_mod(int x, int y);
+ extern char *get_time();
+ ''')
+ jlib.update_file( example_i, 'swig-cs-test/example.i')
+
+ runme_cs = textwrap.dedent('''
+ using System;
+ public class runme {
+ static void Main() {
+ Console.WriteLine(example.My_variable);
+ Console.WriteLine(example.fact(5));
+ Console.WriteLine(example.get_time());
+ }
+ }
+ ''')
+ jlib.update_file( runme_cs, 'swig-cs-test/runme.cs')
+ jlib.system( 'g++ -g -fPIC -shared -o swig-cs-test/libfoo.so swig-cs-test/example.cpp', verbose=1)
+ jlib.system( 'swig -c++ -csharp -module example -outdir swig-cs-test -o swig-cs-test/example_wrap.cpp -outfile example.cs swig-cs-test/example.i', verbose=1)
+ jlib.system( 'g++ -g -fPIC -shared -L swig-cs-test -l foo swig-cs-test/example_wrap.cpp -o swig-cs-test/libexample.so', verbose=1)
+ jlib.system( 'cd swig-cs-test; mono-csc -out:runme.exe example.cs runme.cs', verbose=1)
+ jlib.system( 'cd swig-cs-test; LD_LIBRARY_PATH=`pwd` ./runme.exe', verbose=1)
+ jlib.system( 'ls -l swig-cs-test', verbose=1)
+
+
+ else:
+ raise Exception( f'unrecognised arg: {arg}')
+
+if __name__ == '__main__':
+ try:
+ main( sys.argv)
+ except Exception as e:
+ jlib.exception_info( out=sys.stdout)
+ sys.exit(1)
diff --git a/demos/python/jlib.py b/demos/python/jlib.py
new file mode 100644
index 00000000..20506c38
--- /dev/null
+++ b/demos/python/jlib.py
@@ -0,0 +1,1355 @@
+from __future__ import print_function
+
+import codecs
+import inspect
+import io
+import os
+import shutil
+import subprocess
+import sys
+import time
+import traceback
+import threading
+
+
+def place( frame_record):
+ '''
+ Useful debugging function - returns representation of source position of
+ caller.
+ '''
+ filename = frame_record.filename
+ line = frame_record.lineno
+ function = frame_record.function
+ ret = os.path.split( filename)[1] + ':' + str( line) + ':' + function + ':'
+ if 0:
+ tid = str(threading.currentThread())
+ ret = '[' + tid + '] ' + ret
+ return ret
+
+
+def expand_nv( text, caller):
+ '''
+ Returns <text> with special handling of {<expression>} items.
+
+ text:
+ String containing {<expression>} items.
+ caller:
+ If an int, the number of frames to step up when looking for file:line
+ information or evaluating expressions.
+
+ Otherwise should be a frame record as returned by inspect.stack()[].
+
+ <expression> is evaluated in <caller>'s context using eval(), and expanded
+ to <expression> or <expression>=<value>.
+
+ If <expression> ends with '=', this character is removed and we prefix the
+ result with <expression>=.
+
+ E.g.:
+ x = 45
+ y = 'hello'
+ expand_nv( 'foo {x} {y=}')
+ returns:
+ foo 45 y=hello
+
+ <expression> can also use ':' and '!' to control formatting, like
+ str.format().
+ '''
+ if isinstance( caller, int):
+ frame_record = inspect.stack()[ caller]
+ else:
+ frame_record = caller
+ frame = frame_record.frame
+ try:
+ def get_items():
+ '''
+ Yields (pre, item), where <item> is contents of next {...} or None,
+ and <pre> is preceding text.
+ '''
+ pos = 0
+ pre = ''
+ while 1:
+ if pos == len( text):
+ yield pre, None
+ break
+ rest = text[ pos:]
+ if rest.startswith( '{{') or rest.startswith( '}}'):
+ pre += rest[0]
+ pos += 2
+ elif text[ pos] == '{':
+ close = text.find( '}', pos)
+ if close < 0:
+ raise Exception( 'After "{" at offset %s, cannot find closing "}". text is: %r' % (
+ pos, text))
+ yield pre, text[ pos+1 : close]
+ pre = ''
+ pos = close + 1
+ else:
+ pre += text[ pos]
+ pos += 1
+
+ ret = ''
+ for pre, item in get_items():
+ ret += pre
+ nv = False
+ if item:
+ if item.endswith( '='):
+ nv = True
+ item = item[:-1]
+ expression, tail = split_first_of( item, '!:')
+ try:
+ value = eval( expression, frame.f_globals, frame.f_locals)
+ value_text = ('{0%s}' % tail).format( value)
+ except Exception as e:
+ value_text = '{??Failed to evaluate %r in context %s:%s because: %s??}' % (
+ expression,
+ frame_record.filename,
+ frame_record.lineno,
+ e,
+ )
+ if nv:
+ ret += '%s=' % expression
+ ret += value_text
+
+ return ret
+
+ finally:
+ del frame
+
+
+class LogPrefixTime:
+ def __init__( self, date=False, time_=True, elapsed=False):
+ self.date = date
+ self.time = time_
+ self.elapsed = elapsed
+ self.t0 = time.time()
+ def __call__( self):
+ ret = ''
+ if self.date:
+ ret += time.strftime( ' %F')
+ if self.time:
+ ret += time.strftime( ' %T')
+ if self.elapsed:
+ ret += ' (+%s)' % time_duration( time.time() - self.t0, s_format='%.1f')
+ if ret:
+ ret = ret.strip() + ': '
+ return ret
+
+class LogPrefixFileLine:
+ def __call__( self, caller):
+ if isinstance( caller, int):
+ caller = inspect.stack()[ caller]
+ return place( caller) + ' '
+
+class LogPrefixScopes:
+ '''
+ Internal use only.
+ '''
+ def __init__( self):
+ self.items = []
+ def __call__( self):
+ ret = ''
+ for item in self.items:
+ if callable( item):
+ item = item()
+ ret += item
+ return ret
+
+
+class LogPrefixScope:
+ '''
+ Can be used to insert scoped prefix to log output.
+ '''
+ def __init__( self, prefix):
+ g_log_prefixe_scopes.items.append( prefix)
+ def __enter__( self):
+ pass
+ def __exit__( self, exc_type, exc_value, traceback):
+ global g_log_prefix
+ g_log_prefixe_scopes.items.pop()
+
+
+g_log_delta = 0
+
+class LogDeltaScope:
+ '''
+ Can be used to temporarily change verbose level of logging.
+
+ E.g to temporarily increase logging:
+
+ with jlib.LogDeltaScope(-1):
+ ...
+ '''
+ def __init__( self, delta):
+ self.delta = delta
+ global g_log_delta
+ g_log_delta += self.delta
+ def __enter__( self):
+ pass
+ def __exit__( self, exc_type, exc_value, traceback):
+ global g_log_delta
+ g_log_delta -= self.delta
+
+# Special item that can be inserted into <g_log_prefixes> to enable
+# temporary addition of text into log prefixes.
+#
+g_log_prefixe_scopes = LogPrefixScopes()
+
+# List of items that form prefix for all output from log().
+#
+g_log_prefixes = []
+
+
+def log_text( text=None, caller=1, nv=True):
+ '''
+ Returns log text, prepending all lines with text from g_log_prefixes.
+
+ text:
+ The text to output. Each line is prepended with prefix text.
+ caller:
+ If an int, the number of frames to step up when looking for file:line
+ information or evaluating expressions.
+
+ Otherwise should be a frame record as returned by inspect.stack()[].
+ nv:
+ If true, we expand {...} in <text> using expand_nv().
+ '''
+ if isinstance( caller, int):
+ caller += 1
+ prefix = ''
+ for p in g_log_prefixes:
+ if callable( p):
+ if isinstance( p, LogPrefixFileLine):
+ p = p(caller)
+ else:
+ p = p()
+ prefix += p
+
+ if text is None:
+ return prefix
+
+ if nv:
+ text = expand_nv( text, caller)
+
+ if text.endswith( '\n'):
+ text = text[:-1]
+ lines = text.split( '\n')
+
+ text = ''
+ for line in lines:
+ text += prefix + line + '\n'
+ return text
+
+
+
+s_log_levels_cache = dict()
+s_log_levels_items = []
+
+def log_levels_find( caller):
+ if not s_log_levels_items:
+ return 0
+
+ tb = traceback.extract_stack( None, 1+caller)
+ if len(tb) == 0:
+ return 0
+ filename, line, function, text = tb[0]
+
+ key = function, filename, line,
+ delta = s_log_levels_cache.get( key)
+
+ if delta is None:
+ # Calculate and populate cache.
+ delta = 0
+ for item_function, item_filename, item_delta in s_log_levels_items:
+ if item_function and not function.startswith( item_function):
+ continue
+ if item_filename and not filename.startswith( item_filename):
+ continue
+ delta = item_delta
+ break
+
+ s_log_levels_cache[ key] = delta
+
+ return delta
+
+
+def log_levels_add( delta, filename_prefix, function_prefix):
+ '''
+ log() calls from locations with filenames starting with <filename_prefix>
+ and/or function names starting with <function_prefix> will have <delta>
+ added to their level.
+
+ Use -ve delta to increase verbosity from particular filename or function
+ prefixes.
+ '''
+ log( 'adding level: {filename_prefix=!r} {function_prefix=!r}')
+
+ # Sort in reverse order so that long functions and filename specs come
+ # first.
+ #
+ s_log_levels_items.append( (function_prefix, filename_prefix, delta))
+ s_log_levels_items.sort( reverse=True)
+
+
+def log( text, level=0, caller=1, nv=True, out=None):
+ '''
+ Writes log text, with special handling of {<expression>} items in <text>
+ similar to python3's f-strings.
+
+ text:
+ The text to output.
+ caller:
+ How many frames to step up to get caller's context when evaluating
+ file:line information and/or expressions. Or frame record as returned
+ by inspect.stack()[].
+ nv:
+ If true, we expand {...} in <text> using expand_nv().
+ out:
+ Where to send output. If None we use sys.stdout.
+
+ <expression> is evaluated in our caller's context (<n> stack frames up)
+ using eval(), and expanded to <expression> or <expression>=<value>.
+
+ If <expression> ends with '=', this character is removed and we prefix the
+ result with <expression>=.
+
+ E.g.:
+ x = 45
+ y = 'hello'
+ expand_nv( 'foo {x} {y=}')
+ returns:
+ foo 45 y=hello
+
+ <expression> can also use ':' and '!' to control formatting, like
+ str.format().
+ '''
+ if out is None:
+ out = sys.stdout
+ level += g_log_delta
+ if isinstance( caller, int):
+ caller += 1
+ level += log_levels_find( caller)
+ if level <= 0:
+ text = log_text( text, caller, nv=nv)
+ out.write( text)
+ out.flush()
+
+
+def log0( text, caller=1, nv=True, out=None):
+ '''
+ Most verbose log. Same as log().
+ '''
+ log( text, level=0, caller=caller+1, nv=nv, out=out)
+
+def log1( text, caller=1, nv=True, out=None):
+ log( text, level=1, caller=caller+1, nv=nv, out=out)
+
+def log2( text, caller=1, nv=True, out=None):
+ log( text, level=2, caller=caller+1, nv=nv, out=out)
+
+def log3( text, caller=1, nv=True, out=None):
+ log( text, level=3, caller=caller+1, nv=nv, out=out)
+
+def log4( text, caller=1, nv=True, out=None):
+ log( text, level=4, caller=caller+1, nv=nv, out=out)
+
+def log5( text, caller=1, nv=True, out=None):
+ '''
+ Least verbose log.
+ '''
+ log( text, level=5, caller=caller+1, nv=nv, out=out)
+
+def logx( text, caller=1, nv=True, out=None):
+ '''
+ Does nothing, useful when commenting out a log().
+ '''
+ pass
+
+
+def log_levels_add_env( name='JLIB_log_levels'):
+ '''
+ Added log levels encoded in an environmental variable.
+ '''
+ t = os.environ.get( name)
+ if t:
+ for ffll in t.split( ','):
+ ffl, delta = ffll.split( '=', 1)
+ delta = int( delta)
+ ffl = ffl.split( ':')
+ if 0:
+ pass
+ elif len( ffl) == 1:
+ filename = ffl
+ function = None
+ elif len( ffl) == 2:
+ filename, function = ffl
+ else:
+ assert 0
+ log_levels_add( delta, filename, function)
+
+
+def strpbrk( text, substrings):
+ '''
+ Finds first occurrence of any item in <substrings> in <text>.
+
+ Returns (pos, substring) or (len(text), None) if not found.
+ '''
+ ret_pos = len( text)
+ ret_substring = None
+ for substring in substrings:
+ pos = text.find( substring)
+ if pos >= 0 and pos < ret_pos:
+ ret_pos = pos
+ ret_substring = substring
+ return ret_pos, ret_substring
+
+
+def split_first_of( text, substrings):
+ '''
+ Returns (pre, post), where <pre> doesn't contain any item in <substrings>
+ and <post> is empty or starts with an item in <substrings>.
+ '''
+ pos, _ = strpbrk( text, substrings)
+ return text[ :pos], text[ pos:]
+
+
+
+log_levels_add_env()
+
+
+def force_line_buffering():
+ '''
+ Ensure sys.stdout and sys.stderr are line-buffered. E.g. makes things work
+ better if output is piped to a file via 'tee'.
+
+ Returns original out,err streams.
+ '''
+ stdout0 = sys.stdout
+ stderr0 = sys.stderr
+ sys.stdout = os.fdopen( os.dup( sys.stdout.fileno()), 'w', 1)
+ sys.stderr = os.fdopen( os.dup( sys.stderr.fileno()), 'w', 1)
+ return stdout0, stderr0
+
+
+def exception_info( exception=None, limit=None, out=None, prefix='', oneline=False):
+ '''
+ General replacement for traceback.* functions that print/return information
+ about exceptions. This function provides a simple way of getting the
+ functionality provided by these traceback functions:
+
+ traceback.format_exc()
+ traceback.format_exception()
+ traceback.print_exc()
+ traceback.print_exception()
+
+ Returns:
+ A string containing description of specified exception and backtrace.
+
+ Inclusion of outer frames:
+ We improve upon traceback.* in that we also include stack frames above
+ the point at which an exception was caught - frames from the top-level
+ <module> or thread creation fn to the try..catch block, which makes
+ backtraces much more useful.
+
+ Google 'sys.exc_info backtrace incomplete' for more details.
+
+ We deliberately leave a slightly curious pair of items in the backtrace
+ - the point in the try: block that ended up raising an exception, and
+ the point in the associated except: block from which we were called.
+
+ For clarity, we insert an empty frame in-between these two items, so
+ that one can easily distinguish the two parts of the backtrace.
+
+ So the backtrace looks like this:
+
+ root (e.g. <module> or /usr/lib/python2.7/threading.py:778:__bootstrap():
+ ...
+ file:line in the except: block where the exception was caught.
+ ::(): marker
+ file:line in the try: block.
+ ...
+ file:line where the exception was raised.
+
+ The items after the ::(): marker are the usual items that traceback.*
+ shows for an exception.
+
+ Also the backtraces that are generated are more concise than those provided
+ by traceback.* - just one line per frame instead of two - and filenames are
+ output relative to the current directory if applicatble. And one can easily
+ prefix all lines with a specified string, e.g. to indent the text.
+
+ Returns a string containing backtrace and exception information, and sends
+ returned string to <out> if specified.
+
+ exception:
+ None, or a (type, value, traceback) tuple, e.g. from sys.exc_info(). If
+ None, we call sys.exc_info() and use its return value.
+ limit:
+ None or maximum number of stackframes to output.
+ out:
+ None or callable taking single <text> parameter or object with a
+ 'write' member that takes a single <text> parameter.
+ prefix:
+ Used to prefix all lines of text.
+ '''
+ if exception is None:
+ exception = sys.exc_info()
+ etype, value, tb = exception
+
+ if sys.version_info[0] == 2:
+ out2 = io.BytesIO()
+ else:
+ out2 = io.StringIO()
+ try:
+
+ frames = []
+
+ # Get frames above point at which exception was caught - frames
+ # starting at top-level <module> or thread creation fn, and ending
+ # at the point in the catch: block from which we were called.
+ #
+ # These frames are not included explicitly in sys.exc_info()[2] and are
+ # also omitted by traceback.* functions, which makes for incomplete
+ # backtraces that miss much useful information.
+ #
+ for f in reversed(inspect.getouterframes(tb.tb_frame)):
+ ff = f[1], f[2], f[3], f[4][0].strip()
+ frames.append(ff)
+
+ if 1:
+ # It's useful to see boundary between upper and lower frames.
+ frames.append( None)
+
+ # Append frames from point in the try: block that caused the exception
+ # to be raised, to the point at which the exception was thrown.
+ #
+ # [One can get similar information using traceback.extract_tb(tb):
+ # for f in traceback.extract_tb(tb):
+ # frames.append(f)
+ # ]
+ for f in inspect.getinnerframes(tb):
+ ff = f[1], f[2], f[3], f[4][0].strip()
+ frames.append(ff)
+
+ cwd = os.getcwd() + os.sep
+ if oneline:
+ if etype and value:
+ # The 'exception_text' variable below will usually be assigned
+ # something like '<ExceptionType>: <ExceptionValue>', unless
+ # there was no explanatory text provided (e.g. "raise Exception()").
+ # In this case, str(value) will evaluate to ''.
+ exception_text = traceback.format_exception_only(etype, value)[0].strip()
+ filename, line, fnname, text = frames[-1]
+ if filename.startswith(cwd):
+ filename = filename[len(cwd):]
+ if not str(value):
+ # The exception doesn't have any useful explanatory text
+ # (for example, maybe it was raised by an expression like
+ # "assert <expression>" without a subsequent comma). In
+ # the absence of anything more helpful, print the code that
+ # raised the exception.
+ exception_text += ' (%s)' % text
+ line = '%s%s at %s:%s:%s()' % (prefix, exception_text, filename, line, fnname)
+ out2.write(line)
+ else:
+ out2.write( '%sBacktrace:\n' % prefix)
+ for frame in frames:
+ if frame is None:
+ out2.write( '%s ^except raise:\n' % prefix)
+ continue
+ filename, line, fnname, text = frame
+ if filename.startswith( cwd):
+ filename = filename[ len(cwd):]
+ if filename.startswith( './'):
+ filename = filename[ 2:]
+ out2.write( '%s %s:%s:%s(): %s\n' % (
+ prefix, filename, line, fnname, text))
+
+ if etype and value:
+ out2.write( '%sException:\n' % prefix)
+ lines = traceback.format_exception_only( etype, value)
+ for line in lines:
+ out2.write( '%s %s' % ( prefix, line))
+
+ text = out2.getvalue()
+
+ # Write text to <out> if specified.
+ out = getattr( out, 'write', out)
+ if callable( out):
+ out( text)
+ return text
+
+ finally:
+ # clear things to avoid cycles.
+ exception = None
+ etype = None
+ value = None
+ tb = None
+ frames = None
+
+
+def number_sep( s):
+ '''
+ Simple number formatter, adds commas in-between thousands. <s> can
+ be a number or a string. Returns a string.
+ '''
+ if not isinstance( s, str):
+ s = str( s)
+ c = s.find( '.')
+ if c==-1: c = len(s)
+ end = s.find('e')
+ if end == -1: end = s.find('E')
+ if end == -1: end = len(s)
+ ret = ''
+ for i in range( end):
+ ret += s[i]
+ if i<c-1 and (c-i-1)%3==0:
+ ret += ','
+ elif i>c and i<end-1 and (i-c)%3==0:
+ ret += ','
+ ret += s[end:]
+ return ret
+
+assert number_sep(1)=='1'
+assert number_sep(12)=='12'
+assert number_sep(123)=='123'
+assert number_sep(1234)=='1,234'
+assert number_sep(12345)=='12,345'
+assert number_sep(123456)=='123,456'
+assert number_sep(1234567)=='1,234,567'
+
+
+class Stream:
+ '''
+ Base layering abstraction for streams - abstraction for things like
+ sys.stdout to allow prefixing of all output, e.g. with a timestamp.
+ '''
+ def __init__( self, stream):
+ self.stream = stream
+ def write( self, text):
+ self.stream.write( text)
+
+class StreamPrefix:
+ '''
+ Prefixes output with a prefix, which can be a string or a callable that
+ takes no parameters and return a string.
+ '''
+ def __init__( self, stream, prefix):
+ self.stream = stream
+ self.at_start = True
+ if callable(prefix):
+ self.prefix = prefix
+ else:
+ self.prefix = lambda : prefix
+
+ def write( self, text):
+ if self.at_start:
+ text = self.prefix() + text
+ self.at_start = False
+ append_newline = False
+ if text.endswith( '\n'):
+ text = text[:-1]
+ self.at_start = True
+ append_newline = True
+ text = text.replace( '\n', '\n%s' % self.prefix())
+ if append_newline:
+ text += '\n'
+ self.stream.write( text)
+
+ def flush( self):
+ self.stream.flush()
+
+
+def debug( text):
+ if callable(text):
+ text = text()
+ print( text)
+
+debug_periodic_t0 = [0]
+def debug_periodic( text, override=0):
+ interval = 10
+ t = time.time()
+ if t - debug_periodic_t0[0] > interval or override:
+ debug_periodic_t0[0] = t
+ debug(text)
+
+
+def time_duration( seconds, verbose=False, s_format='%i'):
+ '''
+ Returns string expressing an interval.
+
+ seconds:
+ The duration in seconds
+ verbose:
+ If true, return like '4 days 1 hour 2 mins 23 secs', otherwise as
+ '4d3h2m23s'.
+ s_format:
+ If specified, use as printf-style format string for seconds.
+ '''
+ x = abs(seconds)
+ ret = ''
+ i = 0
+ for div, text in [
+ ( 60, 'sec'),
+ ( 60, 'min'),
+ ( 24, 'hour'),
+ ( None, 'day'),
+ ]:
+ force = ( x == 0 and i == 0)
+ if div:
+ remainder = x % div
+ x = int( x/div)
+ else:
+ remainder = x
+ if not verbose:
+ text = text[0]
+ if remainder or force:
+ if verbose and remainder > 1:
+ # plural.
+ text += 's'
+ if verbose:
+ text = ' %s ' % text
+ if i == 0:
+ remainder = s_format % remainder
+ ret = '%s%s%s' % ( remainder, text, ret)
+ i += 1
+ ret = ret.strip()
+ if ret == '':
+ ret = '0s'
+ if seconds < 0:
+ ret = '-%s' % ret
+ return ret
+
+assert time_duration( 303333) == '3d12h15m33s'
+assert time_duration( 303333.33, s_format='%.1f') == '3d12h15m33.3s'
+assert time_duration( 303333, verbose=True) == '3 days 12 hours 15 mins 33 secs'
+assert time_duration( 303333.33, verbose=True, s_format='%.1f') == '3 days 12 hours 15 mins 33.3 secs'
+
+assert time_duration( 0) == '0s'
+assert time_duration( 0, verbose=True) == '0 sec'
+
+
+def date_time( t=None):
+ if t is None:
+ t = time.time()
+ return time.strftime( "%F-%T", time.gmtime( t))
+
+def stream_prefix_time( stream):
+ '''
+ Returns StreamPrefix that prefixes lines with time and elapsed time.
+ '''
+ t_start = time.time()
+ def prefix_time():
+ return '%s (+%s): ' % (
+ time.strftime( '%T'),
+ time_duration( time.time() - t_start, s_format='0.1f'),
+ )
+ return StreamPrefix( stream, prefix_time)
+
+def stdout_prefix_time():
+ '''
+ Changes sys.stdout to prefix time and elapsed time; returns original
+ sys.stdout.
+ '''
+ ret = sys.stdout
+ sys.stdout = stream_prefix_time( sys.stdout)
+ return ret
+
+
+def make_stream( out):
+ '''
+ If <out> already has a .write() member, returns <out>.
+
+ Otherwise a stream-like object with a .write() method that writes to <out>.
+
+ out:
+ Where output is sent.
+ If None, output is lost.
+ Otherwise if an integer, we do: os.write( out, text)
+ Otherwise if callable, we do: out( text)
+ Otherwise we assume <out> is python stream or similar already.
+ '''
+ if getattr( out, 'write', None):
+ return out
+ class Ret:
+ def flush():
+ pass
+ ret = Ret()
+ if out is None:
+ ret.write = lambda text: None
+ elif isinstance( out, int):
+ ret.write = lambda text: os.write( out, text)
+ elif callable( out):
+ ret.write = out
+ else:
+ ret.write = lambda text: out.write( text)
+ return ret
+
+
+def system_raw(
+ command,
+ out=None,
+ shell=True,
+ encoding='latin_1',
+ errors='strict',
+ buffer_len=-1,
+ ):
+ '''
+ Runs command, writing output to <out> which can be an int fd, a python
+ stream or a Stream object.
+
+ Args:
+ command:
+ The command to run.
+ out:
+ Where output is sent.
+ If None, output is lost.
+ If -1, output is sent to stdout and stderr.
+ Otherwise if an integer, we do: os.write( out, text)
+ Otherwise if callable, we do: out( text)
+ Otherwise we assume <out> is python stream or similar, and do: out.write(text)
+ shell:
+ Whether to run command inside a shell (see subprocess.Popen).
+ encoding:
+ Sepecify the encoding used to translate the command's output
+ to characters.
+
+ Note that if <encoding> is None and we are being run by python3,
+ <out> will be passed bytes, not a string.
+
+ Note that latin_1 will never raise a UnicodeDecodeError.
+ errors:
+ How to handle encoding errors; see docs for codecs module for
+ details.
+ buffer_len:
+ The number of bytes we attempt to read at a time. If -1 we read
+ output one line at a time.
+
+ Returns:
+ subprocess's <returncode>, i.e. -N means killed by signal N, otherwise
+ the exit value (e.g. 12 if command terminated with exit(12)).
+ '''
+ if out == -1:
+ stdin = 0
+ stdout = 1
+ stderr = 2
+ else:
+ stdin = None
+ stdout = subprocess.PIPE
+ stderr = subprocess.STDOUT
+ child = subprocess.Popen(
+ command,
+ shell=shell,
+ stdin=stdin,
+ stdout=stdout,
+ stderr=stderr,
+ close_fds=True,
+ #encoding=encoding - only python-3.6+.
+ )
+
+ child_out = child.stdout
+ if encoding:
+ child_out = codecs.getreader( encoding)( child_out, errors)
+
+ out = make_stream( out)
+
+ if stdout == subprocess.PIPE:
+ if buffer_len == -1:
+ for line in child_out:
+ out.write( line)
+ else:
+ while 1:
+ text = child_out.read( buffer_len)
+ if not text:
+ break
+ out.write( text)
+ #decode( lambda : os.read( child_out.fileno(), 100), outfn, encoding)
+
+ return child.wait()
+
+if __name__ == '__main__':
+
+ if os.getenv( 'jtest_py_system_raw_test') == '1':
+ out = io.StringIO()
+ system_raw(
+ 'jtest_py_system_raw_test=2 python jlib.py',
+ sys.stdout,
+ encoding='utf-8',
+ #'latin_1',
+ errors='replace',
+ )
+ print( repr( out.getvalue()))
+
+ elif os.getenv( 'jtest_py_system_raw_test') == '2':
+ for i in range(256):
+ sys.stdout.write( chr(i))
+
+
+def system(
+ command,
+ verbose=None,
+ raise_errors=True,
+ out=None,
+ prefix=None,
+ rusage=False,
+ shell=True,
+ encoding=None,
+ errors='replace',
+ buffer_len=-1,
+ ):
+ '''
+ Runs a command like os.system() or subprocess.*, but with more flexibility.
+
+ We give control over where the command's output is sent, whether to return
+ the output and/or exit code, and whether to raise an exception if the
+ command fails.
+
+ We also support the use of /usr/bin/time to gather rusage information.
+
+ command:
+ The command to run.
+ verbose:
+ If true, we output information about the command that we run, and
+ its result.
+
+ If callable or something with a .write() method, information is
+ sent to <verbose> itself. Otherwise it is sent to <out> (without
+ applying <prefix>).
+ raise_errors:
+ If true, we raise an exception if the command fails, otherwise we
+ return the failing error code or zero.
+ out:
+ Python stream, fd, callable or Stream instance to which output is
+ sent.
+
+ If <out> is 'return', we buffer the output and return (e,
+ <output>). Note that if raise_errors is true, we only return if <e>
+ is zero.
+
+ If -1, output is sent to stdout and stderr.
+ prefix:
+ If not None, should be prefix string or callable used to prefix
+ all output. [This is for convenience to avoid the need to do
+ out=StreamPrefix(...).]
+ rusage:
+ If true, we run via /usr/bin/time and return rusage string
+ containing information on execution. <raise_errors> and
+ out='return' are ignored.
+ shell:
+ Passed to underlying subprocess.Popen() call.
+ encoding:
+ Sepecify the encoding used to translate the command's output
+ to characters. Defaults to utf-8.
+ errors:
+ How to handle encoding errors; see docs for codecs module
+ for details. Defaults to 'replace' so we never raise a
+ UnicodeDecodeError.
+ buffer_len:
+ The number of bytes we attempt to read at a time. If -1 we read
+ output one line at a time.
+
+ Returns:
+ If <rusage> is true, we return the rusage text.
+
+ Else if raise_errors is true:
+ If the command failed, we raise an exception.
+ Else if <out> is 'return' we return the text output from the command.
+ Else we return None
+
+ Else if <out> is 'return', we return (e, text) where <e> is the
+ command's exit code and <text> is the output from the command.
+
+ Else we return <e>, the command's exit code.
+ '''
+ if encoding is None:
+ if sys.version_info[0] == 2:
+ # python-2 doesn't seem to implement 'replace' properly.
+ encoding = None
+ errors = None
+ else:
+ encoding = 'utf-8'
+ errors = 'replace'
+
+ out_original = out
+ if out is None:
+ out = sys.stdout
+ elif out == 'return':
+ # Store the output ourselves so we can return it.
+ out = io.StringIO()
+ else:
+ out = make_stream( out)
+
+ if verbose:
+ if getattr( verbose, 'write', None):
+ pass
+ elif callable( verbose):
+ verbose = make_stream( verbose)
+ else:
+ verbose = out
+
+ if prefix:
+ out = StreamPrefix( out, prefix)
+
+ if verbose:
+ verbose.write( 'running: %s\n' % command)
+
+ if rusage:
+ command2 = ''
+ command2 += '/usr/bin/time -o ubt-out -f "D=%D E=%D F=%F I=%I K=%K M=%M O=%O P=%P R=%r S=%S U=%U W=%W X=%X Z=%Z c=%c e=%e k=%k p=%p r=%r s=%s t=%t w=%w x=%x C=%C"'
+ command2 += ' '
+ command2 += command
+ system_raw( command2, out, shell, encoding, errors, buffer_len=buffer_len)
+ with open('ubt-out') as f:
+ rusage_text = f.read()
+ #print 'have read rusage output: %r' % rusage_text
+ if rusage_text.startswith( 'Command '):
+ # Annoyingly, /usr/bin/time appears to write 'Command
+ # exited with ...' or 'Command terminated by ...' to the
+ # output file before the rusage info if command doesn't
+ # exit 0.
+ nl = rusage_text.find('\n')
+ rusage_text = rusage_text[ nl+1:]
+ return rusage_text
+ else:
+ e = system_raw( command, out, shell, encoding, errors, buffer_len=buffer_len)
+
+ if verbose:
+ verbose.write( '[returned e=%s]\n' % e)
+
+ if raise_errors:
+ if e:
+ raise Exception( 'command failed: %s' % command)
+ if out_original == 'return':
+ return out.getvalue()
+ return
+
+ if out_original == 'return':
+ return e, out.getvalue()
+ return e
+
+def get_gitfiles( directory, submodules=False):
+ '''
+ Returns list of all files known to git in <directory>; <directory> must be
+ somewhere within a git checkout.
+
+ Returned names are all relative to <directory>.
+
+ If .git directory, we also create <directory>/jtest-git-files. Otherwise we
+ assume a this file already exists.
+ '''
+ if os.path.isdir( '%s/.git' % directory):
+ command = 'cd ' + directory + ' && git ls-files'
+ if submodules:
+ command += ' --recurse-submodules'
+ command += ' > jtest-git-files'
+ system( command, verbose=sys.stdout)
+
+ with open( '%s/jtest-git-files' % directory, 'r') as f:
+ text = f.read()
+ ret = text.split( '\n')
+ return ret
+
+def get_git_id_raw( directory):
+ if not os.path.isdir( '%s/.git' % directory):
+ return
+ text = system(
+ f'cd {directory} && (PAGER= git show --pretty=oneline|head -n 1 && git diff)',
+ out='return',
+ )
+ return text
+
+def get_git_id( directory, allow_none=False):
+ '''
+ Returns text where first line is '<git-sha> <commit summary>' and remaining
+ lines contain output from 'git diff' in <directory>.
+
+ directory:
+ Root of git checkout.
+ allow_none:
+ If true, we return None if <directory> is not a git checkout and
+ jtest-git-id file does not exist.
+ '''
+ filename = f'{directory}/jtest-git-id'
+ text = get_git_id_raw( directory)
+ if text:
+ with open( filename, 'w') as f:
+ f.write( text)
+ elif os.path.isfile( filename):
+ with open( filename) as f:
+ text = f.read()
+ else:
+ if not allow_none:
+ raise Exception( f'Not in git checkout, and no file {filename}.')
+ text = None
+ return text
+
+class Args:
+ '''
+ Iterates over argv items. Does getopt-style splitting of args starting with
+ single '-' character.
+ '''
+ def __init__( self, argv):
+ self.argv = argv
+ self.pos = 0
+ self.pos_sub = None
+ def next( self):
+ while 1:
+ if self.pos >= len(self.argv):
+ raise StopIteration()
+ arg = self.argv[self.pos]
+ if (not self.pos_sub
+ and arg.startswith('-')
+ and not arg.startswith('--')
+ ):
+ # Start splitting current arg.
+ self.pos_sub = 1
+ if self.pos_sub and self.pos_sub >= len(arg):
+ # End of '-' sub-arg.
+ self.pos += 1
+ self.pos_sub = None
+ continue
+ if self.pos_sub:
+ # Return '-' sub-arg.
+ ret = arg[self.pos_sub]
+ self.pos_sub += 1
+ return f'-{ret}'
+ # Return normal arg.
+ self.pos += 1
+ return arg
+
+def update_file( text, filename):
+ '''
+ Writes <text> to <filename>. Does nothing if contents of <filename> are
+ already <text>.
+ '''
+ try:
+ with open( filename) as f:
+ text0 = f.read()
+ except OSError:
+ text0 = None
+ if text == text0:
+ log( 'Unchanged: ' + filename)
+ else:
+ log( 'Updating: ' + filename)
+ # Write to temp file and rename, to ensure we are atomic.
+ filename_temp = f'{filename}-jlib-temp'
+ with open( filename_temp, 'w') as f:
+ f.write( text)
+ os.rename( filename_temp, filename)
+
+
+def mtime( filename, default=0):
+ '''
+ Returns mtime of file, or <default> if error - e.g. doesn't exist.
+ '''
+ try:
+ return os.path.getmtime( filename)
+ except OSError:
+ return default
+
+def get_filenames( paths):
+ '''
+ Yields each file in <paths>, walking any directories.
+ '''
+ if isinstance( paths, str):
+ paths = (paths,)
+ for name in paths:
+ if os.path.isdir( name):
+ for dirpath, dirnames, filenames in os.walk( name):
+ for filename in filenames:
+ path = os.path.join( dirpath, filename)
+ yield path
+ else:
+ yield name
+
+def remove( path):
+ '''
+ Removes file or directory, without raising exception if it doesn't exist.
+
+ We assert-fail if the path still exists when we return, in case of
+ permission problems etc.
+ '''
+ try:
+ os.remove( path)
+ except Exception:
+ pass
+ shutil.rmtree( path, ignore_errors=1)
+ assert not os.path.exists( path)
+
+
+# Things for figuring out whether files need updating, using mtimes.
+#
+def newest( names):
+ '''
+ Returns mtime of newest file in <filenames>. Returns 0 if no file exists.
+ '''
+ assert isinstance( names, (list, tuple))
+ assert names
+ ret_t = 0
+ ret_name = None
+ for filename in get_filenames( names):
+ t = mtime( filename)
+ if t > ret_t:
+ ret_t = t
+ ret_name = filename
+ return ret_t, ret_name
+
+def oldest( names):
+ '''
+ Returns mtime of oldest file in <filenames> or 0 if no file exists.
+ '''
+ assert isinstance( names, (list, tuple))
+ assert names
+ ret_t = None
+ ret_name = None
+ for filename in get_filenames( names):
+ t = mtime( filename)
+ if ret_t is None or t < ret_t:
+ ret_t = t
+ ret_name = filename
+ if ret_t is None:
+ ret_t = 0
+ return ret_t, ret_name
+
+def update_needed( infiles, outfiles):
+ '''
+ If any file in <infiles> is newer than any file in <outfiles>, returns
+ string description. Otherwise returns None.
+ '''
+ in_tmax, in_tmax_name = newest( infiles)
+ out_tmin, out_tmin_name = oldest( outfiles)
+ if in_tmax > out_tmin:
+ text = f'{in_tmax_name} is newer than {out_tmin_name}'
+ return text
+
+def build(
+ infiles,
+ outfiles,
+ command,
+ force_rebuild=False,
+ out=None,
+ all_reasons=False,
+ verbose=True,
+ prefix=None,
+ ):
+ '''
+ Ensures that <outfiles> are up to date using enhanced makefile-like
+ determinism of dependencies.
+
+ Rebuilds <outfiles> by running <command> if we determine that any of them
+ are out of date.
+
+ infiles:
+ Names of files that are read by <command>. Can be a single filename. If
+ an item is a directory, we expand to all filenames in the directory's
+ tree.
+ outfiles:
+ Names of files that are written by <command>. Can also be a single
+ filename.
+ command:
+ Command to run.
+ force_rebuild:
+ If true, we always re-run the command.
+ out:
+ A callable, passed to jlib.system(). If None, we use jlib.log() with
+ our caller's stack record.
+ all_reasons:
+ If true we check all ways for a build being needed, even if we already
+ know a build is needed; this only affects the diagnostic that we
+ output.
+ verbose:
+ Passed to jlib.system().
+ prefix:
+ Passed to jlib.system().
+
+ We compare mtimes of <infiles> and <outfiles>, and we also detect changes
+ to the command itself.
+
+ If any of infiles are newer than any of outfiles, or <command> is
+ different to contents of commandfile '<outfile[0]>.cmd, then truncates
+ commandfile and runs <command>. If <command> succeeds we writes <command>
+ to commandfile.
+ '''
+ if isinstance( infiles, str):
+ infiles = (infiles,)
+ if isinstance( outfiles, str):
+ infiles = (outfiles,)
+
+ if not out:
+ out_frame_record = inspect.stack()[1]
+ out = lambda text: log( text, nv=0, caller=out_frame_record)
+
+ command_filename = f'{outfiles[0]}.cmd'
+
+ reasons = []
+
+ if not reasons or all_reasons:
+ if force_rebuild:
+ reasons.append( 'force_rebuild was specified')
+
+ if not reasons or all_reasons:
+ try:
+ with open( command_filename) as f:
+ command0 = f.read()
+ except Exception:
+ command0 = None
+ if command != command0:
+ if command0:
+ reasons.append( 'command has changed')
+ else:
+ reasons.append( 'no previous command')
+
+ if not reasons or all_reasons:
+ reason = update_needed( infiles, outfiles)
+ if reason:
+ reasons.append( reason)
+
+ if not reasons:
+ out( 'Already up to date: ' + ' '.join(outfiles))
+ return
+
+ if out:
+ out( 'Rebuilding because %s: %s' % (
+ ', and '.join( reasons),
+ ' '.join(outfiles),
+ ))
+
+ # Empty <command_filename) while we run the command so that if command
+ # fails but still creates target(s), then next time we will know target(s)
+ # are not up to date.
+ #
+ with open( command_filename, 'w') as f:
+ pass
+
+ system( command, out=out, verbose=verbose, prefix=prefix)
+
+ with open( command_filename, 'w') as f:
+ f.write( command)
+
+
+def link_l_flags( sos):
+ '''
+ Returns flags needed to link with items in <sos>. For each unique item we
+ use -L with parent directory, and -l with embedded name (without leading
+ 'lib' or trailing '.co').
+ '''
+ dirs = set()
+ names = []
+ if isinstance( sos, str):
+ sos = (sos,)
+ for so in sos:
+ dir_ = os.path.dirname( so)
+ name = os.path.basename( so)
+ assert name.startswith( 'lib')
+ assert name.endswith ( '.so')
+ name = name[3:-3]
+ dirs.add( dir_)
+ names.append( name)
+ ret = ''
+ # Important to use sorted() here, otherwise ordering from set() is
+ # arbitrary causing occasional spurious rebuilds by jlib.build().
+ for dir_ in sorted(dirs):
+ ret += f' -L {dir_}'
+ for name in names:
+ ret += f' -l {name}'
+ return ret
diff --git a/devices/contrib.mak b/devices/dcontrib.mak
index 7f1cf863..975c68bd 100644
--- a/devices/contrib.mak
+++ b/devices/dcontrib.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -16,7 +16,7 @@
# makefile for contributed device drivers.
# Define the name of this makefile.
-DCONTRIB_MAK=$(DEVSRC)contrib.mak $(TOP_MAKEFILES)
+DCONTRIB_MAK=$(DEVSRC)dcontrib.mak $(TOP_MAKEFILES)
###### --------------------------- Catalog -------------------------- ######
@@ -82,7 +82,7 @@ DCONTRIB_MAK=$(DEVSRC)contrib.mak $(TOP_MAKEFILES)
# okiibm Okidata MicroLine IBM-compatible printers
# paintjet alternate H-P PaintJet color printer
# photoex Epson Stylus Color Photo, Photo EX, Photo 700
-# pj H-P PaintJet XL driver
+# pj H-P PaintJet XL driver
# pjetxl alternate H-P PaintJet XL driver
# pjxl H-P PaintJet XL color printer
# pjxl300 H-P PaintJet XL300 color printer;
@@ -427,7 +427,7 @@ $(DD)paintjet.dev : $(PJET) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(DD)pjetxl.dev : $(PJET) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)pjetxl $(PJET)
-###--------------------- The Brother HL 7x0 printer --------------------- ###
+###--------------------- The Brother HL 7x0 printer --------------------- ###
### Note: this driver was contributed by users: please contact ###
### Pierre-Olivier Gaillard (pierre.gaillard@hol.fr) ###
### for questions about the basic driver; ###
@@ -754,305 +754,305 @@ $(DEVSRC)gdevmeds.h:$(GLSRC)gxclthrd.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxclpage.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxclist.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxline.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gstrans.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gdevp14.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxline.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxcomp.h
$(DEVSRC)gdevmeds.h:$(GLSRC)math_.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxpcolor.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxdevmem.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gdevdevn.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gx.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxclipsr.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxcomp.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gdebug.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxmatrix.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxdevbuf.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxband.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gscolor2.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxmatrix.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsht.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxcpath.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxpcache.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxcmap.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gscie.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gspcolor.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxfcache.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsropt.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxfmap.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsmalloc.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsuid.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsimage.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxdda.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsfont.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxpath.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsdevice.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxstdio.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxbitfmt.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxstdio.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxclio.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsrefct.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gp.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsccolor.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsstruct.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)memento.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)memory_.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsutil.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsuid.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsstrl.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gdbflags.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxsync.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gserrors.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)scommon.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)memento.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxbitmap.h
$(DEVSRC)gdevmeds.h:$(GLSRC)vmsmath.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)scommon.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxarith.h
$(DEVSRC)gdevmeds.h:$(GLSRC)stat_.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gpgetenv.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gscdefs.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsccode.h
$(DEVSRC)gdevmeds.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)std.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)std.h
$(DEVSRC)gdevmeds.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevmeds.h:$(GLGEN)arch.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gdevstc.h:$(GLSRC)gdevprn.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsstate.h
$(DEVSRC)gdevstc.h:$(GLSRC)string_.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsstrtok.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsovrc.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsstate.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxclthrd.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsovrc.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxclpage.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxclist.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxline.h
$(DEVSRC)gdevstc.h:$(GLSRC)gstrans.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gdevp14.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxline.h
$(DEVSRC)gdevstc.h:$(GLSRC)gscolor.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsline.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxcomp.h
$(DEVSRC)gdevstc.h:$(GLSRC)math_.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxpcolor.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxdevmem.h
$(DEVSRC)gdevstc.h:$(GLSRC)gdevdevn.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevstc.h:$(GLSRC)gx.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxclipsr.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxcomp.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsline.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevstc.h:$(GLSRC)gdebug.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxmatrix.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxdevbuf.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxband.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevstc.h:$(GLSRC)gscolor2.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxmatrix.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsht.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxcpath.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxpcache.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxcmap.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevstc.h:$(GLSRC)gscie.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevstc.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevstc.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevstc.h:$(GLSRC)gspcolor.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxfcache.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsropt.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxfmap.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsmalloc.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsuid.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsimage.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxdda.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsfont.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxpath.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevstc.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsdevice.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxstdio.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevstc.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxbitfmt.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxstdio.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxclio.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsrefct.h
$(DEVSRC)gdevstc.h:$(GLSRC)gp.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsccolor.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsstruct.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevstc.h:$(GLSRC)memento.h
+$(DEVSRC)gdevstc.h:$(GLSRC)memory_.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsutil.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsuid.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsstrl.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevstc.h:$(GLSRC)gdbflags.h
-$(DEVSRC)gdevstc.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxsync.h
$(DEVSRC)gdevstc.h:$(GLSRC)gserrors.h
-$(DEVSRC)gdevstc.h:$(GLSRC)scommon.h
-$(DEVSRC)gdevstc.h:$(GLSRC)memento.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxbitmap.h
$(DEVSRC)gdevstc.h:$(GLSRC)vmsmath.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevstc.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevstc.h:$(GLSRC)scommon.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxarith.h
$(DEVSRC)gdevstc.h:$(GLSRC)stat_.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevstc.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevstc.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevstc.h:$(GLSRC)gpgetenv.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevstc.h:$(GLSRC)gscdefs.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevstc.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevstc.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsccode.h
$(DEVSRC)gdevstc.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevstc.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevstc.h:$(GLSRC)std.h
$(DEVSRC)gdevstc.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevstc.h:$(GLSRC)std.h
$(DEVSRC)gdevstc.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevstc.h:$(GLGEN)arch.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxdevcli.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxcmap.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gstext.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxfcache.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxfmap.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsuid.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsimage.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxdda.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsfont.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxftype.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxpath.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsdevice.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsgstate.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsdsrc.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsrefct.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gp.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)memento.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsuid.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxbitmap.h
$(DEVSRC)gdevmgr.h:$(GLSRC)srdline.h
$(DEVSRC)gdevmgr.h:$(GLSRC)scommon.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)memento.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gscsel.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsbitmap.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxarith.h
$(DEVSRC)gdevmgr.h:$(GLSRC)stat_.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gpgetenv.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gscdefs.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsccode.h
$(DEVSRC)gdevmgr.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)std.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)std.h
$(DEVSRC)gdevmgr.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevmgr.h:$(GLGEN)arch.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gs_dll_call.h
diff --git a/devices/devs.mak b/devices/devs.mak
index a9c6ec18..5526a907 100644
--- a/devices/devs.mak
+++ b/devices/devs.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -295,7 +295,7 @@ $(DD)display.dev : $(display_) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
$(DEVOBJ)gdevdsp.$(OBJ) : $(DEVSRC)gdevdsp.c $(string__h) $(gdevkrnlsclass_h)\
$(gp_h) $(gpcheck_h) $(gdevpccm_h) $(gsparam_h) $(gsdevice_h)\
$(GDEVH) $(gxdevmem_h) $(gdevdevn_h) $(gsequivc_h) $(gdevdsp_h) $(gdevdsp2_h) \
- $(DEVS_MAK) $(MAKEDIRS)
+ $(gsicc_manage_h) $(DEVS_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevdsp.$(OBJ) $(C_) $(DEVSRC)gdevdsp.c
### -------------------------- The X11 device -------------------------- ###
@@ -1455,6 +1455,28 @@ $(DD)pamcmyk32.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
$(DD)pam.dev : $(pxm_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)pam $(pxm_)
+### --------------- OCR device --------------- ###
+
+ocr_=$(DEVOBJ)gdevocr.$(OBJ)
+libocr_dev=$(DEVOBJ)libocr.dev
+ocr_i_=-include $(DEVOBJ)libocr
+
+$(DEVOBJ)gdevocr.$(OBJ) : $(DEVSRC)gdevocr.c\
+ $(gdevprn_h) $(gdevpccm_h) $(gscdefs_h) $(ocr__h) $(DEVS_MAK) $(MAKEDIRS)
+ $(CC_) $(I_)$(DEVI_) $(II)$(PI_)$(_I) $(PCF_) $(GLF_) $(DEVO_)gdevocr.$(OBJ) $(C_) $(DEVSRC)gdevocr.c
+
+$(DD)ocr.dev : $(libocr_dev) $(ocr_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+ $(SETPDEV2) $(DD)ocr $(ocr_)
+ $(ADDMOD) $(DD)ocr $(ocr_i_)
+
+### --------------- OCR device --------------- ###
+
+$(DD)hocr.dev : $(libocr_dev) $(hocr_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+ $(SETPDEV2) $(DD)hocr $(hocr_)
+ $(ADDMOD) $(DD)hocr $(hocr_i_)
+
### --------------- Portable Network Graphics file format --------------- ###
### Requires libpng 0.81 and zlib 0.95 (or more recent versions). ###
### See png.mak and zlib.mak for more details. ###
@@ -1464,7 +1486,7 @@ libpng_dev=$(PNGGENDIR)$(D)libpng.dev
png_i_=-include $(PNGGENDIR)$(D)libpng
$(DEVOBJ)gdevpng.$(OBJ) : $(DEVSRC)gdevpng.c\
- $(gdevprn_h) $(gdevpccm_h) $(gscdefs_h) $(png__h) $(DEVS_MAK) $(MAKEDIRS)
+ $(gdevprn_h) $(gdevpccm_h) $(gscdefs_h) $(png__h) $(gxdevsop_h) $(DEVS_MAK) $(MAKEDIRS)
$(CC_) $(I_)$(DEVI_) $(II)$(PI_)$(_I) $(PCF_) $(GLF_) $(DEVO_)gdevpng.$(OBJ) $(C_) $(DEVSRC)gdevpng.c
$(DD)pngmono.dev : $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \
@@ -1915,6 +1937,9 @@ $(DEVOBJ)gdevcmykog.$(OBJ) : $(DEVSRC)gdevcmykog.c $(GDEV) \
$(DEVCC) $(DEVO_)gdevcmykog.$(OBJ) $(C_) $(DEVSRC)gdevcmykog.c
### -------- PDF as an image downscaled device --------------------- ###
+
+gdevpdfimg_h=$(DEVSRC)gdevpdfimg.h
+
$(DD)pdfimage8.dev : $(DEVOBJ)gdevpdfimg.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)pdfimage8 $(DEVOBJ)gdevpdfimg.$(OBJ)
$(ADDMOD) $(DD)pdfimage8 -include $(GLD)page
@@ -1932,11 +1957,31 @@ $(DD)PCLm.dev : $(DEVOBJ)gdevpdfimg.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(
$(ADDMOD) $(DD)PCLm -include $(GLD)page
$(DEVOBJ)gdevpdfimg.$(OBJ) : $(DEVSRC)gdevpdfimg.c $(AK) $(gdevkrnlsclass_h) \
- $(DEVS_MAK) $(MAKEDIRS) $(arch_h) $(stdint__h) $(gdevprn_h) $(gxdownscale_h) \
+ $(DEVS_MAK) $(arch_h) $(stdint__h) $(gdevprn_h) $(gxdownscale_h) \
$(stream_h) $(spprint_h) $(time__h) $(smd5_h) $(sstring_h) $(strimpl_h) \
- $(slzwx_h) $(szlibx_h) $(jpeglib__h) $(sdct_h) $(srlx_h) $(gsicc_cache_h) $(sjpeg_h)
+ $(slzwx_h) $(szlibx_h) $(jpeglib__h) $(sdct_h) $(srlx_h) $(gsicc_cache_h) $(sjpeg_h) $(gdevpdfimg_h) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevpdfimg.$(OBJ) $(C_) $(DEVSRC)gdevpdfimg.c
+### -------- PDF image with OCRd text overlay --------------------- ###
+
+$(DD)pdfocr8.dev : $(DEVOBJ)gdevpdfocr.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+ $(SETPDEV2) $(DD)pdfocr8 $(DEVOBJ)gdevpdfocr.$(OBJ)
+ $(ADDMOD) $(DD)pdfocr8 -include $(GLD)page
+
+$(DD)pdfocr24.dev : $(DEVOBJ)gdevpdfocr.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+ $(SETPDEV2) $(DD)pdfocr24 $(DEVOBJ)gdevpdfocr.$(OBJ)
+ $(ADDMOD) $(DD)pdfocr24 -include $(GLD)page
+
+$(DD)pdfocr32.dev : $(DEVOBJ)gdevpdfocr.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+ $(SETPDEV2) $(DD)pdfocr32 $(DEVOBJ)gdevpdfocr.$(OBJ)
+ $(ADDMOD) $(DD)pdfocr32 -include $(GLD)page
+
+$(DEVOBJ)gdevpdfocr.$(OBJ) : $(DEVSRC)gdevpdfocr.c $(AK) $(gdevkrnlsclass_h) \
+ $(DEVS_MAK) $(MAKEDIRS) $(arch_h) $(stdint__h) $(gdevprn_h) $(gxdownscale_h) \
+ $(stream_h) $(spprint_h) $(time__h) $(smd5_h) $(sstring_h) $(strimpl_h) \
+ $(slzwx_h) $(szlibx_h) $(jpeglib__h) $(sdct_h) $(srlx_h) $(gsicc_cache_h) $(sjpeg_h) $(gdevpdfimg_h)
+ $(DEVCC) $(DEVO_)gdevpdfocr.$(OBJ) $(C_) $(DEVSRC)gdevpdfocr.c
+
### -------- URF device --------------------- ###
urf=$(DEVOBJ)gdevurf.$(OBJ)
$(DD)urfgray.dev : $(urf) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
@@ -1958,227 +2003,227 @@ $(DEVOBJ)gdevurf.$(OBJ) : $(URFSRCDIR)$(D)gdevurf.c $(AK) $(PDEVH) \
# Dependencies:
$(DEVSRC)gxfcopy.h:$(GLSRC)gsfont.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gsgstate.h
$(DEVSRC)gxfcopy.h:$(GLSRC)gsmatrix.h
$(DEVSRC)gxfcopy.h:$(GLSRC)scommon.h
$(DEVSRC)gxfcopy.h:$(GLSRC)gsstype.h
$(DEVSRC)gxfcopy.h:$(GLSRC)gsmemory.h
$(DEVSRC)gxfcopy.h:$(GLSRC)gslibctx.h
-$(DEVSRC)gxfcopy.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gxfcopy.h:$(GLSRC)stdio_.h
-$(DEVSRC)gxfcopy.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gsccode.h
$(DEVSRC)gxfcopy.h:$(GLSRC)stdint_.h
$(DEVSRC)gxfcopy.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gxfcopy.h:$(GLSRC)gsccode.h
-$(DEVSRC)gxfcopy.h:$(GLSRC)std.h
$(DEVSRC)gxfcopy.h:$(GLSRC)gstypes.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)std.h
$(DEVSRC)gxfcopy.h:$(GLSRC)stdpre.h
$(DEVSRC)gxfcopy.h:$(GLGEN)arch.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gdev8bcm.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdev8bcm.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxdevcli.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxcmap.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gstext.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxfcache.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxfmap.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsuid.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsimage.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxdda.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsfont.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxftype.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxpath.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsdevice.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsgstate.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsdsrc.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsrefct.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gp.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)memento.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsuid.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxbitmap.h
$(DEVSRC)gdevpcl.h:$(GLSRC)srdline.h
$(DEVSRC)gdevpcl.h:$(GLSRC)scommon.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)memento.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gscsel.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsbitmap.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxarith.h
$(DEVSRC)gdevpcl.h:$(GLSRC)stat_.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gpgetenv.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gscdefs.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsccode.h
$(DEVSRC)gdevpcl.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)std.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)std.h
$(DEVSRC)gdevpcl.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevpcl.h:$(GLGEN)arch.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsgstate.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsparam.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsstype.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gslibctx.h
-$(DEVVECSRC)gdevpsu.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsgstate.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpsu.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpsu.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gdevprn.h
$(DEVSRC)gdevdljm.h:$(GLSRC)string_.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsstrtok.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxclthrd.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxclpage.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxclist.h
-$(DEVSRC)gdevdljm.h:$(DEVSRC)gdevpcl.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxline.h
+$(DEVSRC)gdevdljm.h:$(DEVSRC)gdevpcl.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gstrans.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gdevp14.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxline.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcomp.h
$(DEVSRC)gdevdljm.h:$(GLSRC)math_.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxpcolor.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevmem.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gdevdevn.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gx.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxclipsr.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxcomp.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gdebug.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxmatrix.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevbuf.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxband.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gscolor2.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxmatrix.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsht.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxcpath.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxpcache.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcmap.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gscie.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gspcolor.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxfcache.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsropt.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxfmap.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsmalloc.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsuid.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsimage.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxdda.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsfont.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxpath.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsdevice.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxstdio.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxbitfmt.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxstdio.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxclio.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsrefct.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gp.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsccolor.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsstruct.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)memento.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)memory_.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsutil.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsuid.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsstrl.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gdbflags.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxsync.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gserrors.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)scommon.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)memento.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxbitmap.h
$(DEVSRC)gdevdljm.h:$(GLSRC)vmsmath.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)scommon.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxarith.h
$(DEVSRC)gdevdljm.h:$(GLSRC)stat_.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gpgetenv.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gscdefs.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsccode.h
$(DEVSRC)gdevdljm.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)std.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)std.h
$(DEVSRC)gdevdljm.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevdljm.h:$(GLGEN)arch.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gdevxcmp.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdevxcmp.h:$(GLSRC)x_.h
$(DEVSRC)gdevxcmp.h:$(GLSRC)std.h
@@ -2187,78 +2232,79 @@ $(DEVSRC)gdevxcmp.h:$(GLGEN)arch.h
$(DEVSRC)gdevx.h:$(GLSRC)gdevbbox.h
$(DEVSRC)gdevx.h:$(DEVSRC)gdevxcmp.h
$(DEVSRC)gdevx.h:$(GLSRC)gxdevcli.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxcmap.h
$(DEVSRC)gdevx.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevx.h:$(GLSRC)gstext.h
$(DEVSRC)gdevx.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevx.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxfcache.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxfmap.h
$(DEVSRC)gdevx.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevx.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsuid.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevx.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevx.h:$(GLSRC)gsimage.h
$(DEVSRC)gdevx.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxdda.h
$(DEVSRC)gdevx.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsfont.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxftype.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxpath.h
$(DEVSRC)gdevx.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevx.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevx.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsdevice.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevx.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxhttile.h
-$(DEVSRC)gdevx.h:$(GLSRC)x_.h
$(DEVSRC)gdevx.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevx.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevx.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevx.h:$(GLSRC)x_.h
+$(DEVSRC)gdevx.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsgstate.h
$(DEVSRC)gdevx.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevx.h:$(GLSRC)gsdsrc.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevx.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevx.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevx.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevx.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevx.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsrefct.h
$(DEVSRC)gdevx.h:$(GLSRC)gp.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevx.h:$(GLSRC)memento.h
+$(DEVSRC)gdevx.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsuid.h
$(DEVSRC)gdevx.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevx.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxbitmap.h
$(DEVSRC)gdevx.h:$(GLSRC)srdline.h
$(DEVSRC)gdevx.h:$(GLSRC)scommon.h
-$(DEVSRC)gdevx.h:$(GLSRC)memento.h
-$(DEVSRC)gdevx.h:$(GLSRC)gscsel.h
$(DEVSRC)gdevx.h:$(GLSRC)gsbitmap.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxarith.h
$(DEVSRC)gdevx.h:$(GLSRC)stat_.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevx.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevx.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevx.h:$(GLSRC)gpgetenv.h
-$(DEVSRC)gdevx.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevx.h:$(GLSRC)gscdefs.h
-$(DEVSRC)gdevx.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevx.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevx.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevx.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevx.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevx.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsccode.h
$(DEVSRC)gdevx.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevx.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevx.h:$(GLSRC)std.h
$(DEVSRC)gdevx.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevx.h:$(GLSRC)std.h
$(DEVSRC)gdevx.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevx.h:$(GLGEN)arch.h
+$(DEVSRC)gdevx.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gsdevice.h
-$(DEVSRC)gdevpxut.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gsgstate.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gsmatrix.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gsparam.h
$(DEVSRC)gdevpxut.h:$(GLSRC)scommon.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gdevpxat.h
@@ -2267,1102 +2313,1101 @@ $(DEVSRC)gdevpxut.h:$(GLSRC)gdevpxop.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gsstype.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gslibctx.h
-$(DEVSRC)gdevpxut.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gdevpxut.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevpxut.h:$(GLSRC)gsgstate.h
$(DEVSRC)gdevpxut.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevpxut.h:$(GLSRC)std.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)std.h
$(DEVSRC)gdevpxut.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevpxut.h:$(GLGEN)arch.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcomp.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcolor2.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcomp.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxmatrix.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpsdf.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)strimpl.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsgstate.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpsds.h:$(GLSRC)gxbitmap.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gxbitmap.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsstype.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gslibctx.h
-$(DEVVECSRC)gdevpsds.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsgstate.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpsds.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpsds.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpdfc.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdfc.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstrans.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)sarc4.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)spprint.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcomp.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)shc.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscindex.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsnotify.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdfc.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpdfg.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdfg.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstrans.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)sarc4.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)spprint.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcomp.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)shc.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscindex.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsnotify.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdfg.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpdfo.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdfo.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstrans.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)sarc4.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)smd5.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)smd5.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcomp.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)shc.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscindex.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsnotify.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsrect.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmd5.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmd5.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdfo.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpdfx.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstrans.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)sarc4.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)spprint.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcomp.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)shc.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscindex.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsnotify.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdfx.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfcid.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gstype1.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfont42.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxcid.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gstext.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfcache.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsdcolor.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxcid.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxbitmap.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gpsync.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsstype.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsmemory.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gpsync.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gslibctx.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpsf.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpdt.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdt.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstrans.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)sarc4.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)spprint.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcomp.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)shc.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscindex.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsnotify.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdt.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpdtx.h:$(DEVVECSRC)gdevpdt.h
$(DEVVECSRC)gdevpdtx.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdtx.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstrans.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)sarc4.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)spprint.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcomp.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)shc.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscindex.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsnotify.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdtx.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpdtb.h:$(DEVVECSRC)gdevpdtx.h
$(DEVVECSRC)gdevpdtb.h:$(DEVVECSRC)gdevpdt.h
$(DEVVECSRC)gdevpdtb.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdtb.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstrans.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)sarc4.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)spprint.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcomp.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)shc.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscindex.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsnotify.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdtb.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpdtb.h
$(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpdtx.h
$(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpdt.h
@@ -3370,516 +3415,516 @@ $(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstrans.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)sarc4.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)spprint.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcomp.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)shc.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscindex.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsnotify.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdtd.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpdtf.h:$(DEVVECSRC)gdevpdtx.h
$(DEVVECSRC)gdevpdtf.h:$(DEVVECSRC)gdevpdt.h
$(DEVVECSRC)gdevpdtf.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdtf.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstrans.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)sarc4.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)spprint.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcomp.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)shc.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscindex.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsnotify.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdtf.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpdti.h:$(DEVVECSRC)gdevpdtx.h
$(DEVVECSRC)gdevpdti.h:$(DEVVECSRC)gdevpdt.h
$(DEVVECSRC)gdevpdti.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdti.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstrans.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)sarc4.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)spprint.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcomp.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)shc.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscindex.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsnotify.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdti.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpdts.h:$(DEVVECSRC)gdevpdtx.h
$(DEVVECSRC)gdevpdts.h:$(DEVVECSRC)gdevpdt.h
$(DEVVECSRC)gdevpdts.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdts.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstrans.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)sarc4.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)spprint.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcomp.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)shc.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscindex.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsnotify.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdts.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpdts.h
$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpdtf.h
$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpdtx.h
@@ -3888,367 +3933,367 @@ $(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstrans.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)sarc4.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)spprint.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcomp.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)shc.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscindex.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsnotify.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdtt.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpdtw.h:$(DEVVECSRC)gdevpdtx.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfcmap.h
$(DEVVECSRC)gdevpdtw.h:$(DEVVECSRC)gdevpdt.h
$(DEVVECSRC)gdevpdtw.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdtw.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstrans.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxline.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)sarc4.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)spprint.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfont.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevdevn.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gspath.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxclipsr.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcomp.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdcolor.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcid.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfcmap.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxblend.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)shc.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfapi.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscindex.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsnotify.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcpath.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsht.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdevmem.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcmap.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxtext.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxstate.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gspcolor.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfmap.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stream.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcspace.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsropt.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfunc.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsmalloc.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxctable.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsuid.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsimage.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdda.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfont.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxpath.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxstdio.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxstdio.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcid.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsiparam.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxhttile.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsrefct.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)srdline.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)scommon.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)vmsmath.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxarith.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gpgetenv.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscdefs.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscompt.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsccode.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gssprintf.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)std.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdtw.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxclist.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxline.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gstrans.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gdevp14.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxline.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcomp.h
$(DEVSRC)gdevbmp.h:$(GLSRC)math_.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxpcolor.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevmem.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gdevdevn.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsequivc.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxclipsr.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxcomp.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxdcolor.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxmatrix.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevbuf.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxband.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gscolor2.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxmatrix.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsht.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxcpath.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxpcache.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcmap.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gscie.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gspcolor.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxfcache.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsropt.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxfmap.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsmalloc.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsuid.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsimage.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxdda.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsfont.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxpath.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsdevice.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxstdio.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxbitfmt.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxstdio.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxclio.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsrefct.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gp.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)memento.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsuid.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)vmsmath.h
$(DEVSRC)gdevbmp.h:$(GLSRC)srdline.h
$(DEVSRC)gdevbmp.h:$(GLSRC)scommon.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)memento.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)vmsmath.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsbitmap.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxarith.h
$(DEVSRC)gdevbmp.h:$(GLSRC)stat_.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gpgetenv.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gscdefs.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsccode.h
$(DEVSRC)gdevbmp.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)std.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)std.h
$(DEVSRC)gdevbmp.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevbmp.h:$(GLGEN)arch.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gdevdevnprn.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gdevprn.h
$(DEVSRC)gdevpsd.h:$(GLSRC)string_.h
@@ -4257,117 +4302,117 @@ $(DEVSRC)gdevpsd.h:$(GLSRC)gxclthrd.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxclpage.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxclist.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxline.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gstrans.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gdevp14.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxline.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcomp.h
$(DEVSRC)gdevpsd.h:$(GLSRC)math_.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxpcolor.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevmem.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gdevdevn.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gx.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxclipsr.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxcomp.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gdebug.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxmatrix.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevbuf.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxband.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gscolor2.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxmatrix.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsht.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxcpath.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxpcache.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcmap.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gscie.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gspcolor.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxfcache.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsropt.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxfmap.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsmalloc.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsuid.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsimage.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxdda.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsfont.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxpath.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsdevice.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxstdio.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxbitfmt.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxstdio.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxclio.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsrefct.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gp.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsccolor.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsstruct.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)memento.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)memory_.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsutil.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsuid.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsstrl.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gdbflags.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxsync.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gserrors.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)scommon.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)memento.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxbitmap.h
$(DEVSRC)gdevpsd.h:$(GLSRC)vmsmath.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)scommon.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxarith.h
$(DEVSRC)gdevpsd.h:$(GLSRC)stat_.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gpgetenv.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gscdefs.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsccode.h
$(DEVSRC)gdevpsd.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)std.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)std.h
$(DEVSRC)gdevpsd.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevpsd.h:$(GLGEN)arch.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)minftrsz.h:$(GLSRC)std.h
$(DEVSRC)minftrsz.h:$(GLSRC)stdpre.h
$(DEVSRC)minftrsz.h:$(GLGEN)arch.h
@@ -4378,239 +4423,239 @@ $(DEVSRC)gdevfax.h:$(GLSRC)gxclthrd.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxclpage.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxclist.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxline.h
$(DEVSRC)gdevfax.h:$(GLSRC)gstrans.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gdevp14.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxline.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcomp.h
$(DEVSRC)gdevfax.h:$(GLSRC)math_.h
$(DEVSRC)gdevfax.h:$(GLSRC)scfx.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxpcolor.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxdevmem.h
$(DEVSRC)gdevfax.h:$(GLSRC)gdevdevn.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevfax.h:$(GLSRC)gx.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxclipsr.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxcomp.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevfax.h:$(GLSRC)gdebug.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxmatrix.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxdevbuf.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxband.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevfax.h:$(GLSRC)shc.h
$(DEVSRC)gdevfax.h:$(GLSRC)gscolor2.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxmatrix.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsht.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxcpath.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxpcache.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcmap.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevfax.h:$(GLSRC)gscie.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevfax.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevfax.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevfax.h:$(GLSRC)gspcolor.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxfcache.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsropt.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxfmap.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsmalloc.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsuid.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsimage.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxdda.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsfont.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxpath.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevfax.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsdevice.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxstdio.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevfax.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxbitfmt.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxstdio.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxclio.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsrefct.h
$(DEVSRC)gdevfax.h:$(GLSRC)gp.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsccolor.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsstruct.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevfax.h:$(GLSRC)memento.h
+$(DEVSRC)gdevfax.h:$(GLSRC)memory_.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsutil.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsuid.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsstrl.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevfax.h:$(GLSRC)gdbflags.h
-$(DEVSRC)gdevfax.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxsync.h
$(DEVSRC)gdevfax.h:$(GLSRC)gserrors.h
-$(DEVSRC)gdevfax.h:$(GLSRC)scommon.h
-$(DEVSRC)gdevfax.h:$(GLSRC)memento.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxbitmap.h
$(DEVSRC)gdevfax.h:$(GLSRC)vmsmath.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevfax.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevfax.h:$(GLSRC)scommon.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxarith.h
$(DEVSRC)gdevfax.h:$(GLSRC)stat_.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevfax.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevfax.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevfax.h:$(GLSRC)gpgetenv.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevfax.h:$(GLSRC)gscdefs.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevfax.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gscompt.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsbittab.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevfax.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsccode.h
$(DEVSRC)gdevfax.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevfax.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevfax.h:$(GLSRC)std.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsbittab.h
$(DEVSRC)gdevfax.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevfax.h:$(GLSRC)std.h
$(DEVSRC)gdevfax.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevfax.h:$(GLGEN)arch.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gdevprn.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxdownscale.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gdevprn.h
$(DEVSRC)gdevtifs.h:$(GLSRC)string_.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsstrtok.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxclthrd.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxclpage.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxclist.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxline.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gstrans.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gdevp14.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxline.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxgetbit.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcomp.h
$(DEVSRC)gdevtifs.h:$(GLSRC)math_.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxpcolor.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevmem.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gdevdevn.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gx.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxclipsr.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxcomp.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gdebug.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxmatrix.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevbuf.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxband.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gscolor2.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxmatrix.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsht.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxcpath.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxpcache.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcmap.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gscie.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gspcolor.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxfcache.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsropt.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxfmap.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsmalloc.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsuid.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsimage.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxdda.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsfont.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxpath.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsdevice.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxstdio.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxbitfmt.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxstdio.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxclio.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsrefct.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gp.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsccolor.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsstruct.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)memento.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)memory_.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsutil.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsuid.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsstrl.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gdbflags.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)srdline.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)claptrap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxsync.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gserrors.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)scommon.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)memento.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)claptrap.h
$(DEVSRC)gdevtifs.h:$(GLSRC)vmsmath.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)scommon.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxarith.h
$(DEVSRC)gdevtifs.h:$(GLSRC)stat_.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gpgetenv.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gscdefs.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevtifs.h:$(GLSRC)ctype_.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gscompt.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsccode.h
$(DEVSRC)gdevtifs.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)std.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)std.h
$(DEVSRC)gdevtifs.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevtifs.h:$(GLGEN)arch.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gs_dll_call.h
diff --git a/devices/gdev3852.c b/devices/gdev3852.c
index 84388357..32649bd1 100644
--- a/devices/gdev3852.c
+++ b/devices/gdev3852.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdev4081.c b/devices/gdev4081.c
index bd5c52d8..6a715b8b 100644
--- a/devices/gdev4081.c
+++ b/devices/gdev4081.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdev8510.c b/devices/gdev8510.c
index a7b16b54..ad5c6978 100644
--- a/devices/gdev8510.c
+++ b/devices/gdev8510.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdev8bcm.c b/devices/gdev8bcm.c
index 5f5addc6..0adb7963 100644
--- a/devices/gdev8bcm.c
+++ b/devices/gdev8bcm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdev8bcm.h b/devices/gdev8bcm.h
index cc7b98ce..4b30675a 100644
--- a/devices/gdev8bcm.h
+++ b/devices/gdev8bcm.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevatx.c b/devices/gdevatx.c
index aa5462ce..aaf22a5e 100644
--- a/devices/gdevatx.c
+++ b/devices/gdevatx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevbit.c b/devices/gdevbit.c
index d0c7711e..86786fb9 100644
--- a/devices/gdevbit.c
+++ b/devices/gdevbit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -347,7 +347,7 @@ const gx_device_bit gs_bitrgbtags_device =
gx_default_end_page
}, /* page_procs */
{ 0 }, /* procs */
- { 0 }, /* skip */
+ GX_CLIST_MUTATABLE_DEVICE_DEFAULTS,
{
bittags_print_page,
gx_default_print_page_copies,
@@ -364,17 +364,11 @@ const gx_device_bit gs_bitrgbtags_device =
-1, /* Duplex_set */
false, /* file_is_new */
NULL, /* file */
- 0, /* buffer_space */
- NULL, /* buf */
- NULL, /* buffer_memory */
- NULL, /* bandlist_memory */
- 0, /* clist_disable_mask */
false, /* bg_print_requested */
{0}, /* bg_print */
0, /* num_render_threads_requested */
NULL, /* saved_pages_list */
- {0}, /* save_procs_while_delaying_erasepage */
- {0} /* orig_procs */
+ {0} /* save_procs_while_delaying_erasepage */
};
static void
diff --git a/devices/gdevbj10.c b/devices/gdevbj10.c
index 3423ebc5..cbb9c469 100644
--- a/devices/gdevbj10.c
+++ b/devices/gdevbj10.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevbjc.h b/devices/gdevbjc.h
index fbf676aa..9d58211e 100644
--- a/devices/gdevbjc.h
+++ b/devices/gdevbjc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevbjcl.c b/devices/gdevbjcl.c
index 4034aef9..4692266b 100644
--- a/devices/gdevbjcl.c
+++ b/devices/gdevbjcl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevbjcl.h b/devices/gdevbjcl.h
index 05c3d1ed..a3bc9987 100644
--- a/devices/gdevbjcl.h
+++ b/devices/gdevbjcl.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevbmp.c b/devices/gdevbmp.c
index f8ce596e..14033dca 100644
--- a/devices/gdevbmp.c
+++ b/devices/gdevbmp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevbmp.h b/devices/gdevbmp.h
index b7cb97f9..aec8f12c 100644
--- a/devices/gdevbmp.h
+++ b/devices/gdevbmp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevbmpc.c b/devices/gdevbmpc.c
index 4741d55e..81b2abd6 100644
--- a/devices/gdevbmpc.c
+++ b/devices/gdevbmpc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevccr.c b/devices/gdevccr.c
index 2080d785..5c9b7098 100644
--- a/devices/gdevccr.c
+++ b/devices/gdevccr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevcdj.c b/devices/gdevcdj.c
index 50a1d62c..ce74cc29 100644
--- a/devices/gdevcdj.c
+++ b/devices/gdevcdj.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -2150,7 +2150,7 @@ hp_colour_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype)
ep_p += plane_size;
}
/* Make a sentinel and align to word size. */
- eg.print_buf = (byte *)((word)(ep_p + sizeof(word)) & ~(sizeof(word)-1));
+ eg.print_buf = (byte *)((intptr_t)(ep_p + sizeof(word)) & ~(sizeof(word)-1));
}
eg.num_comps = num_comps;
}
@@ -3312,8 +3312,8 @@ cdj_set_bpp(gx_device *pdev, int bpp, int ccomps)
gs_closedevice(pdev);
}
if (pdev->is_open) {
- int code; /* Return code */
- gdev_prn_space_params sp; /* Space parameter data */
+ int code; /* Return code */
+ gdev_space_params sp; /* Space parameter data */
/* Reallocate memory for device */
sp = ((gx_device_printer *)pdev)->space_params;
diff --git a/devices/gdevcfax.c b/devices/gdevcfax.c
index 6f6419ae..a6d0db44 100644
--- a/devices/gdevcfax.c
+++ b/devices/gdevcfax.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevchameleon.c b/devices/gdevchameleon.c
index 1a470972..74421244 100644
--- a/devices/gdevchameleon.c
+++ b/devices/gdevchameleon.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -636,19 +636,16 @@ chameleon_print_page(gx_device_printer * pdev, gp_file * prn_stream)
return gs_error_rangecheck;
}
- code = gx_downscaler_init_trapped_cm_halftone
- (&ds,
- (gx_device *)pdev,
- pcdev->bpc,
- pcdev->dst_bpc,
- pcdev->num_components,
- pcdev->downscale.downscale_factor,
- pcdev->downscale.min_feature_size,
- NULL, 0, /* Adjust width */
- 0, 0, NULL, /* Trapping w/h/comp_order */
- col_convert, col_convert_arg, /* Color Management */
- pcdev->dst_num_components,
- default_ht);
+ code = gx_downscaler_init_cm_halftone(&ds,
+ (gx_device *)pdev,
+ pcdev->bpc,
+ pcdev->dst_bpc,
+ pcdev->num_components,
+ &pcdev->downscale,
+ NULL, 0, /* Adjust width */
+ col_convert, col_convert_arg, /* Color Management */
+ pcdev->dst_num_components,
+ default_ht);
if (code < 0)
goto cleanup;
diff --git a/devices/gdevcif.c b/devices/gdevcif.c
index 66f61ce3..d2e09b79 100644
--- a/devices/gdevcif.c
+++ b/devices/gdevcif.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevclj.c b/devices/gdevclj.c
index 542bb8ed..4c5ffb7b 100644
--- a/devices/gdevclj.c
+++ b/devices/gdevclj.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevcljc.c b/devices/gdevcljc.c
index 65933260..15405cbd 100644
--- a/devices/gdevcljc.c
+++ b/devices/gdevcljc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevcmykog.c b/devices/gdevcmykog.c
index d2f0442a..4330258e 100644
--- a/devices/gdevcmykog.c
+++ b/devices/gdevcmykog.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -225,7 +225,7 @@ cmykog_dev_spec_op(gx_device *dev_, int op, void *data, int datasize)
if (code != gs_error_undefined)
return code;
}
- if (op == gxdso_supports_devn) {
+ if (op == gxdso_supports_devn || op == gxdso_skip_icc_component_validation) {
return true;
}
return gdev_prn_dev_spec_op(dev_, op, data, datasize);
diff --git a/devices/gdevcslw.c b/devices/gdevcslw.c
index 471a82e4..4ded7ccd 100644
--- a/devices/gdevcslw.c
+++ b/devices/gdevcslw.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevdfax.c b/devices/gdevdfax.c
index cfd2a696..3d2a579f 100644
--- a/devices/gdevdfax.c
+++ b/devices/gdevdfax.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevdjet.c b/devices/gdevdjet.c
index 3ea96599..ea81dead 100644
--- a/devices/gdevdjet.c
+++ b/devices/gdevdjet.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevdjtc.c b/devices/gdevdjtc.c
index 5fb1a4ba..a0ffe625 100644
--- a/devices/gdevdjtc.c
+++ b/devices/gdevdjtc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevdljm.c b/devices/gdevdljm.c
index 876b1dbb..fa859164 100644
--- a/devices/gdevdljm.c
+++ b/devices/gdevdljm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevdljm.h b/devices/gdevdljm.h
index 1481b827..679bd561 100644
--- a/devices/gdevdljm.h
+++ b/devices/gdevdljm.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevdm24.c b/devices/gdevdm24.c
index 62b7ba89..42706eee 100644
--- a/devices/gdevdm24.c
+++ b/devices/gdevdm24.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -150,7 +150,7 @@ dot24_print_page (gx_device_printer *pdev, gp_file *prn_stream, char *init_strin
if (code == 0)
{
/* Pad with lines of zeros. */
- memset (inp, 0, (24 - lcnt) * line_size);
+ memset (inp, 0, (size_t)(24 - lcnt) * line_size);
break;
}
}
@@ -162,7 +162,7 @@ dot24_print_page (gx_device_printer *pdev, gp_file *prn_stream, char *init_strin
if (code == 0)
{
/* Pad with lines of zeros. */
- memset (inp, 0, (24 - lcnt) * line_size);
+ memset (inp, 0, (size_t)(24 - lcnt) * line_size);
break;
}
}
diff --git a/devices/gdevdsp.c b/devices/gdevdsp.c
index 8ac211d4..0a66a027 100644
--- a/devices/gdevdsp.c
+++ b/devices/gdevdsp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -54,6 +54,12 @@
#include "gsequivc.h"
#include "gdevdsp.h"
#include "gdevdsp2.h"
+#include "gxclist.h"
+#include "gxdevbuf.h"
+#include "gxgetbit.h"
+#include "gdevmpla.h"
+#include "gdevprn.h" /* For gdev_create_buf_device */
+#include "gsicc_manage.h"
#include "gdevkrnlsclass.h" /* 'standard' built in subclasses, currently First/Last Page and obejct filter */
@@ -108,12 +114,12 @@ static const gx_device_procs display_procs =
display_close,
gx_default_w_b_map_rgb_color,
gx_default_w_b_map_color_rgb,
- display_fill_rectangle,
+ NULL, /* display_fill_rectangle - will be inserted later */
NULL, /* tile rectangle */
- display_copy_mono,
- display_copy_color,
+ NULL, /* display_copy_mono - will be inserted later */
+ NULL, /* display_copy_color - will be inserted later */
NULL, /* draw line */
- display_get_bits,
+ NULL, /* display_get_bits - will be inserted later */
display_get_params,
display_put_params,
gx_default_cmyk_map_cmyk_color, /* map_cmyk_color */
@@ -175,24 +181,16 @@ public_st_device_display();
static
ENUM_PTRS_WITH(display_enum_ptrs, gx_device_display *ddev)
- if (index == 0) {
- if (ddev->mdev) {
- return ENUM_OBJ(gx_device_enum_ptr((gx_device *)ddev->mdev));
- }
- return 0;
- }
- else if (index-1 < ddev->devn_params.separations.num_separations)
- ENUM_RETURN(ddev->devn_params.separations.names[index-1].data);
+ if (index < ddev->devn_params.separations.num_separations)
+ ENUM_RETURN(ddev->devn_params.separations.names[index].data);
else
- return 0;
+ ENUM_PREFIX(st_device_clist_mutatable, ddev->devn_params.separations.num_separations);
+ return 0;
ENUM_PTRS_END
static
RELOC_PTRS_WITH(display_reloc_ptrs, gx_device_display *ddev)
- if (ddev->mdev) {
- ddev->mdev = (gx_device_memory *)
- gx_device_reloc_ptr((gx_device *)ddev->mdev, gcst);
- }
+ RELOC_PREFIX(st_device_clist_mutatable);
{ int i;
for (i = 0; i < ddev->devn_params.separations.num_separations; ++i) {
RELOC_PTR(gx_device_display, devn_params.separations.names[i].data);
@@ -207,12 +205,13 @@ const gx_device_display gs_display_device =
INITIAL_WIDTH, INITIAL_HEIGHT,
INITIAL_RESOLUTION, INITIAL_RESOLUTION),
{0}, /* std_procs */
- NULL, /* mdev */
+ GX_CLIST_MUTATABLE_DEVICE_DEFAULTS,
NULL, /* callback */
NULL, /* pHandle */
+ 0, /* pHandle_set */
0, /* nFormat */
NULL, /* pBitmap */
- 0, /* ulBitmapSize */
+ 0, /* zBitmapSize */
0, /* HWResolution_set */
{ /* devn_params specific parameters */
@@ -242,11 +241,34 @@ display_open(gx_device * dev)
{
gx_device_display *ddev = (gx_device_display *) dev;
int ccode;
+ gs_display_get_callback_t data;
/* Erase these, in case we are opening a copied device. */
- ddev->mdev = NULL;
ddev->pBitmap = NULL;
- ddev->ulBitmapSize = 0;
+ ddev->zBitmapSize = 0;
+
+ ddev->orig_procs = ddev->procs;
+
+ /* Fetch our callback procedures. */
+ data.callback = NULL;
+ data.caller_handle = NULL;
+ ccode = gx_callout(dev, DISPLAY_CALLOUT_GET_CALLBACK, sizeof(data), &data);
+ if (ccode < 0) {
+ ccode = gx_callout(dev, DISPLAY_CALLOUT_GET_CALLBACK_LEGACY, sizeof(data), &data);
+ if (ccode < 0) {
+ ddev->callback = NULL;
+ ddev->pHandle = NULL;
+ if (ccode != gs_error_unknownerror)
+ return ccode;
+ } else {
+ ddev->callback = data.callback;
+ ddev->pHandle_set = 0;
+ }
+ } else {
+ ddev->callback = data.callback;
+ ddev->pHandle = data.caller_handle;
+ ddev->pHandle_set = 1;
+ }
/* Allow device to be opened "disabled" without a callback. */
/* The callback will be set later and the device re-opened. */
@@ -290,9 +312,11 @@ display_open(gx_device * dev)
}
/* Tell caller the device parameters */
- ccode = (*(ddev->callback->display_size)) (ddev->pHandle, dev,
- dev->width, dev->height, display_raster(ddev), ddev->nFormat,
- ddev->mdev->base);
+ ccode = (*(ddev->callback->display_size))(ddev->pHandle, dev,
+ dev->width, dev->height,
+ display_raster(ddev), ddev->nFormat,
+ CLIST_MUTATABLE_HAS_MUTATED(ddev) ?
+ NULL : ((gx_device_memory *)ddev)->base);
if (ccode < 0) {
display_free_bitmap(ddev);
(*(ddev->callback->display_close))(ddev->pHandle, dev);
@@ -335,6 +359,10 @@ display_output_page(gx_device * dev, int copies, int flush)
{
gx_device_display *ddev = (gx_device_display *) dev;
int code;
+ int is_planar = (ddev->nFormat & (DISPLAY_PLANAR |
+ DISPLAY_PLANAR_INTERLEAVED)) &&
+ (ddev->color_info.num_components > 1);
+
if (ddev->callback == NULL)
return gs_error_Fatal;
display_set_separations(ddev);
@@ -342,8 +370,72 @@ display_output_page(gx_device * dev, int copies, int flush)
while(dev->parent)
dev = dev->parent;
- code = (*(ddev->callback->display_page))
+ if (CLIST_MUTATABLE_HAS_MUTATED(ddev)) {
+ /* Rectangle request mode! */
+ gs_get_bits_options_t options;
+
+ options = GB_RETURN_COPY | GB_ALIGN_STANDARD |
+ GB_OFFSET_SPECIFIED | GB_RASTER_SPECIFIED |
+ GB_COLORS_NATIVE;
+ switch (ddev->nFormat & DISPLAY_ALPHA_MASK) {
+ default:
+ case DISPLAY_ALPHA_NONE:
+ break;
+ case DISPLAY_ALPHA_FIRST:
+ case DISPLAY_UNUSED_FIRST:
+ options |= GB_ALPHA_FIRST;
+ break;
+ case DISPLAY_ALPHA_LAST:
+ case DISPLAY_UNUSED_LAST:
+ options |= GB_ALPHA_LAST;
+ break;
+ }
+ if (is_planar)
+ options |= GB_PACKING_PLANAR;
+ else
+ options |= GB_PACKING_CHUNKY;
+
+ while (1) {
+ void *mem = NULL;
+ int ox, oy, x, y, w, h, i, raster, plane_raster;
+ gs_int_rect rect;
+ gs_get_bits_params_t params;
+
+ code = ddev->callback->display_rectangle_request
+ (ddev->pHandle, dev,
+ &mem, &ox, &oy,
+ &raster, &plane_raster,
+ &x, &y, &w, &h);
+ if (w == 0 || h == 0)
+ break;
+ if (mem == NULL) {
+ code = gs_note_error(gs_error_VMerror);
+ break;
+ }
+ rect.p.x = x;
+ rect.p.y = y;
+ rect.q.x = x + w;
+ rect.q.y = y + h;
+ params.options = options;
+ if (is_planar) {
+ for (i = 0; i < ddev->color_info.num_components; i++)
+ params.data[i] = (byte *)mem + i * plane_raster;
+ } else {
+ params.data[0] = (byte *)mem;
+ }
+ params.x_offset = ox;
+ params.original_y = oy;
+ params.raster = raster;
+ code = dev_proc(ddev, get_bits_rectangle)((gx_device *)ddev,
+ &rect, &params, NULL);
+ if (code < 0)
+ break;
+ }
+ } else {
+ /* Full page mode. Just claim completion! */
+ code = (*(ddev->callback->display_page))
(ddev->pHandle, dev, copies, flush);
+ }
if (code >= 0)
code = gx_finish_output_page(dev, copies, flush);
@@ -358,19 +450,24 @@ display_close(gx_device * dev)
if (ddev->callback == NULL)
return 0; /* ignore the call since we were never properly opened */
+ while(dev->parent)
+ dev = dev->parent;
+
/* Tell caller that device is about to be closed. */
(*(ddev->callback->display_preclose))(ddev->pHandle, dev);
/* Release memory. */
display_free_bitmap(ddev);
- while(dev->parent)
- dev = dev->parent;
-
/* Tell caller that device is closed. */
/* This is always the last callback */
(*(ddev->callback->display_close))(ddev->pHandle, dev);
+ /* Reset device proc vector to default */
+ if (ddev->orig_procs.open_device != NULL)
+ ddev->procs = ddev->orig_procs;
+ ddev->orig_procs.open_device = NULL; /* prevent uninit'd restore of procs */
+
return 0;
}
@@ -726,13 +823,12 @@ display_map_color_rgb_bgr24(gx_device * dev, gx_color_index color,
/* Fill a rectangle */
static int
display_fill_rectangle(gx_device * dev, int x, int y, int w, int h,
- gx_color_index color)
+ gx_color_index color)
{
gx_device_display *ddev = (gx_device_display *) dev;
if (ddev->callback == NULL)
return 0; /* ignore -- needed for fillpage when device wasn't really opened */
- dev_proc(ddev->mdev, fill_rectangle)((gx_device *)ddev->mdev,
- x, y, w, h, color);
+ ddev->mutated_procs.fill_rectangle(dev, x, y, w, h, color);
while(dev->parent)
dev = dev->parent;
@@ -745,15 +841,15 @@ display_fill_rectangle(gx_device * dev, int x, int y, int w, int h,
/* Copy a monochrome bitmap */
static int
display_copy_mono(gx_device * dev,
- const byte * base, int sourcex, int raster, gx_bitmap_id id,
- int x, int y, int w, int h,
- gx_color_index zero, gx_color_index one)
+ const byte * base, int sourcex, int raster,
+ gx_bitmap_id id, int x, int y, int w, int h,
+ gx_color_index zero, gx_color_index one)
{
gx_device_display *ddev = (gx_device_display *) dev;
if (ddev->callback == NULL)
return gs_error_Fatal;
- dev_proc(ddev->mdev, copy_mono)((gx_device *)ddev->mdev,
- base, sourcex, raster, id, x, y, w, h, zero, one);
+ ddev->mutated_procs.copy_mono(dev, base, sourcex, raster, id,
+ x, y, w, h, zero, one);
while(dev->parent)
dev = dev->parent;
@@ -766,14 +862,13 @@ display_copy_mono(gx_device * dev,
/* Copy a color pixel map */
static int
display_copy_color(gx_device * dev,
- const byte * base, int sourcex, int raster, gx_bitmap_id id,
- int x, int y, int w, int h)
+ const byte * base, int sourcex, int raster,
+ gx_bitmap_id id, int x, int y, int w, int h)
{
gx_device_display *ddev = (gx_device_display *) dev;
if (ddev->callback == NULL)
return gs_error_Fatal;
- dev_proc(ddev->mdev, copy_color)((gx_device *)ddev->mdev,
- base, sourcex, raster, id, x, y, w, h);
+ ddev->mutated_procs.copy_color(dev, base, sourcex, raster, id, x, y, w, h);
while(dev->parent)
dev = dev->parent;
@@ -789,8 +884,7 @@ display_get_bits(gx_device * dev, int y, byte * str, byte ** actual_data)
gx_device_display *ddev = (gx_device_display *) dev;
if (ddev->callback == NULL)
return gs_error_Fatal;
- return dev_proc(ddev->mdev, get_bits)((gx_device *)ddev->mdev,
- y, str, actual_data);
+ return ddev->mutated_procs.get_bits(dev, y, str, actual_data);
}
static int
@@ -805,27 +899,31 @@ display_get_params(gx_device * dev, gs_param_list * plist)
size_t dptr;
char buf[64];
- idx = ((int)sizeof(size_t)) * 8 - 4;
- buf[i++] = '1';
- buf[i++] = '6';
- buf[i++] = '#';
- dptr = (size_t)(ddev->pHandle);
- while (idx >= 0) {
- val = (int)(dptr >> idx) & 0xf;
- if (val <= 9)
- buf[i++] = '0' + val;
- else
- buf[i++] = 'a' - 10 + val;
- idx -= 4;
- }
- buf[i] = '\0';
+ code = gx_default_get_params(dev, plist);
+ if (code < 0)
+ return code;
+
+ if (!ddev->pHandle_set) {
+ idx = ((int)sizeof(size_t)) * 8 - 4;
+ buf[i++] = '1';
+ buf[i++] = '6';
+ buf[i++] = '#';
+ dptr = (size_t)(ddev->pHandle);
+ while (idx >= 0) {
+ val = (int)(dptr >> idx) & 0xf;
+ if (val <= 9)
+ buf[i++] = '0' + val;
+ else
+ buf[i++] = 'a' - 10 + val;
+ idx -= 4;
+ }
+ buf[i] = '\0';
- param_string_from_transient_string(dhandle, buf);
+ param_string_from_transient_string(dhandle, buf);
+ code = param_write_string(plist, "DisplayHandle", &dhandle);
+ }
- code = gx_default_get_params(dev, plist);
(void)(code < 0 ||
- (code = param_write_string(plist,
- "DisplayHandle", &dhandle)) < 0 ||
(code = param_write_int(plist,
"DisplayFormat", &ddev->nFormat)) < 0 ||
(code = param_write_float(plist,
@@ -890,96 +988,98 @@ display_put_params(gx_device * dev, gs_param_list * plist)
break;
}
- /* 64-bit systems need to use DisplayHandle as a string */
- switch (code = param_read_string(plist, "DisplayHandle", &dh)) {
- case 0:
- found_string_handle = 1;
- break;
- default:
- if ((code == gs_error_typecheck) && (sizeof(size_t) <= 4)) {
- /* 32-bit systems can use the older long type */
- switch (code = param_read_long(plist, "DisplayHandle",
- (long *)(&handle))) {
- case 0:
- if (dev->is_open) {
- if (ddev->pHandle != handle)
- ecode = gs_error_rangecheck;
- else
+ if (!ddev->pHandle_set) {
+ /* 64-bit systems need to use DisplayHandle as a string */
+ switch (code = param_read_string(plist, "DisplayHandle", &dh)) {
+ case 0:
+ found_string_handle = 1;
+ break;
+ default:
+ if ((code == gs_error_typecheck) && (sizeof(size_t) <= 4)) {
+ /* 32-bit systems can use the older long type */
+ switch (code = param_read_long(plist, "DisplayHandle",
+ (long *)(&handle))) {
+ case 0:
+ if (dev->is_open) {
+ if (ddev->pHandle != handle)
+ ecode = gs_error_rangecheck;
+ else
+ break;
+ }
+ else {
+ ddev->pHandle = handle;
break;
- }
- else {
- ddev->pHandle = handle;
+ }
+ goto hdle;
+ default:
+ ecode = code;
+ hdle:param_signal_error(plist, "DisplayHandle", ecode);
+ case 1:
break;
- }
- goto hdle;
- default:
- ecode = code;
- hdle:param_signal_error(plist, "DisplayHandle", ecode);
- case 1:
- break;
+ }
+ break;
}
+ ecode = code;
+ param_signal_error(plist, "DisplayHandle", ecode);
+ /* fall through */
+ case 1:
+ dh.data = 0;
break;
- }
- ecode = code;
- param_signal_error(plist, "DisplayHandle", ecode);
- /* fall through */
- case 1:
- dh.data = 0;
- break;
- }
- if (found_string_handle) {
- /*
- * Convert from a string to a pointer.
- * It is assumed that size_t has the same size as a pointer.
- * Allow formats (1234), (10#1234) or (16#04d2).
- */
- size_t ptr = 0;
- int i;
- int base = 10;
- int val;
- code = 0;
- for (i=0; i<dh.size; i++) {
- val = dh.data[i];
- if ((val >= '0') && (val <= '9'))
- val = val - '0';
- else if ((val >= 'A') && (val <= 'F'))
- val = val - 'A' + 10;
- else if ((val >= 'a') && (val <= 'f'))
- val = val - 'a' + 10;
- else if (val == '#') {
- base = (int)ptr;
- ptr = 0;
- if ((base != 10) && (base != 16)) {
+ }
+ if (found_string_handle) {
+ /*
+ * Convert from a string to a pointer.
+ * It is assumed that size_t has the same size as a pointer.
+ * Allow formats (1234), (10#1234) or (16#04d2).
+ */
+ size_t ptr = 0;
+ int i;
+ int base = 10;
+ int val;
+ code = 0;
+ for (i=0; i<dh.size; i++) {
+ val = dh.data[i];
+ if ((val >= '0') && (val <= '9'))
+ val = val - '0';
+ else if ((val >= 'A') && (val <= 'F'))
+ val = val - 'A' + 10;
+ else if ((val >= 'a') && (val <= 'f'))
+ val = val - 'a' + 10;
+ else if (val == '#') {
+ base = (int)ptr;
+ ptr = 0;
+ if ((base != 10) && (base != 16)) {
+ code = gs_error_rangecheck;
+ break;
+ }
+ continue;
+ }
+ else {
code = gs_error_rangecheck;
break;
}
- continue;
- }
- else {
- code = gs_error_rangecheck;
- break;
- }
- if (base == 10)
- ptr = ptr * 10 + val;
- else if (base == 16)
- ptr = ptr * 16 + val;
- else {
- code = gs_error_rangecheck;
- break;
- }
- }
- if (code == 0) {
- if (dev->is_open) {
- if (ddev->pHandle != (void *)ptr)
+ if (base == 10)
+ ptr = ptr * 10 + val;
+ else if (base == 16)
+ ptr = ptr * 16 + val;
+ else {
code = gs_error_rangecheck;
+ break;
+ }
+ }
+ if (code == 0) {
+ if (dev->is_open) {
+ if (ddev->pHandle != (void *)ptr)
+ code = gs_error_rangecheck;
+ }
+ else
+ ddev->pHandle = (void *)ptr;
+ }
+ if (code < 0) {
+ ecode = code;
+ param_signal_error(plist, "DisplayHandle", ecode);
}
- else
- ddev->pHandle = (void *)ptr;
- }
- if (code < 0) {
- ecode = code;
- param_signal_error(plist, "DisplayHandle", ecode);
}
}
@@ -1094,19 +1194,20 @@ display_put_params(gx_device * dev, gs_param_list * plist)
/* tell caller about the new size */
if ((*ddev->callback->display_size)(ddev->pHandle, dev,
- dev->width, dev->height, display_raster(ddev),
- ddev->nFormat, ddev->mdev->base) < 0)
+ dev->width, dev->height, display_raster(ddev), ddev->nFormat,
+ CLIST_MUTATABLE_HAS_MUTATED(ddev) ? NULL :
+ ((gx_device_memory *)ddev)->base) < 0)
return_error(gs_error_rangecheck);
}
- /*
- * Make the color_info.depth correct for the bpc and num_components since
- * devn mode always has the display bitmap set up for 64-bits, but others,
- * such as pdf14 compositor expect it to match (for "deep" detection).
- */
- if (ddev->icc_struct && ddev->icc_struct->supports_devn) {
- ddev->color_info.depth = ddev->devn_params.bitspercomponent *
- ddev->color_info.num_components;
- }
+ /*
+ * Make the color_info.depth correct for the bpc and num_components since
+ * devn mode always has the display bitmap set up for 64-bits, but others,
+ * such as pdf14 compositor expect it to match (for "deep" detection).
+ */
+ if (ddev->icc_struct && ddev->icc_struct->supports_devn) {
+ ddev->color_info.depth = ddev->devn_params.bitspercomponent *
+ ddev->color_info.num_components;
+ }
return 0;
}
@@ -1120,9 +1221,8 @@ display_finish_copydevice(gx_device *dev, const gx_device *from_dev)
ddev->is_open = false;
/* Clear pointers */
- ddev->mdev = NULL;
ddev->pBitmap = NULL;
- ddev->ulBitmapSize = 0;
+ ddev->zBitmapSize = 0;
return 0;
}
@@ -1245,10 +1345,23 @@ display_ret_devn_params(gx_device * dev)
static int
display_spec_op(gx_device *dev, int op, void *data, int datasize)
{
+ gx_device_display *ddev = (gx_device_display *)dev;
- if (op == gxdso_supports_devn) {
+ if (op == gxdso_supports_devn || op == gxdso_skip_icc_component_validation) {
return (dev_proc(dev, fill_rectangle_hl_color) == display_fill_rectangle_hl_color);
}
+ if (op == gxdso_reopen_after_init) {
+ return 1;
+ }
+ if (op == gxdso_adjust_bandheight)
+ {
+ if (ddev->callback->display_adjust_band_height)
+ return ddev->callback->display_adjust_band_height(ddev->pHandle,
+ ddev,
+ datasize);
+ return 0;
+ }
+
return gx_default_dev_spec_op(dev, op, data, datasize);
}
@@ -1269,8 +1382,8 @@ display_fill_rectangle_hl_color(gx_device *dev, const gs_fixed_rect *rect,
if (pdcolor->type != gx_dc_type_devn && pdcolor->type != &gx_dc_devn_masked) {
return gx_fill_rectangle_device_rop( x, y, w, h, pdcolor, dev, lop_default);
}
- pure_color = display_separation_encode_color(dev, pdcolor->colors.devn.values);
- return display_fill_rectangle(dev, x, y, w, h, pure_color);
+ pure_color = dev_proc(dev, encode_color)(dev, pdcolor->colors.devn.values);
+ return dev_proc(dev, fill_rectangle)(dev, x, y, w, h, pure_color);
}
/*
@@ -1303,7 +1416,7 @@ display_separation_get_color_comp_index(gx_device * dev,
/* Return 0 on success, gs_error_rangecheck on failure */
static int display_check_structure(gx_device_display *ddev)
{
- if (ddev->callback == 0)
+ if (ddev->callback == NULL)
return_error(gs_error_rangecheck);
if (ddev->callback->size == sizeof(struct display_callback_v1_s)) {
@@ -1315,11 +1428,23 @@ static int display_check_structure(gx_device_display *ddev)
if (ddev->callback->version_minor > DISPLAY_VERSION_MINOR_V1)
return_error(gs_error_rangecheck);
}
- else {
+ else if (ddev->callback->size == sizeof(struct display_callback_v2_s)) {
/* V2 structure with added display_separation callback */
if (ddev->callback->size != sizeof(display_callback))
return_error(gs_error_rangecheck);
+ if (ddev->callback->version_major != DISPLAY_VERSION_MAJOR_V2)
+ return_error(gs_error_rangecheck);
+
+ /* complain if caller asks for newer features */
+ if (ddev->callback->version_minor > DISPLAY_VERSION_MINOR_V2)
+ return_error(gs_error_rangecheck);
+ }
+ else {
+ /* V3 structure with added display_separation callback */
+ if (ddev->callback->size != sizeof(display_callback))
+ return_error(gs_error_rangecheck);
+
if (ddev->callback->version_major != DISPLAY_VERSION_MAJOR)
return_error(gs_error_rangecheck);
@@ -1362,13 +1487,33 @@ display_free_bitmap(gx_device_display * ddev)
ddev->pBitmap, "display_free_bitmap");
}
ddev->pBitmap = NULL;
- if (ddev->mdev)
- ddev->mdev->base = NULL;
+ if (!CLIST_MUTATABLE_HAS_MUTATED(ddev))
+ ((gx_device_memory *)ddev)->base = NULL;
}
- if (ddev->mdev) {
- dev_proc(ddev->mdev, close_device)((gx_device *)ddev->mdev);
- gx_device_retain((gx_device *)(ddev->mdev), false);
- ddev->mdev = NULL;
+
+ if (CLIST_MUTATABLE_HAS_MUTATED(ddev)) {
+ gx_device_clist *const pclist_dev = (gx_device_clist *)ddev;
+ gx_device_clist_common * const pcldev = &pclist_dev->common;
+ gx_device_clist_reader * const pcrdev = &pclist_dev->reader;
+ /* Close cmd list device & point to the storage */
+ (*gs_clist_device_procs.close_device)( (gx_device *)pcldev );
+ ddev->buf = NULL;
+ ddev->buffer_space = 0;
+
+ gs_free_object(pcldev->memory->non_gc_memory, pcldev->cache_chunk, "free tile cache for clist");
+ pcldev->cache_chunk = 0;
+
+ rc_decrement(pcldev->icc_cache_cl, "gdev_prn_tear_down");
+ pcldev->icc_cache_cl = NULL;
+
+ clist_free_icc_table(pcldev->icc_table, pcldev->memory);
+ pcldev->icc_table = NULL;
+
+ /* If the clist is a reader clist, free any color_usage_array
+ * memory used by same.
+ */
+ if (!CLIST_IS_WRITER(pclist_dev))
+ gs_free_object(pcrdev->memory, pcrdev->color_usage_array, "clist_color_usage_array");
}
}
@@ -1377,7 +1522,9 @@ static int
display_raster(gx_device_display *dev)
{
int align = 0;
- int bytewidth = ((dev->width * dev->color_info.depth) + 7) /8;
+ int n = (dev->nFormat & (DISPLAY_PLANAR | DISPLAY_PLANAR_INTERLEAVED)) ?
+ dev->color_info.num_components : 1;
+ int bytewidth = ((dev->width * dev->color_info.depth / n) + 7) /8;
switch (dev->nFormat & DISPLAY_ROW_ALIGN_MASK) {
case DISPLAY_ROW_ALIGN_4:
align = 4;
@@ -1399,79 +1546,340 @@ display_raster(gx_device_display *dev)
align = ARCH_ALIGN_PTR_MOD;
align -= 1;
bytewidth = (bytewidth + align) & (~align);
+ if (dev->nFormat & DISPLAY_PLANAR_INTERLEAVED)
+ bytewidth *= n;
return bytewidth;
}
-/* Allocate the backing bitmap. */
+/* Set the buffer device to planar mode. */
static int
-display_alloc_bitmap(gx_device_display * ddev, gx_device * param_dev)
+set_planar(gx_device_memory *mdev, const gx_device *tdev, int interleaved)
{
- int ccode;
- const gx_device_memory *mdproto;
+ int num_comp = tdev->color_info.num_components;
+ gx_render_plane_t planes[GX_DEVICE_COLOR_MAX_COMPONENTS];
+ int depth = tdev->color_info.depth / num_comp;
+ int k;
- if (ddev->callback == NULL)
- return gs_error_Fatal;
+ if (num_comp < 1 || num_comp > GX_DEVICE_COLOR_MAX_COMPONENTS)
+ return_error(gs_error_rangecheck);
+ /* Round up the depth per plane to a power of 2. */
+ while (depth & (depth - 1))
+ --depth, depth = (depth | (depth >> 1)) + 1;
+
+ /* We want the most significant plane to come out first. */
+ planes[num_comp-1].shift = 0;
+ planes[num_comp-1].depth = depth;
+ for (k = (num_comp - 2); k >= 0; k--) {
+ planes[k].depth = depth;
+ planes[k].shift = planes[k + 1].shift + depth;
+ }
+ return gdev_mem_set_planar_interleaved(mdev, num_comp, planes,
+ interleaved);
+}
- /* free old bitmap (if any) */
- display_free_bitmap(ddev);
+static int
+display_create_buf_device(gx_device **pbdev, gx_device *target, int y,
+ const gx_render_plane_t *render_plane,
+ gs_memory_t *mem, gx_color_usage_t *color_usage)
+{
+ int depth;
+ const gx_device_memory *mdproto;
+ gx_device_memory *mdev;
+ gx_device_display *ddev = (gx_device_display *)target;
+
+ depth = target->color_info.depth;
+ if (target->is_planar)
+ depth /= target->color_info.num_components;
- /* allocate a memory device for rendering */
- mdproto = gdev_mem_device_for_bits(ddev->color_info.depth);
- if (mdproto == 0)
+ mdproto = gdev_mem_device_for_bits(depth);
+ if (mdproto == NULL)
return_error(gs_error_rangecheck);
+ if (mem) {
+ mdev = gs_alloc_struct(mem, gx_device_memory, &st_device_memory,
+ "create_buf_device");
+ if (mdev == NULL)
+ return_error(gs_error_VMerror);
+ } else {
+ mdev = (gx_device_memory *)*pbdev;
+ }
+ if (target == (gx_device *)mdev) {
+ dev_t_proc_dev_spec_op((*orig_dso), gx_device) = dev_proc(mdev, dev_spec_op);
+ /* The following is a special hack for setting up printer devices. */
+ assign_dev_procs(mdev, mdproto);
+ /* Do not override the dev_spec_op! */
+ dev_proc(mdev, dev_spec_op) = orig_dso;
+ check_device_separable((gx_device *)mdev);
+ gx_device_fill_in_procs((gx_device *)mdev);
+ } else {
+ gs_make_mem_device(mdev, mdproto, mem, (color_usage == NULL ? 1 : 0),
+ target);
+ if (ddev->nFormat & DISPLAY_COLORS_SEPARATION)
+ mdev->procs.fill_rectangle_hl_color = display_fill_rectangle_hl_color;
+ }
+ mdev->width = target->width;
+ mdev->band_y = y;
+ mdev->log2_align_mod = target->log2_align_mod;
+ mdev->pad = target->pad;
+ mdev->is_planar = target->is_planar;
+ /*
+ * The matrix in the memory device is irrelevant,
+ * because all we do with the device is call the device-level
+ * output procedures, but we may as well set it to
+ * something halfway reasonable.
+ */
+ gs_deviceinitialmatrix(target, &mdev->initial_matrix);
+ /****** QUESTIONABLE, BUT BETTER THAN OMITTING ******/
+ if (&mdev->color_info != &target->color_info) /* Pacify Valgrind */
+ mdev->color_info = target->color_info;
+ *pbdev = (gx_device *)mdev;
+
+ if (ddev->nFormat & (DISPLAY_PLANAR | DISPLAY_PLANAR_INTERLEAVED)) {
+ int interleaved = (ddev->nFormat & DISPLAY_PLANAR_INTERLEAVED);
+ if (gs_device_is_memory(*pbdev) /* == render_plane->index < 0 */) {
+ return set_planar((gx_device_memory *)*pbdev, *pbdev, interleaved);
+ }
+ }
+
+ return 0;
+}
- ddev->mdev = gs_alloc_struct(gs_memory_stable(ddev->memory),
- gx_device_memory, &st_device_memory, "display_memory_device");
- if (ddev->mdev == 0)
+static int
+display_size_buf_device(gx_device_buf_space_t *space, gx_device *target,
+ const gx_render_plane_t *render_plane,
+ int height, bool for_band)
+{
+ gx_device_display *ddev = (gx_device_display *)target;
+ gx_device_memory mdev;
+ int code;
+ int planar = ddev->nFormat & (DISPLAY_PLANAR | DISPLAY_PLANAR_INTERLEAVED);
+ int interleaved = (ddev->nFormat & DISPLAY_PLANAR_INTERLEAVED);
+
+ if (!planar || (render_plane && render_plane->index >= 0))
+ return gx_default_size_buf_device(space, target, render_plane,
+ height, for_band);
+
+ /* Planar case */
+ mdev.color_info = target->color_info;
+ mdev.pad = target->pad;
+ mdev.log2_align_mod = target->log2_align_mod;
+ mdev.is_planar = target->is_planar;
+ code = set_planar(&mdev, target, interleaved);
+ if (code < 0)
+ return code;
+ if (gdev_mem_bits_size(&mdev, target->width, height, &(space->bits)) < 0)
return_error(gs_error_VMerror);
+ space->line_ptrs = gdev_mem_line_ptrs_size(&mdev, target->width, height);
+ space->raster = display_raster(ddev);
+ return 0;
+}
- gs_make_mem_device(ddev->mdev, mdproto, gs_memory_stable(ddev->memory),
- 0, (gx_device *) NULL);
- check_device_separable((gx_device *)(ddev->mdev));
- gx_device_fill_in_procs((gx_device *)(ddev->mdev));
- /* Mark the memory device as retained. When the bitmap is closed,
- * we will clear this and the memory device will be then be freed.
- */
- gx_device_retain((gx_device *)(ddev->mdev), true);
+static gx_device_buf_procs_t display_buf_procs = {
+ display_create_buf_device,
+ display_size_buf_device,
+ gx_default_setup_buf_device,
+ gx_default_destroy_buf_device
+};
- /* Memory device width may be larger than device width
- * if row alignment is not 4.
- */
- ddev->mdev->width = param_dev->width;
- ddev->mdev->width = display_raster(ddev) * 8 / ddev->color_info.depth;
- ddev->mdev->height = param_dev->height;
+static int /* returns 0 ok, else -ve error cde */
+setup_as_clist(gx_device_display *ddev, gs_memory_t *buffer_memory)
+{
+ gdev_space_params space_params = ddev->space_params;
+ gx_device *target = (gx_device *)ddev;
+ uint space;
+ int code;
+ gx_device_clist *const pclist_dev = (gx_device_clist *)ddev;
+ gx_device_clist_common * const pcldev = &pclist_dev->common;
+ byte *base;
+ bool save_is_open = ddev->is_open; /* Save around temporary failure in open_c loop */
+
+ while (target->parent != NULL) {
+ target = target->parent;
+ gx_update_from_subclass(target);
+ }
- /* Tell the memory device to allocate the line pointers separately
- * so we can place the bitmap in special memory.
- */
- ddev->mdev->line_pointer_memory = ddev->mdev->memory;
- if (gdev_mem_bits_size(ddev->mdev, ddev->mdev->width, ddev->mdev->height,
- &(ddev->ulBitmapSize)) < 0)
+ /* Try to allocate based simply on param-requested buffer size */
+ for ( space = space_params.BufferSpace; ; ) {
+ base = gs_alloc_bytes(buffer_memory, space,
+ "cmd list buffer");
+ if (base != NULL)
+ break;
+ if ((space >>= 1) < MIN_BUFFER_SPACE)
+ break;
+ }
+ if (base == NULL)
return_error(gs_error_VMerror);
+ /* Try opening the command list, to see if we allocated */
+ /* enough buffer space. */
+open_c:
+ ddev->buf = base;
+ ddev->buffer_space = space;
+ pclist_dev->common.orig_spec_op = ddev->orig_procs.dev_spec_op;
+ clist_init_io_procs(pclist_dev, ddev->BLS_force_memory);
+ clist_init_params(pclist_dev, base, space, target,
+ display_buf_procs,
+ space_params.band,
+ false, /* do_not_open_or_close_bandfiles */
+ (ddev->bandlist_memory == NULL ?
+ ddev->memory->non_gc_memory:
+ ddev->bandlist_memory),
+ ddev->clist_disable_mask,
+ ddev->page_uses_transparency);
+ code = (*gs_clist_device_procs.open_device)( (gx_device *)pcldev );
+ if (code < 0) {
+ /* If there wasn't enough room, and we haven't */
+ /* already shrunk the buffer, try enlarging it. */
+ if (code == gs_error_rangecheck &&
+ space >= space_params.BufferSpace) {
+ space += space / 8;
+ gs_free_object(buffer_memory, base,
+ "cmd list buf(retry open)");
+ base = gs_alloc_bytes(buffer_memory, space,
+ "cmd list buf(retry open)");
+ ddev->buf = base;
+ if (base != NULL) {
+ ddev->is_open = save_is_open; /* allow for success when we loop */
+ goto open_c;
+ }
+ }
+ /* Failure. */
+ gs_free_object(buffer_memory, base, "cmd list buf");
+ ddev->buffer_space = 0;
+ }
+ return code;
+}
+
+/* Allocate the backing bitmap. */
+static int
+display_alloc_bitmap(gx_device_display * ddev, gx_device * param_dev)
+{
+ int ccode;
+ gx_device_buf_space_t buf_space;
+
+ if (ddev->callback == NULL)
+ return gs_error_Fatal;
+
+ /* free old bitmap (if any) */
+ display_free_bitmap(ddev);
+
+ /* Initialise the clist/memory device specific fields. */
+ memset(ddev->skip, 0, sizeof(ddev->skip));
+ /* Calculate the size required for the a memory device. */
+ display_size_buf_device(&buf_space, (gx_device *)ddev,
+ NULL, ddev->height, false);
+ ddev->zBitmapSize = buf_space.bits + buf_space.line_ptrs;
+
+ if (ddev->callback->version_major > DISPLAY_VERSION_MAJOR_V2 ||
+ ddev->callback->display_rectangle_request != NULL) {
+ /* Clist mode is a possibility. Maybe check in here whether
+ * we want to suggest clist? */
+ /* FIXME: For now, we'll just assume that the memalloc callback
+ * is smart enough to make a sensible decision. */
+ }
+
/* allocate bitmap using an allocator not subject to GC */
if (ddev->callback->display_memalloc
&& ddev->callback->display_memfree) {
- ddev->pBitmap = (*ddev->callback->display_memalloc)(ddev->pHandle,
- ddev, ddev->ulBitmapSize);
+ /* Note: For Planar buffers, we allocate the linepointers
+ * as part of this allocation, just after the bitmap. Maybe we
+ * want to allocate them ourselves, so they aren't exposed to
+ * the caller? (Or the caller can pass in a pointer to a
+ * structure of it's own without having to allow for these
+ * pointers?)*/
+ if (ddev->callback->version_major > DISPLAY_VERSION_MAJOR_V2)
+ ddev->pBitmap = (*ddev->callback->display_memalloc)(ddev->pHandle,
+ ddev, ddev->zBitmapSize);
+ else if (ddev->zBitmapSize > ARCH_MAX_ULONG)
+ ddev->pBitmap = NULL;
+ else {
+ struct display_callback_v2_s *v2;
+ v2 = (struct display_callback_v2_s *)(ddev->callback);
+ ddev->pBitmap = (v2->display_memalloc)(ddev->pHandle,
+ ddev, (unsigned long)ddev->zBitmapSize);
+ }
}
else {
ddev->pBitmap = gs_alloc_byte_array_immovable(ddev->memory->non_gc_memory,
- (uint)ddev->ulBitmapSize, 1, "display_alloc_bitmap");
+ ddev->zBitmapSize, 1, "display_alloc_bitmap");
}
if (ddev->pBitmap == NULL) {
- ddev->mdev->width = 0;
- ddev->mdev->height = 0;
- return_error(gs_error_VMerror);
+ /* Bitmap failed to allocate. Can we recover by using rectangle
+ * request mode? */
+ if (ddev->callback->version_major <= DISPLAY_VERSION_MAJOR_V2 ||
+ ddev->callback->display_rectangle_request == NULL) {
+ /* No. Hard fail. */
+ ddev->width = 0;
+ ddev->height = 0;
+ return_error(gs_error_VMerror);
+ }
+ /* Let's set up as a clist. */
+ ccode = setup_as_clist(ddev, ddev->memory->non_gc_memory);
+ if (ccode >= 0)
+ ddev->procs = gs_clist_device_procs;
+ } else {
+ /* Set up as PageMode. */
+ gx_device *bdev = (gx_device *)ddev;
+
+ /* Ensure we're not seen as a clist device. */
+ ddev->buffer_space = 0;
+ if ((ccode = gdev_create_buf_device
+ (display_create_buf_device,
+ &bdev, bdev, 0, NULL, NULL, NULL)) < 0 ||
+ (ccode = gx_default_setup_buf_device
+ (bdev, ddev->pBitmap, buf_space.raster,
+ (byte **)((byte *)ddev->pBitmap + buf_space.bits), 0, ddev->height,
+ ddev->height)) < 0
+ ) {
+ /* Catastrophic. Shouldn't ever happen */
+ display_free_bitmap(ddev);
+ return_error(ccode);
+ }
}
- ddev->mdev->base = (byte *) ddev->pBitmap;
- ddev->mdev->foreign_bits = true;
+#define COPY_PROC(p) set_dev_proc(ddev, p, ddev->orig_procs.p)
+ COPY_PROC(get_initial_matrix);
+ COPY_PROC(output_page);
+ COPY_PROC(close_device);
+ COPY_PROC(map_rgb_color);
+ COPY_PROC(map_color_rgb);
+ COPY_PROC(get_params);
+ COPY_PROC(put_params);
+ COPY_PROC(map_cmyk_color);
+ COPY_PROC(get_xfont_procs);
+ COPY_PROC(get_xfont_device);
+ COPY_PROC(map_rgb_alpha_color);
+ set_dev_proc(ddev, get_page_device, gx_page_device_get_page_device);
+ COPY_PROC(get_clipping_box);
+ COPY_PROC(map_color_rgb_alpha);
+ COPY_PROC(get_hardware_params);
+ COPY_PROC(get_color_mapping_procs);
+ COPY_PROC(get_color_comp_index);
+ COPY_PROC(encode_color);
+ COPY_PROC(decode_color);
+ COPY_PROC(update_spot_equivalent_colors);
+ COPY_PROC(ret_devn_params);
+ /* This can be set from the memory device (planar) or target */
+ if ( dev_proc(ddev, put_image) == gx_default_put_image )
+ set_dev_proc(ddev, put_image, ddev->orig_procs.put_image);
+#undef COPY_PROC
+
+ /* Now, we want to hook various procs to give the callbacks
+ * progress reports. But only in non-clist mode. */
+ if (!CLIST_MUTATABLE_HAS_MUTATED(ddev)) {
+ ddev->mutated_procs = ddev->procs;
+ ddev->procs.fill_rectangle = display_fill_rectangle;
+ ddev->procs.copy_mono = display_copy_mono;
+ ddev->procs.copy_color = display_copy_color;
+ ddev->procs.get_bits = display_get_bits;
+ }
- ccode = dev_proc(ddev->mdev, open_device)((gx_device *)ddev->mdev);
- if (ccode < 0)
- display_free_bitmap(ddev);
+ /* In command list mode, we've already opened the device. */
+ if (!CLIST_MUTATABLE_HAS_MUTATED(ddev)) {
+ ccode = dev_proc(ddev, open_device)((gx_device *)ddev);
+ if (ccode < 0)
+ display_free_bitmap(ddev);
+ }
/* erase bitmap - before display gets redrawn */
/*
@@ -1741,21 +2149,30 @@ display_set_color_format(gx_device_display *ddev, int nFormat)
switch (ddev->nFormat & DISPLAY_ROW_ALIGN_MASK) {
case DISPLAY_ROW_ALIGN_DEFAULT:
align = ARCH_ALIGN_PTR_MOD;
+ if (sizeof(void *) == 4)
+ ddev->log2_align_mod = 2;
+ else
+ ddev->log2_align_mod = 3;
break;
case DISPLAY_ROW_ALIGN_4:
align = 4;
+ ddev->log2_align_mod = 2;
break;
case DISPLAY_ROW_ALIGN_8:
align = 8;
+ ddev->log2_align_mod = 3;
break;
case DISPLAY_ROW_ALIGN_16:
align = 16;
+ ddev->log2_align_mod = 4;
break;
case DISPLAY_ROW_ALIGN_32:
align = 32;
+ ddev->log2_align_mod = 5;
break;
case DISPLAY_ROW_ALIGN_64:
align = 64;
+ ddev->log2_align_mod = 6;
break;
default:
align = 0; /* not permitted */
@@ -1867,6 +2284,11 @@ display_set_color_format(gx_device_display *ddev, int nFormat)
maxvalue, maxvalue);
if ((nFormat & DISPLAY_DEPTH_MASK) == DISPLAY_DEPTH_8) {
ddev->devn_params.bitspercomponent = bpc;
+ if (ddev->icc_struct == NULL) {
+ ddev->icc_struct = gsicc_new_device_profile_array(ddev->memory);
+ if (ddev->icc_struct == NULL)
+ return_error(gs_error_VMerror);
+ }
ddev->icc_struct->supports_devn = true;
set_color_procs(pdev,
display_separation_encode_color,
@@ -1882,6 +2304,16 @@ display_set_color_format(gx_device_display *ddev, int nFormat)
return_error(gs_error_rangecheck);
}
+ switch (nFormat & (DISPLAY_PLANAR | DISPLAY_PLANAR_INTERLEAVED))
+ {
+ case DISPLAY_CHUNKY:
+ ddev->is_planar = 0;
+ break;
+ default:
+ ddev->is_planar = 1;
+ break;
+ }
+
/* restore old anti_alias info */
dci.anti_alias = ddev->color_info.anti_alias;
ddev->color_info = dci;
diff --git a/devices/gdevdsp.h b/devices/gdevdsp.h
index e8ddd9af..a062374b 100644
--- a/devices/gdevdsp.h
+++ b/devices/gdevdsp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -19,30 +19,45 @@
# define gdevdsp_INCLUDED
/*
- * The callback structure must be provided by calling the
- * Ghostscript APIs in the following order:
+ * There are 2 mechanisms to provide the callback structure to
+ * Ghostscript. A legacy one, and a modern one. The legacy one is
+ * deprecated and should not be used in new code - at some point it may
+ * be removed.
+ *
+ * Modern method: Call the Ghostscript APIs in the following order:
* gsapi_new_instance(&minst);
- * gsapi_set_display_callback(minst, callback);
+ * gsapi_register_callout(minst, callout, callout_handle);
* gsapi_init_with_args(minst, argc, argv);
*
+ * The callout handler should look for a callout from the 'display'
+ * device, with id=DISPLAY_CALLOUT_GET_CALLBACK and respond by filling
+ * in the supplied gs_display_get_callback_t structure.
+ *
* Supported parameters and default values are:
+ * -dDisplayFormat=0 long
+ * Color format specified using bitfields below.
+ * Included as argument of display_size() and display_presize()
+ * These can only be changed when the device is closed.
+ *
+ * Legacy method: Call the Ghostscript APIs in the following order:
+ * gsapi_new_instance(&minst);
+ * gsapi_set_display_callback(minst, callback);
+ * gsapi_init_with_args(minst, argc, argv);
+ *
+ * An additional parameter is supported, with default value NULL:
* -sDisplayHandle=16#04d2 or 1234 string
* Caller supplied handle as a decimal or hexadecimal number
* in a string. On 32-bit platforms, it may be set
* using -dDisplayHandle=1234 for backward compatibility.
* Included as first parameter of all callback functions.
*
- * -dDisplayFormat=0 long
- * Color format specified using bitfields below.
- * Included as argument of display_size() and display_presize()
- * These can only be changed when the device is closed.
- *
* The second parameter of all callback functions "void *device"
* is the address of the Ghostscript display device instance.
* The arguments "void *handle" and "void *device" together
* uniquely identify an instance of the display device.
*
- * A typical sequence of callbacks would be
+ * A typical sequence of callbacks (when running without a
+ * display_choose_mode) would be:
* open, presize, memalloc, size, sync, page
* presize, memfree, memalloc, size, sync, page
* preclose, memfree, close
@@ -53,14 +68,43 @@
* If opening the device fails, you might see the following:
* open, presize, memalloc, memfree, close
*
+ * A typical sequence of callbacks (when running with a
+ * display_choose_mode) will depend upon whether display_choose_mode
+ * selects pagemode or request-rectangle mode:
+ *
+ * In the pagemode case:
+ * open, presize, display_choose_mode, memalloc, size, sync, page
+ * presize, display_choose_mode, memfree, memalloc, size, sync, page
+ * preclose, memfree, close
+ * The caller should not access the image buffer:
+ * - before the first sync
+ * - between presize and size
+ * - after preclose
+ * If opening the device fails, you might see the following:
+ * open, presize, memalloc, memfree, close
+ *
+ * In the request-rectangle mode:
+ * open, presize, display_choose_mode, {rectangle_request}*
+ * presize, display_choose_mode, {rectangle_request}*
+ * preclose, close
+ *
+ * In a run that mixed request-rectangle and pagemode:
+ * open, presize, display_choose_mode, memalloc, size, sync, page
+ * presize, display_choose_mode, memfree, {rectangle_request}*
+ * presize, display_choose_mode, {rectangle_request}*
+ * presize, display_choose_mode, memalloc, size, sync, page
+ * preclose, memfree, close
*/
-#define DISPLAY_VERSION_MAJOR 2
+#define DISPLAY_VERSION_MAJOR 3
#define DISPLAY_VERSION_MINOR 0
#define DISPLAY_VERSION_MAJOR_V1 1 /* before separation format was added */
#define DISPLAY_VERSION_MINOR_V1 0
+#define DISPLAY_VERSION_MAJOR_V2 2 /* before planar and banding were added */
+#define DISPLAY_VERSION_MINOR_V2 0
+
/* The display format is set by a combination of the following bitfields */
/* Define the color space alternatives */
@@ -144,6 +188,14 @@ typedef enum {
} DISPLAY_FORMAT_ROW_ALIGN;
#define DISPLAY_ROW_ALIGN_MASK 0x00700000L
+/* Define whether we are using chunky, planar or planar interleaved
+ * representation. */
+typedef enum {
+ DISPLAY_CHUNKY = (0<<23),
+ DISPLAY_PLANAR = (1<<23),
+ DISPLAY_PLANAR_INTERLEAVED = (2<<23),
+} DISPLAY_FORMAT_PLANARNESS;
+
#ifndef display_callback_DEFINED
#define display_callback_DEFINED
typedef struct display_callback_s display_callback;
@@ -204,6 +256,10 @@ struct display_callback_s {
/* This can be used for cooperative multitasking or for
* progressive update of the display.
* This function pointer may be set to NULL if not required.
+ * NOTE: This is actually a really bad thing to work on. It may well
+ * end up not being called back at all during the rendering process,
+ * in particular if transparency is in use, or if rectangle request
+ * mode is used.
*/
int (*display_update)(void *handle, void *device, int x, int y,
int w, int h);
@@ -214,8 +270,14 @@ struct display_callback_s {
* allocates the bitmap. This will only called to allocate the
* image buffer. The first row will be placed at the address
* returned by display_memalloc.
+ *
+ * In the event of this callback returning NULL, Ghostscript will
+ * look for a display_rectangle_request callback. If one is not
+ * supplied, then this will be reported as memory exhaustion. If
+ * one is supplied, then Ghostscript will switch to working in
+ * rectangle request mode.
*/
- void *(*display_memalloc)(void *handle, void *device, unsigned long size);
+ void *(*display_memalloc)(void *handle, void *device, size_t size);
/* Free memory for bitmap */
/* If this is NULL, the Ghostscript memory device will free the bitmap */
@@ -238,13 +300,80 @@ struct display_callback_s {
int component, const char *component_name,
unsigned short c, unsigned short m,
unsigned short y, unsigned short k);
+
+ /* Added in V3 */
+ /* If non NULL, then this gives the callback provider a chance to
+ * a) be informed of and b) control the bandheight used by the
+ * display device. If a call to allocate the page mode bitmap fails
+ * (either an internal allocation or a display_memalloc call), then
+ * Ghostscript will look for the presence of a
+ * display_rectangle_request callback. If it exists, then it will
+ * attempt to use retangle request mode.
+ *
+ * As part of this, it will pick an appropriate bandheight. If
+ * this callback exists, it will be called so the callback provider
+ * can know (and, optionally, tweak) the bandheight to be used.
+ * This is purely for performance. The callback should only ever
+ * *reduce* the bandheight given here.
+ *
+ * Return the adjusted bandheight (or 0 for no change).
+ */
+ int (*display_adjust_band_height)(void *handle, void *device,
+ int bandheight);
+
+ /* Ask the callback for a rectangle to render (and a block to render
+ * it in). Each subsequent call tells the caller that any previous
+ * call has finished. To signal 'no more rectangles' return with
+ * *w or *h = 0.
+ *
+ * On entry: *raster and *plane_raster are set to the standard
+ * values. All other values are undefined.
+ * On return: *memory should point to a block of memory to use.
+ * Pixel (*ox,*oy) is the first pixel represented in that block.
+ * *raster = the number of bytes difference between the address of
+ * component 0 of Pixel(*ox,*oy) and the address of component 0 of
+ * Pixel(*ox,1+*oy).
+ * *plane_raster = the number of bytes difference between the
+ * address of component 0 of Pixel(*ox,*oy) and the address of
+ * component 1 of Pixel(*ox,*oy), if in planar mode, 0 otherwise.
+ * *x, *y, *w, *h = rectangle requested within that memory block.
+ *
+ */
+ int (*display_rectangle_request)(void *handle, void *device,
+ void **memory, int *ox, int *oy,
+ int *raster, int *plane_raster,
+ int *x, int *y, int *w, int *h);
+};
+
+/* This is the V2 structure, before banding and planar support was added */
+struct display_callback_v2_s {
+ int size; /* sizeof(struct display_callback_v2) */
+ int version_major; /* DISPLAY_VERSION_MAJOR_V2 */
+ int version_minor; /* DISPLAY_VERSION_MINOR_V2 */
+ int (*display_open)(void *handle, void *device);
+ int (*display_preclose)(void *handle, void *device);
+ int (*display_close)(void *handle, void *device);
+ int (*display_presize)(void *handle, void *device,
+ int width, int height, int raster, unsigned int format);
+ int (*display_size)(void *handle, void *device, int width, int height,
+ int raster, unsigned int format, unsigned char *pimage);
+ int (*display_sync)(void *handle, void *device);
+ int (*display_page)(void *handle, void *device, int copies, int flush);
+ int (*display_update)(void *handle, void *device, int x, int y,
+ int w, int h);
+ void *(*display_memalloc)(void *handle, void *device, unsigned long size);
+ int (*display_memfree)(void *handle, void *device, void *mem);
+ int (*display_separation)(void *handle, void *device,
+ int component, const char *component_name,
+ unsigned short c, unsigned short m,
+ unsigned short y, unsigned short k);
};
/* This is the V1 structure, before separation format was added */
struct display_callback_v1_s {
- int size;
- int version_major;
- int version_minor;
+ int size; /* sizeof(struct display_callback_v1) */
+ int version_major; /* DISPLAY_VERSION_MAJOR_V1 */
+ int version_minor; /* DISPLAY_VERSION_MINOR_V1 */
int (*display_open)(void *handle, void *device);
int (*display_preclose)(void *handle, void *device);
int (*display_close)(void *handle, void *device);
@@ -262,4 +391,27 @@ struct display_callback_v1_s {
#define DISPLAY_CALLBACK_V1_SIZEOF sizeof(struct display_callback_v1_s)
+#define DISPLAY_CALLOUT_GET_CALLBACK 0
+#define DISPLAY_CALLOUT_GET_CALLBACK_LEGACY 1
+
+typedef struct {
+ display_callback *callback;
+ void *caller_handle;
+} gs_display_get_callback_t;
+
+/* The display device calls a callout to find the callback structure
+ * and caller_handle from the environment (the DLL caller/user of the
+ * API).
+ * It passes:
+ * id = DISPLAY_CALLOUT_GET_CALLBACK.
+ * size = sizeof(gs_display_get_callback_t) (or larger);
+ * data = pointer to gs_display_get_callback_t instance for callout
+ * handler to fill in.
+ *
+ * In order to support the old gsapi_set_display_callback we have a
+ * related callout, DISPLAY_CALLOUT_GET_CALLBACK_LEGACY. Do not use
+ * this!
+ */
+
+
#endif /* gdevdsp_INCLUDED */
diff --git a/devices/gdevdsp2.h b/devices/gdevdsp2.h
index 4dddbf58..3a098873 100644
--- a/devices/gdevdsp2.h
+++ b/devices/gdevdsp2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -20,23 +20,26 @@
#include "gdevdevn.h"
#include "gdevdsp.h"
+#include "gxclist.h"
typedef struct gx_device_display_s gx_device_display;
#define gx_device_display_common\
- gx_device_memory *mdev;\
display_callback *callback;\
void *pHandle;\
+ int pHandle_set;\
int nFormat;\
void *pBitmap;\
- unsigned long ulBitmapSize;\
+ size_t zBitmapSize;\
int HWResolution_set;\
gs_devn_params devn_params;\
- equivalent_cmyk_color_params equiv_cmyk_colors
+ equivalent_cmyk_color_params equiv_cmyk_colors;\
+ gx_device_procs mutated_procs
/* The device descriptor */
struct gx_device_display_s {
gx_device_common;
+ gx_device_clist_mutatable_common;
gx_device_display_common;
};
diff --git a/devices/gdevepsc.c b/devices/gdevepsc.c
index f6fa2b30..830d7668 100644
--- a/devices/gdevepsc.c
+++ b/devices/gdevepsc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevepsn.c b/devices/gdevepsn.c
index c69e4b53..7b77b998 100644
--- a/devices/gdevepsn.c
+++ b/devices/gdevepsn.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevescp.c b/devices/gdevescp.c
index 005fa58a..14e420b5 100644
--- a/devices/gdevescp.c
+++ b/devices/gdevescp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevfax.c b/devices/gdevfax.c
index dd783239..27b3c888 100644
--- a/devices/gdevfax.c
+++ b/devices/gdevfax.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -239,14 +239,14 @@ gdev_fax_print_strip(gx_device_printer * pdev, gp_file * prn_stream,
int status;
if_debug7m('w', mem,
- "[w]lnum=%d r=0x%lx,0x%lx,0x%lx w=0x%lx,0x%lx,0x%lx\n", lnum,
- (ulong)in, (ulong)r.ptr, (ulong)r.limit,
- (ulong)out, (ulong)w.ptr, (ulong)w.limit);
+ "[w]lnum=%d r="PRI_INTPTR","PRI_INTPTR","PRI_INTPTR" w="PRI_INTPTR","PRI_INTPTR","PRI_INTPTR"\n", lnum,
+ (intptr_t)in, (intptr_t)r.ptr, (intptr_t)r.limit,
+ (intptr_t)out, (intptr_t)w.ptr, (intptr_t)w.limit);
status = temp->process(ss, &r, &w, lnum == row_end);
if_debug7m('w', mem,
- "...%d, r=0x%lx,0x%lx,0x%lx w=0x%lx,0x%lx,0x%lx\n", status,
- (ulong)in, (ulong)r.ptr, (ulong)r.limit,
- (ulong)out, (ulong)w.ptr, (ulong)w.limit);
+ "...%d, r="PRI_INTPTR","PRI_INTPTR","PRI_INTPTR" w="PRI_INTPTR","PRI_INTPTR","PRI_INTPTR"\n", status,
+ (intptr_t)in, (intptr_t)r.ptr, (intptr_t)r.limit,
+ (intptr_t)out, (intptr_t)w.ptr, (intptr_t)w.limit);
switch (status) {
case 0: /* need more input data */
if (lnum == row_end)
diff --git a/devices/gdevfax.h b/devices/gdevfax.h
index ca989269..b0419d31 100644
--- a/devices/gdevfax.h
+++ b/devices/gdevfax.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevfpng.c b/devices/gdevfpng.c
index cc91f672..74cfac70 100644
--- a/devices/gdevfpng.c
+++ b/devices/gdevfpng.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevhl7x.c b/devices/gdevhl7x.c
index 1a3e5949..66d1db29 100644
--- a/devices/gdevhl7x.c
+++ b/devices/gdevhl7x.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevicov.c b/devices/gdevicov.c
index 517ca4ff..355be240 100644
--- a/devices/gdevicov.c
+++ b/devices/gdevicov.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevijs.c b/devices/gdevijs.c
index 3d337c5d..42e1e916 100644
--- a/devices/gdevijs.c
+++ b/devices/gdevijs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -78,7 +78,7 @@
/* This should go into gdevprn.h, or, better yet, gdevprn should
acquire an API for changing resolution. */
int gdev_prn_maybe_realloc_memory(gx_device_printer *pdev,
- gdev_prn_space_params *old_space,
+ gdev_space_params *old_space,
int old_width, int old_height,
bool old_page_uses_transparency);
diff --git a/devices/gdevimgn.c b/devices/gdevimgn.c
index 7c707bda..c6e291a4 100644
--- a/devices/gdevimgn.c
+++ b/devices/gdevimgn.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevjbig2.c b/devices/gdevjbig2.c
index a0dda91f..d6b4ef96 100644
--- a/devices/gdevjbig2.c
+++ b/devices/gdevjbig2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevjpeg.c b/devices/gdevjpeg.c
index 229e6ccb..7162acdb 100644
--- a/devices/gdevjpeg.c
+++ b/devices/gdevjpeg.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -437,7 +437,8 @@ jpeg_print_page(gx_device_printer * pdev, gp_file * prn_stream)
goto fail;
}
code = gx_downscaler_init(&ds, (gx_device *)jdev, 8, 8,
- jdev->color_info.depth/8, jdev->downscale.downscale_factor, 0, NULL, 0);
+ jdev->color_info.depth/8,
+ &jdev->downscale, NULL, 0);
if (code < 0) {
gs_free_object(mem, jcdp, "jpeg_print_page(jpeg_compress_data)");
jcdp = NULL;
@@ -462,8 +463,9 @@ jpeg_print_page(gx_device_printer * pdev, gp_file * prn_stream)
state.data.compress = jcdp;
/* Add in ICC profile */
state.icc_profile = NULL; /* In case it is not set here */
- if (pdev->icc_struct != NULL && pdev->icc_struct->device_profile[0] != NULL) {
- cmm_profile_t *icc_profile = pdev->icc_struct->device_profile[0];
+ if (pdev->icc_struct != NULL &&
+ pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE] != NULL) {
+ cmm_profile_t *icc_profile = pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE];
if (icc_profile->num_comps == pdev->color_info.num_components &&
!(pdev->icc_struct->usefastcolor)) {
state.icc_profile = icc_profile;
diff --git a/devices/gdevjpx.c b/devices/gdevjpx.c
index e38f5402..b3c3690b 100644
--- a/devices/gdevjpx.c
+++ b/devices/gdevjpx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevl31s.c b/devices/gdevl31s.c
index b21b18c8..a3225ea9 100644
--- a/devices/gdevl31s.c
+++ b/devices/gdevl31s.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevlbp8.c b/devices/gdevlbp8.c
index 3136772a..ca96b69c 100644
--- a/devices/gdevlbp8.c
+++ b/devices/gdevlbp8.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevlj56.c b/devices/gdevlj56.c
index 6199e5be..a3314e03 100644
--- a/devices/gdevlj56.c
+++ b/devices/gdevlj56.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevlp8k.c b/devices/gdevlp8k.c
index 58ae0702..60d3c6e3 100644
--- a/devices/gdevlp8k.c
+++ b/devices/gdevlp8k.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevlxm.c b/devices/gdevlxm.c
index fe577c32..6e557ede 100644
--- a/devices/gdevlxm.c
+++ b/devices/gdevlxm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevmeds.c b/devices/gdevmeds.c
index c7899ea3..9435fed3 100644
--- a/devices/gdevmeds.c
+++ b/devices/gdevmeds.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevmeds.h b/devices/gdevmeds.h
index 8400f5d8..2c247299 100644
--- a/devices/gdevmeds.h
+++ b/devices/gdevmeds.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevmgr.c b/devices/gdevmgr.c
index 79c299d5..d0b81b11 100644
--- a/devices/gdevmgr.c
+++ b/devices/gdevmgr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -218,10 +218,11 @@ mgrN_print_page(gx_device_printer *pdev, gp_file *pstream)
}
}
- if ( bdev->mgr_depth != 8 )
+ if ( bdev->mgr_depth != 8 ) {
data = (byte *)gs_malloc(pdev->memory, mgr_line_size, 1, "mgrN_print_page");
- if (data == NULL)
- return_error(gs_error_VMerror);
+ if (data == NULL)
+ return_error(gs_error_VMerror);
+ }
while ( !(code = mgr_next_row(&cur)) )
{
diff --git a/devices/gdevmgr.h b/devices/gdevmgr.h
index 6b8056a5..483237ec 100644
--- a/devices/gdevmgr.h
+++ b/devices/gdevmgr.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevmiff.c b/devices/gdevmiff.c
index ed45474d..c1d56496 100644
--- a/devices/gdevmiff.c
+++ b/devices/gdevmiff.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevn533.c b/devices/gdevn533.c
index 35720364..c697d441 100644
--- a/devices/gdevn533.c
+++ b/devices/gdevn533.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevo182.c b/devices/gdevo182.c
index 713596a0..ec26205c 100644
--- a/devices/gdevo182.c
+++ b/devices/gdevo182.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevocr.c b/devices/gdevocr.c
new file mode 100644
index 00000000..ddfaa809
--- /dev/null
+++ b/devices/gdevocr.c
@@ -0,0 +1,265 @@
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
+ 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.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+
+#include "gdevprn.h"
+#include "gdevmem.h"
+#include "gdevpccm.h"
+#include "gscdefs.h"
+#include "gxgetbit.h"
+#include "tessocr.h"
+#include "gxdownscale.h"
+
+/* ------ The device descriptors ------ */
+
+/*
+ * Default X and Y resolution.
+ */
+#define X_DPI 72
+#define Y_DPI 72
+
+static dev_proc_print_page(ocr_print_page);
+static dev_proc_print_page(hocr_print_page);
+static dev_proc_get_params(ocr_get_params);
+static dev_proc_put_params(ocr_put_params);
+static dev_proc_open_device(hocr_open);
+static dev_proc_close_device(hocr_close);
+
+typedef struct gx_device_ocr_s gx_device_ocr;
+struct gx_device_ocr_s {
+ gx_device_common;
+ gx_prn_device_common;
+ gx_downscaler_params downscale;
+ char language[1024];
+ int page_count;
+};
+
+/* 8-bit gray bitmap -> UTF8 OCRd text */
+
+static const gx_device_procs ocr_procs =
+prn_color_params_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
+ gx_default_gray_map_rgb_color,
+ gx_default_gray_map_color_rgb,
+ ocr_get_params, ocr_put_params);
+const gx_device_ocr gs_ocr_device =
+{
+ prn_device_body(gx_device_ocr, ocr_procs, "ocr",
+ DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
+ X_DPI, Y_DPI,
+ 0, 0, 0, 0, /* margins */
+ 1, 8, 255, 0, 256, 0, ocr_print_page),
+ GX_DOWNSCALER_PARAMS_DEFAULTS
+};
+
+/* 8-bit gray bitmap -> HTML OCRd text */
+
+static const gx_device_procs hocr_procs =
+prn_color_params_procs(hocr_open, gdev_prn_bg_output_page, hocr_close,
+ gx_default_gray_map_rgb_color,
+ gx_default_gray_map_color_rgb,
+ ocr_get_params, ocr_put_params);
+const gx_device_ocr gs_hocr_device =
+{
+ prn_device_body(gx_device_ocr, hocr_procs, "hocr",
+ DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
+ X_DPI, Y_DPI,
+ 0, 0, 0, 0, /* margins */
+ 1, 8, 255, 0, 256, 0, hocr_print_page),
+ GX_DOWNSCALER_PARAMS_DEFAULTS
+};
+
+/* ------ Private definitions ------ */
+
+#define HOCR_HEADER "<html>\n <body>\n"
+#define HOCR_TRAILER " </body>\n</html>\n"
+
+static int
+hocr_open(gx_device *pdev)
+{
+ gx_device_ocr *dev = (gx_device_ocr *)pdev;
+
+ dev->page_count = 0;
+
+ return gdev_prn_open(pdev);
+}
+
+static int
+hocr_close(gx_device *pdev)
+{
+ gx_device_ocr *dev = (gx_device_ocr *)pdev;
+ gx_device_printer * const ppdev = (gx_device_printer *)pdev;
+
+ if (dev->page_count > 0 && dev->file != NULL) {
+ gp_fwrite(HOCR_TRAILER, 1, sizeof(HOCR_TRAILER)-1, dev->file);
+ }
+
+ return gdev_prn_close(pdev);
+}
+
+static int
+ocr_get_params(gx_device * dev, gs_param_list * plist)
+{
+ gx_device_ocr *pdev = (gx_device_ocr *)dev;
+ int code, ecode = 0;
+ gs_param_string langstr;
+
+ if (pdev->language[0]) {
+ langstr.data = (const byte *)pdev->language;
+ langstr.size = strlen(pdev->language);
+ langstr.persistent = false;
+ } else {
+ langstr.data = (const byte *)"eng";
+ langstr.size = 3;
+ langstr.persistent = false;
+ }
+ if ((code = param_write_string(plist, "OCRLanguage", &langstr)) < 0)
+ ecode = code;
+
+ if ((code = gx_downscaler_write_params(plist, &pdev->downscale,
+ GX_DOWNSCALER_PARAMS_MFS)) < 0)
+ ecode = code;
+
+ code = gdev_prn_get_params(dev, plist);
+ if (code < 0)
+ ecode = code;
+
+ return ecode;
+}
+
+static int
+ocr_put_params(gx_device *dev, gs_param_list *plist)
+{
+ gx_device_ocr *pdev = (gx_device_ocr *)dev;
+ int code, ecode = 0;
+ gs_param_string langstr;
+ const char *param_name;
+ size_t len;
+
+ switch (code = param_read_string(plist, (param_name = "OCRLanguage"), &langstr)) {
+ case 0:
+ len = langstr.size;
+ if (len >= sizeof(pdev->language))
+ len = sizeof(pdev->language)-1;
+ memcpy(pdev->language, langstr.data, len);
+ pdev->language[len] = 0;
+ break;
+ case 1:
+ break;
+ default:
+ ecode = code;
+ param_signal_error(plist, param_name, ecode);
+ }
+
+ code = gx_downscaler_read_params(plist, &pdev->downscale,
+ GX_DOWNSCALER_PARAMS_MFS);
+ if (code < 0)
+ {
+ ecode = code;
+ param_signal_error(plist, param_name, ecode);
+ }
+
+ code = gdev_prn_put_params(dev, plist);
+ if (code < 0)
+ ecode = code;
+
+ return ecode;
+}
+
+/* OCR a page and write it out. */
+static int
+do_ocr_print_page(gx_device_ocr * pdev, gp_file * file, int hocr)
+{
+ gs_memory_t *mem = pdev->memory;
+ int row;
+ byte *data = NULL;
+ char *out;
+ int factor = pdev->downscale.downscale_factor;
+ int height = gx_downscaler_scale(pdev->height, factor);
+ int width = gx_downscaler_scale(pdev->width, factor);
+ int raster = bitmap_raster(width*8);
+ gx_downscaler_t ds;
+ int code;
+
+ code = gx_downscaler_init(&ds,
+ (gx_device *)pdev,
+ 8, /* src_bpc */
+ 8, /* dst_bpc */
+ 1, /* num_comps */
+ &pdev->downscale,
+ NULL, 0); /* adjust_width_proc, width */
+ if (code < 0)
+ return code;
+
+ data = gs_alloc_bytes(pdev->memory,
+ raster * height,
+ "do_ocr_print_page");
+ if (data == NULL) {
+ gx_downscaler_fin(&ds);
+ code = gs_error_VMerror;
+ goto done;
+ }
+
+ for (row = 0; row < height && code >= 0; row++) {
+ code = gx_downscaler_getbits(&ds, data + row * raster, row);
+ }
+ gx_downscaler_fin(&ds);
+ if (code < 0)
+ goto done;
+
+ if (hocr)
+ code = ocr_image_to_hocr(pdev->memory,
+ width, height,
+ 8, raster,
+ (int)pdev->HWResolution[0],
+ (int)pdev->HWResolution[1],
+ data, 0, pdev->page_count,
+ "eng", &out);
+ else
+ code = ocr_image_to_utf8(pdev->memory,
+ width, height,
+ 8, raster,
+ (int)pdev->HWResolution[0],
+ (int)pdev->HWResolution[1],
+ data, 0, "eng", &out);
+ if (code < 0)
+ goto done;
+ if (out)
+ {
+ if (hocr && pdev->page_count == 0) {
+ gp_fwrite(HOCR_HEADER, 1, sizeof(HOCR_HEADER)-1, file);
+ }
+ gp_fwrite(out, 1, strlen(out), file);
+ gs_free_object(pdev->memory, out, "ocr_image_to_utf8");
+ }
+
+ done:
+ if (data)
+ gs_free_object(pdev->memory, data, "do_ocr_print_page");
+ pdev->page_count++;
+
+ return code;
+}
+
+static int
+ocr_print_page(gx_device_printer * pdev, gp_file * file)
+{
+ return do_ocr_print_page((gx_device_ocr *)pdev, file, 0);
+}
+
+static int
+hocr_print_page(gx_device_printer * pdev, gp_file * file)
+{
+ return do_ocr_print_page((gx_device_ocr *)pdev, file, 1);
+}
diff --git a/devices/gdevokii.c b/devices/gdevokii.c
index 3350f6d9..62fe616c 100644
--- a/devices/gdevokii.c
+++ b/devices/gdevokii.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevpbm.c b/devices/gdevpbm.c
index 412d0109..fd9b2619 100644
--- a/devices/gdevpbm.c
+++ b/devices/gdevpbm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevpcl.c b/devices/gdevpcl.c
index befb1bf2..be196663 100644
--- a/devices/gdevpcl.c
+++ b/devices/gdevpcl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevpcl.h b/devices/gdevpcl.h
index 24496cf2..3d167ae4 100644
--- a/devices/gdevpcl.h
+++ b/devices/gdevpcl.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevpcx.c b/devices/gdevpcx.c
index 91de4abb..137955cb 100644
--- a/devices/gdevpcx.c
+++ b/devices/gdevpcx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevpdfimg.c b/devices/gdevpdfimg.c
index 998574c8..313d714f 100644
--- a/devices/gdevpdfimg.c
+++ b/devices/gdevpdfimg.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -30,6 +30,8 @@
#include "gsicc_cache.h"
#include "sjpeg.h"
+#include "gdevpdfimg.h"
+
#define COMPRESSION_NONE 1 /* dump mode */
#define COMPRESSION_LZW 2 /* Lempel-Ziv & Welch */
#define COMPRESSION_FLATE 3
@@ -48,58 +50,9 @@ static struct compression_string {
{ 0, NULL }
};
-int pdf_image_open(gx_device *pdev);
int PCLm_open(gx_device *pdev);
-int pdf_image_close(gx_device * pdev);
int PCLm_close(gx_device * pdev);
-int pdf_image_put_params_downscale(gx_device * dev, gs_param_list * plist);
-int pdf_image_put_params_downscale_cmyk(gx_device * dev, gs_param_list * plist);
-int pdf_image_put_params_downscale_cmyk_ets(gx_device * dev, gs_param_list * plist);
-int pdf_image_get_params_downscale(gx_device * dev, gs_param_list * plist);
-int pdf_image_get_params_downscale_cmyk(gx_device * dev, gs_param_list * plist);
-int pdf_image_get_params_downscale_cmyk_ets(gx_device * dev, gs_param_list * plist);
-
-typedef struct pdfimage_page_s {
- int ImageObjectNumber;
- gs_offset_t ImageOffset;int LengthObjectNumber;
- gs_offset_t LengthOffset;
- int PageStreamObjectNumber;
- gs_offset_t PageStreamOffset;
- int PageDictObjectNumber;
- gs_offset_t PageDictOffset;
- void *next;
-} pdfimage_page;
-
-typedef struct PCLm_temp_file_s {
- char file_name[gp_file_name_sizeof];
- gp_file *file;
- stream *strm;
- stream *save;
- byte *strm_buf;
-} PCLm_temp_file_t;
-
-typedef struct gx_device_pdf_image_s {
- gx_device_common;
- gx_prn_device_common;
- unsigned char Compression;
- gx_downscaler_params downscale;
- int StripHeight;
- float QFactor;
- int JPEGQ;
- gsicc_link_t *icclink;
- stream *strm;
- byte *strm_buf;
- int NumPages;
- gs_offset_t RootOffset;
- gs_offset_t PagesOffset;
- gs_offset_t xrefOffset;
- pdfimage_page *Pages;
- PCLm_temp_file_t xref_stream;
- PCLm_temp_file_t temp_stream;
- int NextObject;
-} gx_device_pdf_image;
-
-static dev_proc_print_page(pdf_image_print_page);
+
/* ------ The pdfimage8 device ------ */
@@ -268,7 +221,7 @@ static int gdev_pdf_image_begin_page(gx_device_pdf_image *pdf_dev,
&rendering_params);
} else {
pdf_dev->icclink = gsicc_alloc_link_dev(pdev->memory,
- profile_struct->device_profile[0], profile_struct->postren_profile,
+ profile_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE], profile_struct->postren_profile,
&rendering_params);
}
if (pdf_dev->icclink == NULL) {
@@ -291,11 +244,11 @@ static int gdev_pdf_image_begin_page(gx_device_pdf_image *pdf_dev,
}
pdf_dev->strm_buf = gs_alloc_bytes(pdf_dev->memory->non_gc_memory, pdf_dev->width * (pdf_dev->color_info.depth / 8),
"pdfimage_open_temp_stream(strm_buf)");
- if (pdf_dev->strm_buf == 0) {
+ if (pdf_dev->strm_buf == NULL) {
pdf_dev->strm->file = NULL; /* Don't close underlying file when we free the stream */
gs_free_object(pdf_dev->memory->non_gc_memory, pdf_dev->strm,
"pdfimage_open_temp_stream(strm)");
- pdf_dev->strm = 0;
+ pdf_dev->strm = NULL;
gs_free_object(pdf_dev->memory->non_gc_memory, page, "pdfimage create new page");
return_error(gs_error_VMerror);
}
@@ -303,6 +256,20 @@ static int gdev_pdf_image_begin_page(gx_device_pdf_image *pdf_dev,
stream_puts(pdf_dev->strm, "%PDF-1.3\n");
stream_puts(pdf_dev->strm, "%\307\354\217\242\n");
+
+ if (pdf_dev->ocr.file_init) {
+ code = pdf_dev->ocr.file_init(pdf_dev);
+ if (code < 0) {
+ gs_free_object(pdf_dev->memory->non_gc_memory, pdf_dev->strm_buf, "pdfimage_open_temp_stream(strm_buf)");
+ pdf_dev->strm->file = NULL; /* Don't close underlying file when we free the stream */
+ gs_free_object(pdf_dev->memory->non_gc_memory, pdf_dev->strm,
+ "pdfimage_open_temp_stream(strm)");
+ pdf_dev->strm = NULL;
+ gs_free_object(pdf_dev->memory->non_gc_memory, page, "pdfimage create new page");
+ return code;
+ }
+ }
+
pdfimage_write_args_comment(pdf_dev, pdf_dev->strm);
pdf_dev->Pages = page;
} else {
@@ -311,7 +278,7 @@ static int gdev_pdf_image_begin_page(gx_device_pdf_image *pdf_dev,
current = current->next;
current->next = page;
}
- page->ImageObjectNumber = (pdf_dev->NumPages * 4) + 3;
+ page->ImageObjectNumber = (pdf_dev->NumPages * 4) + 3 + pdf_dev->ocr.file_objects;
page->LengthObjectNumber = page->ImageObjectNumber + 1;
page->PageStreamObjectNumber = page->LengthObjectNumber + 1;
page->PageDictObjectNumber = page->PageStreamObjectNumber + 1;
@@ -449,19 +416,19 @@ encode(gx_device *pdev, stream **s, const stream_template *t, gs_memory_t *mem)
}
static int
-pdf_image_downscale_and_print_page(gx_device_printer *dev, int factor,
- int mfs, int bpc, int num_comps,
- int trap_w, int trap_h, const int *trap_order,
- int ets)
+pdf_image_downscale_and_print_page(gx_device_printer *dev,
+ gx_downscaler_params *params,
+ int bpc, int num_comps)
{
gx_device_pdf_image *const pdf_dev = (gx_device_pdf_image *)dev;
int code = 0;
byte *data = NULL;
int size = gdev_mem_bytes_per_scan_line((gx_device *)dev);
- int max_size =size;
+ int max_size = size;
int row;
- int height = dev->height/factor;
- int width = dev->width/factor;
+ int factor = params->downscale_factor;
+ int height = gx_downscaler_scale(dev->height, factor);
+ int width = gx_downscaler_scale(dev->width, factor);
gx_downscaler_t ds;
gs_offset_t stream_pos = 0;
pdfimage_page *page = pdf_dev->Pages;
@@ -474,24 +441,23 @@ pdf_image_downscale_and_print_page(gx_device_printer *dev, int factor,
while(page->next)
page = page->next;
- if (num_comps == 4) {
- if (pdf_dev->icclink == NULL) {
- code = gx_downscaler_init_trapped_ets(&ds, (gx_device *)dev, 8, bpc, num_comps,
- factor, mfs, NULL, /*&fax_adjusted_width*/ 0, /*aw*/ trap_w, trap_h, trap_order, ets);
- } else {
- code = gx_downscaler_init_trapped_cm_ets(&ds, (gx_device *)dev, 8, bpc, num_comps,
- factor, mfs, NULL, /*&fax_adjusted_width*/ 0, /*aw*/ trap_w, trap_h, trap_order,
- pdf_image_chunky_post_cm, pdf_dev->icclink, pdf_dev->icclink->num_output, ets);
- }
+ if (num_comps != 4)
+ params->trap_w = params->trap_h = 0;
+ if (pdf_dev->icclink == NULL) {
+ code = gx_downscaler_init(&ds, (gx_device *)dev,
+ 8, bpc, num_comps,
+ params,
+ NULL, /*&fax_adjusted_width*/
+ 0 /*aw*/);
} else {
- if (pdf_dev->icclink == NULL) {
- code = gx_downscaler_init_ets(&ds, (gx_device *)dev, 8, bpc, num_comps,
- factor, mfs, NULL, /*&fax_adjusted_width*/ 0, /*aw*/ ets);
- } else {
- code = gx_downscaler_init_cm_ets(&ds, (gx_device *)dev, 8, bpc, num_comps,
- factor, mfs, NULL, /*&fax_adjusted_width*/ 0, /*aw*/ pdf_image_chunky_post_cm, pdf_dev->icclink,
- pdf_dev->icclink->num_output, ets);
- }
+ code = gx_downscaler_init_cm(&ds, (gx_device *)dev,
+ 8, bpc, num_comps,
+ params,
+ NULL, /*&fax_adjusted_width*/
+ 0, /*aw*/
+ pdf_image_chunky_post_cm,
+ pdf_dev->icclink,
+ pdf_dev->icclink->num_output);
}
if (code < 0)
return code;
@@ -502,6 +468,16 @@ pdf_image_downscale_and_print_page(gx_device_printer *dev, int factor,
return_error(gs_error_VMerror);
}
+ if (pdf_dev->ocr.begin_page) {
+ code = pdf_dev->ocr.begin_page(pdf_dev, width, height, num_comps*8);
+ if (code < 0)
+ {
+ gs_free_object(dev->memory, data, "pdf_image_print_page(data)");
+ gx_downscaler_fin(&ds);
+ return code;
+ }
+ }
+
pprintd1(pdf_dev->strm, "%d 0 obj\n", page->ImageObjectNumber);
pprintd1(pdf_dev->strm, "<<\n/Length %d 0 R\n", page->LengthObjectNumber);
stream_puts(pdf_dev->strm, "/Subtype /Image\n");
@@ -558,13 +534,15 @@ pdf_image_downscale_and_print_page(gx_device_printer *dev, int factor,
code = gx_downscaler_getbits(&ds, data, row);
if (code < 0)
break;
+ if (pdf_dev->ocr.line)
+ pdf_dev->ocr.line(pdf_dev, data);
stream_write(pdf_dev->strm, data, width * num_comps);
}
if (code < 0) {
gs_free_object(dev->memory, data, "pdf_image_print_page(data)");
gx_downscaler_fin(&ds);
- return code;;
+ return code;
}
switch(pdf_dev->Compression) {
@@ -588,9 +566,26 @@ pdf_image_downscale_and_print_page(gx_device_printer *dev, int factor,
page->PageStreamOffset = stell(pdf_dev->strm);
pprintd1(pdf_dev->strm, "%d 0 obj\n", page->PageStreamObjectNumber);
- gs_sprintf(Buffer, "%f 0 0 %f 0 0 cm\n/Im1 Do", (width / (pdf_dev->HWResolution[0] / 72)) * factor, (height / (pdf_dev->HWResolution[1] / 72)) * factor);
- pprintd1(pdf_dev->strm, "<<\n/Length %d\n>>\nstream\n", strlen(Buffer));
- stream_puts(pdf_dev->strm, Buffer);
+ stream_puts(pdf_dev->strm, "<<\n/Filter/FlateDecode/Length \n>>\nstream\n");
+ stream_pos = stell(pdf_dev->strm);
+ encode((gx_device *)pdf_dev, &pdf_dev->strm, &s_zlibE_template, pdf_dev->memory->non_gc_memory);
+ if (pdf_dev->ocr.end_page)
+ stream_puts(pdf_dev->strm, "q\n");
+ pprintd2(pdf_dev->strm, "%d 0 0 %d 0 0 cm\n/Im1 Do",
+ (int)((width / (pdf_dev->HWResolution[0] / 72)) * factor),
+ (int)((height / (pdf_dev->HWResolution[1] / 72)) * factor));
+ if (pdf_dev->ocr.end_page) {
+ stream_puts(pdf_dev->strm, "\nQ");
+ pdf_dev->ocr.end_page(pdf_dev);
+ }
+ s_close_filters(&pdf_dev->strm, s);
+ {
+ gs_offset_t pos = stell(pdf_dev->strm);
+ gs_offset_t len = pos - stream_pos;
+ sseek(pdf_dev->strm, stream_pos - 21);
+ pprintd1(pdf_dev->strm, "%d", (int)len);
+ sseek(pdf_dev->strm, pos);
+ }
stream_puts(pdf_dev->strm, "\nendstream\nendobj\n");
page->PageDictOffset = stell(pdf_dev->strm);
@@ -599,8 +594,10 @@ pdf_image_downscale_and_print_page(gx_device_printer *dev, int factor,
stream_puts(pdf_dev->strm, "/Type /Page\n/Parent 2 0 R\n");
gs_sprintf(Buffer, "/MediaBox [0 0 %f %f]\n", ((double)pdf_dev->width / pdf_dev->HWResolution[0]) * 72, ((double)pdf_dev->height / pdf_dev->HWResolution[1]) * 72);
stream_puts(pdf_dev->strm, Buffer);
- pprintd1(pdf_dev->strm, "/Resources <<\n/XObject <<\n/Im1 %d 0 R\n>>\n>>\n>>\n", page->ImageObjectNumber);
- stream_puts(pdf_dev->strm, "endobj\n");
+ pprintd1(pdf_dev->strm, "/Resources <<\n/XObject <<\n/Im1 %d 0 R\n>>\n", page->ImageObjectNumber);
+ if (pdf_dev->ocr.file_init)
+ stream_puts(pdf_dev->strm, "/Font <<\n/Ft0 3 0 R\n>>\n");
+ stream_puts(pdf_dev->strm, ">>\n>>\nendobj\n");
gx_downscaler_fin(&ds);
gs_free_object(dev->memory, data, "pdf_image_print_page(data)");
@@ -703,10 +700,11 @@ static void write_xref_entry (stream *s, gs_offset_t Offset)
static void
pdf_store_default_Producer(char *buf)
{
- if ((gs_revision % 100) == 0)
- gs_sprintf(buf, "(%s %1.1f)", gs_product, gs_revision / 100.0);
- else
- gs_sprintf(buf, "(%s %1.2f)", gs_product, gs_revision / 100.0);
+ int major = (int)(gs_revision / 1000);
+ int minor = (int)(gs_revision - (major * 1000)) / 10;
+ int patch = gs_revision % 10;
+
+ gs_sprintf(buf, "(%s %d.%02d.%d)", gs_product, major, minor, patch);
}
static int pdf_image_finish_file(gx_device_pdf_image *pdf_dev, int PCLm)
@@ -761,9 +759,16 @@ static int pdf_image_finish_file(gx_device_pdf_image *pdf_dev, int PCLm)
if (PCLm)
pprintd1(pdf_dev->strm, "xref\n0 %d\n0000000000 65536 f \n", pdf_dev->NextObject);
else
- pprintd1(pdf_dev->strm, "xref\n0 %d\n0000000000 65536 f \n", (pdf_dev->NumPages * 4) + 3);
+ pprintd1(pdf_dev->strm, "xref\n0 %d\n0000000000 65536 f \n", (pdf_dev->NumPages * 4) + 3 + pdf_dev->ocr.file_objects);
write_xref_entry(pdf_dev->strm, pdf_dev->RootOffset);
write_xref_entry(pdf_dev->strm, pdf_dev->PagesOffset);
+ if (pdf_dev->ocr.file_objects) {
+ int i;
+
+ for (i = 0; i < OCR_MAX_FILE_OBJECTS; i++)
+ if (pdf_dev->ocr.file_object_offset[i])
+ write_xref_entry(pdf_dev->strm, pdf_dev->ocr.file_object_offset[i]);
+ }
if (!PCLm) {
page = pdf_dev->Pages;
@@ -774,7 +779,7 @@ static int pdf_image_finish_file(gx_device_pdf_image *pdf_dev, int PCLm)
write_xref_entry(pdf_dev->strm, page->PageDictOffset);
page = page->next;
}
- pprintd1(pdf_dev->strm, "trailer\n<<\n/Size %d\n/Root 1 0 R\n/ID [", (pdf_dev->NumPages * 4) + 3);
+ pprintd1(pdf_dev->strm, "trailer\n<<\n/Size %d\n/Root 1 0 R\n/ID [", (pdf_dev->NumPages * 4) + 3 + pdf_dev->ocr.file_objects);
pdf_compute_fileID(pdf_dev, fileID, CreationDate, Title, Producer);
write_fileID(pdf_dev->strm, (const byte *)&fileID, 16);
write_fileID(pdf_dev->strm, (const byte *)&fileID, 16);
@@ -844,7 +849,7 @@ static int pdf_image_finish_file(gx_device_pdf_image *pdf_dev, int PCLm)
return 0;
}
-static int
+int
pdf_image_print_page(gx_device_printer * pdev, gp_file * file)
{
gx_device_pdf_image *const pdf_dev = (gx_device_pdf_image *)pdev;
@@ -857,11 +862,9 @@ pdf_image_print_page(gx_device_printer * pdev, gp_file * file)
return code;
code = pdf_image_downscale_and_print_page(pdev,
- pdf_dev->downscale.downscale_factor,
- pdf_dev->downscale.min_feature_size,
- 8, pdf_dev->color_info.num_components,
- 0, 0, NULL,
- pdf_dev->downscale.ets);
+ &pdf_dev->downscale,
+ 8,
+ pdf_dev->color_info.num_components);
if (code < 0)
return code;
@@ -908,6 +911,7 @@ pdf_image_open(gx_device *pdev)
}
if (ppdev->OpenOutputFile)
code = gdev_prn_open_printer_seekable(pdev, 1, true);
+
return code;
}
@@ -1209,6 +1213,7 @@ PCLm_open(gx_device *pdev)
while(pdev->child)
pdev = pdev->child;
+ memset(&ppdev->ocr, 0, sizeof(ppdev->ocr));
ppdev->file = NULL;
ppdev->Pages = NULL;
ppdev->NumPages = 0;
@@ -1280,7 +1285,7 @@ static int gdev_PCLm_begin_page(gx_device_pdf_image *pdf_dev,
&rendering_params);
} else {
pdf_dev->icclink = gsicc_alloc_link_dev(pdev->memory,
- profile_struct->device_profile[0], profile_struct->postren_profile,
+ profile_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE], profile_struct->postren_profile,
&rendering_params);
}
if (pdf_dev->icclink == NULL) {
@@ -1331,19 +1336,19 @@ static int gdev_PCLm_begin_page(gx_device_pdf_image *pdf_dev,
}
static int
-PCLm_downscale_and_print_page(gx_device_printer *dev, int factor,
- int mfs, int bpc, int num_comps,
- int trap_w, int trap_h, const int *trap_order,
- int ets)
+PCLm_downscale_and_print_page(gx_device_printer *dev,
+ int bpc, int num_comps)
{
gx_device_pdf_image *const pdf_dev = (gx_device_pdf_image *)dev;
int code = 0;
uint Read;
byte *data = NULL;
int size = gdev_mem_bytes_per_scan_line((gx_device *)dev);
- int max_size =size;
+ int max_size = size;
int row, NumStrips;
double StripDecrement;
+ const gx_downscaler_params *params = &pdf_dev->downscale;
+ int factor = params->downscale_factor;
int height = dev->height/factor;
int width = dev->width/factor;
gx_downscaler_t ds;
@@ -1358,12 +1363,20 @@ PCLm_downscale_and_print_page(gx_device_printer *dev, int factor,
page = page->next;
if (pdf_dev->icclink == NULL) {
- code = gx_downscaler_init_ets(&ds, (gx_device *)dev, 8, bpc, num_comps,
- factor, mfs, NULL, /*&fax_adjusted_width*/ 0, /*aw*/ ets);
+ code = gx_downscaler_init(&ds, (gx_device *)dev,
+ 8, bpc, num_comps,
+ params,
+ NULL, /*&fax_adjusted_width*/
+ 0 /*aw*/);
} else {
- code = gx_downscaler_init_cm_ets(&ds, (gx_device *)dev, 8, bpc, num_comps,
- factor, mfs, NULL, /*&fax_adjusted_width*/ 0, /*aw*/ pdf_image_chunky_post_cm, pdf_dev->icclink,
- pdf_dev->icclink->num_output, ets);
+ code = gx_downscaler_init_cm(&ds, (gx_device *)dev,
+ 8, bpc, num_comps,
+ params,
+ NULL, /*&fax_adjusted_width*/
+ 0, /*aw*/
+ pdf_image_chunky_post_cm,
+ pdf_dev->icclink,
+ pdf_dev->icclink->num_output);
}
if (code < 0)
return code;
@@ -1386,7 +1399,7 @@ PCLm_downscale_and_print_page(gx_device_printer *dev, int factor,
pprintd1(pdf_dev->strm, "%d 0 obj\n", page->PageDictObjectNumber);
pprintd1(pdf_dev->strm, "<<\n/Contents %d 0 R\n", page->PageStreamObjectNumber);
stream_puts(pdf_dev->strm, "/Type /Page\n/Parent 2 0 R\n");
- gs_sprintf(Buffer, "/MediaBox [0 0 %f %f]\n", ((double)pdf_dev->width / pdf_dev->HWResolution[0]) * 72, ((double)pdf_dev->height / pdf_dev->HWResolution[1]) * 72);
+ gs_sprintf(Buffer, "/MediaBox [0 0 %.3f %.3f]\n", ((double)pdf_dev->width / pdf_dev->HWResolution[0]) * 72, ((double)pdf_dev->height / pdf_dev->HWResolution[1]) * 72);
stream_puts(pdf_dev->strm, Buffer);
stream_puts(pdf_dev->strm, "/Resources <<\n/XObject <<\n");
@@ -1405,9 +1418,9 @@ PCLm_downscale_and_print_page(gx_device_printer *dev, int factor,
double adjusted;
adjusted = height - (row * pdf_dev->StripHeight);
adjusted = adjusted / (pdf_dev->HWResolution[1] / (factor * 72));
- gs_sprintf(Buffer, "%f 0 0 %f 0 0 cm\n/Im%d Do Q\n", (width / (pdf_dev->HWResolution[0] / 72)) * factor, adjusted, row);
+ gs_sprintf(Buffer, "%.3f 0 0 %.3f 0 0 cm\n/Im%d Do Q\n", (width / (pdf_dev->HWResolution[0] / 72)) * factor, adjusted, row);
} else
- gs_sprintf(Buffer, "%f 0 0 %f 0 %f cm\n/Im%d Do Q\n", (width / (pdf_dev->HWResolution[0] / 72)) * factor, StripDecrement, ((height / (pdf_dev->HWResolution[1] / 72)) * factor) - (StripDecrement * (row + 1)), row);
+ gs_sprintf(Buffer, "%.3f 0 0 %.3f 0 %f cm\n/Im%d Do Q\n", (width / (pdf_dev->HWResolution[0] / 72)) * factor, StripDecrement, ((height / (pdf_dev->HWResolution[1] / 72)) * factor) - (StripDecrement * (row + 1)), row);
stream_puts(pdf_dev->temp_stream.strm, Buffer);
pprintd2(pdf_dev->strm, "/Im%d %d 0 R\n", row, page->ImageObjectNumber + (row * 2));
}
@@ -1660,11 +1673,7 @@ PCLm_print_page(gx_device_printer * pdev, gp_file * file)
return code;
code = PCLm_downscale_and_print_page(pdev,
- pdf_dev->downscale.downscale_factor,
- pdf_dev->downscale.min_feature_size,
- 8, pdf_dev->color_info.num_components,
- 0, 0, NULL,
- pdf_dev->downscale.ets);
+ 8, pdf_dev->color_info.num_components);
if (code < 0)
return code;
diff --git a/devices/gdevpdfimg.h b/devices/gdevpdfimg.h
new file mode 100644
index 00000000..baf8175e
--- /dev/null
+++ b/devices/gdevpdfimg.h
@@ -0,0 +1,105 @@
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
+ 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.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+#ifndef gdevpdfimg_h_INCLUDED
+#define gdevpdfimg_h_INCLUDED
+
+#include "gdevprn.h"
+#include "gxdownscale.h"
+
+typedef struct pdfimage_page_s {
+ int ImageObjectNumber;
+ gs_offset_t ImageOffset;
+ int LengthObjectNumber;
+ gs_offset_t LengthOffset;
+ int PageStreamObjectNumber;
+ gs_offset_t PageStreamOffset;
+ int PageDictObjectNumber;
+ gs_offset_t PageDictOffset;
+ void *next;
+} pdfimage_page;
+
+typedef struct PCLm_temp_file_s {
+ char file_name[gp_file_name_sizeof];
+ gp_file *file;
+ stream *strm;
+ stream *save;
+ byte *strm_buf;
+} PCLm_temp_file_t;
+
+#define OCR_MAX_FILE_OBJECTS 8
+
+typedef struct gx_device_pdf_image_s {
+ gx_device_common;
+ gx_prn_device_common;
+ unsigned char Compression;
+ gx_downscaler_params downscale;
+ int StripHeight;
+ float QFactor;
+ int JPEGQ;
+ gsicc_link_t *icclink;
+ stream *strm;
+ byte *strm_buf;
+ int NumPages;
+ gs_offset_t RootOffset;
+ gs_offset_t PagesOffset;
+ gs_offset_t xrefOffset;
+ pdfimage_page *Pages;
+ PCLm_temp_file_t xref_stream;
+ PCLm_temp_file_t temp_stream;
+ int NextObject;
+
+ /* OCR data */
+ struct {
+ char language[1024];
+ void *state;
+
+ /* Number of "file level" objects - i.e. the number of objects
+ * required to define the font. */
+ int file_objects;
+ gs_offset_t file_object_offset[OCR_MAX_FILE_OBJECTS];
+ int w;
+ int h;
+ int y;
+ int xres;
+ int yres;
+ float cur_x;
+ float cur_y;
+ float cur_size;
+ float cur_scale;
+ float wordbox[4];
+ int *word_chars;
+ int word_len;
+ int word_max;
+ void *data;
+ /* Write the font definition. */
+ int (*file_init)(struct gx_device_pdf_image_s *dev);
+ int (*begin_page)(struct gx_device_pdf_image_s *dev, int w, int h, int bpp);
+ void (*line)(struct gx_device_pdf_image_s *dev, void *row);
+ int (*end_page)(struct gx_device_pdf_image_s *dev);
+ } ocr;
+} gx_device_pdf_image;
+
+int pdf_image_open(gx_device *pdev);
+int pdf_image_close(gx_device * pdev);
+int pdf_image_put_params_downscale(gx_device * dev, gs_param_list * plist);
+int pdf_image_put_params_downscale_cmyk(gx_device * dev, gs_param_list * plist);
+int pdf_image_put_params_downscale_cmyk_ets(gx_device * dev, gs_param_list * plist);
+int pdf_image_get_params_downscale(gx_device * dev, gs_param_list * plist);
+int pdf_image_get_params_downscale_cmyk(gx_device * dev, gs_param_list * plist);
+int pdf_image_get_params_downscale_cmyk_ets(gx_device * dev, gs_param_list * plist);
+dev_proc_print_page(pdf_image_print_page);
+
+#endif
diff --git a/devices/gdevpdfocr.c b/devices/gdevpdfocr.c
new file mode 100644
index 00000000..95d358b1
--- /dev/null
+++ b/devices/gdevpdfocr.c
@@ -0,0 +1,727 @@
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
+ 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.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+#include "stdint_.h"
+#include "gdevprn.h"
+#include "gxdownscale.h"
+#include "gdevkrnlsclass.h" /* 'standard' built in subclasses, currently First/Last Page and obejct filter */
+#include "stream.h"
+#include "spprint.h"
+#include "time_.h"
+#include "smd5.h"
+#include "sstring.h"
+#include "strimpl.h"
+#include "slzwx.h"
+#include "szlibx.h"
+#include "sdct.h"
+#include "srlx.h"
+#include "gsicc_cache.h"
+#include "sjpeg.h"
+
+#include "gdevpdfimg.h"
+
+#define COMPRESSION_NONE 1 /* dump mode */
+#define COMPRESSION_LZW 2 /* Lempel-Ziv & Welch */
+#define COMPRESSION_FLATE 3
+#define COMPRESSION_JPEG 4
+#define COMPRESSION_RLE 5
+
+static struct compression_string {
+ unsigned char id;
+ const char *str;
+} compression_strings [] = {
+ { COMPRESSION_NONE, "None" },
+ { COMPRESSION_LZW, "LZW" }, /* Not supported in PCLm */
+ { COMPRESSION_FLATE, "Flate" },
+ { COMPRESSION_JPEG, "JPEG" },
+ { COMPRESSION_RLE, "RLE" },
+ { 0, NULL }
+};
+
+int pdf_ocr_open(gx_device *pdev);
+int pdf_ocr_close(gx_device *pdev);
+
+
+static int
+pdfocr_put_some_params(gx_device * dev, gs_param_list * plist)
+{
+ gx_device_pdf_image *const pdf_dev = (gx_device_pdf_image *)dev;
+ int ecode = 0;
+ int code;
+ gs_param_string langstr;
+ const char *param_name;
+ size_t len;
+
+ switch (code = param_read_string(plist, (param_name = "OCRLanguage"), &langstr)) {
+ case 0:
+ len = langstr.size;
+ if (len >= sizeof(pdf_dev->ocr.language))
+ len = sizeof(pdf_dev->ocr.language)-1;
+ memcpy(pdf_dev->ocr.language, langstr.data, len);
+ pdf_dev->ocr.language[len] = 0;
+ break;
+ case 1:
+ break;
+ default:
+ ecode = code;
+ param_signal_error(plist, param_name, ecode);
+ }
+
+ return code;
+}
+
+static int
+pdfocr_put_params_downscale_cmyk(gx_device * dev, gs_param_list * plist)
+{
+ int code = pdfocr_put_some_params(dev, plist);
+ if (code < 0)
+ return code;
+ return pdf_image_put_params_downscale_cmyk(dev, plist);
+}
+
+static int
+pdfocr_put_params_downscale(gx_device * dev, gs_param_list * plist)
+{
+ int code = pdfocr_put_some_params(dev, plist);
+ if (code < 0)
+ return code;
+ return pdf_image_put_params_downscale(dev, plist);
+}
+
+static int
+pdfocr_get_some_params(gx_device * dev, gs_param_list * plist)
+{
+ gx_device_pdf_image *const pdf_dev = (gx_device_pdf_image *)dev;
+ int code = 0;
+ int ecode = 0;
+ gs_param_string langstr;
+
+ if (pdf_dev->ocr.language[0]) {
+ langstr.data = (const byte *)pdf_dev->ocr.language;
+ langstr.size = strlen(pdf_dev->ocr.language);
+ langstr.persistent = false;
+ } else {
+ langstr.data = (const byte *)"eng";
+ langstr.size = 3;
+ langstr.persistent = false;
+ }
+ if ((code = param_write_string(plist, "OCRLanguage", &langstr)) < 0)
+ ecode = code;
+
+ return ecode;
+}
+
+static int
+pdfocr_get_params_downscale_cmyk(gx_device * dev, gs_param_list * plist)
+{
+ int code = pdfocr_get_some_params(dev, plist);
+ if (code < 0)
+ return code;
+
+ return pdf_image_get_params_downscale_cmyk(dev, plist);
+}
+
+static int
+pdfocr_get_params_downscale(gx_device * dev, gs_param_list * plist)
+{
+ int code = pdfocr_get_some_params(dev, plist);
+ if (code < 0)
+ return code;
+
+ return pdf_image_get_params_downscale(dev, plist);
+}
+
+/* ------ The pdfocr8 device ------ */
+
+static const gx_device_procs pdfocr8_procs =
+prn_color_params_procs(pdf_ocr_open,
+ gdev_prn_output_page_seekable,
+ pdf_ocr_close,
+ gx_default_gray_map_rgb_color,
+ gx_default_gray_map_color_rgb,
+ pdfocr_get_params_downscale,
+ pdfocr_put_params_downscale);
+
+const gx_device_pdf_image gs_pdfocr8_device = {
+ prn_device_body(gx_device_pdf_image,
+ pdfocr8_procs,
+ "pdfocr8",
+ DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
+ 600, 600, /* 600 dpi by default */
+ 0, 0, 0, 0, /* Margins */
+ 1, /* num components */
+ 8, /* bits per sample */
+ 255, 0, 256, 0,
+ pdf_image_print_page),
+ 3,
+ GX_DOWNSCALER_PARAMS_DEFAULTS,
+ 0, /* StripHeight */
+ 0.0, /* QFactor */
+ 0 /* JPEGQ */
+};
+
+/* ------ The pdfocr24 device ------ */
+
+static const gx_device_procs pdfocr24_procs =
+prn_color_params_procs(pdf_ocr_open,
+ gdev_prn_output_page_seekable,
+ pdf_ocr_close,
+ gx_default_rgb_map_rgb_color,
+ gx_default_rgb_map_color_rgb,
+ pdfocr_get_params_downscale,
+ pdfocr_put_params_downscale);
+
+const gx_device_pdf_image gs_pdfocr24_device = {
+ prn_device_body(gx_device_pdf_image,
+ pdfocr24_procs,
+ "pdfocr24",
+ DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
+ 600, 600, /* 600 dpi by default */
+ 0, 0, 0, 0, /* Margins */
+ 3, /* num components */
+ 24, /* bits per sample */
+ 255, 255, 256, 256,
+ pdf_image_print_page),
+ 3,
+ GX_DOWNSCALER_PARAMS_DEFAULTS,
+ 0, /* StripHeight */
+ 0.0, /* QFactor */
+ 0 /* JPEGQ */
+};
+
+/* ------ The pdfocr32 device ------ */
+
+static const gx_device_procs pdfocr32_procs = {
+ pdf_ocr_open, NULL, NULL, gdev_prn_output_page_seekable, pdf_ocr_close,
+ NULL, cmyk_8bit_map_color_cmyk, NULL, NULL, NULL, NULL, NULL, NULL,
+ pdfocr_get_params_downscale_cmyk, pdfocr_put_params_downscale_cmyk,
+ cmyk_8bit_map_cmyk_color, NULL, NULL, NULL, gx_page_device_get_page_device
+};
+
+const gx_device_pdf_image gs_pdfocr32_device = {
+ prn_device_body(gx_device_pdf_image,
+ pdfocr32_procs,
+ "pdfocr32",
+ DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
+ 600, 600, /* 600 dpi by default */
+ 0, 0, 0, 0, /* Margins */
+ 4, /* num components */
+ 32, /* bits per sample */
+ 255, 255, 256, 256,
+ pdf_image_print_page),
+ 3,
+ GX_DOWNSCALER_PARAMS_DEFAULTS,
+ 0, /* StripHeight */
+ 0.0, /* QFactor */
+ 0 /* JPEGQ */
+};
+
+/* Funky font */
+static const char funky_font[] =
+"3 0 obj\n<</BaseFont/GlyphLessFont/DescendantFonts[4 0 R]"
+"/Encoding/Identity-H/Subtype/Type0/ToUnicode 6 0 R/Type /Font"
+">>\nendobj\n";
+
+static const char funky_font2[] =
+"4 0 obj\n<</BaseFont/GlyphLessFont"
+"/CIDToGIDMap 5 0 R\n/CIDSystemInfo<<\n"
+"/Ordering (Identity)/Registry (Adobe)/Supplement 0>>"
+"/FontDescriptor 7 0 R/Subtype /CIDFontType2/Type/Font"
+"/DW 500>>\nendobj\n";
+
+static const char funky_font3[] =
+"5 0 obj\n<</Length 210/Filter/FlateDecode"
+">>stream\n";
+
+static const char funky_font3a[] = {
+0x78, 0x9c, 0xec, 0xc2, 0x01, 0x09, 0x00, 0x00,
+0x00, 0x02, 0xa0, 0xfa, 0x7f, 0xba, 0x21, 0x89,
+0xa6, 0x01, 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, 0x00, 0x00,
+0x80, 0x7b, 0x03, 0x00, 0x00, 0xff, 0xff, 0xec,
+0xc2, 0x01, 0x0d, 0x00, 0x00, 0x00, 0xc2, 0x20,
+0xdf, 0xbf, 0xb4, 0x45, 0x18, 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, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00,
+0x00, 0xff, 0xff, 0xec, 0xc2, 0x01, 0x0d, 0x00,
+0x00, 0x00, 0xc2, 0x20, 0xdf, 0xbf, 0xb4, 0x45,
+0x18, 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, 0x00, 0x00, 0x00,
+0x00, 0xeb, 0x00, 0x00, 0x00, 0xff, 0xff, 0xed,
+0xc2, 0x01, 0x0d, 0x00, 0x00, 0x00, 0xc2, 0x20,
+0xdf, 0xbf, 0xb4, 0x45, 0x18, 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, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x00, 0xff,
+0x00, 0x10
+};
+
+static const char funky_font3b[] =
+"endstream\nendobj\n";
+
+static const char funky_font4[] =
+"6 0 obj\n<</Length 353>>\nstream\n"
+"/CIDInit /ProcSet findresource begin\n"
+"12 dict begin\n"
+"begincmap\n"
+"/CIDSystemInfo\n"
+"<<\n"
+" /Registry (Adobe)\n"
+" /Ordering (UCS)\n"
+" /Supplement 0\n"
+">> def\n"
+"/CMapName /Adobe-Identify-UCS def\n"
+"/CMapType 2 def\n"
+"1 begincodespacerange\n"
+"<0000> <FFFF>\n"
+"endcodespacerange\n"
+"1 beginbfrange\n"
+"<0000> <FFFF> <0000>\n"
+"endbfrange\n"
+"endcmap\n"
+"CMapName currentdict /CMap defineresource pop\n"
+"end\n"
+"end\n"
+"endstream\n"
+"endobj\n";
+
+static const char funky_font5[] =
+"7 0 obj\n"
+"<</Ascent 1000/CapHeight 1000/Descent -1/Flags 5"
+"/FontBBox[0 0 500 1000]/FontFile2 8 0 R/FontName/GlyphLessFont"
+"/ItalicAngle 0/StemV 80/Type/FontDescriptor>>\nendobj\n";
+
+static const char funky_font6[] =
+"8 0 obj\n<</Length 572/Length1 572>>\nstream\n";
+
+static const char funky_font6a[] =
+{
+0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x80,
+0x00, 0x03, 0x00, 0x20, 0x4f, 0x53, 0x2f, 0x32,
+0x56, 0xde, 0xc8, 0x94, 0x00, 0x00, 0x01, 0x28,
+0x00, 0x00, 0x00, 0x60, 0x63, 0x6d, 0x61, 0x70,
+0x00, 0x0a, 0x00, 0x34, 0x00, 0x00, 0x01, 0x90,
+0x00, 0x00, 0x00, 0x1e, 0x67, 0x6c, 0x79, 0x66,
+0x15, 0x22, 0x41, 0x24, 0x00, 0x00, 0x01, 0xb8,
+0x00, 0x00, 0x00, 0x18, 0x68, 0x65, 0x61, 0x64,
+0x0b, 0x78, 0xf1, 0x65, 0x00, 0x00, 0x00, 0xac,
+0x00, 0x00, 0x00, 0x36, 0x68, 0x68, 0x65, 0x61,
+0x0c, 0x02, 0x04, 0x02, 0x00, 0x00, 0x00, 0xe4,
+0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78,
+0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x88,
+0x00, 0x00, 0x00, 0x08, 0x6c, 0x6f, 0x63, 0x61,
+0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb0,
+0x00, 0x00, 0x00, 0x06, 0x6d, 0x61, 0x78, 0x70,
+0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x01, 0x08,
+0x00, 0x00, 0x00, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+0xf2, 0xeb, 0x16, 0xda, 0x00, 0x00, 0x01, 0xd0,
+0x00, 0x00, 0x00, 0x4b, 0x70, 0x6f, 0x73, 0x74,
+0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x1c,
+0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x01, 0x00, 0x00, 0xb0, 0x94, 0x71, 0x10,
+0x5f, 0x0f, 0x3c, 0xf5, 0x04, 0x07, 0x08, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xcf, 0x9a, 0xfc, 0x6e,
+0x00, 0x00, 0x00, 0x00, 0xd4, 0xc3, 0xa7, 0xf2,
+0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00,
+0x00, 0x00, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x08, 0x00, 0xff, 0xff, 0x00, 0x00, 0x04, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04,
+0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x03, 0x00, 0x00, 0x01, 0x90, 0x00, 0x05,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x05, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4f, 0x4f, 0x47, 0x00, 0x40,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x80, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x14, 0x00, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x14, 0x00, 0x06, 0x00, 0x0a,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
+0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x31, 0x21,
+0x11, 0x21, 0x04, 0x00, 0xfc, 0x00, 0x08, 0x00,
+0x00, 0x00, 0x00, 0x03, 0x00, 0x2a, 0x00, 0x00,
+0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x16,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x05, 0x00, 0x0b, 0x00, 0x16, 0x00, 0x03,
+0x00, 0x01, 0x04, 0x09, 0x00, 0x05, 0x00, 0x16,
+0x00, 0x00, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72,
+0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e,
+0x00, 0x20, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x30,
+0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20,
+0x31, 0x2e, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00
+};
+
+static const char funky_font6b[] =
+"endstream\nendobj\n";
+
+static int
+ocr_file_init(gx_device_pdf_image *dev)
+{
+ const char *language = dev->ocr.language;
+ if (language == NULL || language[0] == 0)
+ language = "eng";
+
+ dev->ocr.file_object_offset[dev->ocr.file_objects++] = stell(dev->strm);
+ stream_write(dev->strm, funky_font, sizeof(funky_font)-1);
+ dev->ocr.file_object_offset[dev->ocr.file_objects++] = stell(dev->strm);
+ stream_write(dev->strm, funky_font2, sizeof(funky_font2)-1);
+ dev->ocr.file_object_offset[dev->ocr.file_objects++] = stell(dev->strm);
+ stream_write(dev->strm, funky_font3, sizeof(funky_font3)-1);
+ stream_write(dev->strm, funky_font3a, sizeof(funky_font3a));
+ stream_write(dev->strm, funky_font3b, sizeof(funky_font3b)-1);
+ dev->ocr.file_object_offset[dev->ocr.file_objects++] = stell(dev->strm);
+ stream_write(dev->strm, funky_font4, sizeof(funky_font4)-1);
+ dev->ocr.file_object_offset[dev->ocr.file_objects++] = stell(dev->strm);
+ stream_write(dev->strm, funky_font5, sizeof(funky_font5)-1);
+ dev->ocr.file_object_offset[dev->ocr.file_objects++] = stell(dev->strm);
+ stream_write(dev->strm, funky_font6, sizeof(funky_font6)-1);
+ stream_write(dev->strm, funky_font6a, sizeof(funky_font6a));
+ stream_write(dev->strm, funky_font6b, sizeof(funky_font6b)-1);
+
+ return ocr_init_api(dev->memory, language, &dev->ocr.state);
+}
+
+static void
+ocr_line8(gx_device_pdf_image *dev, void *row)
+{
+ int w = dev->ocr.w;
+ int raster = (w+3)&~3;
+ char *in = (char *)row;
+ char *out = ((char *)dev->ocr.data) + raster * dev->ocr.y++;
+ int i;
+
+#if ARCH_IS_BIG_ENDIAN
+ memcpy(out, in, dev->ocr.w);
+#else
+ for (i = 0; i < w; i++)
+ out[i^3] = in[i];
+#endif
+}
+
+static void
+ocr_line24(gx_device_pdf_image *dev, void *row)
+{
+ int w = dev->ocr.w;
+ int raster = (w+3)&~3;
+ char *in = (char *)row;
+ char *out = ((char *)dev->ocr.data) + raster * dev->ocr.y++;
+ int i;
+
+#if ARCH_IS_BIG_ENDIAN
+ for (i = 0; i < w; i++) {
+ int v = *in++;
+ v += 2* *in++;
+ v += *in++;
+ out[i] = v>>2;
+ }
+#else
+ for (i = 0; i < w; i++) {
+ int v = *in++;
+ v += 2* *in++;
+ v += *in++;
+ out[i^3] = v>>2;
+ }
+#endif
+}
+
+static void
+ocr_line32(gx_device_pdf_image *dev, void *row)
+{
+ int w = dev->ocr.w;
+ int raster = (w+3)&~3;
+ char *in = (char *)row;
+ char *out = ((char *)dev->ocr.data) + raster * dev->ocr.y++;
+ int i;
+
+#if ARCH_IS_BIG_ENDIAN
+ for (i = 0; i < w; i++) {
+ int v = 255 - *in++;
+ v -= *in++;
+ v -= *in++;
+ v -= *in++;
+ if (v < 0) v = 0;
+ out[i] = v;
+ }
+#else
+ for (i = 0; i < w; i++) {
+ int v = 255 - *in++;
+ v -= *in++;
+ v -= *in++;
+ v -= *in++;
+ if (v < 0) v = 0;
+ out[i^3] = v;
+ }
+#endif
+}
+
+static int
+ocr_begin_page(gx_device_pdf_image *dev, int w, int h, int bpp)
+{
+ int raster = (w+3)&~3;
+
+ dev->ocr.data = gs_alloc_bytes(dev->memory, raster * h, "ocr_begin_page");
+ if (dev->ocr.data == NULL)
+ return_error(gs_error_VMerror);
+ dev->ocr.w = w;
+ dev->ocr.h = h;
+ dev->ocr.y = 0;
+
+ if (bpp == 32)
+ dev->ocr.line = ocr_line32;
+ else if (bpp == 24)
+ dev->ocr.line = ocr_line24;
+ else
+ dev->ocr.line = ocr_line8;
+
+ return 0;
+}
+
+static void
+flush_word(gx_device_pdf_image *dev)
+{
+ char buffer[1024];
+ float size, scale;
+ float *bbox = dev->ocr.wordbox;
+ int i, len;
+
+ len = dev->ocr.word_len;
+ if (len == 0)
+ return;
+
+ size = bbox[3]-bbox[1];
+ if (dev->ocr.cur_size != size) {
+ gs_sprintf(buffer, "/Ft0 %.3f Tf", size);
+ stream_puts(dev->strm, buffer);
+ dev->ocr.cur_size = size;
+ }
+ scale = (bbox[2]-bbox[0]) / size / len * 200;
+ if (dev->ocr.cur_scale != scale) {
+ gs_sprintf(buffer, " %.3f Tz", scale);
+ stream_puts(dev->strm, buffer);
+ dev->ocr.cur_scale = scale;
+ }
+ gs_sprintf(buffer, " 1 0 0 1 %.3f %.3f Tm[<", bbox[0], bbox[1]);
+ stream_puts(dev->strm, buffer);
+ for (i = 0; i < len; i++) {
+ gs_sprintf(buffer, "%04x", dev->ocr.word_chars[i]);
+ stream_puts(dev->strm, buffer);
+ }
+ stream_puts(dev->strm, ">]TJ\n");
+
+ dev->ocr.word_len = 0;
+}
+
+static int
+ocr_callback(void *arg, const char *rune_,
+ const int *line_bbox, const int *word_bbox,
+ const int *char_bbox, int pointsize)
+{
+ gx_device_pdf_image *ppdev = (gx_device_pdf_image *)arg;
+ int unicode;
+ const unsigned char *rune = (const unsigned char *)rune_;
+ float bbox[4];
+ int factor = ppdev->downscale.downscale_factor;
+ float scale = 72000000.0f / gx_downscaler_scale(1000000, factor);
+
+ if (rune[0] >= 0xF8)
+ return 0; /* Illegal */
+ if (rune[0] < 0x80)
+ unicode = rune[0];
+ else {
+ unicode = rune[1] & 0x7f;
+ if (rune[0] < 0xd0)
+ unicode |= ((rune[0] & 0x1f) << 6);
+ else {
+ unicode = (unicode<<6) | (rune[2] & 0x7f);
+ if (rune[0] < 0xf0)
+ unicode |= ((rune[0] & 0x0f) << 12);
+ else
+ unicode |= ((rune[0] & 0x07) << 18) | (unicode<<6) | (rune[3] & 0x7f);
+ }
+ }
+
+#if 0
+ // First attempt; match char bboxes exactly. This is bad, as the
+ // bboxes given back from tesseract are 'untrustworthy' to say the
+ // least (they overlap one another in strange ways). Trying to
+ // match those causes the font height to change repeatedly, and
+ // gives output that's hard to identify words in.
+ bbox[0] = char_bbox[0] * 72.0 / ppdev->ocr.xres;
+ bbox[1] = (ppdev->ocr.h-1 - char_bbox[3]) * 72.0 / ppdev->ocr.yres;
+ bbox[2] = char_bbox[2] * 72.0 / ppdev->ocr.xres;
+ bbox[3] = (ppdev->ocr.h-1 - char_bbox[1]) * 72.0 / ppdev->ocr.yres;
+
+ size = bbox[3]-bbox[1];
+ if (ppdev->ocr.cur_size != size) {
+ gs_sprintf(buffer, "/Ft0 %f Tf ", size);
+ stream_puts(ppdev->strm, buffer);
+ ppdev->ocr.cur_size = size;
+ }
+ scale = (bbox[2]-bbox[0]) / size * 200;
+ if (ppdev->ocr.cur_scale != scale) {
+ gs_sprintf(buffer, " %f Tz ", scale);
+ stream_puts(ppdev->strm, buffer);
+ ppdev->ocr.cur_scale = scale;
+ }
+ gs_sprintf(buffer, "1 0 0 1 %f %f Tm ", bbox[0], bbox[1]);
+ stream_puts(ppdev->strm, buffer);
+ gs_sprintf(buffer, "<%04x>Tj\n", unicode);
+ stream_puts(ppdev->strm, buffer);
+#else
+ bbox[0] = word_bbox[0] * scale / ppdev->ocr.xres;
+ bbox[1] = (ppdev->ocr.h-1 - line_bbox[3]) * scale / ppdev->ocr.yres;
+ bbox[2] = word_bbox[2] * scale / ppdev->ocr.xres;
+ bbox[3] = (ppdev->ocr.h-1 - line_bbox[1]) * scale / ppdev->ocr.yres;
+
+ /* If the word bbox differs, flush the word. */
+ if (bbox[0] != ppdev->ocr.wordbox[0] ||
+ bbox[1] != ppdev->ocr.wordbox[1] ||
+ bbox[2] != ppdev->ocr.wordbox[2] ||
+ bbox[3] != ppdev->ocr.wordbox[3]) {
+ flush_word(ppdev);
+ ppdev->ocr.wordbox[0] = bbox[0];
+ ppdev->ocr.wordbox[1] = bbox[1];
+ ppdev->ocr.wordbox[2] = bbox[2];
+ ppdev->ocr.wordbox[3] = bbox[3];
+ }
+
+ /* Add the char to the current word. */
+ if (ppdev->ocr.word_len == ppdev->ocr.word_max) {
+ int *newblock;
+ int newmax = ppdev->ocr.word_max * 2;
+ if (newmax == 0)
+ newmax = 16;
+ newblock = (int *)gs_alloc_bytes(ppdev->memory, sizeof(int)*newmax,
+ "ocr_callback(word)");
+ if (newblock == NULL)
+ return_error(gs_error_VMerror);
+ if (ppdev->ocr.word_len > 0)
+ memcpy(newblock, ppdev->ocr.word_chars,
+ sizeof(int) * ppdev->ocr.word_len);
+ gs_free_object(ppdev->memory, ppdev->ocr.word_chars,
+ "ocr_callback(word)");
+ ppdev->ocr.word_chars = newblock;
+ ppdev->ocr.word_max = newmax;
+ }
+ ppdev->ocr.word_chars[ppdev->ocr.word_len++] = unicode;
+#endif
+
+ return 0;
+}
+
+static int
+ocr_end_page(gx_device_pdf_image *dev)
+{
+ stream_puts(dev->strm, "\nBT 3 Tr\n");
+ dev->ocr.cur_x = 0;
+ dev->ocr.cur_y = 0;
+ dev->ocr.cur_size = -1;
+ dev->ocr.cur_scale = 0;
+ dev->ocr.wordbox[0] = 0;
+ dev->ocr.wordbox[1] = 0;
+ dev->ocr.wordbox[2] = -1;
+ dev->ocr.wordbox[3] = -1;
+ dev->ocr.word_len = 0;
+ dev->ocr.word_max = 0;
+ dev->ocr.word_chars = NULL;
+ ocr_recognise(dev->ocr.state,
+ dev->ocr.w,
+ dev->ocr.h,
+ dev->ocr.data,
+ dev->ocr.xres,
+ dev->ocr.yres,
+ ocr_callback,
+ dev);
+ if (dev->ocr.word_len)
+ flush_word(dev);
+ stream_puts(dev->strm, "\nET");
+
+ gs_free_object(dev->memory, dev->ocr.word_chars,
+ "ocr_callback(word)");
+ gs_free_object(dev->memory, dev->ocr.data, "ocr_end_page");
+ dev->ocr.data = NULL;
+
+ return 0;
+}
+
+int
+pdf_ocr_open(gx_device *pdev)
+{
+ gx_device_pdf_image *ppdev;
+ int code = pdf_image_open(pdev);
+
+ if (code < 0)
+ return code;
+
+ /* If we've been subclassed, find the terminal device */
+ while(pdev->child)
+ pdev = pdev->child;
+ ppdev = (gx_device_pdf_image *)pdev;
+
+ ppdev->ocr.file_init = ocr_file_init;
+ ppdev->ocr.begin_page = ocr_begin_page;
+ ppdev->ocr.end_page = ocr_end_page;
+ ppdev->ocr.xres = (int)pdev->HWResolution[0];
+ ppdev->ocr.yres = (int)pdev->HWResolution[1];
+
+ return 0;
+}
+
+int
+pdf_ocr_close(gx_device *pdev)
+{
+ gx_device_pdf_image *pdf_dev;
+ int code;
+
+ code = pdf_image_close(pdev);
+ if (code < 0)
+ return code;
+
+ /* If we've been subclassed, find the terminal device */
+ while(pdev->child)
+ pdev = pdev->child;
+ pdf_dev = (gx_device_pdf_image *)pdev;
+
+ ocr_fin_api(pdf_dev->memory, pdf_dev->ocr.state);
+ pdf_dev->ocr.state = NULL;
+
+ return code;
+}
diff --git a/devices/gdevpe.c b/devices/gdevpe.c
index 270084d6..d2590b92 100644
--- a/devices/gdevpe.c
+++ b/devices/gdevpe.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevperm.c b/devices/gdevperm.c
index f2a5e38c..e03c8cae 100644
--- a/devices/gdevperm.c
+++ b/devices/gdevperm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevphex.c b/devices/gdevphex.c
index f3ca5048..3eccb787 100644
--- a/devices/gdevphex.c
+++ b/devices/gdevphex.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevpjet.c b/devices/gdevpjet.c
index d9fc76ff..bd428295 100644
--- a/devices/gdevpjet.c
+++ b/devices/gdevpjet.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevplan.c b/devices/gdevplan.c
index 313d08f8..7e5e5f0a 100644
--- a/devices/gdevplan.c
+++ b/devices/gdevplan.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevplib.c b/devices/gdevplib.c
index 67c25e78..026b4f8f 100644
--- a/devices/gdevplib.c
+++ b/devices/gdevplib.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevplib.h b/devices/gdevplib.h
index 2f7290a2..e4c87345 100644
--- a/devices/gdevplib.h
+++ b/devices/gdevplib.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevpm.h b/devices/gdevpm.h
index 29d9f4f2..d79b0f37 100644
--- a/devices/gdevpm.h
+++ b/devices/gdevpm.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevpng.c b/devices/gdevpng.c
index 73bc5bf3..a564e6c3 100644
--- a/devices/gdevpng.c
+++ b/devices/gdevpng.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -55,6 +55,7 @@
#include "gdevpccm.h"
#include "gscdefs.h"
#include "gxdownscale.h"
+#include "gxdevsop.h"
/* ------ The device descriptors ------ */
@@ -79,6 +80,7 @@ static dev_proc_get_params(png_get_params_downscale);
static dev_proc_put_params(png_put_params_downscale);
static dev_proc_get_params(png_get_params_downscale_mfs);
static dev_proc_put_params(png_put_params_downscale_mfs);
+static dev_proc_dev_spec_op(pngalpha_spec_op);
typedef struct gx_device_png_s gx_device_png;
struct gx_device_png_s {
@@ -280,7 +282,8 @@ static const gx_device_procs pngalpha_procs =
pngalpha_fillpage,
NULL, /* push_transparency_state */
NULL, /* pop_transparency_state */
- pngalpha_put_image
+ pngalpha_put_image,
+ pngalpha_spec_op /* dev_spec_op */\
};
const gx_device_pngalpha gs_pngalpha_device = {
@@ -451,8 +454,6 @@ do_png_print_page(gx_device_png * pdev, gp_file * file, bool monod)
png_text text_png;
int dst_bpc, src_bpc;
bool errdiff = 0;
- int factor = pdev->downscale.downscale_factor;
- int mfs = pdev->downscale.min_feature_size;
bool invert = false, endian_swap = false, bg_needed = false;
png_byte bit_depth = 0;
@@ -468,14 +469,15 @@ do_png_print_page(gx_device_png * pdev, gp_file * file, bool monod)
png_color *palettep;
png_uint_16 num_palette;
png_uint_32 valid = 0;
+ int upfactor, downfactor;
/* Sanity check params */
- if (factor < 1)
- factor = 1;
- if (mfs < 1)
- mfs = 1;
- else if (mfs > 2)
- mfs = 2;
+ if (pdev->downscale.downscale_factor < 1)
+ pdev->downscale.downscale_factor = 1;
+ if (pdev->downscale.min_feature_size < 1)
+ pdev->downscale.min_feature_size = 1;
+ else if (pdev->downscale.min_feature_size > 2)
+ pdev->downscale.min_feature_size = 2;
/* Slightly nasty, but it saves us duplicating this entire routine. */
if (monod) {
@@ -503,11 +505,13 @@ do_png_print_page(gx_device_png * pdev, gp_file * file, bool monod)
png_set_write_fn(png_ptr, file, my_png_write, my_png_flush);
/* set the file information here */
+ gx_downscaler_decode_factor(pdev->downscale.downscale_factor,
+ &upfactor, &downfactor);
/* resolution is in pixels per meter vs. dpi */
x_pixels_per_unit =
- (png_uint_32) (pdev->HWResolution[0] * (100.0 / 2.54) / factor + 0.5);
+ (png_uint_32) (pdev->HWResolution[0] * upfactor * (100.0 / 2.54) / downfactor + 0.5);
y_pixels_per_unit =
- (png_uint_32) (pdev->HWResolution[1] * (100.0 / 2.54) / factor + 0.5);
+ (png_uint_32) (pdev->HWResolution[1] * upfactor * (100.0 / 2.54) / downfactor + 0.5);
phys_unit_type = PNG_RESOLUTION_METER;
valid |= PNG_INFO_pHYs;
@@ -597,8 +601,13 @@ do_png_print_page(gx_device_png * pdev, gp_file * file, bool monod)
}
/* add comment */
strncpy(software_key, "Software", sizeof(software_key));
- gs_sprintf(software_text, "%s %d.%02d", gs_product,
- (int)(gs_revision / 100), (int)(gs_revision % 100));
+ {
+ int major = (int)(gs_revision / 1000);
+ int minor = (int)(gs_revision - (major * 1000)) / 10;
+ int patch = gs_revision % 10;
+
+ gs_sprintf(software_text, "%s %d.%02d.%d", gs_product, major, minor, patch);
+ }
text_png.compression = -1; /* uncompressed */
text_png.key = software_key;
text_png.text = software_text;
@@ -609,9 +618,9 @@ do_png_print_page(gx_device_png * pdev, gp_file * file, bool monod)
if (errdiff)
src_bpc = 8;
else
- factor = 1;
- width = pdev->width/factor;
- height = pdev->height/factor;
+ pdev->downscale.downscale_factor = upfactor = downfactor = 1;
+ width = pdev->width * upfactor / downfactor;
+ height = pdev->height * upfactor / downfactor;
#if PNG_LIBPNG_VER_MINOR >= 5
png_set_pHYs(png_ptr, info_ptr,
@@ -627,8 +636,8 @@ do_png_print_page(gx_device_png * pdev, gp_file * file, bool monod)
png_set_text(png_ptr, info_ptr, &text_png, 1);
- if (pdev->icc_struct != NULL && pdev->icc_struct->device_profile[0] != NULL) {
- cmm_profile_t *icc_profile = pdev->icc_struct->device_profile[0];
+ if (pdev->icc_struct != NULL && pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE] != NULL) {
+ cmm_profile_t *icc_profile = pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE];
/* PNG can only be RGB or gray. No CIELAB :( */
if (icc_profile->data_cs == gsRGB || icc_profile->data_cs == gsGRAY) {
if (icc_profile->num_comps == pdev->color_info.num_components &&
@@ -653,8 +662,8 @@ do_png_print_page(gx_device_png * pdev, gp_file * file, bool monod)
info_ptr->text = &text_png;
info_ptr->num_text = 1;
/* Set up the ICC information */
- if (pdev->icc_struct != NULL && pdev->icc_struct->device_profile[0] != NULL) {
- cmm_profile_t *icc_profile = pdev->icc_struct->device_profile[0];
+ if (pdev->icc_struct != NULL && pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE] != NULL) {
+ cmm_profile_t *icc_profile = pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE];
/* PNG can only be RGB or gray. No CIELAB :( */
if (icc_profile->data_cs == gsRGB || icc_profile->data_cs == gsGRAY) {
if (icc_profile->num_comps == pdev->color_info.num_components &&
@@ -697,7 +706,7 @@ do_png_print_page(gx_device_png * pdev, gp_file * file, bool monod)
* hit. So ensure that we only trigger downscales when we need them.
*/
code = gx_downscaler_init(&ds, (gx_device *)pdev, src_bpc, dst_bpc,
- depth/dst_bpc, factor, mfs, NULL, 0);
+ depth/dst_bpc, &pdev->downscale, NULL, 0);
if (code >= 0)
{
#ifdef CLUSTER
@@ -1072,3 +1081,15 @@ pngalpha_copy_alpha(gx_device * dev, const byte * data, int data_x,
return code;
}
}
+
+static int
+pngalpha_spec_op(gx_device* pdev, int dso, void* ptr, int size)
+{
+ switch (dso)
+ {
+ case gxdso_supports_alpha:
+ return 1;
+ }
+
+ return gdev_prn_dev_spec_op(pdev, dso, ptr, size);
+}
diff --git a/devices/gdevpsd.c b/devices/gdevpsd.c
index 03292469..27a6f262 100644
--- a/devices/gdevpsd.c
+++ b/devices/gdevpsd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -129,7 +129,7 @@ RELOC_PTRS_END
static int
psd_spec_op(gx_device *dev_, int op, void *data, int datasize)
{
- if (op == gxdso_supports_devn) {
+ if (op == gxdso_supports_devn || op == gxdso_skip_icc_component_validation) {
return true;
}
return gdev_prn_dev_spec_op(dev_, op, data, datasize);
@@ -1262,11 +1262,10 @@ psd_write_image_data(psd_write_ctx *xc, gx_device_printer *pdev)
if (sep_line == NULL)
return_error(gs_error_VMerror);
- code = gx_downscaler_init_planar_trapped(&ds, (gx_device *)pdev, &params, num_comp,
- psd_dev->downscale.downscale_factor, 0, bpc, bpc,
- psd_dev->downscale.trap_w,
- psd_dev->downscale.trap_h,
- psd_dev->downscale.trap_order);
+ code = gx_downscaler_init_planar(&ds, (gx_device *)pdev,
+ bpc, bpc, num_comp,
+ &psd_dev->downscale,
+ &params);
if (code < 0)
goto cleanup;
diff --git a/devices/gdevpsd.h b/devices/gdevpsd.h
index 3639eb72..98d2e9ae 100644
--- a/devices/gdevpsd.h
+++ b/devices/gdevpsd.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevpsim.c b/devices/gdevpsim.c
index 7a194c64..4e4080fe 100644
--- a/devices/gdevpsim.c
+++ b/devices/gdevpsim.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevpxut.c b/devices/gdevpxut.c
index 297f6f90..08d7741a 100644
--- a/devices/gdevpxut.c
+++ b/devices/gdevpxut.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevpxut.h b/devices/gdevpxut.h
index b854264f..28f55847 100644
--- a/devices/gdevpxut.h
+++ b/devices/gdevpxut.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevrinkj.c b/devices/gdevrinkj.c
index 509edd07..d10a7a1b 100644
--- a/devices/gdevrinkj.c
+++ b/devices/gdevrinkj.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevsj48.c b/devices/gdevsj48.c
index 4ef9ece1..8b1304b9 100644
--- a/devices/gdevsj48.c
+++ b/devices/gdevsj48.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevsnfb.c b/devices/gdevsnfb.c
index fe169b07..76d5cf47 100644
--- a/devices/gdevsnfb.c
+++ b/devices/gdevsnfb.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevsppr.c b/devices/gdevsppr.c
index ee3c5813..8257aa39 100644
--- a/devices/gdevsppr.c
+++ b/devices/gdevsppr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevstc.c b/devices/gdevstc.c
index 951ded0e..22314777 100644
--- a/devices/gdevstc.c
+++ b/devices/gdevstc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevstc.h b/devices/gdevstc.h
index f2761349..7db27e9a 100644
--- a/devices/gdevstc.h
+++ b/devices/gdevstc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevstc1.c b/devices/gdevstc1.c
index e9650f17..dd10268c 100644
--- a/devices/gdevstc1.c
+++ b/devices/gdevstc1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevstc2.c b/devices/gdevstc2.c
index ee2c6701..90dca523 100644
--- a/devices/gdevstc2.c
+++ b/devices/gdevstc2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevstc3.c b/devices/gdevstc3.c
index 87205663..56fea31d 100644
--- a/devices/gdevstc3.c
+++ b/devices/gdevstc3.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevstc4.c b/devices/gdevstc4.c
index 519620fd..1c7c4589 100644
--- a/devices/gdevstc4.c
+++ b/devices/gdevstc4.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevtfax.c b/devices/gdevtfax.c
index a29f06bd..b8aa7e74 100644
--- a/devices/gdevtfax.c
+++ b/devices/gdevtfax.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevtfax.h b/devices/gdevtfax.h
index 990e1f5c..deaa6516 100644
--- a/devices/gdevtfax.h
+++ b/devices/gdevtfax.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevtfnx.c b/devices/gdevtfnx.c
index d9593cd2..b3fea72e 100644
--- a/devices/gdevtfnx.c
+++ b/devices/gdevtfnx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -102,7 +102,7 @@ static void
tiff_set_rgb_fields(gx_device_tiff *tfdev)
{
/* Put in a switch statement in case we want to have others */
- switch (tfdev->icc_struct->device_profile[0]->data_cs) {
+ switch (tfdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE]->data_cs) {
case gsRGB:
TIFFSetField(tfdev->tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
break;
diff --git a/devices/gdevtifs.c b/devices/gdevtifs.c
index 2d612bac..4ecafa8b 100644
--- a/devices/gdevtifs.c
+++ b/devices/gdevtifs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -74,7 +74,7 @@ tiff_close(gx_device * pdev)
gx_device_tiff *const tfdev = (gx_device_tiff *)pdev;
if (tfdev->tif)
- TIFFCleanup(tfdev->tif);
+ TIFFClose(tfdev->tif);
if (tfdev->icclink != NULL)
{
@@ -328,8 +328,8 @@ int gdev_tiff_begin_page(gx_device_tiff *tfdev,
&rendering_params);
} else {
tfdev->icclink = gsicc_alloc_link_dev(pdev->memory,
- profile_struct->device_profile[0], profile_struct->postren_profile,
- &rendering_params);
+ profile_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ profile_struct->postren_profile, &rendering_params);
}
if (tfdev->icclink == NULL) {
return_error(gs_error_VMerror);
@@ -390,13 +390,17 @@ int tiff_set_fields_for_printer(gx_device_printer *pdev,
TIFFSetField(tif, TIFFTAG_YRESOLUTION, (float)ypi);
{
- char revs[10];
+ char revs[32];
#define maxSoftware 40
char softwareValue[maxSoftware];
+ int revision = gs_revision_number();
+ int major = (int)(revision / 1000);
+ int minor = (int)(revision - (major * 1000)) / 10;
+ int patch = revision % 10;
strncpy(softwareValue, gs_product, maxSoftware);
softwareValue[maxSoftware - 1] = 0;
- gs_sprintf(revs, " %1.2f", gs_revision / 100.0);
+ gs_sprintf(revs, " %d.%2d.%d", major, minor, patch);
strncat(softwareValue, revs,
maxSoftware - strlen(softwareValue) - 1);
@@ -437,7 +441,7 @@ int tiff_set_fields_for_printer(gx_device_printer *pdev,
else if (pdev->icc_struct->oi_profile != NULL)
icc_profile = pdev->icc_struct->oi_profile;
else
- icc_profile = pdev->icc_struct->device_profile[0];
+ icc_profile = pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE];
if (icc_profile->num_comps == pdev->color_info.num_components &&
icc_profile->data_cs != gsCIELAB && !(pdev->icc_struct->usefastcolor)) {
@@ -536,10 +540,9 @@ static int tiff_chunky_post_cm(void *arg, byte **dst, byte **src, int w, int h,
/* Special version, called with 8 bit grey input to be downsampled to 1bpp
* output. */
int
-tiff_downscale_and_print_page(gx_device_printer *dev, TIFF *tif, int factor,
- int mfs, int aw, int bpc, int num_comps,
- int trap_w, int trap_h, const int *trap_order,
- int ets)
+tiff_downscale_and_print_page(gx_device_printer *dev, TIFF *tif,
+ gx_downscaler_params *params,
+ int aw, int bpc, int num_comps)
{
gx_device_tiff *const tfdev = (gx_device_tiff *)dev;
int code = 0;
@@ -547,6 +550,7 @@ tiff_downscale_and_print_page(gx_device_printer *dev, TIFF *tif, int factor,
int size = gdev_mem_bytes_per_scan_line((gx_device *)dev);
int max_size = max(size, TIFFScanlineSize(tif));
int row;
+ int factor = params->downscale_factor;
int height = dev->height/factor;
gx_downscaler_t ds;
@@ -554,24 +558,20 @@ tiff_downscale_and_print_page(gx_device_printer *dev, TIFF *tif, int factor,
if (code < 0)
return code;
- if (num_comps == 4) {
- if (tfdev->icclink == NULL) {
- code = gx_downscaler_init_trapped_ets(&ds, (gx_device *)dev, 8, bpc, num_comps,
- factor, mfs, &fax_adjusted_width, aw, trap_w, trap_h, trap_order, ets);
- } else {
- code = gx_downscaler_init_trapped_cm_ets(&ds, (gx_device *)dev, 8, bpc, num_comps,
- factor, mfs, &fax_adjusted_width, aw, trap_w, trap_h, trap_order,
- tiff_chunky_post_cm, tfdev->icclink, tfdev->icclink->num_output, ets);
- }
+ if (num_comps == 4)
+ params->trap_w = params->trap_h = 1;
+ if (tfdev->icclink == NULL) {
+ code = gx_downscaler_init(&ds, (gx_device *)dev,
+ 8, bpc, num_comps,
+ params,
+ &fax_adjusted_width, aw);
} else {
- if (tfdev->icclink == NULL) {
- code = gx_downscaler_init_ets(&ds, (gx_device *)dev, 8, bpc, num_comps,
- factor, mfs, &fax_adjusted_width, aw, ets);
- } else {
- code = gx_downscaler_init_cm_ets(&ds, (gx_device *)dev, 8, bpc, num_comps,
- factor, mfs, &fax_adjusted_width, aw, tiff_chunky_post_cm, tfdev->icclink,
- tfdev->icclink->num_output, ets);
- }
+ code = gx_downscaler_init_cm(&ds, (gx_device *)dev,
+ 8, bpc, num_comps,
+ params,
+ &fax_adjusted_width, aw,
+ tiff_chunky_post_cm, tfdev->icclink,
+ tfdev->icclink->num_output);
}
if (code < 0)
return code;
diff --git a/devices/gdevtifs.h b/devices/gdevtifs.h
index cbdbb374..adc9f4ae 100644
--- a/devices/gdevtifs.h
+++ b/devices/gdevtifs.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -55,10 +55,8 @@ dev_proc_put_params(tiff_put_params_downscale_cmyk_ets);
int tiff_print_page(gx_device_printer *dev, TIFF *tif, int min_feature_size);
int tiff_downscale_and_print_page(gx_device_printer *dev, TIFF *tif,
- int factor, int msf, int aw, int bpc,
- int num_comps,
- int trap_w, int trap_h, const int *trap_order,
- int ets);
+ gx_downscaler_params *params,
+ int aw, int bpc, int num_comps);
void tiff_set_handlers (void);
/*
diff --git a/devices/gdevtknk.c b/devices/gdevtknk.c
index 35d98bfe..741b5925 100644
--- a/devices/gdevtknk.c
+++ b/devices/gdevtknk.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevtrac.c b/devices/gdevtrac.c
index 09116144..77b7dc93 100644
--- a/devices/gdevtrac.c
+++ b/devices/gdevtrac.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevtsep.c b/devices/gdevtsep.c
index 7fddf1c7..3dde3523 100644
--- a/devices/gdevtsep.c
+++ b/devices/gdevtsep.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -329,12 +329,9 @@ tiffscaled_print_page(gx_device_printer * pdev, gp_file * file)
return tiff_downscale_and_print_page(pdev, tfdev->tif,
- tfdev->downscale.downscale_factor,
- tfdev->downscale.min_feature_size,
+ &tfdev->downscale,
tfdev->AdjustWidth,
- 1, 1,
- 0, 0, NULL,
- tfdev->downscale.ets);
+ 1, 1);
}
static int
@@ -357,12 +354,9 @@ tiffscaled8_print_page(gx_device_printer * pdev, gp_file * file)
tfdev->MaxStripSize);
}
return tiff_downscale_and_print_page(pdev, tfdev->tif,
- tfdev->downscale.downscale_factor,
- tfdev->downscale.min_feature_size,
+ &tfdev->downscale,
tfdev->AdjustWidth,
- 8, 1,
- 0, 0, NULL,
- 0);
+ 8, 1);
}
static void
@@ -375,7 +369,7 @@ tiff_set_rgb_fields(gx_device_tiff *tfdev)
else if (tfdev->icc_struct->oi_profile != NULL)
icc_profile = tfdev->icc_struct->oi_profile;
else
- icc_profile = tfdev->icc_struct->device_profile[0];
+ icc_profile = tfdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE];
switch (icc_profile->data_cs) {
case gsRGB:
@@ -416,12 +410,9 @@ tiffscaled24_print_page(gx_device_printer * pdev, gp_file * file)
}
return tiff_downscale_and_print_page(pdev, tfdev->tif,
- tfdev->downscale.downscale_factor,
- tfdev->downscale.min_feature_size,
+ &tfdev->downscale,
tfdev->AdjustWidth,
- 8, 3,
- 0, 0, NULL,
- 0);
+ 8, 3);
}
static void
@@ -459,13 +450,9 @@ tiffscaled32_print_page(gx_device_printer * pdev, gp_file * file)
}
return tiff_downscale_and_print_page(pdev, tfdev->tif,
- tfdev->downscale.downscale_factor,
- tfdev->downscale.min_feature_size,
+ &tfdev->downscale,
tfdev->AdjustWidth,
- 8, 4,
- tfdev->downscale.trap_w, tfdev->downscale.trap_h,
- tfdev->downscale.trap_order,
- 0);
+ 8, 4);
}
static int
@@ -485,13 +472,9 @@ tiffscaled4_print_page(gx_device_printer * pdev, gp_file * file)
tfdev->MaxStripSize);
return tiff_downscale_and_print_page(pdev, tfdev->tif,
- tfdev->downscale.downscale_factor,
- tfdev->downscale.min_feature_size,
+ &tfdev->downscale,
tfdev->AdjustWidth,
- 1, 4,
- tfdev->downscale.trap_w, tfdev->downscale.trap_h,
- tfdev->downscale.trap_order,
- tfdev->downscale.ets);
+ 1, 4);
}
/* Called when the post render ICC profile is in a different color space
@@ -525,7 +508,8 @@ tiff_set_icc_color_fields(gx_device_printer *pdev)
static int
tiffsep_spec_op(gx_device *dev_, int op, void *data, int datasize)
{
- if (op == gxdso_supports_iccpostrender || op == gxdso_supports_devn) {
+ if (op == gxdso_supports_iccpostrender || op == gxdso_supports_devn
+ || op == gxdso_skip_icc_component_validation) {
return true;
}
return gdev_prn_dev_spec_op(dev_, op, data, datasize);
@@ -1791,8 +1775,8 @@ tiffsep_prn_open(gx_device * pdev)
&rendering_params);
} else {
pdev_sep->icclink = gsicc_alloc_link_dev(pdev->memory,
- profile_struct->device_profile[0], profile_struct->postren_profile,
- &rendering_params);
+ profile_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE],
+ profile_struct->postren_profile, &rendering_params);
}
if (pdev_sep->icclink == NULL) {
return_error(gs_error_VMerror);
@@ -1813,7 +1797,7 @@ tiffsep_close_sep_file(tiffsep_device *tfdev, const char *fn, int comp_num)
int code;
if (tfdev->tiff[comp_num]) {
- TIFFCleanup(tfdev->tiff[comp_num]);
+ TIFFClose(tfdev->tiff[comp_num]);
tfdev->tiff[comp_num] = NULL;
}
@@ -1832,7 +1816,7 @@ tiffsep_close_comp_file(tiffsep_device *tfdev, const char *fn)
int code;
if (tfdev->tiff_comp) {
- TIFFCleanup(tfdev->tiff_comp);
+ TIFFClose(tfdev->tiff_comp);
tfdev->tiff_comp = NULL;
}
@@ -2242,7 +2226,6 @@ tiffsep_print_page(gx_device_printer * pdev, gp_file * file)
gs_parsed_file_name_t parsed;
int plane_count = 0; /* quiet compiler */
int factor = tfdev->downscale.downscale_factor;
- int mfs = tfdev->downscale.min_feature_size;
int dst_bpc = tfdev->BitsPerComponent;
gx_downscaler_t ds;
int width = gx_downscaler_scale(tfdev->width, factor);
@@ -2481,10 +2464,10 @@ tiffsep_print_page(gx_device_printer * pdev, gp_file * file)
}
}
}
- code = gx_downscaler_init_planar_trapped(&ds, (gx_device *)pdev, &params,
- num_comp, factor, mfs, 8, dst_bpc,
- tfdev->downscale.trap_w, tfdev->downscale.trap_h,
- tfdev->downscale.trap_order);
+ code = gx_downscaler_init_planar(&ds, (gx_device *)pdev,
+ 8, dst_bpc, num_comp,
+ &tfdev->downscale,
+ &params);
if (code < 0)
goto cleanup;
byte_width = (width * dst_bpc + 7)>>3;
@@ -2577,9 +2560,7 @@ cleanup:
}
}
TIFFWriteDirectory(tfdev->tiff_comp);
- if (fmt) {
- code = tiffsep_close_comp_file(tfdev, pdev->fname);
- }
+ code = tiffsep_close_comp_file(tfdev, pdev->fname);
if (code1 < 0) {
code = code1;
}
@@ -2970,17 +2951,17 @@ tiff_open_s(gx_device *pdev)
/* Take care of any color model changes now */
if (pdev->icc_struct->postren_profile != NULL &&
- pdev->icc_struct->device_profile[0]->num_comps != pdev->color_info.num_components &&
+ pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE]->num_comps != pdev->color_info.num_components &&
pdev->color_info.depth == 8 * pdev->color_info.num_components) {
code = gx_change_color_model((gx_device*)pdev,
- pdev->icc_struct->device_profile[0]->num_comps, 8);
+ pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE]->num_comps, 8);
if (code < 0)
return code;
/* Reset the device procs */
memset(&(pdev->procs), 0, sizeof(pdev->procs));
- switch (pdev->icc_struct->device_profile[0]->num_comps) {
+ switch (pdev->icc_struct->device_profile[GS_DEFAULT_DEVICE_PROFILE]->num_comps) {
case 1:
pdev->procs = tiffscaled8_procs;
pdev->color_info.dither_colors = 0;
diff --git a/devices/gdevupd.c b/devices/gdevupd.c
index 70148905..702548d8 100644
--- a/devices/gdevupd.c
+++ b/devices/gdevupd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -1048,8 +1048,8 @@ upd_print_page(gx_device_printer *pdev, gp_file *out)
*/
if(!upd || B_OK4GO != (upd->flags & (B_OK4GO | B_ERROR))) {
#if UPD_MESSAGES & (UPD_M_ERROR | UPD_M_TOPCALLS)
- errprintf(pdev->memory, "CALL-REJECTED upd_print_page(0x%05lx,0x%05lx)\n",
- (long) udev,(long) out);
+ errprintf(pdev->memory, "CALL-REJECTED upd_print_page(" PRI_INTPTR "," PRI_INTPTR ")\n",
+ (intptr_t)udev,(intptr_t) out);
#endif
return_error(gs_error_undefined);
}
diff --git a/devices/gdevwpr2.c b/devices/gdevwpr2.c
index 29af469b..3a4b97b6 100644
--- a/devices/gdevwpr2.c
+++ b/devices/gdevwpr2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevx.c b/devices/gdevx.c
index 2539e250..cfde7543 100644
--- a/devices/gdevx.c
+++ b/devices/gdevx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -978,8 +978,8 @@ set_tile(gx_device * dev, const gx_strip_bitmap * tile)
if (gs_debug['H']) {
int i;
- dmlprintf4(xdev->memory, "[H] 0x%lx: width=%d height=%d raster=%d\n",
- (ulong) tile->data, tile->size.x, tile->size.y, tile->raster);
+ dmlprintf4(xdev->memory, "[H] "PRI_INTPTR": width=%d height=%d raster=%d\n",
+ (intptr_t)tile->data, tile->size.x, tile->size.y, tile->raster);
dmlputs(xdev->memory, "");
for (i = 0; i < tile->raster * tile->size.y; i++)
dmprintf1(xdev->memory, " %02x", tile->data[i]);
diff --git a/devices/gdevx.h b/devices/gdevx.h
index 0e97d934..4becd639 100644
--- a/devices/gdevx.h
+++ b/devices/gdevx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevxalt.c b/devices/gdevxalt.c
index 144cf3e7..4d8cc339 100644
--- a/devices/gdevxalt.c
+++ b/devices/gdevxalt.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevxcf.c b/devices/gdevxcf.c
index a7e66174..c4c44bf6 100644
--- a/devices/gdevxcf.c
+++ b/devices/gdevxcf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevxcmp.c b/devices/gdevxcmp.c
index 5cf5a56c..9f7e0401 100644
--- a/devices/gdevxcmp.c
+++ b/devices/gdevxcmp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevxcmp.h b/devices/gdevxcmp.h
index 0a71dd50..9d6fca73 100644
--- a/devices/gdevxcmp.h
+++ b/devices/gdevxcmp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevxini.c b/devices/gdevxini.c
index 3b46b182..ca8ca2f9 100644
--- a/devices/gdevxini.c
+++ b/devices/gdevxini.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gdevxres.c b/devices/gdevxres.c
index 485f0007..748d3c58 100644
--- a/devices/gdevxres.c
+++ b/devices/gdevxres.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/gxfcopy.c b/devices/gxfcopy.c
index d68ee8f9..c6d90c9a 100644
--- a/devices/gxfcopy.c
+++ b/devices/gxfcopy.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -209,7 +209,10 @@ struct gs_copied_font_data_s {
extern_st(st_gs_font_info);
static
ENUM_PTRS_WITH(gs_copied_font_data_enum_ptrs, gs_copied_font_data_t *cfdata)
- if (index == 12) {
+ /* See comments in gs_copy_font() below regarding the enumeration of names
+ * and the font's 'dir' member
+ */
+ if (index == 12 && cfdata->dir != NULL) {
gs_copied_glyph_name_t *names = cfdata->names;
gs_copied_glyph_extra_name_t *en = cfdata->extra_names;
int i;
@@ -2110,7 +2113,37 @@ gs_copy_font(gs_font *font, const gs_matrix *orig_matrix, gs_memory_t *mem, gs_f
goto fail;
}
cfdata->info = info;
- cfdata->dir = font->dir;
+
+ /* This is somewhat unpleasant. We use the 'glyph' as the unique ID for a number
+ * of purposes, but in particular for determining which CharStrings need to be written
+ * out by pdfwrite. The 'glyph' appears to be (sometimes) given by the index of the glyph name
+ * in the *interpreter* name table. For names in one of the standard encodings
+ * we find the name there and use its ID. However, if the glyph name is non-standard
+ * then it is added to the interpreter name table and the name index is used to
+ * identify the glyph. The problem arises if the font is restored away, and a
+ * vmreclaim causes the (now unreferenced) glyph names to be flushed. If we
+ * should then use the same font and glyph, its possible that the name table
+ * might be different, resulting in a different name index. We would then write
+ * duplicate CharStrings to the output, see Bug 687172.
+ * The GC enumeration (see top of file) marks the names in the name table to prevent
+ * them being flushed. As long as everything is in the same memory allocator this
+ * works (ugly though it is). However, if we are using the pdfi PDF interpreter
+ * inside the PostScript interpreter, then a problem arises. The pdfwrite device
+ * holds on to the font copies until the device is destroyed, by which time the
+ * PDF interpreter has already gone. The vmreclaim prior to the device destruction
+ * enumerates the name pointers. Because the font was allocated by pdfi these
+ * are no longer valid. They are also not needed, since the pdfi name table is
+ * not garbage collected..
+ * To cater for both conditions we test the memory allocator the font was using.
+ * If its a GC'ed allocater then we keep a pointer to the font 'dir' and we enumerate
+ * the names and mark them in the interpreter table. Otherwise we don't attempt to
+ * mark them. We use dir being NULL to control whether we mark the names.
+ */
+ if (font->memory != font->memory->non_gc_memory)
+ cfdata->dir = font->dir;
+ else
+ cfdata->dir = NULL;
+
if ((code = (copy_string(mem, &cfdata->info.Copyright,
"gs_copy_font(Copyright)") |
copy_string(mem, &cfdata->info.Notice,
diff --git a/devices/gxfcopy.h b/devices/gxfcopy.h
index c88d43e5..8a6efbaa 100644
--- a/devices/gxfcopy.h
+++ b/devices/gxfcopy.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/minftrsz.c b/devices/minftrsz.c
index 1822fc59..a8c5d202 100644
--- a/devices/minftrsz.c
+++ b/devices/minftrsz.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/minftrsz.h b/devices/minftrsz.h
index a24c63fd..d520a62a 100644
--- a/devices/minftrsz.h
+++ b/devices/minftrsz.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/rinkj/evenbetter-rll.c b/devices/rinkj/evenbetter-rll.c
index 68f17114..5928704a 100644
--- a/devices/rinkj/evenbetter-rll.c
+++ b/devices/rinkj/evenbetter-rll.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/rinkj/evenbetter-rll.h b/devices/rinkj/evenbetter-rll.h
index c8585ff3..3e1d7fa6 100644
--- a/devices/rinkj/evenbetter-rll.h
+++ b/devices/rinkj/evenbetter-rll.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -16,6 +16,9 @@
/* Header file for testbed implementation of Even Better Screening. */
+#ifndef evenbetter_rll_h_INCLUDED
+#define evenbetter_rll_h_INCLUDED
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -101,3 +104,5 @@ eb_free_aligned(void *p);
#ifdef __cplusplus
}
#endif
+
+#endif
diff --git a/devices/rinkj/rinkj-byte-stream.c b/devices/rinkj/rinkj-byte-stream.c
index 6019ec18..9f84ce96 100644
--- a/devices/rinkj/rinkj-byte-stream.c
+++ b/devices/rinkj/rinkj-byte-stream.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/rinkj/rinkj-byte-stream.h b/devices/rinkj/rinkj-byte-stream.h
index d0cef54a..b2741088 100644
--- a/devices/rinkj/rinkj-byte-stream.h
+++ b/devices/rinkj/rinkj-byte-stream.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -14,6 +14,9 @@
*/
+#ifndef rinkj_byte_stream_h_INCLUDED
+#define rinkj_byte_stream_h_INCLUDED
+
#include "gp.h"
/* Bytestream abstraction for Rinkj driver. */
@@ -38,3 +41,5 @@ rinkj_byte_stream_close (RinkjByteStream *bs);
RinkjByteStream *
rinkj_byte_stream_file_new (gp_file *f);
+
+#endif
diff --git a/devices/rinkj/rinkj-config.c b/devices/rinkj/rinkj-config.c
index b1d563f0..4b084458 100644
--- a/devices/rinkj/rinkj-config.c
+++ b/devices/rinkj/rinkj-config.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/rinkj/rinkj-config.h b/devices/rinkj/rinkj-config.h
index 77595955..716caa75 100644
--- a/devices/rinkj/rinkj-config.h
+++ b/devices/rinkj/rinkj-config.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -14,6 +14,9 @@
*/
+#ifndef rinkj_config_h_INCLUDED
+#define rinkj_config_h_INCLUDED
+
/* Support for reading Rinkj config files. */
char *
@@ -24,3 +27,5 @@ rinkj_config_get (const char *config, const char *key);
char *
rinkj_config_keyval (const char *config, char **p_val, const char **p_next);
+
+#endif
diff --git a/devices/rinkj/rinkj-device.c b/devices/rinkj/rinkj-device.c
index 112ffb47..43ba6f80 100644
--- a/devices/rinkj/rinkj-device.c
+++ b/devices/rinkj/rinkj-device.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/rinkj/rinkj-device.h b/devices/rinkj/rinkj-device.h
index d5f9f775..c936711f 100644
--- a/devices/rinkj/rinkj-device.h
+++ b/devices/rinkj/rinkj-device.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -13,6 +13,8 @@
CA 94945, U.S.A., +1(415)492-9861, for further information.
*/
+#ifndef rinkj_device_h_INCLUDED
+#define rinkj_device_h_INCLUDED
/* The device abstraction within the Rinkj driver. */
@@ -53,3 +55,5 @@ rinkj_device_init (RinkjDevice *self, const RinkjDeviceParams *params);
int
rinkj_device_write (RinkjDevice *self, const char **data);
+
+#endif
diff --git a/devices/rinkj/rinkj-dither.c b/devices/rinkj/rinkj-dither.c
index 5e6247ee..f5a12844 100644
--- a/devices/rinkj/rinkj-dither.c
+++ b/devices/rinkj/rinkj-dither.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/rinkj/rinkj-dither.h b/devices/rinkj/rinkj-dither.h
index 2720d64e..815368c8 100644
--- a/devices/rinkj/rinkj-dither.h
+++ b/devices/rinkj/rinkj-dither.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -13,6 +13,8 @@
CA 94945, U.S.A., +1(415)492-9861, for further information.
*/
+#ifndef rinkj_dither_h_INCLUDED
+#define rinkj_dither_h_INCLUDED
/* The dither object abstraction within the Rinkj driver. */
@@ -28,3 +30,5 @@ rinkj_dither_line (RinkjDither *self, unsigned char *dst, const unsigned char *s
void
rinkj_dither_close (RinkjDither *self);
+
+#endif
diff --git a/devices/rinkj/rinkj-epson870.c b/devices/rinkj/rinkj-epson870.c
index 70102533..59d55f57 100644
--- a/devices/rinkj/rinkj-epson870.c
+++ b/devices/rinkj/rinkj-epson870.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/rinkj/rinkj-epson870.h b/devices/rinkj/rinkj-epson870.h
index 2293737a..08f135f9 100644
--- a/devices/rinkj/rinkj-epson870.h
+++ b/devices/rinkj/rinkj-epson870.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -13,8 +13,12 @@
CA 94945, U.S.A., +1(415)492-9861, for further information.
*/
+#ifndef rinkj_epson870_h_INCLUDED
+#define rinkj_epson870_h_INCLUDED
/* A Rinkj driver for a number of variable-dot Epson devices. */
RinkjDevice *
rinkj_epson870_new (RinkjByteStream *out);
+
+#endif
diff --git a/devices/rinkj/rinkj-screen-eb.c b/devices/rinkj/rinkj-screen-eb.c
index b4b98bce..e6a9f779 100644
--- a/devices/rinkj/rinkj-screen-eb.c
+++ b/devices/rinkj/rinkj-screen-eb.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/rinkj/rinkj-screen-eb.h b/devices/rinkj/rinkj-screen-eb.h
index 78044168..8b61fe35 100644
--- a/devices/rinkj/rinkj-screen-eb.h
+++ b/devices/rinkj/rinkj-screen-eb.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -14,6 +14,9 @@
*/
+#ifndef rinkj_screen_eb_h_INCLUDED
+#define rinkj_screen_eb_h_INCLUDED
+
/* A Rinkj module encapsulating ETS screening. */
RinkjDevice *
@@ -27,3 +30,5 @@ rinkj_screen_eb_set_gamma (RinkjDevice *self, int plane, double gamma, double ma
void
rinkj_screen_eb_set_lut (RinkjDevice *self, int plane, const double *lut);
+
+#endif
diff --git a/devices/vector/gdevagl.c b/devices/vector/gdevagl.c
index f9428a6e..a551bb38 100644
--- a/devices/vector/gdevagl.c
+++ b/devices/vector/gdevagl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevagl.h b/devices/vector/gdevagl.h
index e3569226..066eae76 100644
--- a/devices/vector/gdevagl.h
+++ b/devices/vector/gdevagl.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -16,6 +16,9 @@
* Unicode code points.
*/
+#ifndef gdevagl_h_INCLUDED
+#define gdevagl_h_INCLUDED
+
typedef struct single_glyph_list_s {
const char *Glyph;
unsigned short Unicode;
@@ -35,3 +38,5 @@ typedef struct quad_glyph_list_s {
const char *Glyph;
unsigned short Unicode[4];
} quad_glyph_list_t;
+
+#endif
diff --git a/devices/vector/gdevpdf.c b/devices/vector/gdevpdf.c
index b25a4a6a..6752fabb 100644
--- a/devices/vector/gdevpdf.c
+++ b/devices/vector/gdevpdf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -467,6 +467,12 @@ pdf_compute_fileID(gx_device_pdf * pdev)
pdev->KeyLength = KeyLength;
if (code < 0)
return code;
+ /* Generally we would call s_close_filters() here in order to free the data buffer
+ * associated with the MD5 filter, but the data buffer we passed in to s_MD5E_make_stream()
+ * is part of the device structure, so we must *NOT* free that buffer. Therefore we must
+ * instead call sclose(). This confusion over ownership of the stream buffers causes
+ * a lot of problems......
+ */
sclose(s);
gs_free_object(mem, s, "pdf_compute_fileID");
return 0;
@@ -1410,6 +1416,11 @@ pdf_output_page(gx_device * dev, int num_copies, int flush)
gx_device_pdf *const pdev = (gx_device_pdf *) dev;
int code;
+ if (pdev->Eps2Write && pdev->next_page != 0 && !gx_outputfile_is_separate_pages(pdev->fname, dev->memory)) {
+ emprintf(pdev->memory, "\n *** EPS files may not contain multiple pages.\n *** Use of the %%d filename format is required to output pages to multiple EPS files.\n");
+ return_error(gs_error_ioerror);
+ }
+
if (pdev->ForOPDFRead) {
code = pdf_close_page(pdev, num_copies);
if (code < 0)
@@ -2555,6 +2566,7 @@ pdf_close(gx_device * dev)
int64_t start_section, end_section;
char str[256];
pdf_linearisation_t linear_params;
+ bool file_per_page = false;
if (!dev->is_open)
return_error(gs_error_undefined);
@@ -2577,26 +2589,14 @@ pdf_close(gx_device * dev)
* marks.
*/
if (pdev->next_page == 0) {
- /* If we didn't get called from pdf_output_page, and we are doign file-per-page
- * output, then the call from close_device will leave an empty file which we don't
- * want. So here we delete teh file.
- */
- if (!pdev->InOutputPage && gx_outputfile_is_separate_pages(pdev->fname, pdev->memory)) {
- code = gdev_vector_close_file((gx_device_vector *) pdev);
- if (code != 0)
- return code;
- code = pdf_close_files(pdev, 0);
+ file_per_page = !pdev->InOutputPage &&
+ gx_outputfile_is_separate_pages(pdev->fname, pdev->memory);
+ if (!file_per_page) {
+ code = pdf_open_page(pdev, PDF_IN_STREAM);
+
if (code < 0)
return code;
- code = gx_device_delete_output_file((const gx_device *)pdev, pdev->fname);
- if (code != 0)
- return gs_note_error(gs_error_ioerror);
- return code;
}
- code = pdf_open_page(pdev, PDF_IN_STREAM);
-
- if (code < 0)
- return code;
}
if (pdev->contents_id != 0)
pdf_close_page(pdev, 1);
@@ -2945,6 +2945,14 @@ pdf_close(gx_device * dev)
stream_puts(pdev->strm, "%%EOF\n");
}
+ if (pdev->params.PSPageOptions.size) {
+ int ix;
+
+ for (ix = 0; ix < pdev->params.PSPageOptions.size;ix++)
+ gs_free_object(mem->non_gc_memory, (byte *)pdev->params.PSPageOptions.data[ix].data, "freeing old string array copy");
+ gs_free_object(mem->non_gc_memory, (byte *)pdev->params.PSPageOptions.data, "freeing old string array");
+ }
+
if (pdev->Linearise) {
linear_params.LastResource = pdev->next_id - 1;
linear_params.Offsets = (gs_offset_t *)gs_alloc_bytes(pdev->pdf_memory, pdev->next_id * sizeof(gs_offset_t), "temp xref storage");
@@ -3450,6 +3458,18 @@ pdf_close(gx_device * dev)
if (code < 0)
return code;
+ /* If we didn't get called from pdf_output_page, and we are doign file-per-page
+ * output, then the call from close_device will leave an empty file which we don't
+ * want. So here we delete the file.
+ * NOTE: We needed to let it process the whole page in order to make sure everything
+ * got properly freed.
+ */
+ if (file_per_page) {
+ code = gx_device_delete_output_file((const gx_device *)pdev, pdev->fname);
+ if (code != 0)
+ code = gs_note_error(gs_error_ioerror);
+ }
+
pdf_free_pdf_font_cache(pdev);
return code;
}
diff --git a/devices/vector/gdevpdfb.c b/devices/vector/gdevpdfb.c
index e35531d7..20339038 100644
--- a/devices/vector/gdevpdfb.c
+++ b/devices/vector/gdevpdfb.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdfb.h b/devices/vector/gdevpdfb.h
index 5ea7a355..16521e0d 100644
--- a/devices/vector/gdevpdfb.h
+++ b/devices/vector/gdevpdfb.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdfc.c b/devices/vector/gdevpdfc.c
index 259d143c..3a3096c4 100644
--- a/devices/vector/gdevpdfc.c
+++ b/devices/vector/gdevpdfc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -643,6 +643,10 @@ pdf_indexed_color_space(gx_device_pdf *pdev, const gs_gstate * pgs, cos_value_t
}
stream_write(&es, palette, table_size);
gs_free_string(mem, palette, table_size, "pdf_color_space(palette)");
+ /* Another case where we use sclose() and not sclose_filters(), because the
+ * buffer we supplied to s_init_filter is a heap based C object, so we
+ * must not free it.
+ */
sclose(&es);
sflush(&s);
string_used = (uint)stell(&s);
@@ -874,6 +878,11 @@ pdf_color_space_named(gx_device_pdf *pdev, const gs_gstate * pgs,
if (code < 0)
return_error(gs_error_unregistered); /* Must not happen. */
serialized_size = stell(&s);
+ /* I think this is another case where we use sclose() and not sclose_filters().
+ * It seems like we don't actually write anything, but it allows us to find the
+ * length of the serialised data. No buffer hre, so we must no call
+ * s_close_filters() as that will try to free it.
+ */
sclose(&s);
if (serialized_size <= sizeof(serialized0))
serialized = serialized0;
diff --git a/devices/vector/gdevpdfc.h b/devices/vector/gdevpdfc.h
index 69770933..e9056be3 100644
--- a/devices/vector/gdevpdfc.h
+++ b/devices/vector/gdevpdfc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdfd.c b/devices/vector/gdevpdfd.c
index 1e62bad1..32a6c41b 100644
--- a/devices/vector/gdevpdfd.c
+++ b/devices/vector/gdevpdfd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -181,20 +181,6 @@ pdf_dorect(gx_device_vector * vdev, fixed x0, fixed y0, fixed x1, fixed y1,
ymin -= d;
ymax += d;
}
- if (pdev->CompatibilityLevel < 1.5) {
- /*
- * Clamp coordinates to avoid tripping over Acrobat Reader's limit
- * of 32K on user coordinate values.
- */
- if (x0 < xmin)
- x0 = xmin;
- if (x1 > xmax)
- x1 = xmax;
- if (y0 < ymin)
- y0 = ymin;
- if (y1 > ymax)
- y1 = ymax;
- }
return psdf_dorect(vdev, x0, y0, x1, y1, type);
}
@@ -236,6 +222,7 @@ const gx_device_vector_procs pdf_vector_procs = {
int
pdf_remember_clip_path(gx_device_pdf * pdev, const gx_clip_path * pcpath)
{
+ int code = 0;
/* Used for skipping redundant clip paths. SF bug #624168. */
if (pdev->clip_path != 0) {
gx_path_free(pdev->clip_path, "pdf clip path");
@@ -247,7 +234,22 @@ pdf_remember_clip_path(gx_device_pdf * pdev, const gx_clip_path * pcpath)
pdev->clip_path = gx_path_alloc(pdev->pdf_memory, "pdf clip path");
if (pdev->clip_path == 0)
return_error(gs_error_VMerror);
- return gx_cpath_to_path((gx_clip_path *)pcpath, pdev->clip_path);
+
+ code = gx_cpath_to_path((gx_clip_path *)pcpath, pdev->clip_path);
+ if (code < 0)
+ return code;
+
+ /* gx_cpath_to_path above ends up going through gx_path_assign_preserve
+ * which specifically states that the segments of the paths (in this case pcpath
+ * and pdev->clip_path) must have been allocated with the same allocator.
+ * If that's not true (eg pdfi running inside GS) then we need to 'unshare'
+ * the path. Otherwise we mauy end up with pcpath being freed and discarded
+ * while the pdfwrite devcie still thinks it has a pointer to it.
+ */
+ if (pcpath->path.memory != pdev->pdf_memory)
+ code = gx_path_unshare(pdev->clip_path);
+
+ return code;
}
/* Check if same clipping path. */
@@ -778,38 +780,6 @@ pdf_put_clip_path(gx_device_pdf * pdev, const gx_clip_path * pcpath)
}
/*
- * Compute the scaling to ensure that user coordinates for a path are within
- * Acrobat's range. Return true if scaling was needed. In this case, the
- * CTM will be multiplied by *pscale, and all coordinates will be divided by
- * *pscale.
- */
-static bool
-make_rect_scaling(const gx_device_pdf *pdev, const gs_fixed_rect *bbox,
- double prescale, double *pscale)
-{
- double bmin, bmax;
-
- if (pdev->CompatibilityLevel > 1.4) {
- *pscale = 1;
- return false;
- }
-
- bmin = min(bbox->p.x / pdev->scale.x, bbox->p.y / pdev->scale.y) * prescale;
- bmax = max(bbox->q.x / pdev->scale.x, bbox->q.y / pdev->scale.y) * prescale;
- if (bmin <= int2fixed(-MAX_USER_COORD) ||
- bmax > int2fixed(MAX_USER_COORD)
- ) {
- /* Rescale the path. */
- *pscale = max(bmin / int2fixed(-MAX_USER_COORD),
- bmax / int2fixed(MAX_USER_COORD));
- return true;
- } else {
- *pscale = 1;
- return false;
- }
-}
-
-/*
* Prepare a fill with a color anc a clipping path.
* Return 1 if there is nothing to paint.
* Changes *box to the clipping box.
@@ -1652,9 +1622,6 @@ gdev_pdf_fill_path(gx_device * dev, const gs_gstate * pgs, gx_path * ppath,
return code;
{
stream *s = pdev->strm;
- double scale;
- gs_matrix smat;
- gs_matrix *psmat = NULL;
gs_path_enum cenum;
gdev_vector_dopath_state_t state;
@@ -1667,19 +1634,11 @@ gdev_pdf_fill_path(gx_device * dev, const gs_gstate * pgs, gx_path * ppath,
pprintg1(s, "%g i\n", params->flatness);
pdev->state.flatness = params->flatness;
}
- if (make_rect_scaling(pdev, &box1, 1.0, &scale)) {
- gs_make_scaling(pdev->scale.x * scale, pdev->scale.y * scale,
- &smat);
- pdf_put_matrix(pdev, "q ", &smat, "cm\n");
- psmat = &smat;
- }
- code = pdf_write_path(pdev, (gs_path_enum *)&cenum, &state, (gx_path *)ppath, 0, gx_path_type_fill | gx_path_type_optimize, psmat);
+ code = pdf_write_path(pdev, (gs_path_enum *)&cenum, &state, (gx_path *)ppath, 0, gx_path_type_fill | gx_path_type_optimize, NULL);
if (code < 0)
return code;
stream_puts(s, (params->rule < 0 ? "f\n" : "f*\n"));
- if (psmat)
- stream_puts(s, "Q\n");
}
return 0;
}
@@ -1693,10 +1652,9 @@ gdev_pdf_stroke_path(gx_device * dev, const gs_gstate * pgs,
gx_device_pdf *pdev = (gx_device_pdf *) dev;
stream *s;
int code;
- double scale, path_scale;
+ double scale;
bool set_ctm;
gs_matrix mat;
- double prescale = 1;
gs_fixed_rect bbox;
gs_path_enum cenum;
gdev_vector_dopath_state_t state;
@@ -1782,20 +1740,6 @@ gdev_pdf_stroke_path(gx_device * dev, const gs_gstate * pgs,
scale = fabs(pgs->ctm.xx + pgs->ctm.xy + pgs->ctm.yx + pgs->ctm.yy) /* Using the non-zero coeff. */
/ sqrt(2); /* Empirically from Adobe. */
}
- if (set_ctm) {
- /*
- * We want a scaling factor that will bring the largest reasonable
- * user coordinate within bounds. We choose a factor based on the
- * minor axis of the transformation. Thanks to Raph Levien for
- * the following formula.
- */
- double a = mat.xx, b = mat.xy, c = mat.yx, d = mat.yy;
- double u = fabs(a * d - b * c);
- double v = a * a + b * b + c * c + d * d;
- double minor = (sqrt(v + 2 * u) - sqrt(v - 2 * u)) * 0.5;
-
- prescale = (minor == 0 || minor > 1 ? 1 : 1 / minor);
- }
gx_path_bbox(ppath, &bbox);
{
/* Check whether a painting appears inside the clipping box.
@@ -1828,15 +1772,6 @@ gdev_pdf_stroke_path(gx_device * dev, const gs_gstate * pgs,
if (stroke_bbox.q.x < stroke_bbox.p.x || stroke_bbox.q.y < stroke_bbox.p.y)
return 0;
}
- if (make_rect_scaling(pdev, &bbox, prescale, &path_scale)) {
- scale /= path_scale;
- if (set_ctm)
- gs_matrix_scale(&mat, path_scale, path_scale, &mat);
- else {
- gs_make_scaling(path_scale, path_scale, &mat);
- set_ctm = true;
- }
- }
code = gdev_vector_prepare_stroke((gx_device_vector *)pdev, pgs, params,
pdcolor, scale);
if (code < 0)
@@ -1903,8 +1838,7 @@ gdev_pdf_fill_stroke_path(gx_device *dev, const gs_gstate *pgs, gx_path *ppath,
} else {
bool set_ctm;
gs_matrix mat;
- double scale, path_scale;
- double prescale = 1;
+ double scale;
gs_fixed_rect bbox;
gs_path_enum cenum;
gdev_vector_dopath_state_t state;
@@ -1918,7 +1852,6 @@ gdev_pdf_fill_stroke_path(gx_device *dev, const gs_gstate *pgs, gx_path *ppath,
gx_cpath_outer_box(pcpath, &cbox);
if (cbox.p.x >= cbox.q.x || cbox.p.y >= cbox.q.y)
return 1; /* empty clipping path */
-// *box = cbox;
}
code = pdf_check_soft_mask(pdev, (gs_gstate *)pgs);
if (code < 0)
@@ -1968,20 +1901,6 @@ gdev_pdf_fill_stroke_path(gx_device *dev, const gs_gstate *pgs, gx_path *ppath,
scale = fabs(pgs->ctm.xx + pgs->ctm.xy + pgs->ctm.yx + pgs->ctm.yy) /* Using the non-zero coeff. */
/ sqrt(2); /* Empirically from Adobe. */
}
- if (set_ctm) {
- /*
- * We want a scaling factor that will bring the largest reasonable
- * user coordinate within bounds. We choose a factor based on the
- * minor axis of the transformation. Thanks to Raph Levien for
- * the following formula.
- */
- double a = mat.xx, b = mat.xy, c = mat.yx, d = mat.yy;
- double u = fabs(a * d - b * c);
- double v = a * a + b * b + c * c + d * d;
- double minor = (sqrt(v + 2 * u) - sqrt(v - 2 * u)) * 0.5;
-
- prescale = (minor == 0 || minor > 1 ? 1 : 1 / minor);
- }
gx_path_bbox(ppath, &bbox);
{
/* Check whether a painting appears inside the clipping box.
@@ -2014,15 +1933,6 @@ gdev_pdf_fill_stroke_path(gx_device *dev, const gs_gstate *pgs, gx_path *ppath,
if (stroke_bbox.q.x < stroke_bbox.p.x || stroke_bbox.q.y < stroke_bbox.p.y)
return 0;
}
- if (make_rect_scaling(pdev, &bbox, prescale, &path_scale)) {
- scale /= path_scale;
- if (set_ctm)
- gs_matrix_scale(&mat, path_scale, path_scale, &mat);
- else {
- gs_make_scaling(path_scale, path_scale, &mat);
- set_ctm = true;
- }
- }
code = pdf_setfillcolor((gx_device_vector *)pdev, pgs, pdcolor_fill);
if (code == gs_error_rangecheck) {
@@ -2077,9 +1987,6 @@ gdev_pdf_fill_rectangle_hl_color(gx_device *dev, const gs_fixed_rect *rect,
int code;
gs_fixed_rect box1 = *rect, box = box1;
gx_device_pdf *pdev = (gx_device_pdf *) dev;
- double scale;
- gs_matrix smat;
- gs_matrix *psmat = NULL;
const bool convert_to_image = (pdev->CompatibilityLevel <= 1.2 &&
gx_dc_is_pattern2_color(pdcolor));
@@ -2098,16 +2005,9 @@ gdev_pdf_fill_rectangle_hl_color(gx_device *dev, const gs_fixed_rect *rect,
rect_intersect(box1, box);
if (box1.p.x > box1.q.x || box1.p.y > box1.q.y)
return 0; /* outside the clipping path */
- if (make_rect_scaling(pdev, &box1, 1.0, &scale)) {
- gs_make_scaling(pdev->scale.x * scale, pdev->scale.y * scale, &smat);
- pdf_put_matrix(pdev, "q ", &smat, "cm\n");
- psmat = &smat;
- }
pprintg4(pdev->strm, "%g %g %g %g re f\n",
- fixed2float(box1.p.x) / scale, fixed2float(box1.p.y) / scale,
- fixed2float(box1.q.x - box1.p.x) / scale, fixed2float(box1.q.y - box1.p.y) / scale);
- if (psmat)
- stream_puts(pdev->strm, "Q\n");
+ fixed2float(box1.p.x), fixed2float(box1.p.y),
+ fixed2float(box1.q.x - box1.p.x) , fixed2float(box1.q.y - box1.p.y));
if (pdev->Eps2Write) {
gs_rect *Box;
diff --git a/devices/vector/gdevpdfe.c b/devices/vector/gdevpdfe.c
index 1c540709..f9544c5d 100644
--- a/devices/vector/gdevpdfe.c
+++ b/devices/vector/gdevpdfe.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdfg.c b/devices/vector/gdevpdfg.c
index 0aa93e53..39da7ea4 100644
--- a/devices/vector/gdevpdfg.c
+++ b/devices/vector/gdevpdfg.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -1467,7 +1467,7 @@ int pdf_reset_color(gx_device_pdf * pdev, const gs_gstate * pgs,
* unlike shading patterns we have no fallback.
*/
if (pdev->CompatibilityLevel < 1.2) {
- return_error(gs_error_undefined);
+ return_error(gs_error_undefined);
}
code = pdf_put_colored_pattern(pdev, pdc, pcs,
ppscc, pgs, &pres);
@@ -2426,7 +2426,8 @@ pdf_write_spot_halftone(gx_device_pdf *pdev, const gs_spot_halftone *psht,
if (compare_gx_ht_order_levels(&order,porder))
continue;
if (memcmp(order.bit_data, porder->bit_data,
- order.num_bits * porder->procs->bit_data_elt_size))
+ (size_t)order.num_bits *
+ porder->procs->bit_data_elt_size))
continue;
/* We have a match. */
break;
@@ -2609,7 +2610,7 @@ pdf_get_halftone_component_index(const gs_multiple_halftone *pmht,
return j;
}
static int
-pdf_write_multiple_halftone(gx_device_pdf *pdev,
+pdf_write_multiple_halftone(gx_device_pdf *pdev, gs_gstate *pgs,
const gs_multiple_halftone *pmht,
const gx_device_halftone *pdht, long *pid)
{
@@ -2679,7 +2680,7 @@ pdf_write_multiple_halftone(gx_device_pdf *pdev,
done_Default = true;
}
phtc = &pmht->components[code];
- if ((code = pmht->get_colorname_string(pdev->memory, phtc->cname, &str, &len)) < 0 ||
+ if ((code = pmht->get_colorname_string(pgs, phtc->cname, &str, &len)) < 0 ||
(code = pdf_string_to_cos_name(pdev, str, len, &value)) < 0)
return code;
cos_value_write(&value, pdev);
@@ -2739,7 +2740,7 @@ pdf_update_halftone(gx_device_pdf *pdev, const gs_gstate *pgs,
break;
case ht_type_multiple:
case ht_type_multiple_colorscreen:
- code = pdf_write_multiple_halftone(pdev, &pht->params.multiple,
+ code = pdf_write_multiple_halftone(pdev, (gs_gstate *)pgs, &pht->params.multiple,
pdht, &id);
break;
default:
diff --git a/devices/vector/gdevpdfg.h b/devices/vector/gdevpdfg.h
index e846b1a8..e9faa670 100644
--- a/devices/vector/gdevpdfg.h
+++ b/devices/vector/gdevpdfg.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -347,10 +347,10 @@ int pdf_copy_color_data(gx_device_pdf * pdev, const byte * base, int sourcex,
gs_image_t *pim, pdf_image_writer *piw,
int for_pattern);
-#endif /* gdevpdfg_INCLUDED */
-
/* ---------------- Exported by gdevpdfe.c ---------------- */
/* Write metadata */
int pdf_document_metadata(gx_device_pdf *pdev);
int pdf_get_docinfo_item(gx_device_pdf *pdev, const char *key, char *buf, int buf_length);
+
+#endif /* gdevpdfg_INCLUDED */
diff --git a/devices/vector/gdevpdfi.c b/devices/vector/gdevpdfi.c
index b73ed3d6..c6bdee9d 100644
--- a/devices/vector/gdevpdfi.c
+++ b/devices/vector/gdevpdfi.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -976,7 +976,7 @@ pdf_begin_typed_image(gx_device_pdf *pdev, const gs_gstate * pgs,
const gs_pixel_image_t *pim;
gs_int_rect rect;
gs_image_format_t format;
- const gs_color_space *pcs;
+ gs_color_space *pcs;
int num_components;
pdf_image_enum *pie;
const pdf_color_space_names_t *names;
@@ -1213,6 +1213,7 @@ pdf_begin_typed_image(gx_device_pdf *pdev, const gs_gstate * pgs,
}
pcs = pim->ColorSpace;
+ rc_increment_cs(pcs);
num_components = (is_mask ? 1 : gs_color_space_num_components(pcs));
code = pdf_check_soft_mask(pdev, (gs_gstate *)pgs);
@@ -1238,6 +1239,7 @@ pdf_begin_typed_image(gx_device_pdf *pdev, const gs_gstate * pgs,
* to DeviceGray here.
*/
/* {csrc} make sure this gets freed */
+ rc_decrement(pcs, "pdf_begin_typed_image(pcs)");
pcs = gs_cspace_new_DeviceGray(pdev->memory);
if (pcs == NULL)
code = gs_note_error(gs_error_VMerror);
@@ -1401,9 +1403,6 @@ pdf_begin_typed_image(gx_device_pdf *pdev, const gs_gstate * pgs,
if (pdev->params.TransferFunctionInfo == tfi_Apply && pdev->transfer_not_identity && !is_mask)
pdev->JPEG_PassThrough = 0;
-/* if (pdev->JPEG_PassThrough)
- uncompressed = pie->writer.binary[0].strm;*/
-
/* Code below here deals with setting up the multiple data stream writing.
* We can have up to 4 stream writers, which we keep in an array. We must
* always have at least one which writes the uncompressed stream. If we
@@ -1612,9 +1611,11 @@ pdf_begin_typed_image(gx_device_pdf *pdev, const gs_gstate * pgs,
gs_free(mem->non_gc_memory, image, 4, sizeof(image_union_t),
"pdf_begin_typed_image(image)");
+ rc_decrement(pcs, "pdf_begin_typed_image(pcs)");
return 0;
fail_and_fallback:
+ rc_decrement(pcs, "pdf_begin_typed_image(pcs)");
pdev->JPEG_PassThrough = 0;
gs_free(mem->non_gc_memory, image, 4, sizeof(image_union_t),
"pdf_begin_typed_image(image)");
@@ -1928,7 +1929,14 @@ pdf_image_end_image_data(gx_image_enum_common_t * info, bool draw_last,
/* Clean up any outstanding streams before freeing the enumerator */
while (pie->writer.alt_writer_count-- > 0) {
ecode = psdf_end_binary(&(pie->writer.binary[pie->writer.alt_writer_count]));
- if (ecode < 0 && code >= 0) code = ecode;
+ /* If we are skipping an image (because its clipped out or similar) then we
+ * won't have written any data to it. Some filters (notably the DCTEncode filter)
+ * throw an error (premature EOD) if we close the filter without writing any data to it.
+ * So if we are skipping the image, ignore errors when closing the stream.
+ * Unfortunately we don't set pie->skipping until after begin_typed_image()
+ * or we could avoid a lot of setup....
+ */
+ if (ecode < 0 && code >= 0 && !pie->skipping) code = ecode;
}
gx_image_free_enum(&info);
diff --git a/devices/vector/gdevpdfj.c b/devices/vector/gdevpdfj.c
index 0af81fc2..4c73e171 100644
--- a/devices/vector/gdevpdfj.c
+++ b/devices/vector/gdevpdfj.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdfk.c b/devices/vector/gdevpdfk.c
index 7914c0ee..e48718d1 100644
--- a/devices/vector/gdevpdfk.c
+++ b/devices/vector/gdevpdfk.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -778,9 +778,10 @@ pdf_iccbased_color_space(gx_device_pdf *pdev, const gs_gstate * pgs, cos_value_t
const gs_color_space *pcs, cos_array_t *pca)
{
cos_stream_t * pcstrm;
- int code = 0;
+ int code = 0, code1 = 0;
unsigned char major = 0, minor = 0;
bool downgrade_icc = false;
+ pdf_resource_t *pres = NULL;
/*
* This would arise only in a pdf ==> pdf translation, but we
@@ -864,13 +865,22 @@ pdf_iccbased_color_space(gx_device_pdf *pdev, const gs_gstate * pgs, cos_value_t
pcs->cmm_icc_profile_data->buffer_size);
}
- if (code >= 0)
- code = pdf_finish_iccbased(pdev, pcstrm);
/*
- * The stream has been added to the array: in case of failure, the
- * caller will free the array, so there is no need to free the stream
- * explicitly here.
+ * The stream has been added to the array: However because the stream cos object
+ * has an id (it has to be an indirect object), freeing the colour space won't
+ * free the ICC profile stream. In order to have the stream freed we must add it to
+ * a resource chain; we don't have a resource chain for ICC profiles, so add it to
+ * resourceOther instead. This means it will be among the last objects released.
*/
+ code1 = pdf_alloc_resource(pdev, resourceOther, pcstrm->id, &pres, -1);
+ if (code1 >= 0) {
+ COS_FREE(pres->object, "pdf_iccbased_color_space");
+ pres->object = (cos_object_t *)pcstrm;
+ }
+
+ if (code >= 0)
+ code = pdf_finish_iccbased(pdev, pcstrm);
+
return code;
}
diff --git a/devices/vector/gdevpdfm.c b/devices/vector/gdevpdfm.c
index 6e018aa4..18ea50c5 100644
--- a/devices/vector/gdevpdfm.c
+++ b/devices/vector/gdevpdfm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdfo.c b/devices/vector/gdevpdfo.c
index 402d290c..70b66c6b 100644
--- a/devices/vector/gdevpdfo.c
+++ b/devices/vector/gdevpdfo.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -1132,6 +1132,10 @@ static int write_key_as_string_encrypted(const gx_device_pdf *pdev, const byte *
memcpy(buffer, str, size);
s_arcfour_process_buffer(&sarc4, buffer, size);
stream_write(&sout, buffer, size);
+ /* Another case where we use sclose() and not s_close_filters(), because the
+ * buffer we supplied to s_init_filter is a heap based C object, so we
+ * must not free it.
+ */
sclose(&sout); /* Writes ')'. */
gs_free_object(pdev->pdf_memory, buffer, "Free encryption buffer");
return 0;
diff --git a/devices/vector/gdevpdfo.h b/devices/vector/gdevpdfo.h
index 0b6ef201..b30e9676 100644
--- a/devices/vector/gdevpdfo.h
+++ b/devices/vector/gdevpdfo.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdfp.c b/devices/vector/gdevpdfp.c
index 2f29dba5..d06e585c 100644
--- a/devices/vector/gdevpdfp.c
+++ b/devices/vector/gdevpdfp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdfr.c b/devices/vector/gdevpdfr.c
index 6d9f7f6f..b0ee06c4 100644
--- a/devices/vector/gdevpdfr.c
+++ b/devices/vector/gdevpdfr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdft.c b/devices/vector/gdevpdft.c
index 46f4d312..a963cb51 100644
--- a/devices/vector/gdevpdft.c
+++ b/devices/vector/gdevpdft.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -107,7 +107,7 @@ pdf_make_group_dict(gx_device_pdf * pdev, const gs_pdf14trans_params_t * pparams
a group color specified.
In this case, the parent group is inherited from
the previous group or the device color space */
- if (pgs != NULL && pparams->group_color != UNKNOWN) {
+ if (pgs != NULL && pparams->group_color_type != UNKNOWN) {
const gs_color_space *cs = gs_currentcolorspace_inline(pgs);
code = pdf_color_space_named(pdev, pgs, &cs_value, NULL, cs,
@@ -274,7 +274,7 @@ pdf_begin_transparency_mask(gs_gstate * pgs, gx_device_pdf * pdev,
const gs_pdf14trans_params_t * pparams)
{
if (pparams->subtype == TRANSPARENCY_MASK_None) {
- int code, id = pgs->soft_mask_id;
+ int code;
pdf_resource_t *pres = 0L;
/* reset the soft mask ID. Apparently this is only used by pdfwrite, if we don't
@@ -284,10 +284,11 @@ pdf_begin_transparency_mask(gs_gstate * pgs, gx_device_pdf * pdev,
pgs->soft_mask_id = 0;
code = pdf_prepare_drawing(pdev, pgs, &pres, false);
if (code == gs_error_interrupt) {
- /* Not in an appropriate context, ignore it but restore
- * the old soft_mask_id. Not sure this is correct, but it works for now.
+ /* */
+ /* Not in an appropriate context. Do not restore the soft_mask_id.
+ Otherwise any group push that occurs following this will use that
+ softmask, which clearly should be NONE here.
*/
- pgs->soft_mask_id = id;
/* ignore return code, we don't care about this graphics state as we aren't
* emitting it anyway
*/
diff --git a/devices/vector/gdevpdfu.c b/devices/vector/gdevpdfu.c
index 05ea7881..e5a9df01 100644
--- a/devices/vector/gdevpdfu.c
+++ b/devices/vector/gdevpdfu.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -568,6 +568,7 @@ int ps2write_dsc_header(gx_device_pdf * pdev, int pages)
if (code < 0)
return code;
}
+ stream_puts(s, "10 dict dup begin\n");
stream_puts(s, "/DSC_OPDFREAD true def\n");
if (pdev->Eps2Write) {
stream_puts(s, "/SetPageSize false def\n");
@@ -577,6 +578,7 @@ int ps2write_dsc_header(gx_device_pdf * pdev, int pages)
stream_puts(s, "/SetPageSize true def\n");
stream_puts(s, "/EPS2Write false def\n");
}
+ stream_puts(s, "end\n");
code = copy_procsets(s, pdev->HaveTrueTypes, false);
if (code < 0)
@@ -626,6 +628,7 @@ pdfwrite_pdf_open_document(gx_device_pdf * pdev)
if (code < 0)
return code;
}
+ stream_puts(s, "10 dict dup begin\n");
stream_puts(s, "/DSC_OPDFREAD false def\n");
code = copy_procsets(s, pdev->HaveTrueTypes, true);
if (code < 0)
@@ -646,6 +649,7 @@ pdfwrite_pdf_open_document(gx_device_pdf * pdev)
stream_puts(s, "/FitPages true def\n");
if(pdev->CenterPages)
stream_puts(s, "/CenterPages true def\n");
+ stream_puts(s, "end\n");
pdev->OPDFRead_procset_length = stell(s);
}
}
@@ -1000,21 +1004,6 @@ pdf_begin_encrypt(gx_device_pdf * pdev, stream **s, gs_id object_id)
*/
}
-/* Remove the encryption filter. */
-void
-pdf_end_encrypt(gx_device_pdf * pdev)
-{
- if (pdev->KeyLength) {
- stream *s = pdev->strm;
- stream *fs = s->strm;
-
- sclose(s);
- gs_free_object(pdev->pdf_memory, s->cbuf, "encrypt buffer");
- gs_free_object(pdev->pdf_memory, s, "encrypt stream");
- pdev->strm = fs;
- }
-}
-
/* Enter stream context. */
static int
none_to_stream(gx_device_pdf * pdev)
@@ -1168,6 +1157,7 @@ stream_to_none(gx_device_pdf * pdev)
stream *s = pdev->strm;
gs_offset_t length;
int code;
+ stream *target;
if (pdev->ResourcesBeforeUsage) {
int code = pdf_exit_substream(pdev);
@@ -1180,22 +1170,16 @@ stream_to_none(gx_device_pdf * pdev)
if (code < 0)
return code;
}
- if (pdev->compression_at_page_start == pdf_compress_Flate) { /* Terminate the filters. */
- stream *fs = s->strm;
-
- if (!pdev->binary_ok) {
- sclose(s); /* Terminate the ASCII85 filter. */
- gs_free_object(pdev->pdf_memory, s->cbuf, "A85E contents buffer");
- gs_free_object(pdev->pdf_memory, s, "A85E contents stream");
- pdev->strm = s = fs;
- fs = s->strm;
- }
- sclose(s); /* Next terminate the compression filter */
- gs_free_object(pdev->pdf_memory, s->cbuf, "zlib buffer");
- gs_free_object(pdev->pdf_memory, s, "zlib stream");
- pdev->strm = fs;
- }
- pdf_end_encrypt(pdev);
+ target = pdev->strm;
+
+ if (pdev->compression_at_page_start == pdf_compress_Flate)
+ target = target->strm;
+ if (!pdev->binary_ok)
+ target = target->strm;
+ if (pdf_end_encrypt(pdev))
+ target = target->strm;
+ s_close_filters(&pdev->strm, target);
+
s = pdev->strm;
length = pdf_stell(pdev) - pdev->contents_pos;
if (pdev->PDFA != 0)
@@ -2014,13 +1998,18 @@ pdf_unclip(gx_device_pdf * pdev)
/* ------ Miscellaneous output ------ */
/* Generate the default Producer string. */
+/* This calculation is also performed for Ghostscript generally
+ * The code is in ghostpdl/base/gsmisc.c printf_program_ident().
+ * Should we change this calculation both sets of code need to be updated.
+ */
void
pdf_store_default_Producer(char buf[PDF_MAX_PRODUCER])
{
- if ((gs_revision % 100) == 0)
- gs_sprintf(buf, "(%s %1.1f)", gs_product, gs_revision / 100.0);
- else
- gs_sprintf(buf, "(%s %1.2f)", gs_product, gs_revision / 100.0);
+ int major = (int)(gs_revision / 1000);
+ int minor = (int)(gs_revision - (major * 1000)) / 10;
+ int patch = gs_revision % 10;
+
+ gs_sprintf(buf, "(%s %d.%02d.%d)", gs_product, major, minor, patch);
}
/* Write matrix values. */
@@ -2133,6 +2122,10 @@ pdf_encrypt_encoded_string(const gx_device_pdf *pdev, const byte *str, uint size
break;
}
}
+ /* Another case where we use sclose() and not sclose_filters(), because the
+ * buffer we supplied to s_init_filter is a heap based C object, so we
+ * must not free it.
+ */
sclose(&sout); /* Writes ')'. */
return (int)stell(&sinp) + 1;
}
@@ -2697,7 +2690,7 @@ pdf_function_aux(gx_device_pdf *pdev, const gs_function_t *pfn,
stream_write(writer.strm, ptr, count);
}
code = psdf_end_binary(&writer);
- sclose(s);
+ s_close_filters(&s, s->strm);
}
pdev->strm = save;
if (code < 0)
diff --git a/devices/vector/gdevpdfv.c b/devices/vector/gdevpdfv.c
index 2f71d86a..dd7d4c7c 100644
--- a/devices/vector/gdevpdfv.c
+++ b/devices/vector/gdevpdfv.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdfx.h b/devices/vector/gdevpdfx.h
index 0e43a028..c8b44b46 100644
--- a/devices/vector/gdevpdfx.h
+++ b/devices/vector/gdevpdfx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -41,7 +41,11 @@
* Windows and Linux fail with coordinates outside +/- 16383. Hence, we
* limit coordinates to 16k, with a little slop.
*/
-#define MAX_USER_COORD 16300
+/* 28/05/2020 This was only being applied to text and a subset of paths. Since
+ * Acrobat 4 is now more than 20 years old, lets just drop support for it. The
+ * PDF specification never had this limit, just Adobe's software.
+ */
+/* #define MAX_USER_COORD 16300 */
/* ---------------- Statically allocated sizes ---------------- */
/* These should really be dynamic.... */
@@ -1168,7 +1172,12 @@ int pdf_copy_data_safe(stream *s, gp_file *file, gs_offset_t position, long coun
/* Add the encryption filter. */
int pdf_begin_encrypt(gx_device_pdf * pdev, stream **s, gs_id object_id);
/* Remove the encryption filter. */
-void pdf_end_encrypt(gx_device_pdf * pdev);
+static int inline pdf_end_encrypt(gx_device_pdf *pdev)
+{
+ if (pdev->KeyLength)
+ return 1;
+ return 0;
+}
/* Initialize encryption. */
int pdf_encrypt_init(const gx_device_pdf * pdev, gs_id object_id, stream_arcfour_state *psarc4);
diff --git a/devices/vector/gdevpdt.c b/devices/vector/gdevpdt.c
index 6a3b5a7f..970dd76a 100644
--- a/devices/vector/gdevpdt.c
+++ b/devices/vector/gdevpdt.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdt.h b/devices/vector/gdevpdt.h
index a4e736db..ee7a1c1e 100644
--- a/devices/vector/gdevpdt.h
+++ b/devices/vector/gdevpdt.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdtb.c b/devices/vector/gdevpdtb.c
index 9caa640e..61961c4a 100644
--- a/devices/vector/gdevpdtb.c
+++ b/devices/vector/gdevpdtb.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -359,7 +359,7 @@ pdf_base_font_alloc(gx_device_pdf *pdev, pdf_base_font_t **ppbfont,
font_name.size -= SUBSET_PREFIX_SIZE;
}
} else {
- gs_sprintf(fnbuf, ".F%lx", (ulong)copied);
+ gs_sprintf(fnbuf, ".F" PRI_INTPTR, (intptr_t)copied);
font_name.data = (byte *)fnbuf;
font_name.size = strlen(fnbuf);
}
diff --git a/devices/vector/gdevpdtb.h b/devices/vector/gdevpdtb.h
index 1e160eb1..8753aa98 100644
--- a/devices/vector/gdevpdtb.h
+++ b/devices/vector/gdevpdtb.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdtc.c b/devices/vector/gdevpdtc.c
index 95af86ff..5c6da535 100644
--- a/devices/vector/gdevpdtc.c
+++ b/devices/vector/gdevpdtc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdtd.c b/devices/vector/gdevpdtd.c
index 45e2888e..ce6efa05 100644
--- a/devices/vector/gdevpdtd.c
+++ b/devices/vector/gdevpdtd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdtd.h b/devices/vector/gdevpdtd.h
index 9c3078e2..92e64758 100644
--- a/devices/vector/gdevpdtd.h
+++ b/devices/vector/gdevpdtd.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdte.c b/devices/vector/gdevpdte.c
index 3e7e2237..6f0eb158 100644
--- a/devices/vector/gdevpdte.c
+++ b/devices/vector/gdevpdte.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -160,6 +160,8 @@ pdf_add_ToUnicode(gx_device_pdf *pdev, gs_font *font, pdf_font_resource_t *pdfon
if (pdfont->cmap_ToUnicode != NULL)
gs_cmap_ToUnicode_add_pair(pdfont->cmap_ToUnicode, ch, unicode, length);
+ if (length > 2 && pdfont->u.simple.Encoding != NULL)
+ pdfont->TwoByteToUnicode = 0;
}
if (unicode)
gs_free_object(pdev->memory, unicode, "temporary Unicode array");
diff --git a/devices/vector/gdevpdtf.c b/devices/vector/gdevpdtf.c
index d14fa346..c823b18c 100644
--- a/devices/vector/gdevpdtf.c
+++ b/devices/vector/gdevpdtf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -572,6 +572,7 @@ font_resource_simple_alloc(gx_device_pdf *pdev, pdf_font_resource_t **ppfres,
pfres->u.simple.BaseEncoding = -1;
pfres->u.simple.preferred_encoding_index = -1;
pfres->u.simple.last_reserved_char = -1;
+ pfres->TwoByteToUnicode = 1;
*ppfres = pfres;
return 0;
}
diff --git a/devices/vector/gdevpdtf.h b/devices/vector/gdevpdtf.h
index 4a9e8961..f0006641 100644
--- a/devices/vector/gdevpdtf.h
+++ b/devices/vector/gdevpdtf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -203,6 +203,15 @@ struct pdf_font_resource_s {
gs_cmap_t *cmap_ToUnicode; /* CMap (not used for CIDFonts) */
gs_glyph_mark_proc_t mark_glyph;
void *mark_glyph_data; /* closure data */
+
+ /* We use this when determining whether we should use an existing ToUnicode
+ * CMap or just use the Encoding, for s aimple font. Even if the Encoding
+ * only uses named glyphs, with names we can understand, the original
+ * ToUnicode may have mapped these in a non-standard way.
+ * See Bug #702201 where the ffi ligature is mapped to 3 code points
+ */
+ int TwoByteToUnicode;
+
union {
struct /*type0*/ {
@@ -253,7 +262,6 @@ struct pdf_font_resource_s {
gs_point *v; /* [256], glyph origin for WMode 1 */
int last_reserved_char; /* Except for synthesised Type 3,
which stores such data in LastChar */
-
gs_glyph standard_glyph_code_for_notdef;
union {
diff --git a/devices/vector/gdevpdti.c b/devices/vector/gdevpdti.c
index 7ba56fd6..0205604a 100644
--- a/devices/vector/gdevpdti.c
+++ b/devices/vector/gdevpdti.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -479,7 +479,9 @@ pdf_end_char_proc(gx_device_pdf * pdev, pdf_stream_position_t * ppos)
stream *s;
gs_offset_t start_pos, end_pos, length;
- pdf_end_encrypt(pdev);
+ if (pdf_end_encrypt(pdev))
+ s_close_filters(&pdev->strm, pdev->strm->strm);
+
s = pdev->strm;
start_pos = ppos->start_pos;
end_pos = stell(s);
diff --git a/devices/vector/gdevpdti.h b/devices/vector/gdevpdti.h
index 65e1efcb..81409e67 100644
--- a/devices/vector/gdevpdti.h
+++ b/devices/vector/gdevpdti.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdts.c b/devices/vector/gdevpdts.c
index 055aeb44..aa41f516 100644
--- a/devices/vector/gdevpdts.c
+++ b/devices/vector/gdevpdts.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -81,11 +81,6 @@ append_text_move(pdf_text_state_t *pts, double dw)
rounded = floor(dw + 0.5);
if (fabs(dw - rounded) < 0.001)
dw = rounded;
- if (dw < -MAX_USER_COORD) {
- /* Acrobat reader 4.0c, 5.0 can't handle big offsets.
- Adobe Reader 6 can. */
- return -1;
- }
if (dw != 0) {
if (count == MAX_TEXT_BUFFER_MOVES)
return -1;
@@ -173,47 +168,11 @@ add_text_delta_move(gx_device_pdf *pdev, const gs_matrix *pmat)
* for the xhow and once for the Width override. Otherwise, we do
* want to use TJ as it makes for smaller files.
*/
- if (pts->can_use_TJ && dnotw == 0 && pts->buffer.count_chars > 0 &&
- /*
- * Acrobat Reader limits the magnitude of user-space
- * coordinates. Also, AR apparently doesn't handle large
- * positive movement values (negative X displacements), even
- * though the PDF Reference says this bug was fixed in AR3.
- *
- * Old revisions used the upper threshold 1000 for tdw,
- * but it appears too big when a font sets a too big
- * character width in setcachedevice. Particularly this happens
- * with a Type 3 font generated by Aldus Freehand 4.0
- * to represent a texture - see bug #687051.
- * The problem is that when the Widths is multiplied
- * to the font size, the viewer represents the result
- * with insufficient fraction bits to represent the precise width.
- * We work around that problem here restricting tdw
- * with a smaller threshold 990. Our intention is to
- * disable Tj when the real glyph width appears smaller
- * than 1% of the width specified in setcachedevice.
- * A Td instruction will be generated instead.
- * Note that the value 990 is arbitrary and may need a
- * further adjustment.
- */
- /* Revised the above. It seems unreasonable to use a fixed
- * value which is not based on the point size, when the problem is
- * caused by a large point size being multiplied by the width. The
- * original fix also caused bitmap fonts (from PCL and other sources)
- * to fail to use kerning, as these fonts are scaled to 1 point and
- * therefore use large kerning values. Instead we check the kerned value
- * multiplied by the point size of the font.
- */
- (tdw >= -MAX_USER_COORD && (tdw * pts->in.size) < MAX_USER_COORD)
- ) {
+ if (pts->can_use_TJ && dnotw == 0 && pts->buffer.count_chars > 0) {
/* Use TJ. */
int code;
- if (tdw < MAX_USER_COORD || pdev->CompatibilityLevel > 1.4)
- code = append_text_move(pts, tdw);
- else
- return -1;
-
+ code = append_text_move(pts, tdw);
if (code >= 0)
goto finish;
}
diff --git a/devices/vector/gdevpdts.h b/devices/vector/gdevpdts.h
index cde7a3c8..b3699eb2 100644
--- a/devices/vector/gdevpdts.h
+++ b/devices/vector/gdevpdts.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdtt.c b/devices/vector/gdevpdtt.c
index f248e998..5884115e 100644
--- a/devices/vector/gdevpdtt.c
+++ b/devices/vector/gdevpdtt.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdtt.h b/devices/vector/gdevpdtt.h
index cf3b7625..9a710151 100644
--- a/devices/vector/gdevpdtt.h
+++ b/devices/vector/gdevpdtt.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdtv.c b/devices/vector/gdevpdtv.c
index eb9a18fe..a16a48d7 100644
--- a/devices/vector/gdevpdtv.c
+++ b/devices/vector/gdevpdtv.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdtv.h b/devices/vector/gdevpdtv.h
index 89502365..5e27ecd1 100644
--- a/devices/vector/gdevpdtv.h
+++ b/devices/vector/gdevpdtv.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdtw.c b/devices/vector/gdevpdtw.c
index be3c874d..6d197bd5 100644
--- a/devices/vector/gdevpdtw.c
+++ b/devices/vector/gdevpdtw.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -119,6 +119,9 @@ pdf_simple_font_needs_ToUnicode(const pdf_font_resource_t *pdfont)
In this circumstance, write the ToUnicode map to get a searchable PDF.
*/
return true;
+ if (!pdfont->TwoByteToUnicode)
+ return true;
+
for (ch = 0; ch < 256; ++ch) {
pdf_encoding_element_t *pet = &pdfont->u.simple.Encoding[ch];
gs_glyph glyph = pet->glyph;
@@ -136,6 +139,7 @@ pdf_simple_font_needs_ToUnicode(const pdf_font_resource_t *pdfont)
if( glyph > GS_C_PDF_MAX_GOOD_GLYPH ||
!(gs_c_pdf_glyph_type[glyph >> 2] & (mask << (( glyph & 3 )<<1) )))
return true;
+
}
return false;
}
diff --git a/devices/vector/gdevpdtw.h b/devices/vector/gdevpdtw.h
index 4ff32453..34feeed2 100644
--- a/devices/vector/gdevpdtw.h
+++ b/devices/vector/gdevpdtw.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpdtx.h b/devices/vector/gdevpdtx.h
index 92374aa0..d5fe6177 100644
--- a/devices/vector/gdevpdtx.h
+++ b/devices/vector/gdevpdtx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpsdf.h b/devices/vector/gdevpsdf.h
index 5047f43a..a20c61b0 100644
--- a/devices/vector/gdevpsdf.h
+++ b/devices/vector/gdevpsdf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -194,7 +194,7 @@ extern const stream_template s_zlibE_template;
500000, /* ImageMemory */ \
0, /* LockDistillerParams (false) */ \
0, /* LZWEncodePages (false) */ \
- 1, /* Overprintmode (OPM) */ \
+ 0, /* Overprintmode (OPM) */ \
0, /* PreserveOPIComments (false) */ \
1, /* UseFlateCompression (true) */ \
/* Color processing parameters */\
@@ -332,8 +332,7 @@ extern_st(st_device_psdf);
params.MonoImage.Dict),\
GC_OBJ_ELT2(gx_device_psdf, params.AlwaysEmbed.data,\
params.NeverEmbed.data),\
- GC_CONST_STRING_ELT(gx_device_psdf, params.PSDocOptions),\
- GC_OBJ_ELT(gx_device_psdf, params.PSPageOptions.data)\
+ GC_CONST_STRING_ELT(gx_device_psdf, params.PSDocOptions)\
};\
gs_public_st_basic_super_final(st_device_psdf, gx_device_psdf,\
"gx_device_psdf", device_psdf_ptrs, device_psdf_data,\
diff --git a/devices/vector/gdevpsdi.c b/devices/vector/gdevpsdi.c
index 9c2adb72..f093edf1 100644
--- a/devices/vector/gdevpsdi.c
+++ b/devices/vector/gdevpsdi.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -529,7 +529,7 @@ setup_downsampling(psdf_binary_writer * pbw, const psdf_image_params * pdip,
ss->params.EntireWidthIn = ss->params.WidthIn = ss->params.PatchWidthIn = pim->Width;
ss->params.EntireHeightIn = ss->params.HeightIn = ss->params.PatchHeightIn = pim->Height;
ss->params.EntireWidthOut = ss->params.WidthOut = ss->params.PatchWidthOut = s_Downsample_size_out(pim->Width, factor, false);
- ss->params.EntireHeightOut = ss->params.HeightOut = s_Downsample_size_out(pim->Height, factor, false);
+ ss->params.EntireHeightOut = ss->params.HeightOut = ss->params.PatchHeightOut = ss->params.PatchHeightOut2 = s_Downsample_size_out(pim->Height, factor, false);
/* Bug #697944 The code below to apply the downsampling filter always
* resizes the input data to the filter with 8BPC and then resizes the output back to whatever
@@ -539,8 +539,8 @@ setup_downsampling(psdf_binary_writer * pbw, const psdf_image_params * pdip,
ss->params.BitsPerComponentIn = ss->params.BitsPerComponentOut = 8;
ss->params.spp_interp = ss->params.spp_decode = Colors;
- ss->params.TopMarginIn = ss->params.TopMarginOut = ss->params.LeftMarginIn = ss->params.LeftMarginOut = 0;
- ss->params.src_y_offset = 0;
+ ss->params.TopMarginIn = ss->params.TopMarginOut = ss->params.TopMarginOut2 = ss->params.LeftMarginIn = ss->params.LeftMarginOut = 0;
+ ss->params.src_y_offset = ss->params.pad_y = 0;
ss->params.early_cm = true;
ss->params.MaxValueIn = ss->params.MaxValueOut = (int)pow(2, pdip->Depth);
diff --git a/devices/vector/gdevpsdp.c b/devices/vector/gdevpsdp.c
index bda3fe2a..c8a48ee5 100644
--- a/devices/vector/gdevpsdp.c
+++ b/devices/vector/gdevpsdp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -232,7 +232,7 @@ static const gs_param_item_t psdf_param_items[] = {
/* (DefaultRenderingIntent) */
pi("DetectBlends", gs_param_type_bool, DetectBlends),
pi("DoThumbnails", gs_param_type_bool, DoThumbnails),
- pi("ImageMemory", gs_param_type_long, ImageMemory),
+ pi("ImageMemory", gs_param_type_size_t, ImageMemory),
/* (LockDistillerParams) */
pi("LZWEncodePages", gs_param_type_bool, LZWEncodePages),
pi("OPM", gs_param_type_int, OPM),
@@ -625,6 +625,10 @@ gdev_psdf_get_params(gx_device * dev, gs_param_list * plist)
if (code < 0)
return code;
+ code = param_write_string_array(plist, "PSPageOptions", &pdev->params.PSPageOptions);
+ if (code < 0)
+ return code;
+
code = psdf_write_name(plist, "CannotEmbedFontPolicy",
CannotEmbedFontPolicy_names[(int)pdev->params.CannotEmbedFontPolicy]);
@@ -1040,6 +1044,65 @@ psdf_put_image_params(const gx_device_psdf * pdev, gs_param_list * plist,
return ecode;
}
+/* This is a convenience routine. There doesn't seem to be any way to have a param_string_array
+ * enumerated for garbage collection, and we have (currently) three members of the psdf_distiller_params
+ * structure which store param_string_array. If the interpreter is using garbage collection then there
+ * is the potential for the array, or its contents, to be relocated or freed while we are still
+ * maintaining pointers to them, unless we enumerate the pointers.
+ * Instead, we'll copy the string data from the interpreter, make our own param_string_array, and
+ * manage the memory ourselves. This allows us to move the data into non-GC memory which is preferable
+ * anyway.
+ */
+static int psdf_copy_param_string_array(gs_memory_t *mem, gs_param_list * plist, gs_param_string_array *sa, gs_param_string_array *da)
+{
+ int code;
+
+ if (sa->size > 0) {
+ int ix;
+ byte **dest;
+
+ if (da->data != NULL) {
+ for (ix = 0; ix < da->size;ix++)
+ gs_free_object(mem->non_gc_memory, (byte *)da->data[ix].data, "freeing old string array copy");
+ gs_free_object(mem->non_gc_memory, (byte *)da->data, "freeing old string array");
+ }
+ da->data = (const gs_param_string *)gs_alloc_bytes(mem->non_gc_memory, sa->size * sizeof(gs_param_string), "allocate new string array");
+ if (da->data == NULL)
+ return_error(gs_note_error(gs_error_VMerror));
+ memset((byte *)da->data, 0x00, sa->size * sizeof(gs_param_string));
+ da->size = sa->size;
+ da->persistent = false;
+
+ for(ix=0;ix < sa->size;ix++) {
+ ((gs_param_string *)&da->data[ix])->data = gs_alloc_bytes(mem->non_gc_memory, sa->data[ix].size, "allocate new strings");
+ if (da->data[ix].data == NULL)
+ return_error(gs_note_error(gs_error_VMerror));
+ memcpy((byte *)(da->data[ix].data), sa->data[ix].data, sa->data[ix].size);
+ ((gs_param_string *)&da->data[ix])->size = sa->data[ix].size;
+ ((gs_param_string *)&da->data[ix])->persistent = false;
+ }
+ gs_free_object(plist->memory, (byte *)sa->data, "freeing temporary param string array");
+ sa->data = NULL;
+ sa->size = 0;
+ }
+ return 0;
+}
+
+static int psdf_read_copy_param_string_array(gs_memory_t *mem, gs_param_list * plist, char *Key, gs_param_string_array *da)
+{
+ gs_param_string_array sa;
+ int code;
+
+ code = param_read_embed_array(plist, Key, &sa);
+ if (code < 0)
+ return code;
+
+ if(sa.size)
+ code = psdf_copy_param_string_array(mem, plist, &sa, da);
+
+ return code;
+}
+
/* Put parameters. */
int
gdev_psdf_put_params(gx_device * dev, gs_param_list * plist)
@@ -1076,6 +1139,8 @@ gdev_psdf_put_params(gx_device * dev, gs_param_list * plist)
params.MonoImage.ACSDict = params.MonoImage.Dict = 0;
params.AlwaysEmbed.data = params.NeverEmbed.data = 0;
params.AlwaysEmbed.size = params.AlwaysEmbed.persistent = params.NeverEmbed.size = params.NeverEmbed.persistent = 0;
+ params.PSPageOptions.data = NULL;
+ params.PSPageOptions.size = 0;
}
/* General parameters. */
@@ -1184,6 +1249,7 @@ gdev_psdf_put_params(gx_device * dev, gs_param_list * plist)
&params.AlwaysEmbed, mem, ecode);
ecode = psdf_put_embed_param(plist, "~NeverEmbed", ".NeverEmbed",
&params.NeverEmbed, mem, ecode);
+
params.CannotEmbedFontPolicy = (enum psdf_cannot_embed_font_policy)
psdf_put_enum(plist, "CannotEmbedFontPolicy",
(int)params.CannotEmbedFontPolicy,
@@ -1199,7 +1265,7 @@ gdev_psdf_put_params(gx_device * dev, gs_param_list * plist)
if (code < 0)
goto exit;
- code = param_read_embed_array(plist, "PSPageOptions", &params.PSPageOptions);
+ code = psdf_read_copy_param_string_array(pdev->memory, plist, "PSPageOptions", &params.PSPageOptions);
if (code < 0)
goto exit;
@@ -1208,6 +1274,14 @@ gdev_psdf_put_params(gx_device * dev, gs_param_list * plist)
exit:
if (!(pdev->params.LockDistillerParams && params.LockDistillerParams)) {
/* Only update the device paramters if there was no error */
+ /* If we have any copied param_string_arrays, start by freeing them */
+ if (pdev->params.PSPageOptions.size && params.PSPageOptions.size) {
+ int ix;
+
+ for (ix = 0; ix < pdev->params.PSPageOptions.size;ix++)
+ gs_free_object(mem->non_gc_memory, (byte *)pdev->params.PSPageOptions.data[ix].data, "freeing old string array copy");
+ gs_free_object(mem->non_gc_memory, (byte *)pdev->params.PSPageOptions.data, "freeing old string array");
+ }
pdev->params = params;
} else {
/* We read a bunch of parameters and are now throwing them away. Either because there
@@ -1216,10 +1290,15 @@ exit:
*/
gs_memory_t *stable_mem = gs_memory_stable(mem);
- if (params.NeverEmbed.data != 0)
- gs_free_object(stable_mem, (void *)params.NeverEmbed.data, "free dummy param NeverEmbed");
- if (params.AlwaysEmbed.data != 0)
- gs_free_object(stable_mem, (void *)params.AlwaysEmbed.data, "free dummy param AlwaysEmbed");
+ if (params.PSPageOptions.data != NULL) {
+ int ix;
+
+ for (ix = 0; ix < pdev->params.PSPageOptions.size;ix++)
+ gs_free_object(mem->non_gc_memory, (byte *)pdev->params.PSPageOptions.data[ix].data, "freeing dummy PSPageOptions");
+ gs_free_object(mem->non_gc_memory, (byte *)pdev->params.PSPageOptions.data, "freeing dummy PSPageOptions");
+ params.PSPageOptions.data = NULL;
+ params.PSPageOptions.size = 0;
+ }
if (params.CalCMYKProfile.data != 0)
gs_free_string(stable_mem, (void *)params.CalCMYKProfile.data, params.CalCMYKProfile.size, "free dummy param CalCMYKProfile");
if (params.CalGrayProfile.data != 0)
diff --git a/devices/vector/gdevpsds.c b/devices/vector/gdevpsds.c
index 65bbf544..bc932902 100644
--- a/devices/vector/gdevpsds.c
+++ b/devices/vector/gdevpsds.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -822,7 +822,8 @@ s_Bicubic_data_at(stream_Bicubic_state *const ss, int x, int y, int c)
y = ss->HeightIn - 1;
y -= ss->y_in;
idx = ss->l_size * (y < 0 ? 0 : y) +
- (x < 0 ? 0 : x >= ss->WidthIn ? ss->WidthIn-1 : x) * ss->Colors + c;
+ (size_t)(x < 0 ? 0 : x >= ss->WidthIn ? ss->WidthIn-1 : x) *
+ ss->Colors + c;
return (idx < ss->d_len) ? ss->data[idx] : 0;
}
@@ -952,7 +953,8 @@ s_compr_chooser_set_dimensions(stream_compr_chooser_state * ss, int width,
ss->height = height;
ss->depth = depth;
ss->bits_per_sample = bits_per_sample;
- ss->sample = gs_alloc_bytes(ss->memory, width * depth, "s_compr_chooser_set_dimensions");
+ ss->sample = gs_alloc_bytes(ss->memory, (size_t)width * depth,
+ "s_compr_chooser_set_dimensions");
if (ss->sample == 0)
return_error(gs_error_VMerror);
return 0;
diff --git a/devices/vector/gdevpsds.h b/devices/vector/gdevpsds.h
index 35a756f0..207e54c4 100644
--- a/devices/vector/gdevpsds.h
+++ b/devices/vector/gdevpsds.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpsdu.c b/devices/vector/gdevpsdu.c
index d626358a..c4be6ac0 100644
--- a/devices/vector/gdevpsdu.c
+++ b/devices/vector/gdevpsdu.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpsf.h b/devices/vector/gdevpsf.h
index 275e526d..9105eb86 100644
--- a/devices/vector/gdevpsf.h
+++ b/devices/vector/gdevpsf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpsf1.c b/devices/vector/gdevpsf1.c
index 7e167b45..feed79eb 100644
--- a/devices/vector/gdevpsf1.c
+++ b/devices/vector/gdevpsf1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpsf2.c b/devices/vector/gdevpsf2.c
index 985cd25e..3c38e988 100644
--- a/devices/vector/gdevpsf2.c
+++ b/devices/vector/gdevpsf2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -703,7 +703,7 @@ cff_write_Top_fdarray(cff_writer_t *pcw, gs_font_base *pbfont,
gs_font_info_t info;
cff_get_Top_info_common(pcw, pbfont, false, &info);
- cff_write_Top_common(pcw, pbfont, false, &info);
+ cff_write_Top_common(pcw, pbfont, true, &info);
cff_put_int(pcw, Private_size);
cff_put_int_value(pcw, Private_offset, TOP_Private);
if (pfname->size == 0)
diff --git a/devices/vector/gdevpsfm.c b/devices/vector/gdevpsfm.c
index fea025ef..b38266c2 100644
--- a/devices/vector/gdevpsfm.c
+++ b/devices/vector/gdevpsfm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpsft.c b/devices/vector/gdevpsft.c
index 970a3149..9bc00312 100644
--- a/devices/vector/gdevpsft.c
+++ b/devices/vector/gdevpsft.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpsfu.c b/devices/vector/gdevpsfu.c
index 157c7bab..e848bdc8 100644
--- a/devices/vector/gdevpsfu.c
+++ b/devices/vector/gdevpsfu.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpsfx.c b/devices/vector/gdevpsfx.c
index b839f9e8..43459327 100644
--- a/devices/vector/gdevpsfx.c
+++ b/devices/vector/gdevpsfx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpsu.c b/devices/vector/gdevpsu.c
index 094ff945..5e3e5a2b 100644
--- a/devices/vector/gdevpsu.c
+++ b/devices/vector/gdevpsu.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpsu.h b/devices/vector/gdevpsu.h
index 70cceeaf..c62ed8c6 100644
--- a/devices/vector/gdevpsu.h
+++ b/devices/vector/gdevpsu.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevpx.c b/devices/vector/gdevpx.c
index a1fce1b7..5195339f 100644
--- a/devices/vector/gdevpx.c
+++ b/devices/vector/gdevpx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/gdevtxtw.c b/devices/vector/gdevtxtw.c
index 87f9355d..d46a935e 100644
--- a/devices/vector/gdevtxtw.c
+++ b/devices/vector/gdevtxtw.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -34,6 +34,7 @@
#include "gxdevsop.h"
#include "gzpath.h"
#include "gdevkrnlsclass.h" /* 'standard' built in subclasses, currently First/Last Page and obejct filter */
+#include "gxchar.h"
/* #define TRACE_TXTWRITE 1 */
@@ -73,6 +74,7 @@ typedef struct text_list_entry_s {
gs_point end;
gs_point FontBBox_bottomleft, FontBBox_topright;
float *Widths;
+ float *Advs;
unsigned short *Unicode_Text;
int Unicode_Text_Size;
int render_mode;
@@ -140,10 +142,14 @@ static dev_proc_dev_spec_op(txtwrite_dev_spec_op);
/* Define the text enumerator. */
typedef struct textw_text_enum_s {
gs_text_enum_common;
+ gs_text_enum_t *pte_fallback;
+ double d1_width;
+ bool d1_width_set;
bool charproc_accum;
bool cdevproc_callout;
double cdevproc_result[10];
float *Widths;
+ float *Advs;
unsigned short *TextBuffer;
int TextBufferIndex;
text_list_entry_t *text_state;
@@ -289,7 +295,7 @@ txtwrite_close_device(gx_device * dev)
}
#ifdef TRACE_TXTWRITE
- fclose(tdev->DebugFile);
+ gp_fclose(tdev->DebugFile);
#endif
return code;
}
@@ -339,14 +345,14 @@ static int merge_vertically(gx_device_txtwrite_t *tdev)
to = y_list->x_ordered_list;
from = next->x_ordered_list;
#ifdef TRACE_TXTWRITE
- fprintf(tdev->DebugFile, "\nConsolidating two horizontal lines, line 1:");
+ gp_fprintf(tdev->DebugFile, "\nConsolidating two horizontal lines, line 1:");
debug_x = from;
while (debug_x) {
gp_fprintf(tdev->DebugFile, "\n\t");
gp_fwrite(debug_x->Unicode_Text, sizeof(unsigned short), debug_x->Unicode_Text_Size, tdev->DebugFile);
debug_x = debug_x->next;
}
- fprintf(tdev->DebugFile, "\nConsolidating two horizontal lines, line 2");
+ gp_fprintf(tdev->DebugFile, "\nConsolidating two horizontal lines, line 2");
debug_x = to;
while (debug_x) {
gp_fprintf(tdev->DebugFile, "\n\t");
@@ -384,14 +390,14 @@ static int merge_vertically(gx_device_txtwrite_t *tdev)
}
y_list->x_ordered_list = new_order;
#ifdef TRACE_TXTWRITE
- fprintf(tdev->DebugFile, "\nAfter:");
+ gp_fprintf(tdev->DebugFile, "\nAfter:");
debug_x = new_order;
while (debug_x) {
gp_fprintf(tdev->DebugFile, "\n\t");
gp_fwrite(debug_x->Unicode_Text, sizeof(unsigned short), debug_x->Unicode_Text_Size, tdev->DebugFile);
debug_x = debug_x->next;
}
- fprintf(tdev->DebugFile, "\n");
+ gp_fprintf(tdev->DebugFile, "\n");
#endif
y_list->next = next->next;
if (next->next)
@@ -830,6 +836,46 @@ static int decorated_text_output(gx_device_txtwrite_t *tdev)
return 0;
}
+static int extract_text_output(gx_device_txtwrite_t *tdev)
+{
+ text_list_entry_t* entry;
+ gp_fprintf(tdev->file, "<page>\n");
+ for (entry = tdev->PageData.unsorted_text_list;
+ entry;
+ entry = entry->next
+ ) {
+ float x = entry->start.x;
+ int i;
+ gp_fprintf(tdev->file,
+ "<span bbox=\"%0.4f %0.4f %0.4f %0.4f\" font=\"%s\" size=\"%0.4f\">\n",
+ entry->start.x,
+ entry->start.y,
+ entry->end.x,
+ entry->end.y,
+ entry->FontName,
+ entry->size
+ );
+ for (i=0; i<entry->Unicode_Text_Size; i++) {
+ float x_next = x + entry->Widths[i];
+ char escaped[32];
+ escaped_Unicode(entry->Unicode_Text[i], escaped);
+ gp_fprintf(tdev->file,
+ "<char bbox=\"%0.4f %0.4f %0.4f %0.4f\" c=\"%s\" adv=\"%0.4f\"/>\n",
+ x,
+ entry->start.y,
+ x_next,
+ entry->end.y,
+ escaped,
+ entry->Advs[i]
+ );
+ x = x_next;
+ }
+ gp_fprintf(tdev->file, "</span>\n");
+ }
+ gp_fprintf(tdev->file, "</page>\n");
+ return 0;
+}
+
static int
txtwrite_output_page(gx_device * dev, int num_copies, int flush)
{
@@ -866,6 +912,12 @@ txtwrite_output_page(gx_device * dev, int num_copies, int flush)
return code;
break;
+ case 4:
+ code = extract_text_output(tdev);
+ if (code < 0)
+ return code;
+ break;
+
default:
return gs_note_error(gs_error_rangecheck);
break;
@@ -882,6 +934,7 @@ txtwrite_output_page(gx_device * dev, int num_copies, int flush)
while (x_entry) {
gs_free(tdev->memory, x_entry->Unicode_Text, x_entry->Unicode_Text_Size, sizeof (usnigned short), "txtwrite free text fragment text buffer");
gs_free(tdev->memory, x_entry->Widths, x_entry->Unicode_Text_Size, sizeof (float), "txtwrite free widths array");
+ gs_free(tdev->memory, x_entry->Advs, x_entry->Unicode_Text_Size, sizeof (float), "txtwrite free advs array");
gs_free(tdev->memory, x_entry->FontName, 1, strlen(x_entry->FontName) + 1, "txtwrite free Font Name");
if (x_entry->next) {
x_entry = x_entry->next;
@@ -907,6 +960,7 @@ txtwrite_output_page(gx_device * dev, int num_copies, int flush)
next_x = x_entry->next;
gs_free(tdev->memory, x_entry->Unicode_Text, x_entry->Unicode_Text_Size, sizeof (usnigned short), "txtwrite free unsorted text fragment text buffer");
gs_free(tdev->memory, x_entry->Widths, x_entry->Unicode_Text_Size, sizeof (float), "txtwrite free widths array");
+ gs_free(tdev->memory, x_entry->Advs, x_entry->Unicode_Text_Size, sizeof (float), "txtwrite free advs array");
gs_free(tdev->memory, x_entry->FontName, 1, strlen(x_entry->FontName) + 1, "txtwrite free Font Name");
gs_free(tdev->memory, x_entry, 1, sizeof(text_list_entry_t), "txtwrite free unsorted text fragment");
x_entry = next_x;
@@ -1487,6 +1541,9 @@ get_missing_width(gs_font *font, int wmode, const gs_matrix *scale_c,
FONT_INFO_MISSING_WIDTH, &finfo);
if (code < 0)
return code;
+ if (!(finfo.members & FONT_INFO_MISSING_WIDTH))
+ return_error(gs_error_undefined);
+
if (wmode) {
gs_distance_transform(0.0, -finfo.MissingWidth, scale_c, &pwidths->real_width.xy);
pwidths->Width.xy.x = 0;
@@ -1561,7 +1618,7 @@ txt_glyph_widths(gs_font *font, int wmode, gs_glyph glyph,
&& (code == gs_error_undefined || !(info.members & (GLYPH_INFO_WIDTH0 << wmode)))) {
code = get_missing_width(font, wmode, &scale_c, pwidths);
if (code < 0)
- v.y = 0;
+ return code;
else
v.y = pwidths->Width.v.y;
if (wmode && (ofont->FontType == ft_CID_encrypted ||
@@ -1812,11 +1869,11 @@ static int get_unicode(textw_text_enum_t *penum, gs_font *font, gs_glyph glyph,
#else
b = (char *)Buffer;
u = (char *)unicode;
- while (l >= 0) {
- *b++ = *(u + l);
- l--;
- }
+ for (l=0;l<length;l+=2, u+=2){
+ *b++ = *(u+1);
+ *b++ = *u;
+ }
#endif
gs_free_object(penum->dev->memory, unicode, "free temporary unicode buffer");
return length / sizeof(short);
@@ -1930,27 +1987,33 @@ txtwrite_process_plain_text(gs_text_enum_t *pte)
uint operation = pte->text.operation;
txt_glyph_widths_t widths;
gs_point wanted; /* user space */
- gs_point dpt = {0,0};
- for (i=0;i<pte->text.size;i++) {
+ for (i=pte->index;i<pte->text.size;i++) {
+ gs_point dpt = {0,0};
if (operation & (TEXT_FROM_STRING | TEXT_FROM_BYTES)) {
- ch = pte->text.data.bytes[pte->index++];
+ ch = pte->text.data.bytes[pte->index];
} else if (operation & (TEXT_FROM_CHARS | TEXT_FROM_SINGLE_CHAR)) {
- ch = pte->text.data.chars[pte->index++];
+ ch = pte->text.data.chars[pte->index];
} else if (operation & (TEXT_FROM_GLYPHS | TEXT_FROM_SINGLE_GLYPH)) {
if (operation & TEXT_FROM_GLYPHS) {
gdata = pte->text.data.glyphs + (pte->index++ * sizeof (gs_glyph));
} else {
gdata = &pte->text.data.d_glyph;
- pte->index++;
}
}
glyph = (gdata == NULL ? pte->orig_font->procs.encode_char(pte->orig_font, ch, GLYPH_SPACE_NAME)
: *gdata);
code = txt_glyph_widths(font, font->WMode, glyph, (gs_font *)font, &widths, NULL);
- if (code < 0)
- return code;
+ if (code < 0) {
+ if (penum->d1_width_set) {
+ widths.Width.w = widths.Width.xy.x = widths.real_width.w = widths.real_width.xy.x = penum->d1_width;
+ penum->d1_width = 0;
+ penum->d1_width_set = 0;
+ }
+ else
+ return code;
+ }
penum->cdevproc_callout = false;
code = txt_update_text_state(penum->text_state, (textw_text_enum_t *)pte, pte->orig_font, &font->FontMatrix);
@@ -1963,7 +2026,8 @@ txtwrite_process_plain_text(gs_text_enum_t *pte)
&penum->text_state->matrix, &wanted);
pte->returned.total_width.x += wanted.x;
pte->returned.total_width.y += wanted.y;
- penum->Widths[pte->index - 1] = wanted.x;
+ penum->Widths[penum->TextBufferIndex] = wanted.x;
+ penum->Advs[penum->TextBufferIndex] = wanted.x;
if (pte->text.operation & TEXT_ADD_TO_ALL_WIDTHS) {
gs_point tpt;
@@ -1984,8 +2048,20 @@ txtwrite_process_plain_text(gs_text_enum_t *pte)
pte->returned.total_width.x += dpt.x;
pte->returned.total_width.y += dpt.y;
- penum->TextBufferIndex += get_unicode(penum, (gs_font *)pte->orig_font, glyph, ch, &penum->TextBuffer[penum->TextBufferIndex]);
- penum->Widths[pte->index - 1] += dpt.x;
+ penum->Widths[penum->TextBufferIndex] += dpt.x;
+ code = get_unicode(penum, (gs_font *)pte->orig_font, glyph, ch, &penum->TextBuffer[penum->TextBufferIndex]);
+ /* If a single text code returned multiple Unicode values, then we need to set the
+ * 'extra' code points' widths to 0.
+ */
+ if (code > 1) {
+ memset(&penum->Widths[penum->TextBufferIndex + 1], 0x00, (code - 1) * sizeof(float));
+ memset(&penum->Advs[penum->TextBufferIndex + 1], 0x00, (code - 1) * sizeof(float));
+ }
+ penum->TextBufferIndex += code;
+/* gs_moveto_aux(penum->pgs, gx_current_path(penum->pgs),
+ fixed2float(penum->origin.x) + wanted.x + dpt.x,
+ fixed2float(penum->origin.y) + wanted.y + dpt.y);*/
+ pte->index++;
}
return 0;
}
@@ -2020,7 +2096,7 @@ txt_add_sorted_fragment(gx_device_txtwrite_t *tdev, textw_text_enum_t *penum)
/* Already have text at this y-position */
text_list_entry_t *X_List = Y_List->x_ordered_list;
- while (X_List->next && X_List->start.x < penum->text_state->start.x)
+ while (X_List->next && X_List->start.x <= penum->text_state->start.x)
X_List = X_List->next;
if (X_List->start.x > penum->text_state->start.x) {
@@ -2095,6 +2171,20 @@ txt_add_fragment(gx_device_txtwrite_t *tdev, textw_text_enum_t *penum)
{
text_list_entry_t *unsorted_entry, *t;
+#ifdef TRACE_TXTWRITE
+ gp_fprintf(tdev->DebugFile, "txt_add_fragment: ");
+ gp_fwrite(penum->TextBuffer, sizeof(unsigned short), penum->TextBufferIndex, tdev->DebugFile);
+ gp_fprintf(tdev->DebugFile, "\n");
+ {
+ int i=0;
+ gp_fprintf(tdev->DebugFile, "widths:");
+ for (i=0; i<penum->TextBufferIndex; ++i) {
+ gp_fprintf(tdev->DebugFile, " %f", penum->Widths[i]);
+ }
+ gp_fprintf(tdev->DebugFile, "\n");
+ }
+#endif
+
/* Create a duplicate entry for the unsorted list */
unsorted_entry = (text_list_entry_t *)gs_malloc(tdev->memory->stable_memory, 1,
sizeof(text_list_entry_t), "txtwrite alloc sorted text state");
@@ -2122,8 +2212,14 @@ txt_add_fragment(gx_device_txtwrite_t *tdev, textw_text_enum_t *penum)
penum->TextBufferIndex, sizeof(float), "txtwrite alloc widths array");
if (!penum->text_state->Widths)
return gs_note_error(gs_error_VMerror);
+ penum->text_state->Advs = (float *)gs_malloc(tdev->memory->stable_memory,
+ penum->TextBufferIndex, sizeof(float), "txtwrite alloc widths array");
+ if (!penum->text_state->Advs)
+ return gs_note_error(gs_error_VMerror);
memset(penum->text_state->Widths, 0x00, penum->TextBufferIndex * sizeof(float));
- memcpy(penum->text_state->Widths, penum->Widths, penum->text.size * sizeof(float));
+ memcpy(penum->text_state->Widths, penum->Widths, penum->TextBufferIndex * sizeof(float));
+ memset(penum->text_state->Advs, 0x00, penum->TextBufferIndex * sizeof(float));
+ memcpy(penum->text_state->Advs, penum->Advs, penum->TextBufferIndex * sizeof(float));
unsorted_entry->Unicode_Text = (unsigned short *)gs_malloc(tdev->memory->stable_memory,
penum->TextBufferIndex, sizeof(unsigned short), "txtwrite alloc sorted text buffer");
@@ -2135,8 +2231,14 @@ txt_add_fragment(gx_device_txtwrite_t *tdev, textw_text_enum_t *penum)
penum->TextBufferIndex, sizeof(float), "txtwrite alloc widths array");
if (!unsorted_entry->Widths)
return gs_note_error(gs_error_VMerror);
+ unsorted_entry->Advs = (float *)gs_malloc(tdev->memory->stable_memory,
+ penum->TextBufferIndex, sizeof(float), "txtwrite alloc widths array");
+ if (!unsorted_entry->Advs)
+ return gs_note_error(gs_error_VMerror);
memset(unsorted_entry->Widths, 0x00, penum->TextBufferIndex * sizeof(float));
- memcpy(unsorted_entry->Widths, penum->Widths, penum->text.size * sizeof(float));
+ memcpy(unsorted_entry->Widths, penum->Widths, penum->TextBufferIndex * sizeof(float));
+ memset(unsorted_entry->Advs, 0x00, penum->TextBufferIndex * sizeof(float));
+ memcpy(unsorted_entry->Advs, penum->Advs, penum->TextBufferIndex * sizeof(float));
unsorted_entry->FontName = (char *)gs_malloc(tdev->memory->stable_memory,
(strlen(penum->text_state->FontName) + 1), sizeof(unsigned char), "txtwrite alloc sorted text buffer");
@@ -2175,10 +2277,20 @@ textw_text_process(gs_text_enum_t *pte)
gs_font *font = pte->orig_font;
gs_font_base *font_base = (gs_font_base *)pte->current_font;
int code = 0;
+ gs_text_enum_t *pte_fallback;
if (pte->text.size == 0)
return 0;
+ pte_fallback = penum->pte_fallback;
+ if (pte_fallback) {
+ code = gx_default_text_restore_state(pte_fallback);
+ if (code < 0)
+ return code;
+ gs_text_release(pte_fallback, "txtwrite_text_process");
+ }
+ pte_fallback = penum->pte_fallback = NULL;
+
if (!penum->TextBuffer) {
/* We can get up to 4 Unicode points per glyph, and a glyph can be
* be represented by as little as one byte. So we make a very large
@@ -2192,9 +2304,13 @@ textw_text_process(gs_text_enum_t *pte)
if (!penum->TextBuffer)
return gs_note_error(gs_error_VMerror);
penum->Widths = (float *)gs_malloc(tdev->memory->stable_memory,
- pte->text.size, sizeof(float), "txtwrite temporary widths array");
+ pte->text.size * 4, sizeof(float), "txtwrite temporary widths array");
if (!penum->Widths)
return gs_note_error(gs_error_VMerror);
+ penum->Advs = (float *)gs_malloc(tdev->memory->stable_memory,
+ pte->text.size * 4, sizeof(float), "txtwrite temporary advs array");
+ if (!penum->Advs)
+ return gs_note_error(gs_error_VMerror);
}
{
switch (font->FontType) {
@@ -2217,6 +2333,8 @@ textw_text_process(gs_text_enum_t *pte)
break;
}
if (code == 0) {
+ penum->d1_width = 0;
+ penum->d1_width_set = false;
if (font_base->FontBBox.p.x != font_base->FontBBox.q.x ||
font_base->FontBBox.p.y != font_base->FontBBox.q.y) {
gs_point p0, p1, p2, p3;
@@ -2239,6 +2357,29 @@ textw_text_process(gs_text_enum_t *pte)
return code;
code = txt_add_fragment(tdev, penum);
+ } else {
+ if (code == gs_error_unregistered) /* Debug purpose only. */
+ return code;
+ if (code == gs_error_VMerror)
+ return code;
+ if (code == gs_error_invalidfont) /* Bug 688370. */
+ return code;
+ /* Fall back to the default implementation. */
+ code = gx_default_text_begin(pte->dev, pte->pgs, &pte->text, pte->current_font,
+ pte->path, pte->pdcolor, pte->pcpath, pte->memory, &pte_fallback);
+ if (code < 0)
+ return code;
+ penum->pte_fallback = pte_fallback;
+ gs_text_enum_copy_dynamic(pte_fallback, pte, false);
+
+ code = gs_text_process(pte_fallback);
+ if (code != 0) {
+ penum->returned.current_char = pte_fallback->returned.current_char;
+ penum->returned.current_glyph = pte_fallback->returned.current_glyph;
+ return code;
+ }
+ gs_text_release(pte_fallback, "txtwrite_text_process");
+ penum->pte_fallback = 0;
}
}
return code;
@@ -2271,6 +2412,11 @@ textw_text_set_cache(gs_text_enum_t *pte, const double *pw,
switch (control) {
case TEXT_SET_CHAR_WIDTH:
case TEXT_SET_CACHE_DEVICE:
+ if (penum->pte_fallback != NULL) {
+ penum->d1_width = *pw;
+ penum->d1_width_set = true;
+ return 0;
+ }
return gs_text_set_cache(pte, pw, control);
case TEXT_SET_CACHE_DEVICE2:
if (penum->cdevproc_callout) {
@@ -2355,6 +2501,9 @@ txtwrite_text_begin(gx_device * dev, gs_gstate * pgs,
penum->TextBuffer = NULL;
penum->TextBufferIndex = 0;
penum->Widths = NULL;
+ penum->pte_fallback = NULL;
+ penum->d1_width = 0;
+ penum->d1_width_set = false;
/* The enumerator's text_release method frees this memory */
penum->text_state = (text_list_entry_t *)gs_malloc(tdev->memory->stable_memory, 1,
sizeof(text_list_entry_t), "txtwrite alloc text state");
diff --git a/devices/vector/gdevxps.c b/devices/vector/gdevxps.c
index 5d98c283..8eb26196 100644
--- a/devices/vector/gdevxps.c
+++ b/devices/vector/gdevxps.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -1868,7 +1868,7 @@ xps_begin_image(gx_device *dev, const gs_gstate *pgs,
rc_increment(pcs);
code = dev_proc(dev, get_profile)(dev, &(dev_profile));
/* Just use the "default" profile for now */
- icc_profile = dev_profile->device_profile[0];
+ icc_profile = dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE];
force8bit = true; /* Output image is 8 bit regardless of source */
} else {
/* An ICC, RGB, CMYK, Gray color space */
diff --git a/devices/vector/opdfread.ps b/devices/vector/opdfread.ps
index cff0498e..e0d6f112 100644
--- a/devices/vector/opdfread.ps
+++ b/devices/vector/opdfread.ps
@@ -1,6 +1,6 @@
%!PS-Adobe-2.0
%
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -46,25 +46,44 @@
% ====================== Error handler =======================
% A general error handler prints an error to page.
-currentdict /DSC_OPDFREAD known {
- % See if our notification from ps2write is present. If it is
- % then pick it up. Otherwise define it as false. Used to prevent
- % use of setmatrix at start of each page. The DSC-compliant
- % output from ps2write wraps pages in a save/restore, so we don't
- % need the setmatrix, and it breaks use of psnup with the output.
-
- currentdict /DSC_OPDFREAD get
-}{
- false
+% At this point if we have been written by the (e)ps2write device, there will
+% be a dictionary on the operand stack which contains some flags controlling the
+% later behaviour of this ProcSet. Be aware that this dictionary is present until
+% it is processed by the main dictionary handling at line 155 of this file, it is
+% important to make sure this dictionary is preserved, and remains top of the stack
+% when we reach that point.
+% For safety, the code between now and that point which also uses that configuration
+% information must check to see that the operand stack has at least one operand and that
+% its a dictionary, and must preserve that dictionary if it uses it.
+
+% Determine whether to create a custom error handler.
+% Check to see there's at least one object on the stack,
+% and that said object is a dicitonary. If either is not true
+% then create a custom error handler. If there is a dictionary,
+% assume its the 'global config' dictionary written by ps2write
+% (this should always be true!) and look to see if it has a
+% EPS2Write key. If it does get it. If EPS2Write is true then
+% don't create a custom error handler. If it is false or not present
+% then do create a custom error handler.
+count 0 ne {
+ dup type /dicttype eq {
+ dup /EPS2Write known {
+ dup /EPS2Write get not
+ }
+ {
+ true
+ }ifelse
+ }
+ {
+ true
+ } ifelse
+}
+{
+ true
} ifelse
10 dict begin % A dictionary for local binding
-% This switch used to control paeg independent values, like
-% whether to use InitialMatrix in SetupPageView
-%
-/DSC_OPDFREAD exch def
-
/this currentdict def
/y 720 def
/ebuf 200 string def
@@ -79,63 +98,86 @@ currentdict /DSC_OPDFREAD known {
//this /y 2 copy get 12 sub put
} bind def
-errordict /handleerror
-{ systemdict begin
- $error begin
- newerror
- { (%%[ Error handled by opdfread.ps : ) print errorname //ebuf cvs print (; OffendingCommand: )
- print /command load //ebuf cvs print ( ]%%) = flush
- /newerror false store vmstatus pop pop 0 ne
- { grestoreall
- } if
- errorname (VMerror) ne
- { showpage
- } if
- initgraphics
- 0 720 moveto
- errorname (VMerror) eq
- { //this /ehsave known
- { clear //this /ehsave get restore 2 vmreclaim
+% We only actually create and push the custom error handler if we are not an EPS.
+{
+ errordict /handleerror
+ { systemdict begin
+ $error begin
+ newerror
+ { (%%[ Error handled by opdfread.ps : ) print errorname //ebuf cvs print (; OffendingCommand: )
+ print /command load //ebuf cvs print ( ]%%) = flush
+ /newerror false store vmstatus pop pop 0 ne
+ { grestoreall
} if
- vmstatus exch pop exch pop
- }
- /Courier 12 selectfont
- {
- (ERROR: ) //prnt exec errorname //prnt exec
- (OFFENDING COMMAND: ) //prnt exec
- /command load //prnt exec
- $error /ostack known {
- (%%[STACK:) =
- (STACK:) //prnt exec
- $error /ostack get aload length {
- //newline exec
- dup mark eq {
- (-mark-) dup = show
- } {
- dup type /nametype eq {
- dup xcheck not {
- (/) show
- (/) print
- } if
- } if
- dup = //ebuf cvs show
- } ifelse
- } repeat
+ errorname (VMerror) ne
+ { showpage
} if
- } ifelse
- (%%]%) =
- //systemdict /showpage get exec
- quit
- } if
- end
- end
-} bind readonly put
+ initgraphics
+ 0 720 moveto
+ errorname (VMerror) eq
+ { //this /ehsave known
+ { clear //this /ehsave get restore 2 vmreclaim
+ } if
+ vmstatus exch pop exch pop
+ }
+ /Courier 12 selectfont
+ {
+ (ERROR: ) //prnt exec errorname //prnt exec
+ (OFFENDING COMMAND: ) //prnt exec
+ /command load //prnt exec
+ $error /ostack known {
+ (%%[STACK:) =
+ (STACK:) //prnt exec
+ $error /ostack get aload length {
+ //newline exec
+ dup mark eq {
+ (-mark-) dup = show
+ } {
+ dup type /nametype eq {
+ dup xcheck not {
+ (/) show
+ (/) print
+ } if
+ } if
+ dup = //ebuf cvs show
+ } ifelse
+ } repeat
+ } if
+ } ifelse
+ (%%]%) =
+ //systemdict /showpage get exec
+ quit
+ } if
+ end
+ end
+ } bind readonly put
+} if
end % A dictionary for local binding
-
50 dict begin
+% Read the definitions of various global parameters from the dictionary
+% written at the head of the file by ps2write, and define the parameters
+% in this dictionary. Check first to make sure we have a dictionary on the
+% stack; if we do, assume its the 'global configuration' dictionary.
+count 0 ne {
+ dup type /dicttype eq {
+ {def} forall
+ false
+ }
+ {
+ true
+ } ifelse
+}
+{
+ true
+} ifelse
+
+{
+ ( *** Warning: global definitions dictionary not found, file may be corrupted.\n) print flush
+} if
+
% ===================== Debugging =========================================
/DefaultSwitch % <name> DefaultSwitch -
@@ -4176,7 +4218,10 @@ currentdict end readonly def
} bind def
/ShowText % <string> ShowText -
-{ //GraphicState /TextRenderingMode get 0 eq {
+{
+ //GraphicState /TextRenderingMode get dup 0 eq
+ exch 3 eq not currentfont /FontType get 3 eq and or
+ {
//GraphicState /WordSpacing get 0
32
//GraphicState /CharacterSpacing get 0
@@ -4236,13 +4281,28 @@ currentdict end readonly def
} bind def
/ShowTextBeg % - ShowTextBeg -
-{ //GraphicState /TextRenderingMode get 0 ne {
- currentpoint newpath moveto
- } if
+{
+ //GraphicState /TextRenderingMode get dup 0 ne
+ {
+ 3 ne
+ currentfont /FontType get 3 eq not and {
+ currentpoint newpath moveto
+ } if
+ }
+ {
+ pop
+ } ifelse
} bind def
/ShowTextEnd % - ShowTextEnd -
-{ //GraphicState /TextRenderingMode get
+{
+ //GraphicState /TextRenderingMode get
+ currentfont /FontType get 3 eq {
+ dup 3 ne {
+ pop 0
+ } if
+ }if
+
{ dup 1 eq {
stroke exit
} if
diff --git a/devices/vector/whitelst.c b/devices/vector/whitelst.c
index 652926f4..af4c14fc 100644
--- a/devices/vector/whitelst.c
+++ b/devices/vector/whitelst.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/devices/vector/whitelst.h b/devices/vector/whitelst.h
index 2e562fd8..a566da54 100644
--- a/devices/vector/whitelst.h
+++ b/devices/vector/whitelst.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/doc/API.htm b/doc/API.htm
index faee4d58..feffd7e7 100644
--- a/doc/API.htm
+++ b/doc/API.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -72,21 +63,37 @@
<li><a href="#revision"><code>gsapi_revision</code></a></li>
<li><a href="#new_instance"><code>gsapi_new_instance</code></a></li>
<li><a href="#delete_instance"><code>gsapi_delete_instance</code></a></li>
+<li><a href="#set_stdio_with_handle"><code>gsapi_set_stdio_with_handle</code></a></li>
<li><a href="#set_stdio"><code>gsapi_set_stdio</code></a></li>
+<li><a href="#set_poll_with_handle"><code>gsapi_set_poll_with_handle</code></a></li>
<li><a href="#set_poll"><code>gsapi_set_poll</code></a></li>
<li><a href="#set_display_callback"><code>gsapi_set_display_callback</code></a></li>
+<li><a href="#register_callout"><code>gsapi_register_callout</code></a></li>
+<li><a href="#deregister_callout"><code>gsapi_deregister_callout</code></a></li>
<li><a href="#set_arg_encoding"><code>gsapi_set_arg_encoding</code></a></li>
+<li><a href="#get_default_device_list"><code>gsapi_get_default_device_list</code></a></li>
+<li><a href="#set_default_device_list"><code>gsapi_set_default_device_list</code></a></li>
<li><a href="#run"><code>gsapi_run_string_begin</code></a></li>
<li><a href="#run"><code>gsapi_run_string_continue</code></a></li>
<li><a href="#run"><code>gsapi_run_string_end</code></a></li>
<li><a href="#run"><code>gsapi_run_string_with_length</code></a></li>
<li><a href="#run"><code>gsapi_run_string</code></a></li>
+<li><a href="#run"><code>gsapi_run_file</code></a></li>
<li><a href="#init"><code>gsapi_init_with_args</code></a></li>
-<li><a href="#run"><code>gsapi_run_*</code></a></li>
<li><a href="#exit"><code>gsapi_exit</code></a></li>
+<li><a href="#set_param"><code>gsapi_set_param</code></a></li>
+<li><a href="#get_param"><code>gsapi_get_param</code></a></li>
+<li><a href="#enumerate_params"><code>gsapi_enumerate_params</code></a></li>
+<li><a href="#add_control_path"><code>gsapi_add_control_path</code></a></li>
+<li><a href="#remove_control_path"><code>gsapi_remove_control_path</code></a></li>
+<li><a href="#purge_control_paths"><code>gsapi_purge_control_paths</code></a></li>
+<li><a href="#activate_path_control"><code>gsapi_activate_path_control</code></a></li>
+<li><a href="#is_path_control_active"><code>gsapi_is_path_control_active</code></a></li>
<li><a href="#add_fs"><code>gsapi_add_fs</code></a></li>
<li><a href="#remove_fs"><code>gsapi_remove_fs</code></a></li>
<li><a href="#return_codes">Return codes</a></li>
+<li><a href="#gsapi_fs_t">gsapi_fs_t</a></li>
+<li><a href="#callout">Callouts</a></li>
</ul>
<li><a href="#Example_usage">Example usage</a></li>
<li><a href="#stdio">Standard input and output</a></li>
@@ -195,6 +202,16 @@ void
<li><code>
int
+<a href="#set_stdio_with_handle">gsapi_set_stdio_with_handle</a>
+(void *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),
+ void *caller_handle);
+</code></li>
+
+<li><code>
+int
<a href="#set_stdio">gsapi_set_stdio</a>
(void *instance,
int(*stdin_fn)(void *caller_handle, char *buf, int len),
@@ -204,6 +221,12 @@ int
<li><code>
int
+<a href="#set_poll_with_handle">gsapi_set_poll_with_handle</a>
+(void *instance, int(*poll_fn)(void *caller_handle), void *caller_handle);
+</code></li>
+
+<li><code>
+int
<a href="#set_poll">gsapi_set_poll</a>
(void *instance, int(*poll_fn)(void *caller_handle));
</code></li>
@@ -216,14 +239,30 @@ int
<li><code>
int
+<a href="#register_callout">gsapi_register_callout</a>
+(void *instance, gs_callout callout, void *callout_handle);
+</code></li>
+
+<li><code>
+void
+<a href="#deregister_callout">gsapi_deregister_callout</a>
+(void *instance, gs_callout callout, void *callout_handle);
+</code></li>
+
+<li><code>
+int
<a href="#set_arg_encoding">gsapi_set_arg_encoding</a>
(void *instance, int encoding);
</code></li>
<li><code>
int
-<a href="#init">gsapi_init_with_args</a>
-(void *instance, int argc, char **argv);
+<a href="#get_default_device_list">gsapi_get_default_device_list</a>(void *instance, char **list, int *listlen);
+</code></li>
+
+<li><code>
+int
+<a href="#set_default_device_list">gsapi_set_default_device_list</a>(void *instance, const char *list, int listlen);
</code></li>
<li><code>
@@ -268,12 +307,58 @@ int
<li><code>
int
+<a href="#init">gsapi_init_with_args</a>
+(void *instance, int argc, char **argv);
+</code></li>
+
+<li><code>
+int
<a href="#exit">gsapi_exit</a>
(void *instance);
</code></li>
<li><code>
int
+<a href="#set_param">gsapi_set_param</a>(void *instance, const char *param, const void *value, gs_set_param_type type);
+</code></li>
+
+<li><code>
+ int
+ <a href="#get_param">gsapi_get_param</a>(void *instance, const char *param, void *value, gs_set_param_type type);
+</code></li>
+
+<li><code>
+int
+<a href="#enumerate_params">gsapi_enumerate_params</a>(void *instance, void **iter, const char **key, gs_set_param_type *type);
+</code></li>
+
+<li><code>
+int
+<a href="#add_control_path">gsapi_add_control_path</a>(void *instance, int type, const char *path);
+</code></li>
+
+<li><code>
+int
+<a href="#remove_control_path">gsapi_remove_control_path</a>(void *instance, int type, const char *path);
+</code></li>
+
+<li><code>
+void
+<a href="#purge_control_paths">gsapi_purge_control_paths</a>(void *instance, int type);
+</code></li>
+
+<li><code>
+void
+<a href="#activate_path_control">gsapi_activate_path_control</a>(void *instance, int enable);
+</code></li>
+
+<li><code>
+int
+<a href="#is_path_control_active">gsapi_is_path_control_active</a>(void *instance);
+</code></li>
+
+<li><code>
+int
<a href="#add_fs">gsapi_add_fs</a>
(void *instance,
gsapi_fs_t *fs, void *secret);
@@ -321,7 +406,7 @@ else {
<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.
+The caller_handle is the default value that will be provided to callback functions.
<b>Unless Ghostscript has been compiled with the </code>GS_THREADSAFE</code>
define, only one instance at a time is supported.</b>
@@ -353,19 +438,33 @@ If Ghostscript has been initialised, you must call
</blockquote>
-<h3><a name="set_stdio"></a><code>gsapi_set_stdio()</code></h3>
+<h3><a name="set_stdio_with_handle"></a><code>gsapi_set_stdio_with_handle()</code></h3>
<blockquote>
-Set the callback functions for stdio
+<p>Set the callback functions for stdio, together with the
+handle to use in the callback functions.
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.
+<p><b>NOTE:</b> These callbacks do not affect output device I/O when
+using &quot;<code>%stdout</code>&quot; as the output file. In that
+case, device output will still be directed to the process &quot;stdout&quot;
+file descriptor, not to the stdio callback.
</blockquote>
+<h3><a name="set_stdio"></a><code>gsapi_set_stdio()</code></h3>
+<blockquote>
+<p>Set the callback functions for stdio. The handle used
+in the callbacks will be taken from the value passed
+to <code><a href="#new_instance">gsapi_new_instance</a></code>. Otherwise the behaviour of this
+function matches <code><a href="#set_stdio_with_handle">gsapi_set_stdio_with_handle</a></code>.
+</blockquote>
-<h3><a name="set_poll"></a><code>gsapi_set_poll()</code></h3>
+
+<h3><a name="set_poll_with_handle"></a><code>gsapi_set_poll_with_handle()</code></h3>
<blockquote>
-Set the callback function for polling. This function will only be called if
+Set the callback function for polling, together with the handle to pass
+to the callback function. This function will only be called if
the Ghostscript interpreter was compiled with <code>CHECK_INTERRUPTS</code>
as described in <code><a href="../base/gpcheck.h">gpcheck.h</a></code>.
<p>
@@ -380,10 +479,25 @@ to return 0 immediately some number of times can be used to reduce the
performance impact.</p>
</blockquote>
+<h3><a name="set_poll"></a><code>gsapi_set_poll()</code></h3>
+<blockquote>
+Set the callback function for polling. The handle passed to the
+callback function will be taken from the handle passed to
+<code><a href="#new_instance">gsapi_new_instance</a></code>.
+Otherwise the behaviour of this function matches
+<code><a href="#set_poll_with_handle">gsapi_set_poll_with_handle</a></code>.
+</blockquote>
+
<h3><a name="set_display_callback"></a><code>gsapi_set_display_callback()</code></h3>
<blockquote>
+<b>This call is deprecated; please use
+<code><a href="#register_callout">gsapi_register_callout</a></code>
+to register a <a href="#callout">callout</a> handler for the
+<a href="#display">display</a> device in preference.</b>
Set the callback structure for the <a href="#display">display</a>
-device. If the <a href="#display">display</a> device is used,
+device. The handle passed in the callback functions is taken from
+the <code>DisplayHandle</code> parameter (or NULL if there is no
+such parameter). If the <a href="#display">display</a> device is used,
this must be called after
<code>gsapi_new_instance()</code>
and before <code>gsapi_init_with_args()</code>.
@@ -391,6 +505,20 @@ See <code><a href="../base/gdevdsp.h">gdevdsp.h</a></code>
for more details.
</blockquote>
+<h3><a name="register_callout"></a><code>gsapi_register_callout()</code></h3>
+<blockquote>
+<p>This call registers a <code><a href="#callout">callout</a></code>
+handler.</p>
+</blockquote>
+
+<h3><a name="deregister_callout"></a><code>gsapi_deregister_callout()</code></h3>
+<blockquote>
+<p>This call deregisters a <code><a href="#callout">callout</a></code> handler
+previously registered with <code><a href="#register_callout">gsapi_register_callout</a></code>.
+All three arguments must match exactly for the callout handler to
+be deregistered.</p>
+</blockquote>
+
<h3><a name="set_arg_encoding"></a><code>gsapi_set_arg_encoding()</code></h3>
<blockquote>
Set the encoding used for the interpretation of all subsequent args
@@ -405,6 +533,23 @@ This must be called after <code>gsapi_new_instance()</code>
and before <code>gsapi_init_with_args()</code>.
</blockquote>
+<h3><a name="set_default_device_list"></a><code>set_default_device_list()</code></h3>
+<blockquote>
+Set the string containing the list of default device names,
+for example "display x11alpha x11 bbox". Allows the calling
+application to influence which device(s) gs will try, in order,
+in it's selection of the default device.
+This must be called after <code>gsapi_new_instance()</code>
+and before <code>gsapi_init_with_args()</code>.
+</blockquote>
+
+<h3><a name="get_default_device_list"></a><code>get_default_device_list()</code></h3>
+<blockquote>
+Returns a pointer to the current default device string.
+This must be called after <code>gsapi_new_instance()</code>
+and before <code>gsapi_init_with_args()</code>.
+</blockquote>
+
<h3><a name="init"></a><code>gsapi_init_with_args()</code></h3>
<blockquote>
Initialise the interpreter.
@@ -451,6 +596,119 @@ This must be called on shutdown if <code>gsapi_init_with_args()</code>
has been called, and just before <code>gsapi_delete_instance()</code>.
</blockquote>
+<h3><a name="set_param"></a><code>gsapi_set_param()</code></h3>
+<blockquote>
+Set a parameter.
+Broadly, this is equivalent to setting a parameter using <code>-d</code>, <code>-s</code> or <code>-p</code> on the command line. This call cannot be made during a <code>run_string</code> operation.
+<p>
+Parameters in this context are not the same as 'arguments' as processed by <code>gsapi_init_with_args</code>, but often the same thing can be achieved. For example, with <code>gsapi_init_with_args</code>, we can pass &quot;<code>-r200</code>&quot; to change the resolution. Broadly the same thing can be achieved by using <code>gsapi_set_param</code> to set a parsed value of &quot;<code>&lt;&lt;/HWResolution [ 200.0 200.0 ]&gt;&gt;</code>&quot;.
+<p>
+Note, that internally, when we set a parameter, we perform an <code>initgraphics</code> operation. This means that using <code>set_param</code> other than at the start of a page is likely to give unexpected results.
+<p>Further, note that attempting to set a parameter that the device does not recognise will be silently ignored, and that parameter will not be found in subsequent <code>gsapi_get_param</code> calls.
+<p>The <code>type</code> argument dictates the kind of object that <code>value</code> points to:
+<pre><code>typedef enum {
+ gs_spt_invalid = -1,
+ gs_spt_null = 0, /* void * is NULL */
+ gs_spt_bool = 1, /* void * is a pointer to an int (0 false,
+ * non-zero true). */
+ gs_spt_int = 2, /* void * is a pointer to an int */
+ gs_spt_float = 3, /* void * is a float * */
+ gs_spt_name = 4, /* void * is a char * */
+ gs_spt_string = 5, /* void * is a char * */
+ gs_spt_long = 6, /* void * is a long * */
+ gs_spt_i64 = 7, /* void * is an int64_t * */
+ gs_spt_size_t = 8, /* void * is a size_t * */
+ gs_spt_parsed = 9, /* void * is a pointer to a char * to be parsed */
+
+ /* Setting a typed param causes it to be instantly fed to to the
+ * device. This can cause the device to reinitialise itself. Hence,
+ * setting a sequence of typed params can cause the device to reset
+ * itself several times. Accordingly, if you OR the type with
+ * gs_spt_more_to_come, the param will held ready to be passed into
+ * the device, and will only actually be sent when the next typed
+ * param is set without this flag (or on device init). Not valid
+ * for get_typed_param. */
+ gs_spt_more_to_come = 1<<31
+} gs_set_param_type;
+</code></pre>
+<p>Combining a type value by ORRing it with the <code>gs_spt_more_to_come</code> flag will cause the <code>set_param</code> operation to be queued internally, but not actually be sent to the device. Thus a series of <code>set_param</code> operations can be queued, for example as below:
+<pre>
+ int code = gsapi_set_param(instance,
+ "HWResolution",
+ "[300 300]",
+ gs_spt_parsed | gs_spt_more_to_come);
+ if (code >= 0) {
+ int i = 1;
+ code = gsapi_set_param(instance,
+ "FirstPage",
+ &i,
+ gs_spt_int | gs_spt_more_to_come);
+ }
+ if (code >= 0) {
+ int i = 3;
+ code = gsapi_set_param(instance,
+ "DownScaleFactor",
+ &i,
+ gs_spt_int);
+ }
+</pre>
+<p>This enables a series of set operations to be performed 'atomically'. This can be useful for performance, in that any reconfigurations to the device (such as page size changes or memory reallocations) will only happen when all the parameters are sent, rather than potentially each time each one is sent.
+</blockquote>
+
+<h3><a name="get_param"></a><code>gsapi_get_param()</code></h3>
+<blockquote>
+Get a parameter.
+Retrieve the current value of a parameter.
+<p>If an error occurs, the return value is negative. Otherwise the return value is the number of bytes required for storage of the value. Call once with <code>value = NULL</code> to get the number of bytes required, then call again with <code>value</code> pointing to at least the required number of bytes where the value will be copied out. Note that the caller is required to know the type of value in order to get it. For all types other than <code>string</code>, <code>name</code>, and <code>parsed</code> knowing the type means you already know the size required.
+<p>
+This call retrieves parameters/values that have made it to the device. Thus, any values set using the <code>gs_spt_more_to_come</code> without a following call without that flag will not be retrieved. Similarly, attempting to get a parameter before <code>gsapi_init_with_args</code> has been called will not list any, even if <code>gsapi_set_param</code> has been used.
+<p>
+Attempting to read a parameter that is not set will return <code>gs_error_undefined (-21)</code>. Note that calling <code>gsapi_set_param</code> followed by <code>gsapi_get_param</code> may not find the value, if the device did not recognise the key as being one of its configuration keys.
+</blockquote>
+
+<h3><a name="enumerate_params"></a><code>gsapi_enumerate_params()</code></h3>
+<blockquote>
+Enumerate the current parameters.
+Call repeatedly to list out the current parameters.
+<p>
+ The first call should have <code>*iter = NULL</code>. Subsequent calls should pass the same pointer in so the iterator can be updated. Negative return codes indicate error, 0 success, and 1 indicates that there are no more keys to read. On success, <code>key</code> will be updated to point to a null terminated string with the key name that is guaranteed to be valid until the next call to <code>gsapi_enumerate_params</code>. If <code>type</code> is non <code>NULL</code> then <code>*type</code> will be updated to have the type of the parameter.
+<p>
+Note that only one enumeration can happen at a time. Starting a second enumeration will reset the first.
+<p>
+The enumeration only returns parameters/values that have made it to the device. Thus, any values set using the <code>gs_spt_more_to_come</code> without a following call without that flag will not be retrieved. Similarly, attempting to enumerate parameters before <code>gsapi_init_with_args</code> has been called will not list any, even if <code>gsapi_set_param</code> has been used.
+</blockquote>
+
+<h3><a name="add_control_path"></a><code>gsapi_add_control_path()</code></h3>
+<blockquote>
+Add a (case sensitive) path to one of the lists of permitted paths for file access.
+See <a href="Use.htm#Safer">here</a> for more information about permitted paths.
+</blockquote>
+
+<h3><a name="remove_control_path"></a><code>gsapi_remove_control_path()</code></h3>
+<blockquote>
+Remove a (case sensitive) path from one of the lists of permitted paths for file access.
+See <a href="Use.htm#Safer">here</a> for more information about permitted paths.
+</blockquote>
+
+<h3><a name="purge_control_paths"></a><code>gsapi_purge_control_paths()</code></h3>
+<blockquote>
+Clear all the paths from one of the lists of permitted paths for file access.
+See <a href="Use.htm#Safer">here</a> for more information about permitted paths.
+</blockquote>
+
+<h3><a name="activate_path_control"></a><code>gsapi_activate_path_control()</code></h3>
+<blockquote>
+Enable/Disable path control (i.e. whether paths are checked against permitted paths
+before access is granted).
+See <a href="Use.htm#Safer">here</a> for more information about permitted paths.
+</blockquote>
+
+<h3><a name="is_path_control_active"></a><code>gsapi_is_path_control_active()</code></h3>
+<blockquote>
+Query whether path control is activated or not.
+See <a href="Use.htm#Safer">here</a> for more information about permitted paths.
+</blockquote>
+
<h3><a name="add_fs"></a><code>gsapi_add_fs()</code></h3>
<blockquote>
Adds a new 'Filing System' to the interpreter.
@@ -793,6 +1051,47 @@ Reopen a stream with a different mode. Behaves like
<code>freopen(fname, mode, FILE *)</code>.
</dl>
+<h3><a name="callout"></a>Callouts</h3>
+<blockquote>
+<p>Callouts are a mechanism
+for the core code (specifically devices) to communicate with the
+user of gsapi. This communication can take the form of passing
+information out vis-a-vis what devices are doing, or requesting
+configuration from the caller to affect exactly how the device
+itself works.</p>
+<p>This is deliberately an extensible system, so exact details of
+callouts should be documented with the device in question. In general
+however a callout handler will be of the form:</p>
+<pre>
+typedef int (*gs_callout)(void *callout_handle,
+ const char *device_name,
+ int id,
+ int size,
+ void *data);
+</pre>
+<p>The <code>callout_handle</code> value passed to the callout will
+be the value passed in at registration. The <code>device_name</code>
+should be a null-terminated string giving the name of the device
+(though care should be taken to cope with the case where
+<code>device_name</code> is NULL for potential future uses).
+The <code>id</code> value will have a (device-specific) meaning; see
+the documentation for the device in question for more details. The
+same <code>id</code> value may be used to mean different things in
+different devices.
+Finally, <code>size</code> and <code>data</code> have callout
+specific meanings, but typically, <code>data</code> will be a pointer
+to data block (which may either be uninitialised or wholly/partially
+initialised on entry, and may be updated on exit), and <code>size</code>
+will be the size (in bytes) of the block pointed to by <code>data</code>.
+</p>
+<p>A return value of -1 (<code>gs_error_unknownerror</code>) means
+the callout was not recognised by the handler, and should be passed
+to more handlers. Other negative values are interpreted as standard
+Ghostscript error values, and stop the propagation of the callout.
+Non-negative return codes mean the callout was handled and should
+not be passed to any more registered callout handlers.</p>
+</blockquote>
+
<hr>
<h2><a name="Example_usage"></a>Example Usage</h2>
<p>To try out the following examples in a development environment like Microsoft's
@@ -1016,24 +1315,38 @@ The callback functions are described in
<h2><a name="display"></a>Display device</h2>
<p>
The <code>display</code> device is available for use with
-the Ghostscript interpreter library. This is described in the file
+the Ghostscript interpreter library. While originally designed
+for allowing screen display of rendered output from Ghostscript,
+this is now powerful enough to provide a simple mechanism for
+getting rendered output suitable for use in all manner of
+output scenarios, including printing.</p>
+<p>Details of the API and options are given in the file
<code><a href="../base/gdevdsp.h">gdevdsp.h</a></code>.
This device provides you with access to the raster output of
-Ghostscript. It is your responsibility to copy this raster
+Ghostscript. It is the callers responsibility to copy this raster
to a display window or printer.</p>
<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
-<code>gsapi_set_display_callback()</code>.
+In order for this device to operate, it needs access to a structure
+containing a set of callback functions, and a callback handle (an
+opaque <code>void *</code> that can be used by caller to locate its
+own state). There are 2 ways that the device can get this
+information, a legacy method, and a modern method.
+</p>
+<dl>
+<dt>Legacy method</dt>
+<dd>
+<p>The address of the callback structure, is provided
+using <code>gsapi_set_display_callback()</code>.
This must be called after
<code>gsapi_new_instance()</code>
and before
<code>gsapi_init_with_args()</code>.</p>
<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</p>
+With this call, the callback handle is passed as NULL by default, but can
+be overridden by using a parameter. We actively dislike
+this way of working, as we consider passing addresses
+via the command line distasteful. The handle can be
+set using</p>
<blockquote>
-sDisplayHandle=1234
</blockquote>
@@ -1071,6 +1384,31 @@ The previous API, using a number value:</p>
is still supported on 32 bit systems, but will cause a "typecheck"
error on 64 bit systems, and is considered deprecated. It should
not be used in new code.</p>
+</dd>
+<dt>Modern method
+<dd>
+<p>The preferred method is to register a callout handler using
+<code><a href="#register_callout">gsapi_register_callout</a></code>.
+When this handler is called for the <code>&quot;display&quot;</code>
+device, with <code>id = 0</code> (= <code>DISPLAY_CALLOUT_GET_CALLBACK</code>),
+then <code>data</code> should point to an empty <code>gs_display_get_callback_t</code>
+block, with <code>size = sizeof(gs_display_get_callback_t)</code>.
+</p>
+<pre>
+typedef struct {
+ display_callback *callback;
+ void *caller_handle;
+} gs_display_get_callback_t;
+</pre>
+<p>The handler should fill in the structure before returning,
+with a return code of 0.</p>
+</dd>
+</dl>
+<p>
+Note, that the <code>DisplayHandle</code> value is only consulted for
+display device callbacks registered using the (legacy, now deprecated)
+<code>gsapi_set_display_callback</code> API, not the preferred
+<code>gsapi_register_callout</code> based mechanism.
<p>
The device raster format can be configured using</p>
@@ -1085,44 +1423,333 @@ The device raster format can be configured using</p>
<li> bigendian (RGB) or littleendian (BGR) order.</li>
<li> top first or bottom first raster.</li>
<li> 16 bits/pixel with 555 or 565 bitfields.</li>
+<li> Chunky, Planar and Planar interleaved formats.</li>
+<li> "Full screen" or "Rectangle Request" modes of operation.</li>
</ul>
-<p>The format values are described in
-<code><a href="../base/gdevdsp.h">gdevdsp.h</a></code>.
-The format is flexible enough to support common Windows, OS/2, Linux
-and Mac raster formats. To select the display device with a
-Windows 24-bit RGB raster:</p>
+<p>The operation of the device is best described with a walkthrough
+of some example code that uses it. For simplicity and clarity, we
+have omitted the error handling code in this example; in production
+code, every place where we get a <code>code</code> value returned
+we should check it for failure (a negative value) and clean up
+accordingly. First, we create an instance of Ghostscript:</p>
<pre>
- char **nargv;
- char arg1[64];
- char arg2[64];
- char arg3[64];
+ void *minst = NULL;
code = gsapi_new_instance(&amp;minst, NULL);
- gsapi_set_stdio(minst, gsdll_stdin, gsdll_stdout, gsdll_stderr);
+ code = gsapi_set_stdio(minst, gsdll_stdin, gsdll_stdout, gsdll_stderr);
+</pre>
+<p>Next, we have to give the display device the address of our
+callback structure. In old code, we would do so using something
+like this:</p>
+<pre>
code = gsapi_set_display_callback(minst, &amp;display_callback);
- sprintf(arg1, "-sDEVICE=display");
- sprintf(arg2, "-dDisplayHandle=%d", 0);
- sprintf(arg3, "-dDisplayFormat=%d",
+</pre>
+<p>We strongly recommend that you don't do that, but instead use the
+more modern <a href="callout">callout</a> mechanism:</p>
+<pre>
+ code = gsapi_register_callout(minst, my_callout_handler, state);
+</pre>
+<p>where <code>state</code> is any <code>void *</code> value you like,
+usually a pointer to help you reach any internal state you may need.
+Earlier in your code you would have the definition of
+<code>my_callout_handler</code> that might look like this:</p>
+<pre>
+ static int
+ my_callout_handler(void *instance,
+ void *callout_handle,
+ const char *device_name,
+ int id,
+ int size,
+ void *data)
+{
+ /* On entry, callout_handle == the value of state passed in
+ * to gsapi_register_callout. */
+ /* We are only interested in callouts from the display device. */
+ if (device_name == NULL || strcmp(device_name, "display"))
+ return -1;
+
+ if (id == DISPLAY_CALLOUT_GET_CALLBACK)
+ {
+ /* Fill in the supplied block with the details of our callback
+ * handler, and the handle to use. In this instance, the handle
+ * is the pointer to our test structure. */
+ gs_display_get_callback_t *cb = (gs_display_get_callback_t *)data;
+ cb->callback = &display_callback;
+ cb->caller_handle = callout_handle;
+ return 0;
+ }
+ return -1;
+}
+</pre>
+<p>As you can see, this callout handler only responds to callouts
+for the display device, and then only for one particular function
+(<code>id</code>). It returns the same <code>display_callback</code>
+structure as the deprecated, legacy mechanism passed in using
+<code>gsapi_set_display_callback</code>, with the added benefit that
+the <code>caller_handle</code> value can be passed in too. In this
+example we pass in the same value as was used for <code>callout_handle</code>,
+but implementations are free to use any value they want.</p>
+<p>Returning to our example, we now set up a set of arguments to
+setup Ghostscript:</p>
+<pre>
+ int argc = 0;
+ /* Allow for up to 32 args of up to 64 chars each. */
+ char argv[32][64];
+ sprintf(argc[argc++], "gs");
+ sprintf(argv[argc++], "-sDEVICE=display");
+</pre>
+<p>The zeroth arg is a dummy argument to match the standard C mechanism
+for passing arguments to a program. Traditionally this is the name of
+the program being invoked. Next, we tell Ghostscript to use the display
+device.</p>
+<pre>
+ sprintf(argv[argc++], "-sDEVICE=display");
+</pre>
+Next we tell the display device what output format to use. The
+format is flexible enough to support common Windows, OS/2, Linux
+and Mac raster formats. <p>The format values are described in
+<code><a href="../base/gdevdsp.h">gdevdsp.h</a></code>.
+To select the display device with a Windows 24-bit RGB raster:</p>
+<pre>
+ sprintf(argv[argc++], "-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>If (and only if) you used the legacy mechanism described above, you
+will need another argument to pass in the <code>caller_handle</code>
+value to be parroted back to the functions listed within
+<code>display_callback</code>:</p>
+<pre>
+ sprintf(arg2, "-dDisplayHandle=%d", callout_handle);
+</pre>
+<p>Any other arguments that you want can be added to the end of
+the command line, typically including a file to run. Then we pass
+that all to Ghostscript:
+<pre>
+ code = gsapi_init_with_args(minst, argc, argv);
</pre>
+<p><a name="display_callback"></a>At this point you should start to
+see your display callback functions being called. Exactly which callback
+functions are provided, and how they respond will determine exactly
+how the display device operates. The primary choice will be whether the
+device runs in &quot;full page&quot; or &quot;rectangle request&quot;
+ mode. Details of these are given below.</p>
+
+<p>Once we have finished processing the file, we can process
+other files using <code>gsapi_run_file</code>, or feed in data
+using <code>gsapi_run_string</code>. Once you have finished, you
+can shut the interpreter down and exit, using:</p>
+
+<pre>
+ code = gsapi_exit(minst);
+ gsapi_delete_instance(minst);
+</pre>
+
+<p>A full list of the display callback functions can be found in
+<code><a href="../devices/gdevdsp.h">gdevdsp.h</a></code>. There
+are several different versions of the callback, corresponding to
+different &quot;generations&quot; of the device. In general
+you should use the latest one. The <code>size</code> field of
+the structure should be initialised to the size of the structure
+in bytes.</p>
+
+<h3><a name="display_open"></a>display_open</h3>
+
+<pre>int (*display_open)(void *handle, void *device);</pre>
+
+<p>This function will be called when the display device is
+opened. The device may be opened and closed many times,
+sometimes without any output being produced.</p>
+
+<h3><a name="display_preclose"></a>display_preclose</h3>
+
+<pre>int (*display_preclose)(void *handle, void *device);</pre>
+
+<p>This function will be called when the display device is
+about to be closed. The device will not actually be closed
+until this function returns.</p>
+
+<h3><a name="display_close"></a>display_close</h3>
+
+<pre>int (*display_close)(void *handle, void *device);</pre>
+
+<p>This function will be called once the display device has
+been closed. There will be no more events from the device
+unless/until it is reopened.</p>
+
+<h3><a name="display_presize"></a>display_presize</h3>
+
+<pre>int (*display_presize)(void *handle, void *device,
+ int width, int height, int raster, unsigned int format);</pre>
+
+<p>This function will be called when the display device is
+about to be resized. The device will only be resized if this
+function returns 0.</p>
+
+<h3><a name="display_size"></a>display_size</h3>
+
+<pre>int (*display_size)(void *handle, void *device, int width, int height,
+ int raster, unsigned int format, unsigned char *pimage);</pre>
+
+<p>This function will be called when the display device is
+has been resized. The pointer to the raster image is pimage.</p>
+
+<h3><a name="display_sync"></a>display_sync</h3>
+
+<pre>int (*display_sync)(void *handle, void *device);</pre>
+
+<p>This function may be called periodically during display
+to flush the page to the display.</p>
+
+<h3><a name="display_page"></a>display_page</h3>
+
+<pre>int (*display_page)(void *handle, void *device, int copies, int flush);</pre>
+
+<p>This function is called on a &quot;showpage&quot; operation
+(i.e. at the end of every page). Operation will continue as soon as
+this function returns.</p>
+
+<h3><a name="display_update"></a>display_update</h3>
+
+<pre>int (*display_update)(void *handle, void *device,
+ int x, int y, int w, int h);</pre>
+
+<p>This function <strong>may</strong> get called repeatedly
+during rendering to indicate that an area of the output has
+been updated. Certain types of rendering will not see this
+function called back at all (in particular files using
+transparency).</p>
+
+<h3><a name="display_memalloc"></a>display_memalloc</h3>
+
+<pre>int (*display_memalloc)(void *handle, void *device,
+ size_t long size);</pre>
+
+<p><strong>Note:</strong> In older versions of this API,
+size is an <code>unsigned long</code> rather than a
+<code>size_t</code>.</p>
+<p>If this function pointer is sent as NULL, then the
+display device will handle all the memory allocations
+internally, and will always work in full page rendering
+mode.</p>
+<p>Otherwise, this function will be called to allocate
+the storage for the page to be rendered into. If a non-NULL
+value is returned, then the device will proceed to render
+the full page into it. If NULL is returned, then the device
+will check a) whether we are using a V2 or greater display
+callback structure and b) whether that structure specifies
+a <code>rectangle_request</code> function pointer.</p>
+<p>If both of those conditions are true, then the device
+will continue in rectangle request mode. Otherwise it will
+fail with an out of memory error.</p>
+
+
+<h3><a name="display_memfree"></a>display_memfree</h3>
+
+<pre>int (*display_memfree)(void *handle, void *device, void *ptr);</pre>
+
+<p>This function should be NULL if and only if
+<code><a href="#display_memalloc">display_memalloc</a></code> is
+NULL. Any memory allocated using <code>display_memalloc</code> will be
+freed via this function.</p>
+
+<h3><a name="display_separation"></a>display_separation</h3>
+<pre>int (*display_separation)(void *handle, void *device,
+ int component, const char *component_name,
+ unsigned short c, unsigned short m,
+ unsigned short y, unsigned short k);</pre>
+
+<p>When using <code>DISPLAY_COLORS_SEPARATION</code>, this function
+ will be called once for every separation component - first
+ &quot;Cyan&quot;, &quot;Magenta&quot;, &quot;Yellow&quot; and
+ &quot;Black&quot;, then any spot colors used. The supplied
+ <code>c</code>, <code>m</code>, <code>y</code> and <code>k</code>
+ values give the equivalent color for each spot. Each colorant
+ value ranges from 0 (for none) to 65535 (full).</p>
+<p>In separation color mode you are expected to count the number
+of calls you get to this function after each
+<code><a href="#display_size">display_size</a></code> to know how many
+colors you are dealing with.</p>
+
+<h3><a name="display_adjust_band_height"></a>display_adjust_band_height</h3>
+<pre>int (*display_adjust_band_height)(void *handle, void *device,
+ int bandheight);</pre>
+
+<p>When running in &quot;rectangle request mode&quot; the device
+first renders the page to a display list internally. It can then
+be played back repeatedly so that different regions (rectangles)
+of the page can be extracted in sequence. A common use of this is
+to support &quot;banded&quot; operation, where the page is divided
+into multiple non-overlapping bands of a fixed height.</p>
+<p>The display device itself will pick an appropriate band height
+for it to use. If this function pointer is left as NULL then this
+value will be used unchanged. Otherwise, the proposed value will
+be offered to this function. This function can override the choice
+of bandheight, by returning the value that it would like to be
+used in preference.</p>
+<p>In general, this figure should (as much as possible) only be
+adjusted downwards. For example, a device targeting an inkjet printer
+with 200 nozzles in the print head might like to extract bands
+that are a multiple of 200 lines high. So the function might
+return <code>max(200, 200*(bandheight/200))</code>. If the function
+returns 0, then the existing value will be used unchanged.</p>
+<p>Any size rectangle can be chosen with any size bandheight,
+so ultimately the value chosen here will not matter much. It
+may make some small difference in speed in some cases.</p>
+
+<h3><a name="display_rectangle_request"></a>display_rectangle_request</h3>
+<pre>int (*display_rectangle_request)(void *handle, void *device,
+ void **memory, int *ox, int *oy,
+ int *raster, int *plane_raster,
+ int *x, int *y, int *w, int *h);</pre>
+
+<p>If the display device chooses to use rectangle request mode,
+this function will be called repeatedly to request a rectangle
+to render. Ghostscript will render the rectangle, and call this
+function again. The implementer is expected to handle the rectangle
+that has just been rendered, and to return the details of another
+rectangle to render. This will continue until a rectangle with
+zero height or width is returned, whereupon Ghostscript will
+continue operation.</p>
+<p>On entry, <code>*raster</code> and <code>*plane_raster</code>
+are set to the values expected by the format in use. All the
+other pointers point to uninitialised values.</p>
+<p>On exit, the values should be updated appropriately. The
+implementor is expected to store the values returned so that
+the rendered output given can be correctly interpreted when
+ control returns to this function.</p>
+<p><code>memory</code> should be updated to point to a block of
+memory to use for the rendered output. Pixel (<code>*ox</code>,
+<code>*oy</code>) is the first pixel represented in that block.
+<code>*raster</code> is the number of bytes difference between
+the address of component 0 of Pixel(<code>*ox</code>, <code>*oy</code>)
+and the address of component 0 of Pixel(<code>*ox</code>,
+<code>1+*oy</code>). <code>*plane_raster</code> is the number of
+bytes difference between the address of component 0 of
+Pixel(<code>*ox</code>, <code>*oy</code>) and the address of
+component 1 of Pixel(<code>*ox</code>, <code>*oy</code>), if in
+planar mode, 0 otherwise. <code>*x</code>, <code>*y</code>,
+<code>*w</code> and <code>*h</code> give the rectangle requested
+within that memory block.</p>
+<p>Any set of rectangles can be rendered with this method, so this
+can be used to drive Ghostscript in various ways. Firstly, it is
+simple to request a set of non-overlapping &quot;bands&quot; that
+cover the page, to drive a printer. Alternatively, rectangles can
+be chosen to fill a given block of memory to implement a window
+panning around a larger page. Either the whole image could be
+redrawn each time, or smaller rectangles around the edge of the
+panned area could be requested. The choice is down to the caller.</p>
+
<p>
-The display device provides you with the address and size of the
-raster using the <code>display_size()</code> callback.
-You are then responsible for displaying this raster.
-Some examples are in
+Some examples of driving this code in full page mode are in
<code><a href="../psi/dwmain.c">dwmain.c</a></code> (Windows),
<code><a href="../psi/dpmain.c">dpmain.c</a></code> (OS/2) and
<code><a href="../psi/dxmain.c">dxmain.c</a></code> (X11/Linux), and
<code><a href="../psi/dmmain.c">dmmain.c</a></code> (MacOS Classic or Carbon).</p>
+<p>Alternatively an example that drives this code in both full page
+and rectangle request mode can be found in
+<code><a href="../toolbin/displaydevice_test.c">displaydevice_test.c</a></code>.</p>
+
<p>
On some platforms, the calling convention for the display device callbacks in
<code><a href="../base/gdevdsp.h">gdevdsp.h</a></code>
@@ -1134,7 +1761,7 @@ functions in <a href="../psi/iapi.h"><code>iapi.h</code></a>.</p></p>
<!-- [3.0 begin visible trailer] =========================================== -->
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small></p>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small></p>
<p>
This software is provided AS-IS with no warranty, either express or
diff --git a/doc/C-style.htm b/doc/C-style.htm
index 99fa032a..38fb58f7 100644
--- a/doc/C-style.htm
+++ b/doc/C-style.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -1606,7 +1597,7 @@ to PostScript error conditions.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small></p>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small></p>
<p>
This software is provided AS-IS with no warranty, either express or
diff --git a/doc/Commprod.htm b/doc/Commprod.htm
index 27681559..2290e425 100644
--- a/doc/Commprod.htm
+++ b/doc/Commprod.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -278,7 +269,7 @@ AGPL complies with the conditions set forth above.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights
reserved.</small></p>
<p>
diff --git a/doc/DLL.htm b/doc/DLL.htm
index 779bbba4..a9f25413 100644
--- a/doc/DLL.htm
+++ b/doc/DLL.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -763,7 +754,7 @@ if (!code) {
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -776,7 +767,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Deprecated.htm b/doc/Deprecated.htm
index 4e187c6f..e1e5bc91 100644
--- a/doc/Deprecated.htm
+++ b/doc/Deprecated.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -5760,7 +5751,7 @@ February 2001
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -5773,7 +5764,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Develop.htm b/doc/Develop.htm
index 65525865..dcc0aece 100644
--- a/doc/Develop.htm
+++ b/doc/Develop.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -1311,8 +1302,6 @@ Alpha channel and compositing:
<dd>
<a href="../base/gsalpha.c">base/gsalpha.c</a>,
<a href="../base/gsalpha.h">base/gsalpha.h</a>,
-<a href="../base/gsalphac.c">base/gsalphac.c</a>,
-<a href="../base/gsalphac.h">base/gsalphac.h</a>,
<a href="../base/gsdpnext.h">base/gsdpnext.h</a>,
<a href="../base/gxalpha.h">base/gxalpha.h</a>.
@@ -4773,7 +4762,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Devices.htm b/doc/Devices.htm
index 166c4080..921211a6 100644
--- a/doc/Devices.htm
+++ b/doc/Devices.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -85,12 +76,14 @@
<ul>
<li><a href="#PDF">PDF file output</a></li>
<li><a href="#PDFimage">Bitmap PDF output, PCLm output</a></li>
+<li><a href="#OCR">OCR devices</a></li>
+<li><a href="#PDFocr">Bitmap PDF output (with OCR text)</a></li>
<li><a href="#PS">PostScript file output</a></li>
<li><a href="#EPS">EPS file output</a></li>
<li><a href="#PXL">PCL-XL file output</a></li>
<li><a href="#TXT">Text output</a></li>
</ul>
-<li><a href="#Dis play_devices">Display devices</a></li>
+<li><a href="#Display_devices">Display devices</a></li>
<ul>
<li><a href="#x11_devices">X Window System</a></li>
<li><a href="#display_device">display device (MS Windows, OS/2, gtk+)</a></li>
@@ -962,6 +955,92 @@ of 'high-level' formats. These allow Ghostscript to preserve (as much as
possible) the drawing elements of the input file maintaining flexibility,
resolution independence, and editability.</p>
+<h3><a name="OCR"></a>Optical Character Recognition (OCR) output</h3>
+
+<p>
+ These devices render internally in 8 bit greyscale, and then
+ feed the resultant image into an OCR engine. Currently, we
+ are using the Tesseract engine. Not only is this both free
+ and open source, it gives very good results, and supports
+ a huge number of languages/scripts.
+</p>
+<p>
+ The Tesseract engine relies on files to encapsulate each
+ language and/or script. These &quot;traineddata&quot; files
+ are available in different forms, including <a href="github.com/tesseract-ocr/tessdata_fast">fast</a>
+ and <a href="tesseract-ocr/tessdata_best">best</a> variants.
+ Alternatively, people can train their own data using the
+ standard Tesseract tools.
+</p>
+<p>
+ These files are looked for from a variety of places. Firstly,
+ any files placed in &quot;Resource/Tesseract/&quot; will be
+ included in the binary for any standard (COMPILE_INITS=1) build.
+ Secondly, files will be searched for in the current directory.
+ Thirdly, files will be searched for in the directory given by
+ the environment variable TESSDATA_PREFIX.
+</p>
+<p>
+ By default, the OCR process defaults to looking for English text,
+ using &quot;eng.traineddata&quot;. This can be changed by using the
+ <code>-sOCRLanguage=</code> switch;
+</p>
+<blockquote>
+<dl>
+<dt><code>-sOCRLanguage=</code><b><em>language</em></b></dt>
+<dd>This sets the trained data sets to use within the Tesseract
+ OCR engine. For example, the following will use English and
+ Arabic:</dd></dl>
+<blockquote>
+<pre>
+ <kbd>gs -sDEVICE=ocr -r200 -sOCRLanguage="eng,ara" -o out.txt\
+ zlib/zlib.3.pdf</kbd>
+</pre>
+</blockquote>
+</blockquote>
+<p>
+ The first device is named ocr. It extracts data as unicode codepoints
+ and outputs them to the device as a stream of UTF-8 bytes.
+</p>
+<p>
+ The second device is named hocr. This extracts the data in
+ <a href="wikipedia.org/wiki/HOCR">hOCR</a> format.
+</p>
+<p>
+ These devices are implemented as downscaling devices, so the
+ standard parameters can be used to control this process. It
+ may seem strange to use downscaling on an image that is not
+ actually going to be output, but there are actually good reasons
+ for this. Firstly, the higher the resolution, the slower the
+ OCR process. Secondly, the way the Tesseract OCR engine works
+ means that anti-aliased images perform broadly as well as the
+ super-sampled image from which it came.
+</p>
+
+<h3><a name="PDFocr"></a>PDF image output (with OCR text)</h3>
+
+<p>
+ These devices do the same render to bitmap and wrap as a PDF process as
+ the <a name="PDFimage">PDFimage</a> devices above, but with the addition
+ of an OCR step at the end. The OCR'd text is overlaid &quot;invisibly&quot;
+ over the images, so searching and cut/paste should still work.
+</p>
+<p>
+ The OCR engine being used is Tesseract. For information on this
+ including how to control what language data is used, see the <a href="OCR">
+ OCR devices</a> section above.
+</p>
+<p>
+ There are three devices named pdfocr8, pdfocr24 and pdfocr32. These
+ produce valid PDF files with a colour depth of 8 (Gray), 24 (RGB) or
+ 32 (CMYK).
+</p>
+<p>
+ These devices accept all the same flags as the <a name="PDFimage">PDFimage</a>
+ devices described above.
+</p>
+<p>
+
<h2><a name="High-level"></a>High-level devices</h2>
<h3><a name="PDF"></a>PDF writer</h3>
@@ -2002,7 +2081,7 @@ spot colors.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -2015,7 +2094,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Drivers.htm b/doc/Drivers.htm
index a051778b..dc1fac45 100644
--- a/doc/Drivers.htm
+++ b/doc/Drivers.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -3665,7 +3656,7 @@ non-rotated case.</li>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -3678,7 +3669,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Fonts.htm b/doc/Fonts.htm
index e6fa7c09..941be154 100644
--- a/doc/Fonts.htm
+++ b/doc/Fonts.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -357,7 +348,7 @@ your own fonts that you distribute.)</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -370,7 +361,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/GPDL.htm b/doc/GPDL.htm
new file mode 100644
index 00000000..d8fca2ea
--- /dev/null
+++ b/doc/GPDL.htm
@@ -0,0 +1,618 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
+<link rel="shortcut icon" type="image/png" href="../../images/favicon.png">
+<title>The GhostPDL Interpreter Framework</title>
+<link href="style.css" rel="stylesheet" type="text/css">
+<link href="gs-style.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+
+ <div class="header">
+ <div class="row">
+ <div class="col-lt-6 logo"><a href="https://www.ghostscript.com/"><img src="images/ghostscript_logo.png" width="108" height="119" alt=""></a></div>
+ <div class="col-6"><div class="row"><div class="artifexlogo"><a href="https://artifex.com" target="_blank"><img src="images/Artifex_logo.png" width="194" height="40" alt=""></a></div>
+ <div class="col-12"><div class="button button1"><a href="https://artifex.com/contact-us/" title="Contact Us" target="_blank">Contact Us</a></div>
+ <div class="button button2 hidden-xs"><a href="https://www.ghostscript.com/download.html" title="Download">Download</a></div></div></div>
+ </div>
+ </div>
+ </div>
+
+ <div class="banner">
+ <div class="row">
+ <div class="col-12">The GhostPDL Interpreter Framework</div>
+ </div>
+ </div>
+
+ <div class="main">
+ <div class="row">
+ <div id="sidebar">
+ <div class="sidebar-item"></div>
+ <div class="col-2 leftnav">
+<ul>
+ <li><a href="https://www.ghostscript.com/">Home</a></li>
+ <li><a href="https://www.ghostscript.com/license.html">Licensing</a></li>
+ <li><a href="https://www.ghostscript.com/releases.html">Releases</a></li>
+ <li><a href="https://www.ghostscript.com/release_history.html">Release History</a></li>
+ <li><a href="https://www.ghostscript.com/documentation.html" title="Documentation">Documentation</a></li>
+ <li><a href="https://www.ghostscript.com/download.html" title="Download">Download</a></li>
+ <li><a href="https://www.ghostscript.com/performance.html" title="Performance">Performance</a></li>
+ <li><a href="http://jbig2dec.com/" title="jbig2dec">jbig2dec</a></li>
+ <li><a href="http://git.ghostscript.com/?p=ghostpdl.git;a=summary">Source</a></li>
+ <li><a href="http://bugs.ghostscript.com/">Bugs</a></li>
+ <li><a href="https://www.ghostscript.com/faq.html" title="FAQ">FAQ</a></li>
+ </ul>
+ </div>
+ </div>
+ <div class="col-10 page">
+
+<!--START EDITING HERE-->
+
+<h2>Table of contents</h2>
+
+<ul>
+<li><a href="#What_Is_This">What is the GhostPDL Interpreter Framework?</a></li>
+<li><a href="#API">The API</a></li>
+ <ul>
+ <li><a href="#run">The run_string functions</a></li>
+ <li><a href="#string_vs_file">String vs File functions</a></li>
+ </ul>
+<li><a href="#executable">The GPDL executable</a></li>
+<li><a href="#different_switches">Differences in switches from Ghostscript</a></li>
+<li><a href="#languages">Supported languages</a></li>
+ <ul>
+ <li><a href="#PJL">PJL</a></li>
+ <li><a href="#PCL">PCL</a></li>
+ <li><a href="#PCLXL">PCLXL</a></li>
+ <li><a href="#XPS">XPS</a></li>
+ <li><a href="#POSTSCRIPT">POSTSCRIPT</a></li>
+ <li><a href="#URF">URF</a></li>
+ <li><a href="#JPG">JPG</a></li>
+ <li><a href="#PWG">PWG</a></li>
+ <li><a href="#TIFF">TIFF</a></li>
+ <li><a href="#JBIG2">JBIG2</a></li>
+ <li><a href="#JP2K">JP2K</a></li>
+ <li><a href="#PNG">PNG</a></li>
+ </ul>
+<li><a href="#new_language">Adding a new language</a></li>
+ <ul>
+ <li><a href="proc_characteristics">proc_characteristics</a></li>
+ <li><a href="proc_allocate_interp_instance">proc_allocate_interp_instance</a></li>
+ <li><a href="proc_get_device_memory">proc_get_device_memory</a></li>
+ <li><a href="proc_set_param">proc_set_param</a></li>
+ <li><a href="proc_add_path">proc_add_path</a></li>
+ <li><a href="proc_post_args_init">proc_post_args_init</a></li>
+ <li><a href="proc_init_job">proc_init_job</a></li>
+ <li><a href="proc_run_prefix_commands">proc_run_prefix_commands</a></li>
+ <li><a href="proc_process_file">proc_process_file</a></li>
+ <li><a href="proc_process_begin">proc_process_begin</a></li>
+ <li><a href="proc_process">proc_process</a></li>
+ <li><a href="proc_process_end">proc_process_end</a></li>
+ <li><a href="proc_flush_to_eoj">proc_flush_to_eoj</a></li>
+ <li><a href="proc_process_eof">proc_process_eof</a></li>
+ <li><a href="proc_report_errors">proc_report_errors</a></li>
+ <li><a href="proc_dnit_job">proc_dnit_job</a></li>
+ <li><a href="proc_deallocate_interp_instance">proc_deallocate_interp_instance</a></li>
+ </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>.</p>
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+
+<h2><a name="What_Is_This"></a>What is the GhostPDL Interpreter Framework?</h2>
+
+<p>
+The GhostPDL interpreter framework (henceforth, just GhostPDL) is
+a framework into which multiple interpreters can be fitted, together
+with a set of interpreters for different input &quot;languages&quot;.</p>
+<p>The intent is that a build of GPDL will behave as much as possible
+like a build of Ghostscript, but should be able to transparently
+cope with as many different input formats as it has interpreters built
+into it.</p>
+<p>It can be built as a dynamic link library
+(DLL) on Microsoft Windows, as a shared object on the
+Linux, Unix and MacOS X platforms. With some changes, it could be built
+as a static library.</p>
+<p>The reason we dub it a &quot;Framework&quot; is that it is
+designed to be modular, and to readily allow new interpreters to be
+swapped in and out to extend and customise its capabilities.</p>
+
+<p>Jobs must be separated by <code>UEL</code> (Universal End of Language)
+code sequences (or PJL fragments, which implicitly start with a
+<code>UEL</code> marker).</p>
+
+<h2><a name="API"></a>The API</h2>
+
+<p>The API for GPDL (found in <a href="../pcl/pl/plapi.h">plapi.h</a>)
+is deliberately designed to be nearly identical
+to that for Ghostscript itself (found in <a href="../psi/iapi.h">iapi.h</a>).
+Details of Ghostscript's API can be
+found <a href="API.htm">here</a>, and we refer you to that. Only
+differences from that API will be documented here. In particular
+the differences in the handling of switches within the
+<code>gsapi_init_with_args</code> are documented
+<a href="#different_switches">here</a>.</p>
+<p>Our intent is that existing users of the Ghostscript API should be
+able to drop a GPDL DLL in as a replacement with little to no code
+changes.</p>
+
+<h3><a name="run"></a>The run_string APIs</h3>
+
+<p>The <code>run_string</code> APIs have parameters for
+<code>int user_errors</code> and <code>int *error_code</code>.
+Within Ghostscript, these allow a caller to bypass the language's
+standard error handling, and to trap errors externally.
+This makes no sense within a printer implementation (and, in
+particular, no sense for a postscript interpreter running
+jobs within a JobServer loop as GPDL does). Thus these
+parameters are kept for ABI compatibility, but are largely
+ignored within the GPDL implementation of gsapi.
+For sanity, pass 0 for <code>user_errors</code>, and expect
+<code>*error_code</code> to be set to 0 on exit.</p>
+
+<h3><a name="string_vs_file"></a>String vs File functions</h3>
+
+<p>Some file types, such as Postscript and PCL, are designed to be
+'streamable'; that is to say that the files can be fed in and
+consumed as they are interpreted. Other file types, such as PDF or
+XPS require the whole file to be available so that the interpreters
+can seek back and forth within it to extract the data they require.</p>
+
+<p>Traditionally, Ghostscript has relied upon the caller knowing
+which type of data is which; streamable data can be fed in to the
+system using the <code>gsapi_run_string</code> APIs, and complete files
+of data can be fed in using <code>gsapi_run_file</code> or
+<code>gsapi_init_with_args</code> APIs. Streamable data contained
+with a file is simple to deal with, as it's trivial for an interpreter
+to read bytes from a file, but doing random access on a stream is
+much harder.</p>
+
+<p>In systems where data is being streamed in, but it is required
+to be available for random access, the entire stream must be buffered
+for presentation to the language interpreters. With Ghostscript,
+the responsibility for doing this fell to the caller. Unfortunately,
+this means that the caller also has to be responsible for scanning
+the incoming data to spot when it is in a format that requires
+buffering. With the explosion of formats that GPDL supports this
+quickly becomes unpalatable.</p>
+
+<p>While the caller is still free to do such buffering of data
+itself, GPDL will do it automatically if required. If a language
+spots that data being fed to it via the <code>gsapi_run_string</code>
+APIs is in a format that requires buffering, the entire string of
+data will be automatically collected together, and then be
+represented internally to the <code>gsapi_run_file</code> API.</p>
+
+<p>The current implementation buffers the data in memory. Alternative
+implementations could use a backing store if such a thing were
+available. For server based applications the use of memory is not
+likely to be a problem (assuming reasonably sized input files at least).
+For printer integrations, it's entirely possible that no backing
+store will be available, so RAM may be the only option. Integrators
+may wish to place a limit on the size of files that can be buffered
+in this way.</p>
+
+<h2><a name="executable"></a>The GPDL executable</h2>
+
+<p>
+The GPDL executable is a small executable that loads the DLL/shared object,
+and implements, pretty much, the interface described in the
+<a href="Use.htm">usage documentation</a> for Ghostscript, but capable of
+reading any of the configured languages. This executable provides all
+the interaction with the windowing system, including image windows.</p>
+
+<p>Areas where the GPDL executable differs from the Ghostscript
+executable are described <a href="#different_switches">below</a>. These
+are primarily to do with (slightly) esoteric requirements when
+running Postscript in an interactive environment. Whereas Ghostscript
+is a generic Postscript interpreter, GPDL is unashamedly targeted
+as a print processor.</p>
+
+<p>
+The GPDL framework's library name and characteristics differ
+for each platform:</p>
+
+<ul>
+<li>The Win32 DLL <code>gpdldll32.dll</code>
+can be used by multiple programs simultaneously, but only once
+within each process.</li>
+
+<li>The Linux shared object <code>libgs.so</code>
+can be used by multiple programs simultaneously.</li>
+</ul>
+<p>
+The source for the executable is in <code>plw</code>*.* (Windows)
+and <code>plx</code>*.* (Linux/Unix).
+See these source files for examples of how to use the DLL.</p>
+
+<p>
+At this stage, GhostPDL does not support multiple instances
+of the interpreter within a single process.</p>
+
+<h2><a name="different_switches"></a>Differences in switches from Ghostscript</h3>
+
+<p>The <code>gsapi_init_with_args</code> API entrypoint takes a
+set of arguments, which can include various switches. We document
+the differences between Ghostscript's handling of switches and
+GhostPDLs here. The GhostPDL executable directly maps parameters
+given on the command-line into this list, so this list of differences
+applies both to API calls and uses of the executable.</p>
+
+<p>GhostPDL does not support the <code>-_</code>, <code>-+</code>,
+<code>-@</code>, <code>-B</code>, <code>-F</code>, <code>-M</code>,
+<code>-N</code>, <code>-P</code>, <code>-u</code>, and <code>-X</code>
+switches that Ghostscript does.
+
+<p>GhostPDL supports a few switches that the Ghostscript executable
+does not.</p>
+
+<ul>
+ <li><b><code>-E #</code>:</b> Sets the &quot;error reporting mode&quot;
+for PCL/PXL.</li>
+ <li><b><code>-H #x#x#x#</code>:</b> Sets the hardware margins to the
+given left/bottom/right/top values (in points).</li>
+ <li><b><code>-j &lt;string&gt;</code>:</b> Passes the string to the
+ PJL level. The string is split on ';'.</li>
+ <li><b><code>-J</code>:</b> Same as <code>-j</code>.</li>
+ <li><b><code>-l {RTL,PCL5E,PCL5C}</code>:</b> Sets the
+ &quot;personality&quot; of the PCL/PXL interpreter.</li>
+ <li><b><code>-L &lt;language&gt;</code>:</b> Sets the language
+ to be used. Run with <code>-L</code> and no string to see a list
+ of languages supported in your build.</li>
+ <li><b><code>-m #x#</code>:</b> Sets the margin values to the
+ left/bottom values (in points).</li>
+</ul>
+
+<h2><a name="languages"></a>Supported languages</h2>
+
+<p>The following is a (possibly non-exhaustive) list of languages
+for which implementations exist for GhostPDL. We use the term
+&quot;language&quot; to include both full page description languages
+(such as PCL, Postscript and XPS), and handlers for simpler formats
+(such as JPEG, PNG and TIFF).</p>
+<p>It is inherent in the design that new handlers can be included,
+and unwanted formats can be dropped from any given build/integration.</p>
+
+<h3><a name="PJL"></a>PJL</h3>
+<p>PJL is special, in that it is the central language implementation
+to which we return between all jobs. As such it always appears first
+in the list, and must be present in all builds.</p>
+<h3><a name="PCL"></a>PCL</h3>
+<p>The PCL language implementation supports PCL5C/PXL5E and HPGL/2
+with RTL.</p>
+<h3><a name="PCLXL"></a>PCLXL</h3>
+<p>The PCLXL language implementation supports PCLXL.</p>
+<h3><a name="XPS"></a>XPS</h3>
+<p>The XPS language implementation supports the XML Paper Specification
+format, as used in modern Windows systems printing pipelines.</p>
+<h3><a name="POSTSCRIPT"></a>POSTSCRIPT</h3>
+<p>The POSTSCRIPT language implementation is the Ghostscript
+ Postscript interpreter, as described in the accompanying
+ documentation.</p>
+<h3><a name="URF"></a>URF</h3>
+<p>Currently available to commercial customers only, the URF language
+implementation implements support for the URF file format, as used
+by Apple Airprint.</p>
+<h3><a name="JPG"></a>JPG</h3>
+<p>The JPG language implementation supports JPEG files
+(in both JFIF and EXIF formats).</p>
+<h3><a name="PWG"></a>PWG</h3>
+<p>The PWG language implementation supports PWG
+(Printer Working Group) format files.</p>
+<h3><a name="TIFF"></a>TIFF</h3>
+<p>The TIFF language implementation supports TIFF format files in
+a variety of compression formats, depending on the exact configuration
+of libtiff used in the build.</p>
+<h3><a name="JBIG2"></a>JBIG2</h3>
+<p>The JBIG2 language implementation supports JBIG2 format images.</p>
+<h3><a name="JP2K"></a>JP2K</h3>
+<p>The JP2K language implementation supports JPEG2000 and JPX format
+images.</p>
+<h3><a name="PNG"></a>PNG</h3>
+<p>The PNG language implementation supports PNG format images.</p>
+
+<h2><a name="new_language"></a>Adding a new language</h2>
+
+<p>Each language implementation in the system appears as an instance
+of a <code>pl_interp_implementation_t</code> structure.
+
+<pre>
+typedef struct pl_interp_implementation_s
+{
+ /* Procedure vector */
+ pl_interp_proc_characteristics_t proc_characteristics;
+ pl_interp_proc_allocate_interp_instance_t proc_allocate_interp_instance;
+ pl_interp_proc_get_device_memory_t proc_get_device_memory;
+ pl_interp_proc_set_param_t proc_set_param;
+ pl_interp_proc_add_path_t proc_add_path;
+ pl_interp_proc_post_args_init_t proc_post_args_init;
+ pl_interp_proc_init_job_t proc_init_job;
+ pl_interp_proc_run_prefix_commands_t proc_run_prefix_commands;
+ pl_interp_proc_process_file_t proc_process_file;
+ pl_interp_proc_process_begin_t proc_process_begin;
+ pl_interp_proc_process_t proc_process;
+ pl_interp_proc_process_end_t proc_process_end;
+ pl_interp_proc_flush_to_eoj_t proc_flush_to_eoj;
+ pl_interp_proc_process_eof_t proc_process_eof;
+ pl_interp_proc_report_errors_t proc_report_errors;
+ pl_interp_proc_dnit_job_t proc_dnit_job;
+ pl_interp_proc_deallocate_interp_instance_t
+ proc_deallocate_interp_instance;
+ void *interp_client_data;
+} pl_interp_implementation_t;
+</pre>
+
+<p>This structure consists of series of function pointers, each
+of which performs some portion of the processing required to handle
+detection of language type and processing of data. These function
+pointers are described in detail below.</p>
+<p>In addition, the <code>interp_client_data</code> field is
+used to hold the running state of a given interpreter.</p>
+
+<p>All the languages to be supported in the build are listed
+in the <code>pdl_implementations</code> array in
+<a href="../pcl/pl/plimpl.c">plimpl.c</a>. To add a new implementation
+the name of the appropriate <code>pl_interp_implementation_t</code>
+should be added here.</a>
+
+<p>The existing range of language implementations may prove useful
+as references when implementing new ones. They can be found as
+<code>gpdl/*top.c</code>. In particular,
+<code><a href="../gpdl/pngtop.c">pngtop.c</a></code> is a simple
+implementation of a well-defined, relatively simple file format
+(PNG), based upon a well-known and well-documented library (libpng),
+so is probably a good place to start.</p>
+
+<h3><a name="proc_characteristics"></a>proc_characteristics</h3>
+<pre>
+typedef const pl_interp_characteristics_t
+ *(*pl_interp_proc_characteristics_t) (const pl_interp_implementation_t *);
+</pre>
+<p>This entrypoint is called to request details of the characteristics
+of the language. This must be implemented in all instances.</p>
+<p>This returns a pointer to a <code>pl_interp_characteristics_t</code>
+ structure:</p>
+<pre>
+typedef struct pl_interp_characteristics_s
+{
+ const char *language; /* generic language should correspond with
+ HP documented PJL name */
+ int (*auto_sense)(const char *string, int length); /* routine used to detect language - returns a score: 0 is definitely not, 100 is definitely yes. */
+ const char *manufacturer; /* manuf str */
+ const char *version; /* version str */
+ const char *build_date; /* build date str */
+} pl_interp_characteristics_t;
+</pre>
+<p>The <code>language</code> entry contains a simple NULL terminated
+ string that names the interpreter. Similarly, the <code>manufacturer</code>,
+ <code>version</code>, and <code>build_date</code> fields are for
+ informational purposes only.</p>
+<p>The <code>auto_sense</code> function is called with a prefix of data
+ from each new source. Each language is passed the data in turn, and
+ &quot;scores;&quot; according to how sure it is the file is that format.</p>
+<p>For many file formats this means looking for known in the first
+few bytes (such as PNG or TIFF looking for their signature bytes). For
+others, such as XPS, the best that can be done is to spot that it's a
+ zip file. For still others, such as PCL, heuristics have to be used.</p>
+<p>A 'definite' match is returned as 100, a definite rejection as 0, with
+intermediate values used appropriately.</p>
+<h3><a name="proc_allocate_interp_instance"></a>proc_allocate_interp_instance</h3>
+<pre>
+typedef int (*pl_interp_proc_allocate_interp_instance_t)
+ (pl_interp_implementation_t *,
+ gs_memory_t *);
+</pre>
+<p>On startup, the GPDL library calls around all the languages
+via this function, getting them to allocate themselves an instance.
+ What this means will vary between languages, but typically it involves
+ allocating a state structure, and storing the pointer to that in the
+ <code>interp_client_data</code> pointer of the
+ <code>pl_interp_implementation_t *</code>. Part of this state structure
+ will typically be a <code>gstate</code> to use to drive the graphics
+ library.</p>
+<h3><a name="proc_get_device_memory"></a>proc_get_device_memory</h3>
+<pre>
+typedef gs_memory_t *(*pl_interp_proc_get_device_memory_t)
+ (pl_interp_implementation_t *);
+</pre>
+<p>On shutdown, the GPDL library calls around all the languages
+via this function, getting them to release their resources and
+deallocate any memory.</p>
+<h3><a name="proc_set_param"></a>proc_set_param</h3>
+<pre>
+typedef int (*pl_interp_proc_set_param_t) (pl_interp_implementation_t *,
+ pl_set_param_type,
+ const char *,
+ const void *);
+</pre>
+<p>Some languages (particularly Postscript) can have their behaviour
+changed by the use of parameters. This function provides a generic
+method for the GPDL library to pass parameters into a language. Each
+language is free to ignore the parameters that do not apply to it. For
+most languages, this can safely be passed as <code>NULL</code>.</p>
+<h3><a name="proc_add_path"></a>proc_add_path</h3>
+<pre>
+typedef int (*pl_interp_proc_add_path_t) (pl_interp_implementation_t *,
+ const char *);
+</pre>
+<p>Some languages (particularly Postscript) have the ability to
+ open files from the local storage. These files can be found
+ in a variety of different locations within the local storage.
+ As such this call allows the GPDL library to add paths to
+ the current list of locations that will be searched. For
+ most languages, this can safely be passed as <code>NULL</code>.</p>
+<h3><a name="proc_post_args_init"></a>proc_post_args_init</h3>
+<pre>
+typedef int (*pl_interp_proc_post_args_init_t) (pl_interp_implementation_t *);
+</pre>
+<p></p>
+<h3><a name="proc_init_job"></a>proc_init_job</h3>
+<pre>
+typedef int (*pl_interp_proc_init_job_t) (pl_interp_implementation_t *,
+ gx_device *);
+</pre>
+<p>Once the GPDL library has identified which language should be used
+for an incoming job, it will call this entrypoint to initialise the
+language for the job. What this means will vary between languages,
+but at the very minimum the job will need to take note of the device
+to be used.</p>
+<h3><a name="proc_run_prefix_commands"></a>proc_run_prefix_commands</h3>
+<pre>
+typedef int (*pl_interp_proc_run_prefix_commands_t)
+ (pl_interp_implementation_t *,
+ const char *prefix);
+</pre>
+<p>The GPDL library (and executable) allow language commands to be
+sent in the argument parameters using the <code>-c</code> switch. These
+are collected into a buffer, and forwarded to a language to be run
+as part of the same job as any following file.</p>
+<p>Currently, only the Postscript language handler implements this
+function, all others should pass <code>NULL</code>.</p>
+<h3><a name="proc_process_file"></a>proc_process_file</h3>
+<pre>
+typedef int (*pl_interp_proc_process_file_t) (pl_interp_implementation_t *,
+ const char *);
+</pre>
+<p>If the GPDL library is given a filename to process, and this function
+is non-NULL, it will call this to run the file. For file formats such as
+PDF (which need to be buffered so they can be read out of order), this
+can avoid the need to feed in all the data via <code>proc_process</code>,
+buffer it somewhere, and then process it at the end.</p>
+<p>For many languages this can be <code>NULL</code>.</p>
+<h3><a name="proc_process_begin"></a>proc_process_begin</h3>
+<pre>
+typedef int (*pl_interp_proc_process_begin_t) (pl_interp_implementation_t *);
+</pre>
+<p>Once the GPDL library has data to process (that it cannot process
+with <code>proc_process_file</code>, it will call this function to
+setup the transfer of data.</p>
+<h3><a name="proc_process"></a>proc_process</h3>
+<pre>
+typedef int (*pl_interp_proc_process_t) (pl_interp_implementation_t *,
+ stream_cursor_read *);
+</pre>
+<p>After the GPDL library has called <code>proc_process_begin</code>
+this function may be called multiple times to actually transfer
+the data in. The implementation is expected to consume as many bytes
+as it can (but not necessarily all of them) before returning with
+an updated read pointer. If this function cannot advance without more
+data, it should return with <code>gs_error_NeedInput</code>.</p>
+<h3><a name="proc_process_end"></a>proc_process_end</h3>
+<pre>
+typedef int (*pl_interp_proc_process_end_t) (pl_interp_implementation_t *);
+</pre>
+<p>After the GPDL library has called <code>proc_process_begin</code>
+(and possibly made a number of calls to <code>proc_process</code>) it
+will call <code>proc_process_end</code> to signify the end of the
+data. This does not necessarily signal the end of the job.</p>
+<h3><a name="proc_flush_to_eoj"></a>proc_flush_to_eoj</h3>
+<pre>
+typedef int (*pl_interp_proc_flush_to_eoj_t) (pl_interp_implementation_t *,
+ stream_cursor_read *);
+</pre>
+<p>In the event of a problem while processing data, GPDL may seek to
+abandon processing of a transfer in progress by calling
+<code>proc_flush_to_eoj</code>. If possible, the language should
+continue to process data until a reasonable stopping point, or until
+<code>UEL</code> is reached.</p>
+<h3><a name="proc_process_eof"></a>proc_process_eof</h3>
+<pre>
+typedef int (*pl_interp_proc_process_eof_t) (pl_interp_implementation_t *);
+</pre>
+<p>Called when GPDL reaches EOF in processing a job. A language
+implementation should assume no more data is forthcoming.</p>
+<h3><a name="proc_report_errors"></a>proc_report_errors</h3>
+<pre>
+typedef int (*pl_interp_proc_report_errors_t) (pl_interp_implementation_t *,
+ int,
+ long,
+ bool);
+</pre>
+<p>Called after running a job to give the language implementation the
+chance to report any errors it may have detected as it ran.</p>
+<h3><a name="proc_dnit_job"></a>proc_dnit_job</h3>
+<pre>
+typedef int (*pl_interp_proc_dnit_job_t) (pl_interp_implementation_t *);
+</pre>
+<p>Called after a job is complete so that the language implementation
+may clean up. The interpreter is kept open so that more jobs can be
+fed to it, but no state should be kept from this job to the next.</p>
+<h3><a name="proc_deallocate_interp_instance"></a>proc_deallocate_interp_instance</h3>
+<pre>
+typedef int (*pl_interp_proc_deallocate_interp_instance_t)
+ (pl_interp_implementation_t *);
+</pre>
+<p>Called on shutdown of the GPDL library to close down the language
+instance and free all the resources.</p>
+
+<!-- [2.0 end contents] ==================================================== -->
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+<p>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small></p>
+
+<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 that
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
+or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
+Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.</p>
+
+<p>
+<small>Ghostscript version 9.23, 21 March 2018</p>
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+<!--FINISH EDITING HERE-->
+
+ </div>
+ </div>
+ </div>
+
+ <div class="footer">
+ <div class="row">
+ <div class="col-7 footleft">
+ <ul>
+ <li><a href="https://artifex.com/contact-us/" target="blank">CONTACT US</a></li>
+ <li><a href="https://artifex.com/about-us/" target="blank">ABOUT</a></li>
+ <li><a href="https://ghostscript.com/security.html">SECURITY</a></li>
+ </ul>
+ </div>
+ <div class="col-1 footcenter">
+ <ul>
+ <li><a href="https://artifex.com/support/" target="blank">SUPPORT</a></li>
+ <li><a href="https://artifex.com/blog/artifex/" target="blank">BLOG</a></li>
+ <li><a href="https://artifex.com/privacy-policy/" target="blank">PRIVACY</a></li>
+ </ul>
+ </div>
+ <div class="col-ft-3 footright"><img src="images/Artifex_logo.png" width="194" height="40" alt=""/> <br>
+ © Copyright 2019 Artifex Software, Inc. <br>
+ All rights reserved.
+ </div>
+ </div>
+ </div>
+
+ <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
+ <script src="index.js"></script>
+</body>
+</html>
diff --git a/doc/History9.htm b/doc/History9.htm
index ac20b01e..20e67642 100644
--- a/doc/History9.htm
+++ b/doc/History9.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -79,7 +70,8 @@ TOC to see how to edit it for visual conciseness.
<h2>Table of contents</h2>
<blockquote><ul>
-<li><a href="#Version9.51">Version 9.52 (2020-03-19)</a>
+<li><a href="#Version9.53.0">Version 9.53.0 (2020-09-10)</a>
+<li><a href="#Version9.52">Version 9.52 (2020-03-19)</a>
<li><a href="#Version9.50">Version 9.50 (2019-10-15)</a>
<li><a href="#Version9.27">Version 9.27 (2019-04-03)</a>
<li><a href="#Version9.26">Version 9.26 (2018-11-20)</a>
@@ -134,6 +126,13443 @@ overview</a>.
<!-- [1.0 end visible header] ============================================== -->
<!-- [2.0 begin contents] ================================================== -->
+<h2><a name="Version9.53.0"></a>Version 9.53.0 (2020-09-10)</h2>
+<p> Highlights in this release include:
+<ul>
+<li>
+<p>The 9.53.0 release is primarily maintenance.
+</li>
+<li>
+<p>The most obvious change is the (re-)introduction of the patch level to the version number,
+this helps facilitate a revised policy on handling security related issues.
+</li>
+<li>
+<p>Our efforts in code hygiene and maintainability continue.
+</li>
+<li>
+<p>We have added the capability to build with the Tesseract OCR engine. In such
+a build, new devices are available (pdfocr8/pdfocr24/pdfocr32) which render the
+output file to an image, OCR that image, and output the image "wrapped" up as a
+PDF file, with the OCR generated text information included as "invisible" text
+(in PDF terms, text rendering mode 3).
+<p>Due to some patches to the Tesseract sources that are required (integrated
+upstream, but awaiting release), time constraints, and the experimental nature
+of the feature, we only support including Tesseract from source, not linking to
+Tesseract shared libraries. Whether we add this capability will be largely
+dependant on community demand for the feature.
+</li>
+<li>
+<p>We have added Python bindings for the <code>gsapi</code> interface, can be found
+in <code>demos/python</code>. These are experimental, and we welcome feedback from
+interested developers.
+</li>
+<li>
+<p>For those integrating Ghostscript/GhostPDL via the <code>gsapi</code> interface, we
+have added new capabilities to that, specifically in terms of setting and interrogating
+device parameters. These, along with the existing interface calls, are documented in:
+<a href="API.htm">Ghostscript Interpreter API</a>
+</li>
+<li>
+<p><b>IMPORTANT:</b> In consultation with a representative of
+(<a href="http://www.openprinting.org">OpenPrinting</a>) it is
+our intention to deprecate and, in the not distant future, remove the
+OpenPrinting Vector/Raster Printer Drivers (that is, the <code>opvp</code>
+and <code>oprp</code> devices).
+<p> If you rely on either of these devices, <b><i>please</i></b> get in touch with
+us, so we can discuss your use case, and revise our plans accordingly.
+</li>
+<li>
+<p>IMPORTANT: We have forked LittleCMS2 into LittleCMS2mt (the "mt" indicating "multi-thread").
+LCMS2 is not thread safe and cannot be made thread safe without breaking the ABI. Our fork
+will be thread safe and include performance enhancements (these changes have all be been
+offered and rejected upstream). We will maintain compatibility between Ghostscript and LCMS2
+for a time, but not in perpetuity. If there is sufficient interest, our fork will be
+available as its own package separately from Ghostscript (and MuPDF).
+</li>
+<li>
+<p>The usual round of bug fixes, compatibility changes, and incremental improvements.
+</li>
+</ul>
+<p>For a list of open issues, or to report problems,
+please visit <a href="http://bugs.ghostscript.com/">bugs.ghostscript.com</a>.
+<h3><a name="9.52_Incompatible_changes"></a>Incompatible changes</h3>
+<h4>Included below are incompatible changes from recent releases (the
+specific release in question listed in parentheses). We include these,
+for now, as we are aware that not everyone upgrades with every release.</h4>
+<ul>
+<li>
+<p>(9.53.0) As of 9.53.0, we have (re-)introduced the patch level to the version number,
+this helps facilitate a revised policy on handling security related issues.
+<p><strong>Note for GSView Users:</strong>The patch level addition breaks GSView 5 (it is
+hardcoded to check for versions <code>704-999</code>. It is possible, but not guaranteed that
+a GSView update might be forthcoming to resolve this.
+</li>
+<li>
+<p>(9.52) As of 9.52, the Windows binaries released by the Ghostscript development
+team are built with Microsoft Visual Studio 2019. As a result, Microsoft Windows XP and
+earlier are no longer supported by these binaries. This does not imply we are, or will
+start relying upon features only available in VS2019, so the <code>nmake</code> Makefiles
+will continue to allow older Visual Studio versions (back to VS2005) to build Ghostscript.
+</li>
+<li>
+<p>(9.52) <code>-dALLOWPSTRANSPARENCY</code>: The transparency compositor (and related
+features), whilst we are improving it, remains sensitive to being driven correctly, and
+incorrect use can have unexpected/undefined results. Hence, as part of improving security
+we limited access to these operators, originally using the <code>-dSAFER</code> feature.
+As we made "SAFER" the default mode, that became unacceptable, hence the new option
+<code>-dALLOWPSTRANSPARENCY</code> which enables access to the operators.
+</li>
+<li>
+<p>(9.50) There are a couple of subtle incompatibilities between the old and new SAFER
+implementations. Firstly, as mentioned in the 9.50 release notes, SAFER now leaves
+standard Postcript functionality unchanged (except for the file access limitations).
+Secondly, the interaction with <code>save</code>&sol;<code>restore</code> operations,
+see <a href="Use.htm#Safer">SAFER</a>.
+<p><strong>Important Note for Windows Users</strong>:
+<br>
+The file/path pattern matching is case sensitive, even on Windows. This is a
+change in behaviour compared to the old code which, on Windows, was case
+<i>in</i>sensitive. This is in recognition of changes in Windows behaviour,
+in that it now supports (although does not enforce) case sensitivity.
+</li>
+<li>
+<p>(9.27) The process of &quot;tidying&quot; the PostScript name space should have removed
+only non-standard and undocumented operators. Nevertheless, it is possible that
+any integrations or utilities that rely on those non-standard and undocumented
+operators may stop working or may change behaviour.
+<p>If you encounter such a case, please contact us (either the #ghostscript IRC channel,
+or the gs-devel mailing list would be best), and we'll work with you to either find an
+alternative solution or return the previous functionality, if there is genuinely no other
+option.
+<p>One case we know this has occurred is GSView 5 (and earlier). GSView 5 support for PDF
+files relied upon internal use only features which are no longer available. GSView 5 will
+still work as previously for PostScript files. For PDF files, users are encouraged to look
+at <a href="https://www.mupdf.com">MuPDF</a>.
+</li>
+</ul>
+<h3><a name="9.53.0_changelog"></a>Changelog</h3>
+<p><strong>2020-09-10 22:47:09 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9a5ace846c8af91d047e59c87722d0c36e79e5d3">9a5ace846c8af91d047e59c87722d0c36e79e5d3</a>
+<blockquote>
+<p>
+ Bug 702884: Require jbig2dec 0.19 when building ghostscript.<br>
+<br>
+ In practice this has been required since commit<br>
+ 9b5008aa2bc1c6a6acb2c6f90d1ef8d6bad9e66a.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-09-10 22:41:20 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=53db58bd227c80375f00135045d36b66868732f4">53db58bd227c80375f00135045d36b66868732f4</a>
+<blockquote>
+<p>
+ Update jbig2dec stuff for 0.19 release.<br>
+<br>
+jbig2dec/CHANGES<br>
+jbig2dec/jbig2.h<br>
+jbig2dec/jbig2dec.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-09-09 11:50:12 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=45884ca68488ac470b894702bdd8da232743d8e4">45884ca68488ac470b894702bdd8da232743d8e4</a>
+<blockquote>
+<p>
+ Bug 702871: Fix GraphicsAlphaBits + Fill/Stroke issue.<br>
+<br>
+ When we flush the alphabuffer, mapped_start and mapped_height are<br>
+ both set to zero. When we refill it, mapped_height is set to<br>
+ non-zero. USUALLY mapped_start is set to non-zero too, but it can<br>
+ be set to zero when we are close to the bottom of the page.<br>
+<br>
+ Hence we should test for mapped_height != 0, rather than both<br>
+ mapped_height and mapped_start being non-zero.<br>
+<br>
+ So the 'quick hack' that Chris used is actually correct.<br>
+<br>
+base/gdevabuf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-28 09:31:58 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4ba6aa1d7253e8ecd7cd796c95306f1203f70879">4ba6aa1d7253e8ecd7cd796c95306f1203f70879</a>
+<blockquote>
+<p>
+ Bug 702837 typo in warning message<br>
+<br>
+ Thanks to Herbert Voss for spotting this. Fixed the typo and updated the<br>
+ version number in the warning from 9.53 to 9.53.0 to match the actual<br>
+ version and patch number of the release (the decision to add the patch<br>
+ level was taken after the original commit)<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-24 18:55:30 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=197eb511b5d81a662f801333709199495abe61cf">197eb511b5d81a662f801333709199495abe61cf</a>
+<blockquote>
+<p>
+ Fix Tesseract traineddata file loading.<br>
+<br>
+ If it was finding any Tesseract data in ROM it was then not looking<br>
+ for files.<br>
+<br>
+base/tessocr.cpp<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-24 09:24:31 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cb279d8a0e356542f6829ed429269ce07ec838a9">cb279d8a0e356542f6829ed429269ce07ec838a9</a>
+<blockquote>
+<p>
+ Coverity 361429: move &quot;break&quot; to correct place.<br>
+<br>
+ We had to add the outputfile to the &quot;control&quot; file permission list (as well<br>
+ as write), but for the &quot;pipe&quot; case, I accidentally added the call after the<br>
+ break out of loop that checks for a pipe.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-21 18:50:55 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bad72741aad21b17a3965673f3e7949a2fc7c256">bad72741aad21b17a3965673f3e7949a2fc7c256</a>
+<blockquote>
+<p>
+ PDF interp: Consolidate disabling of page handler device<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-21 11:13:33 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=60bbe61efc97c208f31c2d2d617753232ed1881d">60bbe61efc97c208f31c2d2d617753232ed1881d</a>
+<blockquote>
+<p>
+ More version number fixes<br>
+<br>
+ The code to retrieve the Ghostscript paths from the Windows Registry<br>
+ was generating a key based on the version number, but since we added the<br>
+ patch the generation was incorrect.<br>
+<br>
+ Since this is the third (!) case of this, scan the code for any usage of<br>
+ gs_version, gs_version_number, GS_VERSION, GS_VERSION_NUMBER,<br>
+ gs_revision, gs_revision_number, GS_REVISION and GS_REVISION_NUMBER.<br>
+<br>
+ This reveals two more places, neither serious but we might as well fix<br>
+ them while we're here.<br>
+<br>
+ Thanks to Akira Kakuto for finding this problem and suggesting a patch.<br>
+ I chose to use the code we were already using in two other places, just<br>
+ for consistency, but the supplied patch was equally good.<br>
+<br>
+base/gp_wgetv.c<br>
+devices/gdevpdfimg.c<br>
+devices/gdevpng.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-21 08:14:49 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=45baf1a5b71c2ddad8e16ae2f895c4244e6af9e6">45baf1a5b71c2ddad8e16ae2f895c4244e6af9e6</a>
+<blockquote>
+<p>
+ Fox typos and stuff in the release highlights<br>
+<br>
+doc/History9.htm<br>
+doc/News.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-20 18:33:00 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=58ea17fd3032584e04f4e844e2d9991af87f114e">58ea17fd3032584e04f4e844e2d9991af87f114e</a>
+<blockquote>
+<p>
+ Delete binary files from lcms2mt tree<br>
+<br>
+ There were left over binary libraries, remove them.<br>
+<br>
+lcms2mt/Lib/MS/lcms2_fast_float_plugin.lib<br>
+lcms2mt/Lib/MS/lcms2_static.lib<br>
+lcms2mt/Lib/MS/lcms2mt_fast_float_plugin.lib<br>
+lcms2mt/Lib/MS/lcms2mt_static.lib<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-20 17:19:09 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2ddd9d68bb0831ec8c9dd5e4e2e94bb44f8e5028">2ddd9d68bb0831ec8c9dd5e4e2e94bb44f8e5028</a>
+<blockquote>
+<p>
+ Fix pdfwrite &quot;%d&quot; mode with file permissions<br>
+<br>
+ Firstly, in gx_device_delete_output_file the iodev pointer was being passed<br>
+ to the delete_method incorrectly (passing a pointer to that pointer). Thus<br>
+ when we attempted to use that to confirm permission to delete the file, it<br>
+ crashed. Credit to Ken for finding that.<br>
+<br>
+ Secondly, due to the way pdfwrite works, when running with an output file per<br>
+ page, it creates the current output file immediately it has completed writing<br>
+ the previous one. Thus, it has to delete that partial file on exit.<br>
+<br>
+ Previously, the output file was not added to the &quot;control&quot; permission list,<br>
+ so an attempt to delete it would result in an error. So add the output file<br>
+ to the &quot;control&quot; as well as &quot;write&quot; list.<br>
+<br>
+base/gsdevice.c<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-18 10:23:13 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dee56822c0c9989fdf0115dab79842ad116c14f3">dee56822c0c9989fdf0115dab79842ad116c14f3</a>
+<blockquote>
+<p>
+ Update version, dates, product family<br>
+<br>
+ for 9.53.0 RC1<br>
+<br>
+base/gscdefs.h<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-20 09:12:12 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f797ac99d0b0a337b5a57c37cdd026f4a9dbf897">f797ac99d0b0a337b5a57c37cdd026f4a9dbf897</a>
+<blockquote>
+<p>
+ Fix PDF /Producer for new patch level<br>
+<br>
+ Bug #702772 &quot;Strange /Producer attribute&quot;<br>
+<br>
+ The change to include a patch level for Ghostscript in the gs_revision<br>
+ value wasn't being reflected in the code to generate the version<br>
+ number used in the PDF /Producer string.<br>
+<br>
+ Copied the code from printf_program_ident() in base/gsmisc.c to the<br>
+ code in pdf_store_default_Producer() and commented both pieces of code<br>
+ to note the existence of each other so that in future hopefully we won't<br>
+ forget to keep them in sync.<br>
+<br>
+ Thanks to Peter Cherepanov for spotting the flaw.<br>
+<br>
+base/gsmisc.c<br>
+devices/vector/gdevpdfu.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-18 23:23:40 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ec82d2aa95dc8eb764483ff9011585bfc47a0f1b">ec82d2aa95dc8eb764483ff9011585bfc47a0f1b</a>
+<blockquote>
+<p>
+ Fix Bug 702381: Hang due to cyclic PDF resources.<br>
+<br>
+ The loop is caused by a circular /ParentResources attribute.<br>
+ This branch of code is triggered by an error in the sample file:<br>
+ misplaced /Form resources in a Type 3 font. This font has /Resource<br>
+ dictionaries added to /CharProcs entries rather than the font dictionary.<br>
+<br>
+ Note that this patch fixes the hang issue, but does not correct the<br>
+ issue of not being able to find the correct resource (in the CharProc)<br>
+ so that the file still output does not match Adobe (mupdf has that<br>
+ same issue).<br>
+<br>
+ Thanks to Peter Cherepanov for this patch.<br>
+<br>
+Resource/Init/pdf_base.ps<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-17 15:44:01 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a01320e4d57d984f5bf65126534dbb3c33b416a4">a01320e4d57d984f5bf65126534dbb3c33b416a4</a>
+<blockquote>
+<p>
+ Bug 702744: Add windows utf-8 handling for unlink and rename.<br>
+<br>
+ To do this, we introduce gp_unlink and gp_rename, and call those<br>
+ as appropriate.<br>
+<br>
+ Also, make gp_open_scratch_file add the file to the permit list.<br>
+ When such a file is closed, it will be deleted from the permit list.<br>
+<br>
+ It will also be removed from the permit list if the file is deleted<br>
+ using the PS deletefile operator.<br>
+<br>
+ On closedown, if scratch files haven't been deleted, then we'll<br>
+ delete them as part of the closedown of gs_lib_ctx.<br>
+<br>
+ This means that 'purging' the control lists must not remove scratch<br>
+ file paths from the list.<br>
+<br>
+ Also, ensure that gsapi callers can't maliciously (or accidentally)<br>
+ remove scratch path paths from the list so as to leave them around<br>
+ after closedown.<br>
+<br>
+base/gp.h<br>
+base/gp_mswin.c<br>
+base/gp_os2.c<br>
+base/gp_os2fs.c<br>
+base/gp_os2pr.c<br>
+base/gp_unifs.c<br>
+base/gp_vms.c<br>
+base/gp_winfs.c<br>
+base/gpmisc.c<br>
+base/gsiodev.c<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+base/mkromfs.c<br>
+base/winlib.mak<br>
+pcl/pl/pjparse.c<br>
+psi/imain.c<br>
+psi/zfile.c<br>
+xps/xpsjxr.c<br>
+xps/xpstop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-11 14:41:28 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0e98e2a27ed19fcc138215afe17ab1a173aeed7b">0e98e2a27ed19fcc138215afe17ab1a173aeed7b</a>
+<blockquote>
+<p>
+ Add patch version to version number<br>
+<br>
+ This makes it easier to issue patch releases for security problems.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+base/gsmisc.c<br>
+base/version.mak<br>
+devices/gdevtifs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-17 13:14:18 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7cfa8d364797aed267285124a32b5cc5e1cd4794">7cfa8d364797aed267285124a32b5cc5e1cd4794</a>
+<blockquote>
+<p>
+ Bug 702360: Allow @loader_path on darwin so build<br>
+<br>
+ As this is change in behaviour, it's optional. The configure script now<br>
+ uses (if set) a environment variable called &quot;DARWIN_LDFLAGS_SO_PREFIX&quot; -<br>
+ included &quot;DARWIN&quot; because it only applies to DARWIN derived systems.<br>
+<br>
+ This allows the caller to use:<br>
+ ./configure DARWIN_LDFLAGS_SO_PREFIX=&quot;@loader_path/&quot;<br>
+<br>
+ Thus meaning the build will use loader_path rather than &quot;@executable_path&quot;.<br>
+<br>
+ Configuring/building without that environment variable will retain the current<br>
+ behaviour.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-15 11:10:02 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ffbd883cd13883ace8fb424a8a7c447084ea5fac">ffbd883cd13883ace8fb424a8a7c447084ea5fac</a>
+<blockquote>
+<p>
+ Enhance First/LastPage processing<br>
+<br>
+ Previously the FirstPage and LastPage processing device did not allow<br>
+ any means to reset the PageCount. This was because Ghostscript's<br>
+ command line processing does not permit changing non-PostScript<br>
+ controls (interpreter and some device parameters) after the first file<br>
+ has been run.<br>
+<br>
+ GPDL however, has a new mechanism 'set_param' which can be used<br>
+ programmatically, and that does permit for device and interpreter<br>
+ parameters to be altered after the initial file has been processed.<br>
+<br>
+ To allow for this the gdevflp device now processes parameters itself<br>
+ instead of relying on the underlying device to do so. The parameters<br>
+ FirstPage, LastPage, PageList and DisablePageHandler now all reset the<br>
+ page count to 0 when they are encountered. This means that, using gpdl,<br>
+ it is possible to select a set of pages from one file, then select a<br>
+ different set of pages from a second file. Sending any of these<br>
+ parameters (except, obviously DisablePageHandler) also now automatically<br>
+ enables the device again ie it sets DisablePageHandler to false.<br>
+<br>
+ It is not, unfortunately, possible to load the gdevflp device at any<br>
+ time except when the underlying device is initially opened. This means<br>
+ that if any file is to be processed using gdevflp the first file must<br>
+ use one of the parameters, in order to load gdevflp. The simplest<br>
+ solution is simply to set -dFirstPage=1 which will load the device and<br>
+ run all the pages from the file.<br>
+<br>
+ This commit also includes a minor change to the PDF interpreter. Because<br>
+ the PDF interpreter (currently) handles subsets of pages itself, it<br>
+ does not want the first/last page device to be active, so it<br>
+ disables the device by sending a 'DisablePageHandler' to it. However<br>
+ (because of the GS command line, as described in the first paragraph) it<br>
+ did not bother to re-enable the device. So here we add a line to<br>
+ re-enable the device after processing is complete.<br>
+<br>
+ This is probably superfluous now that sending the params will re-enable<br>
+ the gdevflp device anyway, but it should make the intention plain.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+base/gdevflp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 10:47:04 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=604646154201c1ecd7000a04fd33778d95b6aeac">604646154201c1ecd7000a04fd33778d95b6aeac</a>
+<blockquote>
+<p>
+ Bug 702725 Maintain spot colors when overprint mismatch in process CS<br>
+<br>
+ If the process color space does not match the source color space (for example<br>
+ drawing an RGB image to a CMYK device) and overprint is true, then we should<br>
+ still retain the spot colorants assuming the device supports them.<br>
+<br>
+base/gscspace.c<br>
+base/gscspace.h<br>
+base/gsicc.c<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 12:40:37 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a02c4496e0c41f5db492e3e549ad06254676dd0e">a02c4496e0c41f5db492e3e549ad06254676dd0e</a>
+<blockquote>
+<p>
+ demos/python/gsapi.py: match new handling of bool by gsapi_set_param().<br>
+<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 16:32:52 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=99c90d8d20d4be6113016154119dc102c18c986b">99c90d8d20d4be6113016154119dc102c18c986b</a>
+<blockquote>
+<p>
+ Update api_test.<br>
+<br>
+ Fix proper expectation of return codes when setting params.<br>
+<br>
+ Fix alignment of memory buffers for display buffer test. md5sums<br>
+ of generated files now match properly.<br>
+<br>
+demos/c/api_test.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 16:30:37 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=067b1ee4b45ee31d251bb796b30079866465ce42">067b1ee4b45ee31d251bb796b30079866465ce42</a>
+<blockquote>
+<p>
+ Fix stray error during param to string conversions.<br>
+<br>
+base/gsparaml.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 13:14:26 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8eaac9486822db53d3a903ec8638dd83f6677782">8eaac9486822db53d3a903ec8638dd83f6677782</a>
+<blockquote>
+<p>
+ Add a couple of files missing from VS Solution.<br>
+<br>
+windows/ghostscript.vcxproj<br>
+windows/ghostscript.vcxproj.filters<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 13:05:14 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=043a9629cfc27d743b5125584753fd15e462d772">043a9629cfc27d743b5125584753fd15e462d772</a>
+<blockquote>
+<p>
+ Update gsapi_set_params to use an &quot;int *&quot; for booleans.<br>
+<br>
+doc/API.htm<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 11:10:27 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d7e8ea24060997ea5f4be1808b45117fe59b9ead">d7e8ea24060997ea5f4be1808b45117fe59b9ead</a>
+<blockquote>
+<p>
+ Bug 702611: Fix tiff_from_filep to handle subclassing<br>
+<br>
+ tiff_from_filep() creates a tiffio structure, which contains a pointer to the<br>
+ tiff device. If the device has been subclassed, however, that is the transient<br>
+ copy of the tiff device, and not the memory used by the &quot;real&quot; device, as<br>
+ pointed to by the graphics state.<br>
+<br>
+ Since we only use the device to get to the gs_memory_t pointer, just store that<br>
+ instead.<br>
+<br>
+base/gstiffio.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-13 11:15:01 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ae3d32942f4f976e89faff65c4e2fbcf4c6d5068">ae3d32942f4f976e89faff65c4e2fbcf4c6d5068</a>
+<blockquote>
+<p>
+ Fix memory leak associated with pdfwrite, type3x images<br>
+<br>
+ This leak is only an issue for non-GC interpreters such as pdfi<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-13 10:38:45 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3f2408d5ac786ac1c0a837b600f4ef3be9be0332">3f2408d5ac786ac1c0a837b600f4ef3be9be0332</a>
+<blockquote>
+<p>
+ graphics library- clean up streams used as DataSource for functions<br>
+<br>
+ The graphics library doesn't close streams which are supplied as<br>
+ the DataSource for type 0 functions, leading to a memory leak in pdfi<br>
+ because we create memory streams (and hence allocate buffers) for this<br>
+ kind of input.<br>
+<br>
+ Add code to close the stream (if present) when the type 0 function is<br>
+ freed. There may be future work required here and in other function<br>
+ types.<br>
+<br>
+base/gsfunc0.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-12 15:15:25 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0694e6e708ccab305524b64692403308f62f2652">0694e6e708ccab305524b64692403308f62f2652</a>
+<blockquote>
+<p>
+ More API.htm fixes<br>
+<br>
+ Found by Ethan Vrhel.<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-11 13:53:07 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5066e260483660b8c13caab141fd34f5844298c7">5066e260483660b8c13caab141fd34f5844298c7</a>
+<blockquote>
+<p>
+ Improve client memory handling for colour spaces and patterns<br>
+<br>
+ Colour spaces have had a client_data member for some time (only used<br>
+ with Pantone colour replacement) but no means to signal to the client<br>
+ that a colour space was going to be freed.<br>
+<br>
+ In addition, its terribly hard for an interpreter which uses complex<br>
+ colour spaces (such as Separation and DeviceN, for Patterns see below)<br>
+ to reliably track when a colour space is freed.<br>
+<br>
+ This commit adds a new 'interpreter_data' pointer to hold data allocated<br>
+ by the interpreter which is associated with a colour space. We also add<br>
+ an 'interpreter_free_cspace_proc' to be called when a colour space is<br>
+ about to be freed. This gives the interpreter an opportunity to clean<br>
+ up the memory it has associated with the colour space.<br>
+<br>
+ Similarly pattern instances (as opposed to Pattern colour spaces) have<br>
+ long had a client_data member, which was previously stored in the<br>
+ 'template' (which is a terrible misnomer) for both type 1 and type 2<br>
+ patterns. However there was no procedure to notify the client when the<br>
+ pattern was freed! The PCL interpreter (which was the only one using<br>
+ this type of pattern) dealt with this by replacing the 'free' routine<br>
+ in the structure with its own routine which first freed the client data<br>
+ and then called the original free routine. This seems like a hack.<br>
+<br>
+ This commit moves the client_data out of the pattern instance and into<br>
+ the pattern structure proper. It also adds a 'notfy_free' member which<br>
+ holds a pointer to a function to be called when a pattern is freed. This<br>
+ gives the client a reliable opportunity to clean up the client_data.<br>
+<br>
+ These changes involve updating the PostScript, PCL and XPS interpreters<br>
+ to point to the new location of the client_data, as well as similar<br>
+ changes in the graphics library. pixmap patterns now use the notify_free<br>
+ functio0n instead of patching over the structure's free routine.<br>
+<br>
+base/gscspace.c<br>
+base/gscspace.h<br>
+base/gspcolor.c<br>
+base/gspcolor.h<br>
+base/gsptype1.c<br>
+base/gsptype1.h<br>
+pcl/pxl/pxink.c<br>
+psi/zpcolor.c<br>
+psi/zshade.c<br>
+xps/xpstile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-12 10:46:32 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e0529567af14fbbbd397b79ad9579d97799abfa5">e0529567af14fbbbd397b79ad9579d97799abfa5</a>
+<blockquote>
+<p>
+ Update Makefiles for new MSVC version.<br>
+<br>
+base/msvclib.mak<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-11 16:09:48 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2228dad8c8649a120fd68d707824be1a06c87ee8">2228dad8c8649a120fd68d707824be1a06c87ee8</a>
+<blockquote>
+<p>
+ Fix missing bits and errors in API.htm<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-08 10:02:18 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e52f3fccbbb81a4cc0e26837dea4359bda774d3c">e52f3fccbbb81a4cc0e26837dea4359bda774d3c</a>
+<blockquote>
+<p>
+ Fix Bug 702472: Array contents scrambled with writeobject/printobject<br>
+<br>
+ Thanks to Peter Cherepanov for this patch.<br>
+<br>
+ The mix-up of the nested arrays was caused by depth-first traversal of<br>
+ the array tree and assignment of offsets to subsidiary arrays that assumed<br>
+ width-first traversal. Switching to width-first traversal in all cases is<br>
+ the easiest way to fix the problem.<br>
+<br>
+ Additionally, access to the list of arrays is now implemented with the<br>
+ -index- operator that has constant complexity, rather than with -roll-<br>
+ that has linear complexity. So the whole process now has linear complexity<br>
+ rather than quadratic.<br>
+<br>
+ The total number of arrays in the exported object is arbitrarily limited to<br>
+ 64K. This prevents memory exhaustion when exported object has circular<br>
+ references, but should not hinder real world usage, if any.<br>
+<br>
+ Following the original implementation, equal names are not merged and<br>
+ exported separately.<br>
+<br>
+ NOTE:<br>
+ A Ghostscript extension, support of dictionaries in binary object sequence<br>
+ has been removed. Following the recent trend of cleaning up non-standard<br>
+ features.<br>
+<br>
+ Dictionary support is not yet removed from the C part. Contrary to PLRM,<br>
+ Adobe can parse binary object sequences with a non-zero tag in the top<br>
+ object. This feature is not yet added. Sequences that contain zero<br>
+ length names can be exported but cannot be imported due a conflict with<br>
+ accessing the user name index. This is a design flaw in PostScript.<br>
+<br>
+Resource/Init/gs_btokn.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-10 13:51:43 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9ff6690610a44be40b938ac948d2d0e96852fac2">9ff6690610a44be40b938ac948d2d0e96852fac2</a>
+<blockquote>
+<p>
+ demos/python/gsapi.py: added support for gsapi_get_param() and gsapi_enumerate_params().<br>
+<br>
+ Also:<br>
+ Wrote some very crude tests of new fns.<br>
+ Extended gsapi_set_param() to take optional &lt;type_&gt; arg.<br>
+ Fixed error in handling of word size on 64-bit Windows.<br>
+<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-11 16:13:55 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fbe65ad97b583611ad854941927aa4b5a6642c55">fbe65ad97b583611ad854941927aa4b5a6642c55</a>
+<blockquote>
+<p>
+ Swap order of arguments in gsapi_set_param/gsapi_get_param.<br>
+<br>
+ This should play nicer with python.<br>
+<br>
+demos/c/api_test.c<br>
+doc/API.htm<br>
+doc/GPDL.htm<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-10 18:29:17 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4a98669de4caf9ac9598ba28633979c78f31d884">4a98669de4caf9ac9598ba28633979c78f31d884</a>
+<blockquote>
+<p>
+ Fix gsapi_get_param behaviour on 'not found'.<br>
+<br>
+ Now we return gs_error_undefined if a value is not found.<br>
+<br>
+doc/API.htm<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-07 18:07:08 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=826f4411a7e879f0891728c0d38c82c516ae34d7">826f4411a7e879f0891728c0d38c82c516ae34d7</a>
+<blockquote>
+<p>
+ Bug 702607: Fix (and IMPROVE the maintainability of) EPSFitPage<br>
+<br>
+ Thanks to Peter Cherepanov for this excellent PostScript code to perform<br>
+ the scale and rotate FitPage. It is well designed and well documented and<br>
+ much more understandable than the previous.<br>
+<br>
+Resource/Init/gs_epsf.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-07 18:29:16 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=18caff3cdf2158e7642ded330bbaf14469863c7e">18caff3cdf2158e7642ded330bbaf14469863c7e</a>
+<blockquote>
+<p>
+ Update .def files with new gsapi functions.<br>
+<br>
+psi/gsdll2.def<br>
+psi/gsdll32.def<br>
+psi/gsdll32metro.def<br>
+psi/gsdll64.def<br>
+psi/gsdll64metro.def<br>
+psi/gsdllARM32metro.def<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-04 19:45:27 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f5692b9c78f0a9fb92c2019d509b80e08a19636">4f5692b9c78f0a9fb92c2019d509b80e08a19636</a>
+<blockquote>
+<p>
+ Update api_test: test enumeration of parameters.<br>
+<br>
+demos/c/api_test.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-07 18:01:37 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e66ab52ed2d65ad6989e73b8c6c797faced8343a">e66ab52ed2d65ad6989e73b8c6c797faced8343a</a>
+<blockquote>
+<p>
+ Improve gs_param to string functions.<br>
+<br>
+ size_t's and int64_t's were being displayed wrong due to a typo<br>
+ in my use of the PRI macros.<br>
+<br>
+ Allow strings to be returned as human readable strings rather than<br>
+ hexstrings.<br>
+<br>
+base/gsparaml.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-07 15:18:07 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c5b0d528b9e3cbbeadeaba4e7f2e6958cc2a99a6">c5b0d528b9e3cbbeadeaba4e7f2e6958cc2a99a6</a>
+<blockquote>
+<p>
+ Add gsapi_enumerate_params functions.<br>
+<br>
+doc/API.htm<br>
+pcl/pl/pl.mak<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+psi/iminst.h<br>
+psi/psapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-08 09:32:59 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0c2e9b65fbc6a7b813fbf96e59d01bd8ffc776e4">0c2e9b65fbc6a7b813fbf96e59d01bd8ffc776e4</a>
+<blockquote>
+<p>
+ Coverity 361226: Add missing break.<br>
+<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-07 18:00:58 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d65d008f20c1cefb27f9ee2f40bcde268050cd6e">d65d008f20c1cefb27f9ee2f40bcde268050cd6e</a>
+<blockquote>
+<p>
+ Fix typo in default param handling.<br>
+<br>
+ PageList should be a string, not a name.<br>
+<br>
+base/gsdparam.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-06 07:44:07 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=249da10b83dd8ed287877e6d21fa3ca3658aadea">249da10b83dd8ed287877e6d21fa3ca3658aadea</a>
+<blockquote>
+<p>
+ Add gstate param to client callback<br>
+<br>
+ This is needed for the pdfi interpreter.<br>
+<br>
+base/gsstate.c<br>
+base/gxstate.h<br>
+pcl/pcl/pctop.c<br>
+pcl/pxl/pxgstate.c<br>
+psi/zgstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-04 19:45:27 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=419fe20af3bdf203f980f41bd92189c7a76b32ba">419fe20af3bdf203f980f41bd92189c7a76b32ba</a>
+<blockquote>
+<p>
+ Update api_test.<br>
+<br>
+ Test param getting, and resolution changing.<br>
+<br>
+demos/c/api_test.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-06 15:23:50 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d01489255d8b5e1733ac1d664cbc1fbf206319e9">d01489255d8b5e1733ac1d664cbc1fbf206319e9</a>
+<blockquote>
+<p>
+ Fix bug in param array coercion.<br>
+<br>
+ If we're going to autoconvert an int array to a float array,<br>
+ make sure we label the final array as being floats, otherwise<br>
+ we run the risk of converting it again!<br>
+<br>
+base/gscparam.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-06 13:30:45 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=afac1313514a34b47bd7f3f441c6ec0ef169fccc">afac1313514a34b47bd7f3f441c6ec0ef169fccc</a>
+<blockquote>
+<p>
+ Tidy printing of floating point numbers in get_params.<br>
+<br>
+base/gsparaml.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-06 13:30:22 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=afbecca968cf0701da25cc7ec8ceba9075aad0f8">afbecca968cf0701da25cc7ec8ceba9075aad0f8</a>
+<blockquote>
+<p>
+ Parse #xx in param names correctly (for gsapi_set_param).<br>
+<br>
+base/gsparaml.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-06 12:02:59 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=783049405b39fb48f84d4ddee478e4ea10631c3d">783049405b39fb48f84d4ddee478e4ea10631c3d</a>
+<blockquote>
+<p>
+ Support arrays of names in the param passing code.<br>
+<br>
+base/gsparaml.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-05 18:48:59 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d1d44a90cf94338fec8ccf73338767ddb07a2254">d1d44a90cf94338fec8ccf73338767ddb07a2254</a>
+<blockquote>
+<p>
+ Update docs for set_param/get_param and -p.<br>
+<br>
+doc/API.htm<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-05 16:16:39 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=34703d722359c7547c532a3e24d2cd81c3f332f5">34703d722359c7547c532a3e24d2cd81c3f332f5</a>
+<blockquote>
+<p>
+ Trigger an initgraphics on every usage of -p within gs.<br>
+<br>
+ This enables us to set the resolution and have it reflected.<br>
+<br>
+psi/iapi.c<br>
+psi/imainarg.c<br>
+psi/int.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-05 13:44:51 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=932dc770a270ff7c70e899f953df9e9c72620d47">932dc770a270ff7c70e899f953df9e9c72620d47</a>
+<blockquote>
+<p>
+ Update gpdl to accept -d/-s/-p after filenames.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-05 13:18:00 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4d94506a1a9442bd3cc51b94eb5f6a16a12588f2">4d94506a1a9442bd3cc51b94eb5f6a16a12588f2</a>
+<blockquote>
+<p>
+ Add -pNAME=STRING options to gs and gpdl to accept parsed params.<br>
+<br>
+ This means we no longer need to rely on using -c and passing<br>
+ postscript fragments to configure (for example) pdfwrite.<br>
+<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-04 19:44:23 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fe0c022fbc1906a48b5a03704d9337751b26be8a">fe0c022fbc1906a48b5a03704d9337751b26be8a</a>
+<blockquote>
+<p>
+ Add gsapi_get_param<br>
+<br>
+base/gsparam.h<br>
+base/gsparam2.c<br>
+base/gsparaml.c<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+psi/psapi.c<br>
+psi/psapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-05 16:52:06 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3a8f4eca0284294c05a471a99263d22032db84b6">3a8f4eca0284294c05a471a99263d22032db84b6</a>
+<blockquote>
+<p>
+ Bug 702606: Fix downsampler failing to initialise with pdfwrite.<br>
+<br>
+ Some of the params were being left unset. My mistake when I added<br>
+ them.<br>
+<br>
+devices/vector/gdevpsdi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-03 12:53:26 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c935b86d261d91ee04b5bf5f95028473d4af3735">c935b86d261d91ee04b5bf5f95028473d4af3735</a>
+<blockquote>
+<p>
+ Fix infinite loop in ialloc_validate_memory tracing the freelist.<br>
+<br>
+ Found in a DEBUG build running the file from Bug 702586 using:<br>
+ -sDEVICE=ppmraw -o x.ppm Bug702586.pdf<br>
+ Hangs after printing the error message:<br>
+ GPL Ghostscript GIT PRERELEASE 9.53: Unrecoverable error, exit code 1<br>
+<br>
+ Fixed by adding a check for self-reference and break out of the loop.<br>
+<br>
+ At some point, someone may want to look at how we get this freelist<br>
+ problem.<br>
+<br>
+psi/ilocate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-04 12:32:20 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ae588a57abccc598d74cb664c117ef339a42c1ba">ae588a57abccc598d74cb664c117ef339a42c1ba</a>
+<blockquote>
+<p>
+ Coverity 361222: Add missing break.<br>
+<br>
+psi/imain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-03 13:57:39 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=341da1a6c41d71344f7ea32505f9ce82c1177e99">341da1a6c41d71344f7ea32505f9ce82c1177e99</a>
+<blockquote>
+<p>
+ Avoid gsapi_set_param within a gsapi_runstring.<br>
+<br>
+ Also, avoid gsapi_run_file within a gsapi_runstring.<br>
+<br>
+pcl/pl/plmain.c<br>
+psi/iminst.h<br>
+psi/psapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-03 13:17:30 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d1337dc425e1d032c0eeef26d530b096930432f4">d1337dc425e1d032c0eeef26d530b096930432f4</a>
+<blockquote>
+<p>
+ Update header dependencies<br>
+<br>
+base/lib.mak<br>
+base/tiff.mak<br>
+devices/dcontrib.mak<br>
+devices/devs.mak<br>
+devices/gdevpdfimg.h<br>
+psi/int.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-30 19:16:13 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bf6884134c244c4766d13c76264fa4372eab4056">bf6884134c244c4766d13c76264fa4372eab4056</a>
+<blockquote>
+<p>
+ gsapi_set_param improvements.<br>
+<br>
+ Allow for a 'parsed' param type; this leverages the functions in<br>
+ gsparaml.c to parse an input string into a param list, coping<br>
+ with dictionaries and arrays.<br>
+<br>
+ We update those functions to improve behaviour on more exotically<br>
+ formed numbers (&quot;- 0.3e-10&quot; etc), on 'tricksy' inputs (e.g.<br>
+ &quot;&lt;&lt; /Foo (&gt;&gt;) &gt;&gt;&quot; etc) and to cope without relying on whitespace<br>
+ (e.g. &quot;&lt;&lt;/Foo/Bar/Baz[1 0]/Fizz&lt;1234&gt;/Bang(A)&gt;&gt;&quot; etc).<br>
+<br>
+ Update pl_implementation set_param entrypoint so that the language<br>
+ interface itself is based upon param lists, rather than typed<br>
+ params.<br>
+<br>
+ Update both implementations of gsapi_set_params so that if<br>
+ we are too early in the setup process stuff goes into the list<br>
+ and is held until we have devices/languages to pass it to. Also<br>
+ add a flag to allow for 'more to come' so that we can effectively<br>
+ set multiple params at once.<br>
+<br>
+base/gsparam.h<br>
+base/gsparaml.c<br>
+demos/c/api_test.c<br>
+demos/c/api_test.vcxproj<br>
+gpdl/psitop.c<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+pcl/pl/pltop.c<br>
+pcl/pl/pltop.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+psi/imain.c<br>
+psi/imain.h<br>
+psi/iminst.h<br>
+psi/psapi.c<br>
+psi/psapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-31 10:13:27 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=49a4fede913a12a61fd6649898cf5999030f4b69">49a4fede913a12a61fd6649898cf5999030f4b69</a>
+<blockquote>
+<p>
+ Fix Bug 702598: Ghostscript will not open SECURED PDF that Adobe opens.<br>
+<br>
+ It's not really clear that this is a valid PDF since it does not conform to<br>
+ one comment in the spec related to AuthEvent with StmF and StrF /Identity,<br>
+ but since Adobe opens this we now open PDF's with AuthEvent specified as<br>
+ something other than /DocOpen and BOTH StrF and StmF /Identity. We look<br>
+ in the /CF &quot;StdCF&quot; dictionary for the AuthEvent. As per the spec., if<br>
+ AuthEvent is not present, assume DocOpen, and if StmF or StrF are not<br>
+ present, we default to /Identity.<br>
+<br>
+ Thanks to Ken Sharp for the initial work on this.<br>
+<br>
+Resource/Init/pdf_sec.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-30 14:23:23 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e3c4d64fe28ffc1361995de034beaeb2a9a7b206">e3c4d64fe28ffc1361995de034beaeb2a9a7b206</a>
+<blockquote>
+<p>
+ Fix warning message re: gs_smoothness<br>
+<br>
+base/gsstate.c<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-30 14:22:09 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=28452533cab466bef9437ee393140695dabc5f9c">28452533cab466bef9437ee393140695dabc5f9c</a>
+<blockquote>
+<p>
+ Fix memory leak with non-GC overprint device<br>
+<br>
+ This memory leak only matters in non-GC (reference-counted) interpreters<br>
+ such as pdfi.<br>
+<br>
+ There was an extra reference count after creating and then setting the<br>
+ overprint device. This change decrements the rc so that it will be 1<br>
+ when exiting this function, allowing it to be properly freed later.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-30 16:18:44 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a1441168f346cefd28e6336f6fbb3b310540dbff">a1441168f346cefd28e6336f6fbb3b310540dbff</a>
+<blockquote>
+<p>
+ Changed gsapi.py to raise exceptions instead of returning error number<br>
+<br>
+ gsapi.py:<br>
+ Generate exceptions instead of returning error codes.<br>
+ Added python versions of gs_error_* codes.<br>
+<br>
+ examples.py:<br>
+ Updated to match new API.<br>
+ Re-raise import error if 'import gsapi' fails.<br>
+ Patched up calls of run_gpdl() to pass in_filename because passing None<br>
+ caused underlying C to return an error.<br>
+ Marked as executable.<br>
+ Look for input files relative to top of ghospdl checkout (found using<br>
+ __file__).<br>
+<br>
+demos/python/examples.py<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-29 17:27:31 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=868200752e41adacc9d027092eba7be2db572b00">868200752e41adacc9d027092eba7be2db572b00</a>
+<blockquote>
+<p>
+ demos/python/gsapi.py: added detection of OS to import correct libgs.so/gpdldll*.dll.<br>
+<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-29 07:25:58 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=54842402fafb0bfc9e4ab2031dbe82e7593f5d08">54842402fafb0bfc9e4ab2031dbe82e7593f5d08</a>
+<blockquote>
+<p>
+ devices/vector/gdevtxtw.c: Added TextFormat=4 for extract system.<br>
+<br>
+ We now retain glyph advance values, and fixed handling of extra widths.<br>
+<br>
+ Added .Advs arrays to text_list_entry_s and textw_text_enum_s so that<br>
+ we can store the original width of glyph before any additions due to<br>
+ TEXT_ADD_TO_ALL_WIDTHS. E.g. this allows one to determine whether glyphs are<br>
+ actually not adjacent.<br>
+<br>
+ Added TextFormat=4 for generating data suitable for extract system.<br>
+<br>
+ txtwrite_process_plain_text:<br>
+ Don't preserve gs_point dpt across iterations - this was cumlatively<br>
+ adding additions from TEXT_ADD_TO_SPACE_WIDTH, giving incorrect<br>
+ positioning. Instead we reset dpt back to {0,0} at the start of each<br>
+ iteration.<br>
+<br>
+ extract_text_output():<br>
+ New, implements TextFormat=4. Writes similar information to<br>
+ decorated_text_output() with TextFormat=0, but also specifies advance value<br>
+ for each char.<br>
+<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-29 13:19:02 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7e28caf03348229390e8aa3cf6395e3a13fab0b3">7e28caf03348229390e8aa3cf6395e3a13fab0b3</a>
+<blockquote>
+<p>
+ Fix minor items in python demo<br>
+<br>
+ Remove ;'s at some line endings (a hard habit to break).<br>
+ Add try catch around import process. Update README<br>
+<br>
+demos/python/README.txt<br>
+demos/python/examples.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-29 14:39:46 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d802303d48d2cb7ac7be157865588b2416e8e633">d802303d48d2cb7ac7be157865588b2416e8e633</a>
+<blockquote>
+<p>
+ Add gs_param list parsing functions.<br>
+<br>
+ Actually, steal the existing functions from the PJL code,<br>
+ move them into the graphics library, and refactor slightly.<br>
+<br>
+ 2 functions; the first one, gs_param_list_add_tokens reads<br>
+ a string of key/value pairs and adds them to the list.<br>
+<br>
+ The second one, gs_param_list_add_parsed_value takes a key<br>
+ and a string for the value, and just adds that pair to the<br>
+ list.<br>
+<br>
+base/gsparam.h<br>
+base/gsparaml.c<br>
+base/lib.mak<br>
+pcl/pl/plparams.c<br>
+windows/ghostscript.vcxproj<br>
+windows/ghostscript.vcxproj.filters<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-29 11:29:31 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=423a04cd8bb7f12ffc127bfb30630348d98694b4">423a04cd8bb7f12ffc127bfb30630348d98694b4</a>
+<blockquote>
+<p>
+ Coverity 361150: Check return values for abuf_flush().<br>
+<br>
+ I foolishly checked the return value from abuf_flush() in new<br>
+ code, which has made Coverity wake up and start complaining<br>
+ about these older ones.<br>
+<br>
+base/gdevabuf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-25 08:29:31 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=89bba350f5724b034753c4febfc559afad835d5c">89bba350f5724b034753c4febfc559afad835d5c</a>
+<blockquote>
+<p>
+ Defeat ICC component validation for nullpage device<br>
+<br>
+ Further to commit 4a3441bdde7060ecc9048bf391977412a82063a8, it turns out that,<br>
+ in practice, we can't completely ignore the ICC profile device parameters,<br>
+ parameters that have an immediate effect on the device are also validated during<br>
+ put_params and thus, for those, validation can still fail.<br>
+<br>
+ Using gxdso_supports_devn allows us to defeat the profile component validation,<br>
+ but nullpage is not a DeviceN device, hence that could cause confusion.<br>
+<br>
+ Using a dedicated gxdso_skip_icc_component_validation allows us to be more<br>
+ selective about when to short circuit those tests, and avoid confusion.<br>
+<br>
+ This is required for gpdl as Postscript initialisation is slightly different<br>
+ compared to regular Ghostscript - the nulldevice remains in play all through<br>
+ Postscript initialisation (rather than being replaced with the device<br>
+ specified by the command arguments part way through initialisation).<br>
+<br>
+base/gdevmpla.c<br>
+base/gdevnfwd.c<br>
+base/gdevp14.c<br>
+base/gsicc_manage.c<br>
+base/gxclrect.c<br>
+base/gxdevsop.h<br>
+devices/gdevcmykog.c<br>
+devices/gdevdsp.c<br>
+devices/gdevpsd.c<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-27 12:46:02 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9beae99074655cf78729d5e26862f00cea11b109">9beae99074655cf78729d5e26862f00cea11b109</a>
+<blockquote>
+<p>
+ Ensure we can call dev_spec_op as soon as device is created<br>
+<br>
+ Since we can legitimately want to interrogate a device for its capabilities and<br>
+ preferences right from its creation, ensure the dev_spec_op is valid as soon<br>
+ as the device is created.<br>
+<br>
+base/gsdevice.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-28 21:36:11 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6179b719348c1622352b55d66599ba26cfba9d3d">6179b719348c1622352b55d66599ba26cfba9d3d</a>
+<blockquote>
+<p>
+ Add Python examples and README<br>
+<br>
+ Also fix typos in C# README<br>
+<br>
+demos/csharp/README.txt<br>
+demos/python/README.txt<br>
+demos/python/examples.py<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-28 17:52:11 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c001ce438ef9fd0171104ac49afa110e39edb03e">c001ce438ef9fd0171104ac49afa110e39edb03e</a>
+<blockquote>
+<p>
+ Bug 702587: Fix alpha buffer issue with fill/stroke operations.<br>
+<br>
+ The &quot;alphabits&quot; devices work by an alpha buffer being inserted<br>
+ into the device chain before graphical operations. This intercepts<br>
+ drawing device calls, 'saves' the color, and then converts the<br>
+ call into a fill of a monochrome mask.<br>
+<br>
+ Only a small 'window' of mask is ever held in memory at once. When<br>
+ the drawing moves out of the range of that window, the window is<br>
+ flushed (conceptually the mask is scaled down, and then that scaled<br>
+ representation is filled with the saved color).<br>
+<br>
+ Any &quot;stragglers&quot; (i.e. unwritten back bits of mask) are flushed at<br>
+ the end of the graphical operation.<br>
+<br>
+ When using fill/stroke, the existing code fails to notice the<br>
+ color in use being changed. This means the last 'window' of<br>
+ fill can end up being written in the color intended for 'stroke'.<br>
+<br>
+ We therefore update the fill/stroke logic to check for the color<br>
+ changing. (We check for 'unflushed data' and 'color has changed').<br>
+<br>
+base/gdevabuf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-27 12:43:38 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=45b122117e937bb36da2ef03ea590c90ebcd2de9">45b122117e937bb36da2ef03ea590c90ebcd2de9</a>
+<blockquote>
+<p>
+ pdfwrite - free ICCBased profile streams to prevent memory leak<br>
+<br>
+ An oversight in memory cleanup in pdfwrite.<br>
+<br>
+ ICCBased colour space arrays contain a reference (must be a reference)<br>
+ to a stream dictionary where the stream data is the profile. Because the<br>
+ stream dictionary is a reference, it must have an ID (a pdf index). This<br>
+ means that when we free the colour space array we do not free the stream<br>
+ dictionary element contained within it.<br>
+<br>
+ We don't free objects with a non-zero ID because these are assumed to be<br>
+ a type of resource, and tracked via the resource chains, but in the<br>
+ case of ICC profiles we were not adding them to a resource chain.<br>
+<br>
+ Fixed here by adding ICC profile streams to the 'resourceOther' chain<br>
+ so that they are freed on exit.<br>
+<br>
+devices/vector/gdevpdfk.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-25 10:52:24 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=55088a6e12775eeae1d19bf9a6db641566ea0c8f">55088a6e12775eeae1d19bf9a6db641566ea0c8f</a>
+<blockquote>
+<p>
+ pdfwrite - review use of sclose().<br>
+<br>
+ The stream interface essentially leaves the buffer management in the<br>
+ hands of the creator; sclose() does not free the stream buffer, but it<br>
+ does set the pointer in the stream state to NULL.<br>
+<br>
+ This can be problematic; if the only reference we have to the original<br>
+ buffer is the pointer in the stream state, then we must copy the pointer<br>
+ before calling sclose() and then free the buffer afterwards.<br>
+<br>
+ s_close_filters() does this BUT it can't know whether a given buffer<br>
+ was allocated in memory, from the C heap or some other fixed allocation.<br>
+ It simply frees all the buffers. Obviously this can cause problems if<br>
+ we use it indiscriminately.<br>
+<br>
+ I've reviewed all the places pdfwrite uses sclose() and where we can<br>
+ use s_close_filters() I've modified the code to do so (to avoid memory<br>
+ leaks in non-GC memory allocators). Where we must not attempt to free<br>
+ the buffer I've left the sclose() but commented on the reason.<br>
+<br>
+devices/vector/gdevpdf.c<br>
+devices/vector/gdevpdfc.c<br>
+devices/vector/gdevpdfo.c<br>
+devices/vector/gdevpdfu.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-22 09:57:54 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5d499272b95a6b890a1397e11d20937de000d31b">5d499272b95a6b890a1397e11d20937de000d31b</a>
+<blockquote>
+<p>
+ Bug 702582, CVE 2020-15900 Memory Corruption in Ghostscript 9.52<br>
+<br>
+ Fix the 'rsearch' calculation for the 'post' size to give the correct<br>
+ size. Previous calculation would result in a size that was too large,<br>
+ and could underflow to max uint32_t. Also fix 'rsearch' to return the<br>
+ correct 'pre' string with empty string match.<br>
+<br>
+ A future change may 'undefine' this undocumented, non-standard operator<br>
+ during initialization as we do with the many other non-standard internal<br>
+ PostScript operators and procedures.<br>
+<br>
+psi/zstring.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-24 14:03:51 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f77f99702c9c8418b9516056d5f4280105beafc4">f77f99702c9c8418b9516056d5f4280105beafc4</a>
+<blockquote>
+<p>
+ demos/python/gsapi.py: improved encoding/decoding of strings.<br>
+<br>
+ Set global _encoding to the encoding passed to gsapi_set_arg_encoding(), and<br>
+ use it where expected by the underlying C code.<br>
+<br>
+ gsapi_set_stdio():<br>
+ Pass bytes object to stdout and stderr callbacks for convenience, and<br>
+ document what expectations are.<br>
+<br>
+ gsapi_run_string*():<br>
+ Accept str or bytes; encode the former into bytes using utf-8 encoding.<br>
+<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-22 18:41:05 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=269f880585dd2c6b3f716668b05f4c911214356b">269f880585dd2c6b3f716668b05f4c911214356b</a>
+<blockquote>
+<p>
+ configure.ac: avoid pathological shell glob expansion in CFLAGS_SANITIZE.<br>
+<br>
+ Specifying a command-line arg with lots of '*' characters that aren't intended<br>
+ to match any filenames, can stress the shell's glob code.<br>
+<br>
+ OpenBSD's ksh gets very slow, for example (e.g. 20m vs 45s in bash).<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-24 17:52:05 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dd1114e8ac0508ada6959c7ffcf6433b5bebe0cf">dd1114e8ac0508ada6959c7ffcf6433b5bebe0cf</a>
+<blockquote>
+<p>
+ make pdf_end_encrypt static<br>
+<br>
+devices/vector/gdevpdfx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-24 15:26:27 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0752757bca7979ed23e6e4fc3cf0772a49fb86c2">0752757bca7979ed23e6e4fc3cf0772a49fb86c2</a>
+<blockquote>
+<p>
+ pdfwrite - fix memory leak with sclose<br>
+<br>
+ The stream code is hideous and full of surprised to trap the unwary. In<br>
+ this case sclose() has the unexpected side-effect of setting the stream<br>
+ buffer to NULL before returning, so we cannot free it afterwards.<br>
+<br>
+ s_close_filters deals with this for us by taking a pointer to the<br>
+ buffer and calling gs_free_object on it after the stream is closed, so<br>
+ we really need to do that (or mimic the same thing ourselves).<br>
+<br>
+ We could do s_close_filters(s, s-&gt;strm) to just close each filter in<br>
+ turn, but I've chosen to just walk down the filter chain for each<br>
+ filter we added, and then close them all up to that point.<br>
+<br>
+ This means changing pdf_end_encrypt() so that instead of closing the<br>
+ stream (with the potential memory leak) we just signal whether the<br>
+ calling code should close the encryption filter.<br>
+<br>
+devices/vector/gdevpdfu.c<br>
+devices/vector/gdevpdfx.h<br>
+devices/vector/gdevpdti.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-24 09:42:10 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4837ddb473d3109fe2108b2ac2aa12a8bf5a0b4e">4837ddb473d3109fe2108b2ac2aa12a8bf5a0b4e</a>
+<blockquote>
+<p>
+ Have gsapi_run_file() handle access controls<br>
+<br>
+ Previously, gsapi_run_file() required the caller to add the file to be<br>
+ processed to the permit read file list. We'll now add the file to the permit<br>
+ read list, execute the file, and remove it from the list without the caller<br>
+ having to do so.<br>
+<br>
+pcl/pl/plapi.c<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-22 14:01:14 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3244573621b1daa2997fbea0c13ce7f891b42203">3244573621b1daa2997fbea0c13ce7f891b42203</a>
+<blockquote>
+<p>
+ Fix pdfwrite memory leak when doing multi-page output<br>
+<br>
+ When doing multiple page output (i.e. page-%0d.pdf or whatever) there<br>
+ was a memory leak because it was attempting to short-circuit things and<br>
+ just delete the last (blank) page, but there was a ton of stuff that<br>
+ never got freed in that case.<br>
+<br>
+ This change sets a flag for the condition and then processes the whole<br>
+ page (which hopefully doesn't do much because it is empty), including<br>
+ freeing everything. Then it just deletes the file at the end instead<br>
+ of at the beginning of the function.<br>
+<br>
+ This function (pdf_close()) is over 1000 lines and really needs to be<br>
+ refactored for maintainability.<br>
+<br>
+devices/vector/gdevpdf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-22 12:24:05 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=90f0f92bf6bf9c346cd3f74adaa42a7c8a3702cb">90f0f92bf6bf9c346cd3f74adaa42a7c8a3702cb</a>
+<blockquote>
+<p>
+ Fix memory leak in pdfwrite device<br>
+<br>
+ This appears to only be a memory leak for non-garbage-collected interpreters<br>
+ such as pdfi.<br>
+<br>
+ sclose() calls s_disable() which sets s-&gt;cbuf to 0.<br>
+ But it also calls client callbacks that might do things with cbuf first, so<br>
+ it will crash if we free it before calling sclose().<br>
+ Side-effects galore! :(<br>
+<br>
+ Anyway, we save the pointer before doing the sclose() so we can<br>
+ properly free it afterwards.<br>
+<br>
+devices/vector/gdevpdfu.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-23 12:51:20 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4a3441bdde7060ecc9048bf391977412a82063a8">4a3441bdde7060ecc9048bf391977412a82063a8</a>
+<blockquote>
+<p>
+ Have nullpage ignore ICC parameters<br>
+<br>
+ We want nullpage to be (largely) a bitbucket device, but ICC profile<br>
+ parameters that require a specific color model could cause it to error.<br>
+<br>
+ Force nullpage to ignore changes to the device ICC profiles. Since it cannot<br>
+ ever produce output, it has no effect in normal operation.<br>
+<br>
+base/gdevnfwd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-23 13:15:20 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a0288377aa1952f8bb3c3739e0d119635280f31c">a0288377aa1952f8bb3c3739e0d119635280f31c</a>
+<blockquote>
+<p>
+ gpdl: Don't report -h or --help as failures.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-21 14:50:13 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=36bec547acf7b799d09f0433b25b059153712839">36bec547acf7b799d09f0433b25b059153712839</a>
+<blockquote>
+<p>
+ demos/python/gsapi.py: removed requirement for python-3.7.<br>
+<br>
+ Removed use of collections module, and instead use hand-written classes, which<br>
+ are clearer and don't require python-3.7.<br>
+<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-21 08:19:04 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1d2b10ba71b40f261350e4ffc1f808381e81544d">1d2b10ba71b40f261350e4ffc1f808381e81544d</a>
+<blockquote>
+<p>
+ Fix Coverity ID 360929<br>
+<br>
+ Remove some pointless code, over-enthusiastic copy/paste error.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-20 16:41:37 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e2efdde6b718098f0d35763bb094833a766af479">e2efdde6b718098f0d35763bb094833a766af479</a>
+<blockquote>
+<p>
+ Fix two minor issues in python API demo<br>
+<br>
+demos/python/gsapi.py<br>
+demos/python/jlib.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-20 16:32:42 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=217b8d292a1098ee56ab52b57bce3e32920b55d4">217b8d292a1098ee56ab52b57bce3e32920b55d4</a>
+<blockquote>
+<p>
+ Demo Viewers: Add readme for csharp example.<br>
+<br>
+ Also minor fixes in Windows application.<br>
+<br>
+demos/csharp/README.txt<br>
+demos/csharp/api/ghostnet.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-20 16:02:31 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4aa0fb2f264f196bb9a07f9d03f7b2da3e89abec">4aa0fb2f264f196bb9a07f9d03f7b2da3e89abec</a>
+<blockquote>
+<p>
+ Linux Demo Viewer : Fix few issues found with testing<br>
+<br>
+ Race condition between gs thread and ui thread. Also<br>
+ issues with zoom factors.<br>
+<br>
+demos/csharp/api/ghostmono.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainZoom.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-20 14:42:17 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b6622b9b2e95e20febe283035328569211413ac4">b6622b9b2e95e20febe283035328569211413ac4</a>
+<blockquote>
+<p>
+ Demo Viewer: Delete unused file. Minor code fix in wpf viewer.<br>
+<br>
+demos/csharp/linux/gtk_viewer/src/gsIO.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.xaml.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-20 14:32:59 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4c6a3e9b8c87aadc6a50c457d8cf7190fafef59c">4c6a3e9b8c87aadc6a50c457d8cf7190fafef59c</a>
+<blockquote>
+<p>
+ Linux Demo Viewer: Complete various lingering tasks<br>
+<br>
+ Add proper closure of current file. Add launching of new<br>
+ process when another file is opened. Fix issue in<br>
+ distilling process.<br>
+<br>
+demos/csharp/api/ghostapi.cs<br>
+demos/csharp/api/ghostmono.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainRender.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-20 11:14:42 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ed82512ecb34f9b51461383755e061e881c269c9">ed82512ecb34f9b51461383755e061e881c269c9</a>
+<blockquote>
+<p>
+ graphics library - initialise more members of the graphics state<br>
+<br>
+ When creating a graphics state and when calling gs_initgraphics() the<br>
+ code was not initialising several members of the graphics state. Mainly<br>
+ these were the new members introduced some time back to allow the PDF<br>
+ interpreter to track the PDF graphics state.<br>
+<br>
+ For consistency, and simpler implementation in pdfi, its better to<br>
+ specifically initialise the state, especially those members which<br>
+ should not default to 0.<br>
+<br>
+ This causes a few tiny diffs with XPS (because the XPS interpeter,<br>
+ unlike the PS and PDF interpreters) did not set a couple of members<br>
+ which are, nevertheless, used when rendering (smoothness and<br>
+ accuratecurves). Smoothness (which affects gradient fills) is now<br>
+ initialised to 0.02 instead of 1 (so much smoother) and accuratecurves<br>
+ is now true instead of false.<br>
+<br>
+base/gsstate.c<br>
+base/gxgstate.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-19 23:21:25 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=45d1994b40289b4ca7bf2d6504081ddcc4d68f14">45d1994b40289b4ca7bf2d6504081ddcc4d68f14</a>
+<blockquote>
+<p>
+ Linux Demo Viewer: Distiller work.<br>
+<br>
+ Everything is hooked in and running. For some odd reason the tmp<br>
+ file generated in the distilling process is 0 bytes. Will<br>
+ dig further to see why the file is not getting written. API<br>
+ seems happy as can be... very odd.<br>
+<br>
+demos/csharp/api/ghostapi.cs<br>
+demos/csharp/api/ghostmono.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-18 17:02:46 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6466211fec0c44ce29e7cd094465d2ed4f351ef1">6466211fec0c44ce29e7cd094465d2ed4f351ef1</a>
+<blockquote>
+<p>
+ Linux Demo Viewer: Progress at last.<br>
+<br>
+ Many thing that should have been simple were complicated<br>
+ in the poorly documented world of C# mono development.<br>
+ Just need to do a bit more clean up and hook in the<br>
+ distilling option for PS.<br>
+<br>
+demos/csharp/api/ghostmono.cs<br>
+demos/csharp/linux/gtk_viewer/gtk_viewer.csproj<br>
+demos/csharp/linux/gtk_viewer/gtk_viewer.sln<br>
+demos/csharp/linux/gtk_viewer/src/MainRender.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainZoom.cs<br>
+demos/csharp/linux/gtk_viewer/src/Program.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-15 16:48:25 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0f59de6b3daab30d405ee5c5c4ac943c26721622">0f59de6b3daab30d405ee5c5c4ac943c26721622</a>
+<blockquote>
+<p>
+ Linux Demo Viewer: Various updates to try to get threading working<br>
+<br>
+demos/csharp/linux/gtk_viewer/src/DocPage.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainRender.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainZoom.cs<br>
+demos/csharp/linux/gtk_viewer/src/Program.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-15 16:42:57 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=42b49069c0f87406dcd796183ba719d45dd8ce69">42b49069c0f87406dcd796183ba719d45dd8ce69</a>
+<blockquote>
+<p>
+ Mono GTK requires a different type of threading call<br>
+<br>
+ In Windows .NET one can use the BackgroundWorker event handler.<br>
+ Unfortunately the completed event does not call back on the<br>
+ correct thread. This one uses methods suggested by the mono<br>
+ GTK documentation. Keeping both versions for examples.<br>
+<br>
+demos/csharp/api/ghostmono.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-17 13:44:59 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=69593c399cbd445b51b4a7bf7d1ccc36604f2c37">69593c399cbd445b51b4a7bf7d1ccc36604f2c37</a>
+<blockquote>
+<p>
+ graphics library - initialise some gstate members appropriately<br>
+<br>
+ The members are (I think) all part of the PDF graphics state rather than<br>
+ the PostScript graphics state. These members are normally initialised<br>
+ by the (PostScript) PDF interpreter but when we are running the new<br>
+ pdfi interpreter inside Ghostscript we want to inherit the contents of<br>
+ the graphics state, not overwrite them, so we do not initialise these.<br>
+<br>
+ This leads to problems; because the values are never initialised in this<br>
+ case, and (for example) the text horizontal scaling remains at 0 when<br>
+ it should be 100. Since we set the Text Rendering Matrix partially by<br>
+ multiplying by that value, this can lead to a degenerate matrix and<br>
+ cause text not to appear. In addition it causes ps2write output to be<br>
+ incorrect and throw an error.<br>
+<br>
+ This commit does nothing with regular Ghostscript, but with GS+pdfi it<br>
+ fixes hundreds of errors in ps2write tests and results in at least some<br>
+ files drawing some content. At least one of these files is still not<br>
+ correct (it is with pdfi alone) so there is clearly more to do here.<br>
+<br>
+ This reduces the number of errors testing GS+pdfi to 475 which is<br>
+ 447 errors less than Ghostscript alone.<br>
+<br>
+base/gxgstate.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 10:51:21 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c735180bed16fa7e0525640670a4ee082700b770">c735180bed16fa7e0525640670a4ee082700b770</a>
+<blockquote>
+<p>
+ Change default pdfwrite.params.OPM to be 0<br>
+<br>
+ It is already set this way by gs distillerparams, but this makes it<br>
+ match to make it easier for pdfi.<br>
+<br>
+ (This is just a hack at this point, need a general solution for pdfi)<br>
+<br>
+devices/vector/gdevpsdf.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-16 09:15:34 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=630d427ab701c582c576a54f2b02f44ddae4a3f6">630d427ab701c582c576a54f2b02f44ddae4a3f6</a>
+<blockquote>
+<p>
+ Bug 702560: Honour PDFSTOPONERROR with broken form dict<br>
+<br>
+ Commit 409db64c5519 added support for form XObject dictionaries with a /Contents<br>
+ key for the content stream, rather than the form dict being the stream dict.<br>
+<br>
+ As that is contrary to the spec, this commit makes that case trigger an error<br>
+ when -dPDFSTOPONERROR is used.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-16 08:14:38 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=409db64c55198b0126c4afebd74eb26d8d7d57ed">409db64c55198b0126c4afebd74eb26d8d7d57ed</a>
+<blockquote>
+<p>
+ Bug 702560: Cope with (broken) form with &quot;Contents&quot;<br>
+<br>
+ The file for this bug has a form which contains a /Contents key for the content<br>
+ stream, rather than the /Form dictionary being a stream dictionary itself.<br>
+<br>
+ This is contrary to the spec, but Acrobat displays it without complaint.<br>
+<br>
+ Note: Acrobat pre-flight lists the resource to reference the form object<br>
+ as &quot;missing&quot;, and yet renders the form contents anyway.<br>
+<br>
+ Also note: we have a test file in the test suite that also includes &quot;/Contents&quot;<br>
+ key, which is a metadata string, so we have to explicitly check that the value<br>
+ for the &quot;/Contents&quot; key is a stream dictionary.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-14 14:03:41 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c184fcbcc23a196a6d6a26648e52d9f3372ac46b">c184fcbcc23a196a6d6a26648e52d9f3372ac46b</a>
+<blockquote>
+<p>
+ Fix problem introduced by commit 6a3c36f8 with multi-threaded rendering.<br>
+<br>
+ That commit changed the allocation requirement in clist_init_states, but didn't<br>
+ change the corresponding calculation that is supposed to match. Make this a<br>
+ function so that both will agree going forward.<br>
+<br>
+base/gxclist.c<br>
+base/gxclist.h<br>
+base/gxclthrd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-15 15:25:10 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3786f7cb0c4ccf3442beafdf186dbc6835da8ae3">3786f7cb0c4ccf3442beafdf186dbc6835da8ae3</a>
+<blockquote>
+<p>
+ pdfwrite - write FontMatrix for FDArray of a CFF CIDFont<br>
+<br>
+ Bug #702556 &quot;pdfwrite produces an invalid pdf file&quot;<br>
+<br>
+ The description is incorrect here, the PDF file is not invalid. The<br>
+ input PostScript file has been created by converting a PDF file using<br>
+ Poppler.<br>
+<br>
+ The original PDF file contains a number of CIDFonts, all with CFF<br>
+ outlines, and the conversion, for reasons best known to itself, moves<br>
+ the FontMatrix out of the CFF font and into the CIDFont. This isn't<br>
+ possible with PDF, so pdfwrite is forced to move the FontMatrix from<br>
+ the CIDFont back into the CFF font.<br>
+<br>
+ Unfortunately we were not writing the FontMatrix out at the FDArray<br>
+ level of the CFF CIDFont, leading to text 1000 times too large.<br>
+<br>
+ Fixed here by writing the FontMatrix for each font in the FDArray.<br>
+<br>
+devices/vector/gdevpsf2.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-14 13:56:24 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5ec2c321c890114af532cb69e913462d56fd4f4f">5ec2c321c890114af532cb69e913462d56fd4f4f</a>
+<blockquote>
+<p>
+ Fix bug 702559: Patterns + overprint on 16 bit-per-component devicen devices.<br>
+<br>
+ The 'blank_unmasked_bits' needed to handle 16 bit per component (deep) planes.<br>
+<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-14 13:52:45 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d23a584e66c103f43a1de2b1d327bcf196c5972a">d23a584e66c103f43a1de2b1d327bcf196c5972a</a>
+<blockquote>
+<p>
+ Fix bug 702557: oknown missing in paint_form check for Group.<br>
+<br>
+ Yet another case where indirect objects were not being handled.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-14 10:42:54 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=868b71c7df45571088e2ff7fcde666b2534d03f0">868b71c7df45571088e2ff7fcde666b2534d03f0</a>
+<blockquote>
+<p>
+ pdfwrite - move TwoByteToUnicode variable out of union<br>
+<br>
+ Discovered while working on the new PDF interpreter and the test file<br>
+ BCL_Easy.pdf with pdfwrite.<br>
+<br>
+ The TwoByteToUnicode flag was stored in the 'simple' structure in the<br>
+ encoding union. However, that flag is altered by the addition of<br>
+ ToUnicode code points, and that is *not* limited to simple encodings,<br>
+ we also alter it for CIDFonts. If we alter the flag we are, in effect,<br>
+ corrupting members of the union in the case where we are using a<br>
+ different structure in the union.<br>
+<br>
+ This showed up as corrupting the CMapName member of the type0 structure<br>
+ when built for 64-bit. It didn't exhibit with regular Ghostscript<br>
+ because that uses the ToUnicode CMap from the input, and only has a<br>
+ 2-byte Unicode value, the pdfi version currently returns a 4-byte<br>
+ code point.<br>
+<br>
+ Nevertheless, this clearly shows that the potential for problems is<br>
+ there, so to avoid this in future move the flag out of the union and<br>
+ into the main pdf_font_resource_s structure.<br>
+<br>
+devices/vector/gdevpdte.c<br>
+devices/vector/gdevpdtf.c<br>
+devices/vector/gdevpdtf.h<br>
+devices/vector/gdevpdtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-14 10:35:53 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bb1fcf280916311b4e38dfc438399aaebf9c8698">bb1fcf280916311b4e38dfc438399aaebf9c8698</a>
+<blockquote>
+<p>
+ Move declaration of a variable to function prolog.<br>
+<br>
+base/simscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-03 06:38:12 -0400
+</strong>
+<br>Ken Brown &lt;kbrown@cornell.edu&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8690eed13e3f343fde0d78a5c9bb0108b7f88d41">8690eed13e3f343fde0d78a5c9bb0108b7f88d41</a>
+<blockquote>
+<p>
+ Bug 702464: Fix Cygwin build<br>
+<br>
+ Commit 327dc89 made many changes to the Cygwin build of ghostscript,<br>
+ most of which were wrong. (They treated Cygwin as though it were<br>
+ Windows.) One of those changes caused the problem on x86_64 Cygwin<br>
+ reported here:<br>
+<br>
+ https://sourceware.org/pipermail/cygwin/2020-June/245070.html<br>
+<br>
+ This patch restores the Cygwin build to its former state and also<br>
+ makes a couple of small tweaks.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-10 09:44:19 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=857b4a2c5cb7d8ce8798caf623134b77e9f5c447">857b4a2c5cb7d8ce8798caf623134b77e9f5c447</a>
+<blockquote>
+<p>
+ Bug 702553: Broken handling of 1.0 TTF cmap case<br>
+<br>
+ A (clearly!) fairly little used path through the TTF cmap table handling code<br>
+ for PDF files had bitrotted to the point where we ended up trying to create<br>
+ a Type 42 font (from a TTF) which didn't have a CharStrings dictionary.<br>
+<br>
+ Specifically, this is the case where we're using a 1.0 cmap table, and the<br>
+ source PDF font's Encoding object does not contain a Differences key.<br>
+<br>
+Resource/Init/gs_ttf.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-09 22:20:32 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=13c04693416d0fbf0d614509cabce71e7399207e">13c04693416d0fbf0d614509cabce71e7399207e</a>
+<blockquote>
+<p>
+ WPF demo: Make changes introduced due to needs of mono project<br>
+<br>
+demos/csharp/windows/ghostnet_wpf_example/MainRender.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainThumbRendering.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/ghostnet_simple_viewer.csproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-09 22:08:08 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=279f4835e1ab58653665e9024aaf58032c0591d7">279f4835e1ab58653665e9024aaf58032c0591d7</a>
+<blockquote>
+<p>
+ Linux Demo Viewer: Pages now rendering.<br>
+<br>
+ AA working. Need to add zoom, page navigation, track down a few<br>
+ crashing issues.<br>
+<br>
+demos/csharp/api/ghostnet.cs<br>
+demos/csharp/linux/gtk_viewer/gtk-gui/gtk_viewer.src.gsOutput.cs<br>
+demos/csharp/linux/gtk_viewer/gtk_viewer.csproj<br>
+demos/csharp/linux/gtk_viewer/src/DocPage.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainRender.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 22:36:25 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2260ba90c0e70f38f2fef96baf8b1b972eef2940">2260ba90c0e70f38f2fef96baf8b1b972eef2940</a>
+<blockquote>
+<p>
+ Linux Demo Viewer: StdIO output working<br>
+<br>
+ Thumbnail images created. Need to populate into UI next.<br>
+<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 17:42:56 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fcef740cdba16732a16f83a180404c458a075abc">fcef740cdba16732a16f83a180404c458a075abc</a>
+<blockquote>
+<p>
+ Progress on the UI design.<br>
+<br>
+ Made design similar to what was done for the WPF application.<br>
+ stdio callbacks from GS are working so hopefully will have pages<br>
+ rendered shortly.<br>
+<br>
+demos/csharp/linux/gtk_viewer/gtk-gui/gtk_viewer.src.gsOutput.cs<br>
+demos/csharp/linux/gtk_viewer/gtk_viewer.csproj<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-07 21:54:08 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=057a39eb4e3f859d293c1e98e1005c82da31024c">057a39eb4e3f859d293c1e98e1005c82da31024c</a>
+<blockquote>
+<p>
+ csharp/linux: Initial commit of mono gtk csharp project<br>
+<br>
+ Many of the files are variants of the wpf project from windows.<br>
+ These projects share the same API files to ghostscript, but the<br>
+ mono UI related objects have to change since mono does not support<br>
+ WPF. This is just an initial commit to get something in place.<br>
+<br>
+demos/csharp/linux/gs_mono.sln<br>
+demos/csharp/linux/gtk_viewer/Properties/AssemblyInfo.cs<br>
+demos/csharp/linux/gtk_viewer/gtk-gui/generated.cs<br>
+demos/csharp/linux/gtk_viewer/gtk-gui/gtk_viewer.src.gsOutput.cs<br>
+demos/csharp/linux/gtk_viewer/gtk-gui/gui.stetic<br>
+demos/csharp/linux/gtk_viewer/gtk_viewer.csproj<br>
+demos/csharp/linux/gtk_viewer/src/DocPage.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainRender.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainZoom.cs<br>
+demos/csharp/linux/gtk_viewer/src/Program.cs<br>
+demos/csharp/linux/gtk_viewer/src/TempFile.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsIO.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.xaml.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-09 11:14:46 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e88ba0a1ee23911172222ee6ad7c2e3c9ea205a4">e88ba0a1ee23911172222ee6ad7c2e3c9ea205a4</a>
+<blockquote>
+<p>
+ Fix Coverity issue: sizeof(byte **) vs sizeof(byte *)<br>
+<br>
+ *Apparently* sizeof(byte *) and sizeof(byte **) might be different.<br>
+ I can't think of a case where that's true, but I am indeed using<br>
+ the wrong one.<br>
+<br>
+ Fix it here.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 16:41:11 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=da755f7ee3da900a504a3265c64fb08c93a41eac">da755f7ee3da900a504a3265c64fb08c93a41eac</a>
+<blockquote>
+<p>
+ Bug 688990: Reimplementation of image mask scaling.<br>
+<br>
+ Aiming for a better match to Adobe's reference implementation.<br>
+<br>
+ Patch supplied by Peter Cherepanov. Many Thanks!<br>
+<br>
+base/lib.mak<br>
+base/simscale.c<br>
+base/simscale.h<br>
+base/simscale_foo.c<br>
+base/simscale_foo.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 18:52:44 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cc596ad6dd030f192416086370bd54e8059589d4">cc596ad6dd030f192416086370bd54e8059589d4</a>
+<blockquote>
+<p>
+ lgtm.com issue: Fix potential overflow in mkromfs.<br>
+<br>
+ We know that we only ever call this splitting the ROMFS into 4,<br>
+ so it's never going to overflow, but lgtm.com can't know that.<br>
+ Add a check to keep the number down to a sane size to keep it<br>
+ happy.<br>
+<br>
+base/mkromfs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 15:50:11 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b0c208a555ed89139395a6ed0d8dce70d81cde09">b0c208a555ed89139395a6ed0d8dce70d81cde09</a>
+<blockquote>
+<p>
+ Bug 691452: Add missing dependencies.<br>
+<br>
+ Patch from Peter Cherepanov. Many thanks!<br>
+<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 07:22:06 -0700
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=000de1419225213fce7d06de0f1982cd79e4e141">000de1419225213fce7d06de0f1982cd79e4e141</a>
+<blockquote>
+<p>
+ Update CAL makefile to pass correct compiler flags.<br>
+<br>
+base/cal.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 00:03:56 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=79d9c45db7ce0ee075254bbfa8235d2996869fb1">79d9c45db7ce0ee075254bbfa8235d2996869fb1</a>
+<blockquote>
+<p>
+ Bug 702517: Fix overenthusiastic checking for NULL.<br>
+<br>
+ Patch from Peter Cherepanov. Many thanks.<br>
+<br>
+devices/gdevmgr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 17:16:10 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6c5a246ebe922e94df2e5f5cdd7d01ca86762cb3">6c5a246ebe922e94df2e5f5cdd7d01ca86762cb3</a>
+<blockquote>
+<p>
+ Rename displaydev_test to api_test.<br>
+<br>
+ Move it into the new &quot;demos&quot; directory, and expand it to cope<br>
+ with testing run_string too.<br>
+<br>
+demos/c/ReadMe.txt<br>
+demos/c/api_test.c<br>
+demos/c/api_test.vcxproj<br>
+demos/c/api_test.vcxproj.filters<br>
+toolbin/displaydev_test.vcxproj.filters<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-07 12:55:42 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=db8f3a277d0ae43cf5cffea16ee1c9149d4eb3de">db8f3a277d0ae43cf5cffea16ee1c9149d4eb3de</a>
+<blockquote>
+<p>
+ Extend gpdl to cope with being fed PDFs via run_string.<br>
+<br>
+ More generally, we can now cope with any language implementation<br>
+ requesting that data being fed in via run_string should be<br>
+ buffered up and then fed in via run_file instead, so formats that<br>
+ require seeking can cope.<br>
+<br>
+ We add a new gs_error_NeedFile error code. If a run_string<br>
+ implementation returns this, the calling gpdl layers captures<br>
+ the unused incoming data into an internal &quot;buffered_file&quot; object.<br>
+<br>
+ When we reach run_string_end, we then register a new filing<br>
+ system with gs_add_fs() to allow this buffered file to be found.<br>
+ We then run that file using the standard run_file mechanism.<br>
+ Then we remove that filing system, and free the buffered file.<br>
+<br>
+ The only implementation that currently uses this is the<br>
+ postscript one, which is amended to skip over leading whitespace<br>
+ and comments, looking for a PDF header.<br>
+<br>
+ XPS already has a mechanism in it for collating data<br>
+ into a file using run_string, but this was broken (due to<br>
+ process_eof not being called). Fixed here, but still using its<br>
+ own mechanism rather than gs_error_NeedFile for now.<br>
+<br>
+base/gserrors.h<br>
+doc/GPDL.htm<br>
+gpdl/psitop.c<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-07 16:09:18 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6eb675b18b8234256bb37190fd35243eab369e36">6eb675b18b8234256bb37190fd35243eab369e36</a>
+<blockquote>
+<p>
+ Tweak gsapi for gpdl to match gs.<br>
+<br>
+ The gpdl implementation of gsapi differed in the &quot;run_string&quot;<br>
+ arguments from the original gs implementation. Add the extra<br>
+ parameters here to make the two look identical.<br>
+<br>
+doc/GPDL.htm<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+pcl/pl/realmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-07 14:56:23 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=24c9b3834b29e8a0eaa6dd78712ef1306049b479">24c9b3834b29e8a0eaa6dd78712ef1306049b479</a>
+<blockquote>
+<p>
+ Tweak gp_file veneers.<br>
+<br>
+ This allows for implementations to have more NULL function pointers,<br>
+ and hence to be simpler.<br>
+<br>
+base/gp.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-06 11:04:52 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0a9ec5e7fa81cf3f67f001bfcac2575611e49d85">0a9ec5e7fa81cf3f67f001bfcac2575611e49d85</a>
+<blockquote>
+<p>
+ Fix bug 702530: Spurious circular reference error message from PDF interpreter<br>
+<br>
+ The safe_recursive function comments described popping the copy of the dict<br>
+ made for recursion (to allow multiple references at the same level), but the<br>
+ code did not implement that.<br>
+<br>
+Resource/Init/pdf_base.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-06 15:44:41 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f2e2e3c1bb24887bce699821a3da1f8b3bbd12be">f2e2e3c1bb24887bce699821a3da1f8b3bbd12be</a>
+<blockquote>
+<p>
+ Remove the dmprt device<br>
+<br>
+ It has code which triggers security warnings, it has not built as it stands<br>
+ since before 8.71 (so &gt;10 years) and has significant (segfaulting) problems<br>
+ when modified to successfully build.<br>
+<br>
+ Since it cannot have been used (and no one has complained) in over ten years,<br>
+ we're removing it.<br>
+<br>
+contrib/contrib.mak<br>
+contrib/japanese/dmp_init.ps<br>
+contrib/japanese/dmp_site.ps<br>
+contrib/japanese/doc/gdevdmpr.txt<br>
+contrib/japanese/dviprlib.c<br>
+contrib/japanese/escp_24.src<br>
+contrib/japanese/gdevdmpr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 13:52:02 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=61cbcfe94512ebd9316ff3c0d7ffaee06e226bc2">61cbcfe94512ebd9316ff3c0d7ffaee06e226bc2</a>
+<blockquote>
+<p>
+ Add/fix documentation for .begintransparencymaskgroup/.endtransparencymask<br>
+<br>
+doc/Language.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-06 12:13:09 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0296da79f0f215322a1445c35f7343344806c08b">0296da79f0f215322a1445c35f7343344806c08b</a>
+<blockquote>
+<p>
+ Fix spot color handling of display device.<br>
+<br>
+ The device icc_struct needs to be initialised before we try to<br>
+ use it.<br>
+<br>
+devices/devs.mak<br>
+devices/gdevdsp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-07 12:51:45 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2398bdb09fa80498a57ab54815e85d326506b509">2398bdb09fa80498a57ab54815e85d326506b509</a>
+<blockquote>
+<p>
+ Fix silly typo in gs_remove_fs.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-07 12:51:01 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dbe3a897df38c94c0c2af5b6ad5c4ee9a1c0ffe5">dbe3a897df38c94c0c2af5b6ad5c4ee9a1c0ffe5</a>
+<blockquote>
+<p>
+ Add a 'const' to gp_file_alloc.<br>
+<br>
+ This enables it to be called in some circumstances where we only<br>
+ have a const gs_memory_t.<br>
+<br>
+base/gp.h<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-06 12:35:01 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=87be031c6039d5f6d9bc960a9aefd442dded3e92">87be031c6039d5f6d9bc960a9aefd442dded3e92</a>
+<blockquote>
+<p>
+ Fix Coverity 360266: Unchecked return value.<br>
+<br>
+ By the time we get here, we are guaranteed to be fatally failing.<br>
+ Checking the return value can't alter what we are returning.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 18:37:13 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8549a5c5af77ee512dea0a43a82bf7612a861237">8549a5c5af77ee512dea0a43a82bf7612a861237</a>
+<blockquote>
+<p>
+ Fix stray change in doc/API.htm<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 18:29:48 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aafbb943f1298a75058485fc0c277edfd7ef4048">aafbb943f1298a75058485fc0c277edfd7ef4048</a>
+<blockquote>
+<p>
+ Fixes for displaydev_test.<br>
+<br>
+ In 64bit builds, we expect the display device to fail when asked<br>
+ to align to a multiple of 4.<br>
+<br>
+ Also, correct detection of failures.<br>
+<br>
+toolbin/displaydev_test.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 17:14:52 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5410cc1d64a2082dcd0e037d1ccefdbf68894198">5410cc1d64a2082dcd0e037d1ccefdbf68894198</a>
+<blockquote>
+<p>
+ Fix infinite recursion in display device.<br>
+<br>
+ If the device was a clist device, and was opened/closed repeatedly,<br>
+ the wrong 'base' dev_spec_op could be stored.<br>
+<br>
+devices/gdevdsp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 15:45:49 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c2b0b6d61e62b9d490e9e3fcc24efb64c06f2a14">c2b0b6d61e62b9d490e9e3fcc24efb64c06f2a14</a>
+<blockquote>
+<p>
+ Fix gpdl run_string API to properly detect language.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 12:06:17 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a3cf573c2e72daf75c64d7b3a09e544f6e027244">a3cf573c2e72daf75c64d7b3a09e544f6e027244</a>
+<blockquote>
+<p>
+ pdfwrite - when copying clip path, cater for differing allocators<br>
+<br>
+ This is for pdfi when run under Ghostscript; the pdfwrite device keeps<br>
+ a copy of the current clip path when it writes it to the output. But<br>
+ the code (gx_cpath_to_path) relies on gx_path_asign_preserve and that<br>
+ function specifically states that the allocators for the two paths<br>
+ must be the same.<br>
+<br>
+ In the case of pdfi under GS, the path is created using the pdfi memory<br>
+ allocator (its created by the pdfi interpreter), but the copied path<br>
+ is allocated using the device allocator, which is derived from the<br>
+ PostScript interpreter. The result of this is that pdfwrite can still<br>
+ be pointing to a path which was allocated by pdfi and can disappear<br>
+ when the pdfi interpreter exits, leaving a dangling pointer. Since the<br>
+ path is subject to garbage collection (allocated with the PostScript<br>
+ interpreter allocator) this causes a crash as soon as any kind of<br>
+ grbage collection takes place.<br>
+<br>
+ Fortunately there's a simple function call 'gx_path_unshare' which will<br>
+ copy the segments after assignment and we can check the allocators to<br>
+ see if they are the same and us this function if they are not.<br>
+<br>
+ Fixes the remaining (currently) seg faults with pdf when running inside<br>
+ Ghostscript.<br>
+<br>
+devices/vector/gdevpdfd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-02 15:38:27 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=20757da77706d4227cd7268113bbffbe7716a6fc">20757da77706d4227cd7268113bbffbe7716a6fc</a>
+<blockquote>
+<p>
+ Introduce demos folder with csharp and python API examples<br>
+<br>
+ Current csharp demo shows creation of wpf viewer. Goal will<br>
+ be to next show a Linux viewer using mono and the same API file.<br>
+ Python demo/API brought over from toolbin.<br>
+<br>
+demos/csharp/api/ghostapi.cs<br>
+demos/csharp/api/ghostnet.cs<br>
+demos/csharp/windows/ghostnet.sln<br>
+demos/csharp/windows/ghostnet_wpf_example/About.xaml<br>
+demos/csharp/windows/ghostnet_wpf_example/About.xaml.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/App.config<br>
+demos/csharp/windows/ghostnet_wpf_example/App.xaml<br>
+demos/csharp/windows/ghostnet_wpf_example/App.xaml.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/DocPage.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainPrint.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainRender.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainThumbRendering.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml<br>
+demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainZoom.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/PrintControl.xaml<br>
+demos/csharp/windows/ghostnet_wpf_example/PrintControl.xaml.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/Properties/AssemblyInfo.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/Properties/Resources.Designer.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/Properties/Resources.resx<br>
+demos/csharp/windows/ghostnet_wpf_example/Properties/Settings.Designer.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/Properties/Settings.settings<br>
+demos/csharp/windows/ghostnet_wpf_example/TempFile.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/XPSprint.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/ghostnet_simple_viewer.csproj<br>
+demos/csharp/windows/ghostnet_wpf_example/gsIO.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/gsOutput.xaml<br>
+demos/csharp/windows/ghostnet_wpf_example/gsOutput.xaml.cs<br>
+demos/python/gsapi.py<br>
+demos/python/gsapiwrap.py<br>
+demos/python/jlib.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-02 15:02:48 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ade938cc74549ffc8d58b0c1fd5e9be7f5429855">ade938cc74549ffc8d58b0c1fd5e9be7f5429855</a>
+<blockquote>
+<p>
+ Add missing methods to API.htm<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-02 12:21:33 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=62d83a31f7f20910eeb5938873c62e890c9d2b3a">62d83a31f7f20910eeb5938873c62e890c9d2b3a</a>
+<blockquote>
+<p>
+ Make -dSimulateOverprint=false work with transparency<br>
+<br>
+ When the source file has transparency and overprint, avoid doing<br>
+ the compatible overprint mode if overprint is specified to<br>
+ be disabled. Thanks to Ray Johnston for helping with the PS<br>
+ in pdf_main.ps<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 10:52:19 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=00e7143ce97a3d983a223c7d69f74f995d8e267d">00e7143ce97a3d983a223c7d69f74f995d8e267d</a>
+<blockquote>
+<p>
+ Pass memory to clist_make_accum_device()<br>
+<br>
+ Change function args to propagate the memory type of the graphics<br>
+ state to clist_make_accum_device to create device with it.<br>
+<br>
+ Also, make sure the dev-&gt;bandlist_memory (used for freeing 'data') is<br>
+ allocated in the mem-&gt;non_gc_memory instead of the parent device's<br>
+ (fixes crash in gpdl/pcl that was introduced).<br>
+<br>
+ That will mean pdfi and gs/pdfi get non-gc, and gs gets gc.<br>
+<br>
+ There was a bug in gs/pdfi where the clist-pattern device was in gc<br>
+ memory and it was getting freed when pdfi was still using it.<br>
+<br>
+ This should fix a segfault in: tests_private/comparefiles/Bug688396.pdf<br>
+<br>
+base/gxclist.c<br>
+base/gxclist.h<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-01 17:16:41 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=60d740278fc7f7b719482ae0dd4a59743025444d">60d740278fc7f7b719482ae0dd4a59743025444d</a>
+<blockquote>
+<p>
+ toolbin/gsapi.py: fixed stray ';' character.<br>
+<br>
+toolbin/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-01 14:00:17 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=07047636c74555d22c87fd7f05535b57e681a35d">07047636c74555d22c87fd7f05535b57e681a35d</a>
+<blockquote>
+<p>
+ toolbin/gsapi.py: added example of how to build .so and run.<br>
+<br>
+toolbin/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-01 13:59:56 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9900ecb043f3c138160f7d78d32af9967ea09b64">9900ecb043f3c138160f7d78d32af9967ea09b64</a>
+<blockquote>
+<p>
+ devices/vector/gdevtxtw.c: fixed build if TRACE_TXTWRITE defined.<br>
+<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-30 15:38:24 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f3c50e50d6ffd9b4fd98f0215e78d7659bf0bdc3">f3c50e50d6ffd9b4fd98f0215e78d7659bf0bdc3</a>
+<blockquote>
+<p>
+ Whitespace fixes<br>
+<br>
+doc/API.htm<br>
+psi/dw32c.def<br>
+psi/dw64c.def<br>
+psi/dwmain32.def<br>
+psi/dwmain64.def<br>
+psi/dwsetup.def<br>
+psi/dwuninst.def<br>
+psi/gsdll32.def<br>
+psi/gsdll32metro.def<br>
+psi/gsdll64.def<br>
+psi/gsdll64metro.def<br>
+psi/gsdllARM32metro.def<br>
+psi/gsos2.def<br>
+toolbin/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-30 13:58:11 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a1cf59357b6945fdac87afa76e2afd56bb3c1206">a1cf59357b6945fdac87afa76e2afd56bb3c1206</a>
+<blockquote>
+<p>
+ Slight tweak to the FAPI API<br>
+<br>
+ The previous Font API update had a slight mistake: for non-CID fonts, we'd pass<br>
+ GS_NO_GLYPH in place of the actually CID/GID into the &quot;fapi_set_cache&quot; call<br>
+ back.<br>
+<br>
+ That worked fine because, for Postscript (and currrent PDF) non-CID fonts use<br>
+ the glyph name, not a character code, and the other interpreters do not<br>
+ need a character for that callback.<br>
+<br>
+ We'll now pass the glyph index for non-CID fonts, and the<br>
+ glyph index + GS_MIN_CID_GLYPH (as is conventional for gs) - and that allows<br>
+ the fapi_set_cache call back to differentiate between CID and non-CID fonts.<br>
+<br>
+ For the new PDF interpreter (pdfi) we actually do need the character code, to<br>
+ correctly handle Truetype fonts. So fixing the graphics lib and associated code<br>
+ on master, so the pdfi branch can also work.<br>
+<br>
+base/gxfapi.c<br>
+psi/zfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-30 09:27:41 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=71d0b343a3f20d298b9abbe6261bcb01ecb48dcb">71d0b343a3f20d298b9abbe6261bcb01ecb48dcb</a>
+<blockquote>
+<p>
+ Improve eps2write<br>
+<br>
+ Bug #702521 &quot;eps2write hygiene enhancements&quot;<br>
+<br>
+ If processing a multi-page input file, throw an error on the second<br>
+ page and write a message explaining the problem.<br>
+<br>
+ Encapsulate the 'global configuration' switches which affect the prolog<br>
+ processing, and are written from the ps2write device, in a dictionary<br>
+ because EPS files should not affect the current dictionary. Read those<br>
+ parameters back from the dictionary when establishing the EPS file's<br>
+ own dictionary, ensuring that a dictionary is actually present.<br>
+<br>
+ Use the global configuration to determine whether to install a custom<br>
+ error handler. If its an EPS file, then don't.<br>
+<br>
+devices/vector/gdevpdf.c<br>
+devices/vector/gdevpdfu.c<br>
+devices/vector/opdfread.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-29 12:04:05 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d286e365c298b30fc8f0d74979779c18cf4d28f5">d286e365c298b30fc8f0d74979779c18cf4d28f5</a>
+<blockquote>
+<p>
+ A few more changes to the API.htm docs.<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-29 10:51:57 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=50a60d8421f3e64828790ec4588727fdc41c4d58">50a60d8421f3e64828790ec4588727fdc41c4d58</a>
+<blockquote>
+<p>
+ Fix minor issues in API.htm<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-29 13:15:35 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=95e5e879c3a3fea42a97e942b53a6914ed7ccfc2">95e5e879c3a3fea42a97e942b53a6914ed7ccfc2</a>
+<blockquote>
+<p>
+ int_gstate_alloc() error handling<br>
+<br>
+ If we fail to allocate even the graphics libaray graphics state, bail out<br>
+ immediately.<br>
+<br>
+psi/zgstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-23 09:22:03 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ea7818b8bb62b1df4f81e4dc752ccda54cc3d59c">ea7818b8bb62b1df4f81e4dc752ccda54cc3d59c</a>
+<blockquote>
+<p>
+ UMR fix: parameters for overprint compositor<br>
+<br>
+ Discovered while investigating (red herring) indeterminacy problems with<br>
+ eci_altona-test-suite-v2_technical2_x4.pdf<br>
+<br>
+ Reported by both valgrind and MSAN.<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-26 20:05:36 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=71962c6ed1e0bdf41e604a8014b93889f9d07ee5">71962c6ed1e0bdf41e604a8014b93889f9d07ee5</a>
+<blockquote>
+<p>
+ Squash warnings seen in Windows 64 bit build.<br>
+<br>
+base/gp_msprn.c<br>
+base/gp_mswin.c<br>
+base/gp_winfs.c<br>
+base/gsalloc.c<br>
+base/gsmemory.c<br>
+base/gxclist.c<br>
+base/gxi12bit.c<br>
+base/gxicolor.c<br>
+devices/gdevcdj.c<br>
+devices/gdevupd.c<br>
+devices/vector/gdevpdtb.c<br>
+ijs/ijs_exec_win.c<br>
+psi/idict.c<br>
+psi/inamedef.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-26 19:11:06 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b68604731130f5493d2ecd5ae627b1bae9624c64">b68604731130f5493d2ecd5ae627b1bae9624c64</a>
+<blockquote>
+<p>
+ Update Makefile for new version of tesseract.<br>
+<br>
+base/tesseract.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-26 19:08:39 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ad2418e6dc8afa7c7278d6687c77791026f98228">ad2418e6dc8afa7c7278d6687c77791026f98228</a>
+<blockquote>
+<p>
+ Fix callouts being allocated/deallocated with the wrong gs_memory_t.<br>
+<br>
+ This didn't matter for gs, but for gpdl, it could cause problems<br>
+ on shutdown.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-02 16:29:32 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=135f2ceaa84fb0a058ba781a451c65b95230e49a">135f2ceaa84fb0a058ba781a451c65b95230e49a</a>
+<blockquote>
+<p>
+ Have bmpcmp return EXIT_FAILURE if it can not compare<br>
+<br>
+toolbin/bmpcmp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-26 16:15:43 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c022554c30f680c464f1026dc96c2450867da73c">c022554c30f680c464f1026dc96c2450867da73c</a>
+<blockquote>
+<p>
+ Remove displaydev_test project from GhostPDL.sln.<br>
+<br>
+ It should never have been added in git. I added it locally and<br>
+ then it slipped through and got committed by accidently.<br>
+<br>
+windows/GhostPDL.sln<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-26 16:12:33 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=622f4ea8ecc9b677165121d0c093632b9ea00c67">622f4ea8ecc9b677165121d0c093632b9ea00c67</a>
+<blockquote>
+<p>
+ Don't let psapi_new_instance trample libctx-&gt;stdio functions.<br>
+<br>
+ For GS builds this doesn't matter, as psapi_new_instance is called<br>
+ before users of the API get to set their own versions. With GPDL<br>
+ builds, the call to psapi_new_instance is deferred to the point<br>
+ where the API user may have already set their own functions.<br>
+<br>
+psi/psapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-26 16:10:42 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f886898e23483e82866148d6b564faf281490ba">4f886898e23483e82866148d6b564faf281490ba</a>
+<blockquote>
+<p>
+ Avoid using bool in gslibctx.h.<br>
+<br>
+ Ghostscript relies on bool being 'int'. Unfortunately, this header<br>
+ is included from various C++ files that use bool as char. Accordingly<br>
+ the easiest fix is to avoid using bool in these structure definitions.<br>
+<br>
+base/gslibctx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 12:29:01 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=969370ba1dbcf767bae97fda6a3c066b04439c76">969370ba1dbcf767bae97fda6a3c066b04439c76</a>
+<blockquote>
+<p>
+ Fix refcnt's on the colorspace in clist<br>
+<br>
+ In the case where the colorspace was modified (read_set_color_space)<br>
+ there was a memory leak.<br>
+<br>
+ This was because the old code just freed pcs, but if the color had<br>
+ changed, then gs_state.color[0].color_space and [1].color_space are no<br>
+ longer the same. This way we track the references to them separately<br>
+ and free them separately.<br>
+<br>
+ pcs doesn't get its own ref, because it is always the same as<br>
+ gs_gstate.color[0].color_space.<br>
+<br>
+ This fixes memory leaks that only show up in the case that the memory<br>
+ is not garbage-collected, such as in pdfi.<br>
+<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 19:15:28 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=305b9fa7334fc0cd1f45585b8449b0c2c7517559">305b9fa7334fc0cd1f45585b8449b0c2c7517559</a>
+<blockquote>
+<p>
+ Fix leak of non-deregistered callback handlers on shutdown.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 17:08:23 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=59bd5d853cec55497486ad4fb2f253a92e4da3cc">59bd5d853cec55497486ad4fb2f253a92e4da3cc</a>
+<blockquote>
+<p>
+ Fix typos in GPDL.htm.<br>
+<br>
+doc/GPDL.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 16:39:01 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1615ace33ebb93d8c5faae8a440ab96f06f5f0fe">1615ace33ebb93d8c5faae8a440ab96f06f5f0fe</a>
+<blockquote>
+<p>
+ Add documentation for GPDL.<br>
+<br>
+doc/GPDL.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 15:13:47 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=35f6a9d9e2838069b5ba250cf26d016bc5ad3635">35f6a9d9e2838069b5ba250cf26d016bc5ad3635</a>
+<blockquote>
+<p>
+ GPDL whitespace fixes.<br>
+<br>
+pcl/pl/pjparsei.c<br>
+pcl/pxl/pxtop.c<br>
+xps/xpstop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 15:12:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a9bd94535682bd75bbaa18da42129e49046f3838">a9bd94535682bd75bbaa18da42129e49046f3838</a>
+<blockquote>
+<p>
+ Remove unused remnants from gpdl/pngtop.c<br>
+<br>
+gpdl/pngtop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 15:12:26 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f5b28fa033b4837f3cc28943f5c022bf48ca39d4">f5b28fa033b4837f3cc28943f5c022bf48ca39d4</a>
+<blockquote>
+<p>
+ GPDL: Remove &quot;min_input_size&quot; from pl_interp_characteristics_t<br>
+<br>
+ Never used.<br>
+<br>
+gpdl/jbig2top.c<br>
+gpdl/jp2ktop.c<br>
+gpdl/jpgtop.c<br>
+gpdl/pngtop.c<br>
+gpdl/psitop.c<br>
+gpdl/pwgtop.c<br>
+gpdl/tifftop.c<br>
+pcl/pcl/pctop.c<br>
+pcl/pl/pjparsei.c<br>
+pcl/pl/pltop.h<br>
+pcl/pxl/pxtop.c<br>
+xps/xpstop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-23 10:56:22 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ae5bcb6df4b9aa4337a93d5ce8c8152ea4494941">ae5bcb6df4b9aa4337a93d5ce8c8152ea4494941</a>
+<blockquote>
+<p>
+ Simple test app for driving the display device.<br>
+<br>
+toolbin/displaydev_test.c<br>
+toolbin/displaydev_test.vcxproj<br>
+toolbin/displaydev_test.vcxproj.filters<br>
+windows/GhostPDL.sln<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-16 14:31:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eed3bad23510e59278bdaa5f7d0ab01fc1a1c21b">eed3bad23510e59278bdaa5f7d0ab01fc1a1c21b</a>
+<blockquote>
+<p>
+ Display device revamp.<br>
+<br>
+ Move display device over to being based upon a &quot;clist_mutatable&quot;<br>
+ device. Existing claimants won't see any difference.<br>
+<br>
+ New claimants can provide additional callbacks so they can drive<br>
+ it in 'rectangle request' mode.<br>
+<br>
+devices/gdevdsp.c<br>
+devices/gdevdsp.h<br>
+devices/gdevdsp2.h<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-12 13:00:01 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=04e937862eaa7e66bb9a87109874112cd354bf6f">04e937862eaa7e66bb9a87109874112cd354bf6f</a>
+<blockquote>
+<p>
+ Remove clist &quot;is_printer&quot; field.<br>
+<br>
+ Currently, the clist has an &quot;is_printer&quot; field, which is used to<br>
+ tell it how to forward dev_spec_op calls. This seems evil to me;<br>
+ a base class should not really need to know what class is being<br>
+ derived from it to know how to behave.<br>
+<br>
+ Instead, introduce a function pointer that says where<br>
+ dev_spec_ops should be forwarded to.<br>
+<br>
+base/gdevprn.c<br>
+base/gxclist.c<br>
+base/gxclist.h<br>
+base/gxclrect.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-11 12:47:58 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f697ed393a3f0cfffbf82b1f679cf6667b06611c">f697ed393a3f0cfffbf82b1f679cf6667b06611c</a>
+<blockquote>
+<p>
+ Refactor 'clist mutatable devices' from prn ones.<br>
+<br>
+ Devices that have to mutate to be clist ones need to be setup<br>
+ in a particular way. After the standard gx_device header, they<br>
+ are padded out to a large enough size that the clist header<br>
+ fields can fit in. Then the device specific fields follow.<br>
+<br>
+ gdev_prn devices are the standard example of this. In order<br>
+ to more easily allow other devices to work in the same way,<br>
+ we refactor the padding/clist specific fields out into new<br>
+ macros.<br>
+<br>
+base/gdevprn.c<br>
+base/gdevprn.h<br>
+base/gxclist.c<br>
+base/gxclist.h<br>
+devices/gdevbit.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-11 12:04:03 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aae141b7849700a3b99a9222e09ed6ebaff5c61b">aae141b7849700a3b99a9222e09ed6ebaff5c61b</a>
+<blockquote>
+<p>
+ Refactor gdev_space_params slightly.<br>
+<br>
+ The gdev_space_params structure is also known as gdev_prn_space_params,<br>
+ which is slightly misleading as there is nothing prn specific about<br>
+ it.<br>
+<br>
+ Rename all uses of gdev_prn_space_params within the code to be<br>
+ gdev_space_params. Leave gdev_prn_space_params defined as a typedef<br>
+ so that any customer code will not be affected.<br>
+<br>
+ Rename compare_gdev_prn_space_params to be gdev_space_params_cmp<br>
+ to better reflect its non-prn-specific nature. Make it non-static<br>
+ and move it to gsdevice.c.<br>
+<br>
+base/gdevprn.c<br>
+base/gdevprn.h<br>
+base/gsdevice.c<br>
+base/gxdevcli.h<br>
+cups/gdevcups.c<br>
+devices/gdevcdj.c<br>
+devices/gdevijs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-22 10:06:58 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8f40f4b1aca7a7f75ecf83469892478311ca21e1">8f40f4b1aca7a7f75ecf83469892478311ca21e1</a>
+<blockquote>
+<p>
+ Update Planar device to allow for easy &quot;interleaved&quot; operation.<br>
+<br>
+base/gdevmem.c<br>
+base/gdevmpla.c<br>
+base/gdevmpla.h<br>
+base/gxdevmem.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-19 19:04:53 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=22f5f898d49443df82c13bd683fbff61005485c2">22f5f898d49443df82c13bd683fbff61005485c2</a>
+<blockquote>
+<p>
+ Improve get_bits_rectangle for planar case.<br>
+<br>
+ The implementation of get_bits_rectangle to read planar data from<br>
+ a planar device, only implements GB_RETURN_POINTER. If this isn't<br>
+ in the request (i.e. the caller uses GB_RETURN_COPY to get a copy<br>
+ of the data in its own buffers), then it cannot cope.<br>
+<br>
+ Here we extend the routine to try to use a GB_RETURN_POINTER<br>
+ request internally, and to copy the returned data into the<br>
+ callers buffers.<br>
+<br>
+ Callers are of course already free to do this operation themselves,<br>
+ but this avoids the needless repetition of the code in every<br>
+ caller.<br>
+<br>
+base/gdevmpla.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-04 19:27:15 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4438e3e5bc4dfc9e46fc86d86d912171ec582a4e">4438e3e5bc4dfc9e46fc86d86d912171ec582a4e</a>
+<blockquote>
+<p>
+ Rework display device &quot;DisplayHandle&quot; passing.<br>
+<br>
+ Add gsapi_{,de}register_callout API. This allows integrators<br>
+ to register handlers for &quot;callouts&quot; from gs devices.<br>
+<br>
+ The first example of such a callout is the display device.<br>
+ Previously, this has relied on the gsapi_set_display_callback<br>
+ API to pass a pointer to a structure into the core, from where<br>
+ it was hackily poked into the display device structure.<br>
+<br>
+ Instead, we now have the display device &quot;callout&quot; to registered<br>
+ handlers to get the structure and the handle to use.<br>
+<br>
+ The legacy API is maintained by the API level implementing<br>
+ a handler to return the display callback in response to the<br>
+ devices callout.<br>
+<br>
+ The code to do the 'poking' of the display device has therefore<br>
+ been removed, and replaced by code that checks to see if an<br>
+ opened device needs reopening after init, if so, opens/closes it.<br>
+<br>
+base/gsdevice.c<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+base/gxdevcli.h<br>
+base/gxdevsop.h<br>
+devices/gdevdsp.c<br>
+devices/gdevdsp.h<br>
+devices/gdevdsp2.h<br>
+doc/API.htm<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+psi/gsdll2.def<br>
+psi/gsdll32.def<br>
+psi/gsdll32metro.def<br>
+psi/gsdll64.def<br>
+psi/gsdll64metro.def<br>
+psi/gsdllARM32metro.def<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+psi/idisp.c<br>
+psi/idisp.h<br>
+psi/imain.c<br>
+psi/int.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-22 17:04:02 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7e427246abb151cde9154783775acfaa776b502e">7e427246abb151cde9154783775acfaa776b502e</a>
+<blockquote>
+<p>
+ Simple Spot color test file.<br>
+<br>
+examples/spots.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-19 15:05:34 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=63d4ce589086609178160857452dbe3ca6ec0361">63d4ce589086609178160857452dbe3ca6ec0361</a>
+<blockquote>
+<p>
+ Tweak mem device; use NULL rather than 0.<br>
+<br>
+base/gdevmem.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-20 19:08:20 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5123260e329a44db83edf4b1378cb7101632f7eb">5123260e329a44db83edf4b1378cb7101632f7eb</a>
+<blockquote>
+<p>
+ Fix Bug 701852. Problems with the plane_extract device.<br>
+<br>
+ First, the plane_begin_typed_image function used the gs_gstate_copy_temp,<br>
+ but since this was allocated as a st_gs_gstate, and the reference counts<br>
+ were not handled (as the comment describes), freeing that object would<br>
+ decrement the ref_counts, causing premature free of objects.<br>
+<br>
+ Remove this dangerous function.<br>
+<br>
+ Change to use gs_gstate_copy so we have a proper gs_gstate structure.<br>
+<br>
+ Using gs_gstate_copy from a clist playback gstate requires that we have<br>
+ client colors and device colors in the color[0] and color[1] elements.<br>
+ Allocate, and initialize these, then free upon exit from clist_playback.<br>
+<br>
+ Also, the mem device underlying the plane_extract device needs to be<br>
+ retained so that it is not prematurely freed.<br>
+<br>
+base/gdevplnx.c<br>
+base/gsgstate.c<br>
+base/gxclrast.c<br>
+base/gxgstate.h<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-24 15:57:18 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2d69b876807bb66889e7d89ad39649aded72901e">2d69b876807bb66889e7d89ad39649aded72901e</a>
+<blockquote>
+<p>
+ Tweak gpdl parameter handling.<br>
+<br>
+ Reorder some bits (to make checking against gs easier).<br>
+<br>
+ Add handling for --help (same as -h).<br>
+<br>
+ Add handling for -v. List languages supported in version<br>
+ and usage output.<br>
+<br>
+ Add handling for -q. Rely on the fact that -q is the same as -dQUIET.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-24 13:45:30 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8433ecd5c9bee10a767293c886644fc91f6d7d4d">8433ecd5c9bee10a767293c886644fc91f6d7d4d</a>
+<blockquote>
+<p>
+ Fix gs command line parsing to handle --unknown<br>
+<br>
+ Previously &quot;--unknown&quot; would have been treated like &quot;--&quot;.<br>
+<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-23 16:34:14 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a50c9e8d1819c5273a5f6d46137dc527382fabb1">a50c9e8d1819c5273a5f6d46137dc527382fabb1</a>
+<blockquote>
+<p>
+ Typo: ps2weite -&gt; ps2write<br>
+<br>
+doc/VectorDevices.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-23 01:36:02 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ea495beece2c461d6561e3d5780d40e77603abc9">ea495beece2c461d6561e3d5780d40e77603abc9</a>
+<blockquote>
+<p>
+ jbig2dec: Free result object upon error allocating referred to segments.<br>
+<br>
+jbig2dec/jbig2_segment.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-23 01:27:25 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e0c1b3c8162898eaa46640cae98be34642704e3c">e0c1b3c8162898eaa46640cae98be34642704e3c</a>
+<blockquote>
+<p>
+ jbig2dec: Fix memory leak caused by failing to allocate arithmetic coding context.<br>
+<br>
+jbig2dec/jbig2_text.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-18 22:02:27 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=554b67a6f3ba5e6c78b35f94ab3f57e96b1a3dee">554b67a6f3ba5e6c78b35f94ab3f57e96b1a3dee</a>
+<blockquote>
+<p>
+ Bug 702505. Annotations with BlendMode (/BM) failed as PDF is opened.<br>
+<br>
+ The check for transparency in the page would fail with 'typecheck' because<br>
+ the operand stack was not properly cleaned once the /BM was detected.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-19 07:55:05 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c287d823671769a45c3b0c4a7f16a10fc5e7cb5a">c287d823671769a45c3b0c4a7f16a10fc5e7cb5a</a>
+<blockquote>
+<p>
+ Coverity 359871, 359872: un-init variable and conditional always true<br>
+<br>
+ A return code could remain unset in an otherwise successful completion of the<br>
+ function.<br>
+<br>
+ The new FAPI interface switch from using a signed value of -1 to the &quot;standard&quot;<br>
+ special value of GS_NO_CHAR, and I missed a case of that - since GS_NO_CHAR is<br>
+ positive, the existing test of &gt;= 0 was flagged as always true.<br>
+<br>
+psi/zfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-18 19:34:33 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=57885b1ab496d12d4b6e7ee6a98144e5b040afa1">57885b1ab496d12d4b6e7ee6a98144e5b040afa1</a>
+<blockquote>
+<p>
+ Allow the First/LastPage device page count to be reset<br>
+<br>
+ If we get a DisablePageHandler parameter setting to &quot;false&quot; (i.e. enabling the<br>
+ filtering) then start counting pages from there.<br>
+<br>
+ This allows more intuitive control over extracting specific pages from multiple<br>
+ input files.<br>
+<br>
+base/gdevflp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-18 19:26:57 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=99d5046ebd2998eb550a66677142186b00071b73">99d5046ebd2998eb550a66677142186b00071b73</a>
+<blockquote>
+<p>
+ Improve PageList device param handling<br>
+<br>
+ The error handing when reading the PageList parameter did not match the rest of<br>
+ the code in gx_default_put_params() - record the error, but carry on.<br>
+<br>
+ Secondly, the original implementation never accounted for the possibility of<br>
+ &quot;unsetting&quot; the PageList. This is possible by sending an empty string.<br>
+<br>
+base/gsdparam.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-16 19:01:25 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e21dc926e2a2214ab8ae830b984057994d139a1c">e21dc926e2a2214ab8ae830b984057994d139a1c</a>
+<blockquote>
+<p>
+ toolbin/gsapi.py: python version of psi/iapi.h, using ctypes.<br>
+<br>
+toolbin/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-25 12:50:32 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=74d47eada1e07862c3af7bbb214edd6cf94e0164">74d47eada1e07862c3af7bbb214edd6cf94e0164</a>
+<blockquote>
+<p>
+ In clusterpush, exclude sodebugobj and /build.<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 11:41:30 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e29a4c0affe3e7b66ff19d70e0d2abbc1e7fdf21">e29a4c0affe3e7b66ff19d70e0d2abbc1e7fdf21</a>
+<blockquote>
+<p>
+ Added experimental swig wrapper for gsapi.<br>
+<br>
+toolbin/gsapiwrap.py<br>
+toolbin/jlib.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-21 18:16:28 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=31157290172feea1817d6e69c5064d025a9ab45c">31157290172feea1817d6e69c5064d025a9ab45c</a>
+<blockquote>
+<p>
+ Changed gsapi_set_default_device_list() to take const char* arg, not char*.<br>
+<br>
+ This allows SWIG to work, and also tightens up the API.<br>
+<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-21 14:48:12 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9b953e588fb74a73b997d11412a2878f4cdfcdfb">9b953e588fb74a73b997d11412a2878f4cdfcdfb</a>
+<blockquote>
+<p>
+ Improve test for error in s_stdout_write_process().<br>
+<br>
+ Detect error case where outwrite() incorrectly returns &gt; count, so we can avoid<br>
+ incrementing pr-&gt;ptr beyond bounds of array.<br>
+<br>
+psi/ziodevsc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-09 19:17:55 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fcd9967f93151c49cefe437f6f0bdb1f047d68cc">fcd9967f93151c49cefe437f6f0bdb1f047d68cc</a>
+<blockquote>
+<p>
+ Avoid leak in pcl_process() by calling pcl_complete_raster() if returning error.<br>
+<br>
+ Fixes:<br>
+<br>
+ MEMENTO_FAILAT=18536 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ../tests_private/pcl/pcl5cfts/fts.2180<br>
+<br>
+ pcl/pcl/pcparse.c<br>
+<br>
+pcl/pcl/pcparse.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-04 16:14:20 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0a4f6d6cb3efda8f0b334c0b04457362b00dac1b">0a4f6d6cb3efda8f0b334c0b04457362b00dac1b</a>
+<blockquote>
+<p>
+ Revisions to FAPI (error handling etc).<br>
+<br>
+ A lot of the FAPI methods made no account for errors (i.e. a call to return an<br>
+ unsigned 16 bit value would return an unsigned short int). In various places<br>
+ that meant we ended up using unlikely (in practice, impossible, yet still<br>
+ &quot;valid&quot;) values to indicate an error condition.<br>
+<br>
+ This commit changes those calls to have a conventional Ghostscript &quot;int&quot;<br>
+ return value and (mostly) take pointer to the storage into which they should<br>
+ write their value. We can now return meaninful error codes.<br>
+<br>
+ Secondly, in several places, the FAPI methods and code used integers to store<br>
+ character codes, cids, gids etc. This is less than ideal because we potentially<br>
+ have to handle 4 byte codes (especially for gids), and we also use some<br>
+ special 64 bit values (when available) for specific meanings. There were<br>
+ several workarounds for that, in various places.<br>
+<br>
+ This commit also changes the FAPI API and code to the gs_glyph type for all<br>
+ such values, removing the need for those workarounds<br>
+<br>
+base/fapi_ft.c<br>
+base/fapibstm.c<br>
+base/fapiufst.c<br>
+base/gxfapi.c<br>
+base/gxfapi.h<br>
+base/write_t1.c<br>
+base/write_t2.c<br>
+pcl/pl/plfapi.c<br>
+psi/zfapi.c<br>
+xps/xpsfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-28 11:04:24 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8384e88e02cefa3de112546838a752d7f0a7a5c1">8384e88e02cefa3de112546838a752d7f0a7a5c1</a>
+<blockquote>
+<p>
+ Make gs_char and gs_glyph explicitly 64 bit types<br>
+<br>
+base/gsccode.h<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-16 16:50:38 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0339cbecea80d8a835b316b56d1c75a6fb850e52">0339cbecea80d8a835b316b56d1c75a6fb850e52</a>
+<blockquote>
+<p>
+ oss-fuzz 23440: check string lengths for PDF decryption<br>
+<br>
+ to avoid Use-of-uninitialized-value problems.<br>
+<br>
+psi/zpdf_r6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-11 11:54:32 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=889df15d7c69e1fc90c6491f574352cacf9bc065">889df15d7c69e1fc90c6491f574352cacf9bc065</a>
+<blockquote>
+<p>
+ oss-fuzz 22182: validate glyph offset/length values<br>
+<br>
+ Check if the glyph offset and offset + length are larger than the size of the<br>
+ font stream before we can use it.<br>
+<br>
+psi/zfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-11 11:53:13 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e61000344e40930aa229be5aa5cb9d31958bcb6d">e61000344e40930aa229be5aa5cb9d31958bcb6d</a>
+<blockquote>
+<p>
+ Truetype: Tweak a conditional for signed/unsigned compare<br>
+<br>
+base/gstype42.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-16 14:14:33 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0e50ac9dfcff795ec69cb646eea151bd57f0dd1c">0e50ac9dfcff795ec69cb646eea151bd57f0dd1c</a>
+<blockquote>
+<p>
+ Fix letter `te` in in Nimbus Sans Bold(Italic)<br>
+<br>
+ Update from URW++ (2020/05/26).<br>
+<br>
+ See:<br>
+ https://github.com/ArtifexSoftware/urw-base35-fonts/issues/28<br>
+ https://bugs.launchpad.net/ubuntu/+source/fonts-urw-base35/+bug/1871377<br>
+<br>
+ The glyph outline was much too wide, as well as the advance width being too<br>
+ large.<br>
+<br>
+ Note: a number of test files show tiny rounding differences - this is normal<br>
+ when these fonts get regenerated.<br>
+<br>
+Resource/Font/NimbusSans-BoldItalic<br>
+Resource/Font/NimbusSans-Italic<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-15 18:37:57 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a189c020b1eb34a043c086b89bbb1caa86cc01f5">a189c020b1eb34a043c086b89bbb1caa86cc01f5</a>
+<blockquote>
+<p>
+ When building on arm64 with gcc, disable libpng's neon optimizations.<br>
+<br>
+ Bug 702486 - Ghostscript 9.52 does not build on arm64<br>
+<br>
+ Ghostscript 9.52 with the libraries which it is including builds<br>
+ perfectly on i386, amd64, s390x, and armhf, but not on ppc64el<br>
+ and arm64. Problem are internal optimizations in the libpng<br>
+ shipped with Ghostscript.<br>
+<br>
+ For ppc64el the problem was already solved after the 9.52<br>
+ release:<br>
+<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1c9bd8e0aa4<br>
+ https://bugs.ghostscript.com/show_bug.cgi?id=702236<br>
+<br>
+ This fix is for arm64 is Based on this and on a similar fix for<br>
+ arm64 on another free software project<br>
+<br>
+ https://github.com/imagemin/optipng-bin/issues/97<br>
+<br>
+ This makes it also build on arm64, but it is not tested whether<br>
+ it still correctly works on arm64 after the fix.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-13 12:11:23 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9984b482e5c41427f69be32752b649d44eccd3cd">9984b482e5c41427f69be32752b649d44eccd3cd</a>
+<blockquote>
+<p>
+ More work on gs_get_colorname_string<br>
+<br>
+ Commit 14c70d4e9 was, unfortunately, insufficient for the new PDF<br>
+ interpreter. The gs_lib_ctx pointer does not give us access back to the<br>
+ interpreter context, only to the *PostScript* interpreter name table.<br>
+<br>
+ So instead we now pass a graphics state pointer to<br>
+ gs_get_colorname_string(). This is only used for halftones currently,<br>
+ and even future use seems likely to be limited to objects like colour<br>
+ spaces, which are of course contained in a graphics state, so this<br>
+ seems relatviely future proof.<br>
+<br>
+ For PostScript the graphics state contains a memory_t pointer which we<br>
+ can use to get to the PostScript name table. For the PDF interpreter<br>
+ we already store some state in the 'client_data' of the graphics state<br>
+ and we will extend that to include a pointer to the interpreter context<br>
+ which will allow us to get the string from its name table.<br>
+<br>
+base/gscspace.h<br>
+base/gsncdummy.c<br>
+base/gxht.h<br>
+devices/vector/gdevpdfg.c<br>
+psi/zht2.c<br>
+psi/zht2.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-12 10:37:00 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=14c70d4e91db4b13273a48004fada094e8f8090d">14c70d4e91db4b13273a48004fada094e8f8090d</a>
+<blockquote>
+<p>
+ Improve usage of 'get_colorname_string'<br>
+<br>
+ This function is supplied to a couple of places, and stored. Its<br>
+ purpose is to retrieve a string for a colour plane, given an 'index'.<br>
+ The index is an entry in the interpreter's name table.<br>
+<br>
+ The implementations of get_colorname_string take a memory_t pointer<br>
+ and then use that to get a pointer to the interpreter, which they need<br>
+ because the interpreter context is where the name table is stored.<br>
+<br>
+ The problem with the existing usage is that we were supplying the<br>
+ device's memory_t pointer. However, if the halftone or colour space had<br>
+ been created by a different interpreter to the device (which can happen<br>
+ if we are running the PDF interpreter inside the PostScript interpreter)<br>
+ then the interpreter context would be incorrect.<br>
+<br>
+ We can solve this easily enough by using the colour space or halftone<br>
+ memory pointer. This is much safer since we can reasonably assume that<br>
+ the interpreter which created the object is the same one which stored<br>
+ the colour name in its name table.<br>
+<br>
+base/gsncdummy.c<br>
+devices/vector/gdevpdfg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-10 10:38:18 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=825d6807a72b68a2faf11fc37f89b1b75967d727">825d6807a72b68a2faf11fc37f89b1b75967d727</a>
+<blockquote>
+<p>
+ Bug 702476: Don't rely on null terminated strings<br>
+<br>
+ gs strings are not necessarily null terminted (especially so when created by the<br>
+ Postscript interpreter). So, when parsing a file name and deciding whether it's<br>
+ a &quot;device&quot; (e.g. &quot;%ram%&quot;) or a device + file name/path, don't rely on the string<br>
+ being null terminate.<br>
+<br>
+base/gsfname.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-08 09:25:57 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0ae681ab1fd3475995418d00da1ccfe374f069cc">0ae681ab1fd3475995418d00da1ccfe374f069cc</a>
+<blockquote>
+<p>
+ oss-fuzz 22752: handle broken loca table.<br>
+<br>
+ Previously, the code did not differentiate between an empty loca table, a<br>
+ missing loca table and a broken loca table.<br>
+<br>
+ We'll now do so and, in particular, with a broken loca table (in this case,<br>
+ one with only 1 entry) we'll initialize the single entry to avoid later code<br>
+ accessing unitialized memory.<br>
+<br>
+base/gstype42.c<br>
+base/gxfont42.h<br>
+psi/zfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-08 14:49:04 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9e85e7a9518aa19964f1f8d30d3175ef8c3b950f">9e85e7a9518aa19964f1f8d30d3175ef8c3b950f</a>
+<blockquote>
+<p>
+ oss-fuzz 21643: Bounds check a pointer before accessing it.<br>
+<br>
+ In this case, immediately after a buffer refill, (as is &quot;normal&quot; for gs stream<br>
+ buffers) the pointers starts one byte *before* the actual buffer, the state on<br>
+ reentry meant we'd drop straight to trying dereference the pointer.<br>
+<br>
+ This just ensures the pointer gets moved on before we try to use it.<br>
+<br>
+base/seexec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-10 10:16:10 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a4edd8320a5076bb52d1be7c061910b3b78718e0">a4edd8320a5076bb52d1be7c061910b3b78718e0</a>
+<blockquote>
+<p>
+ pdfwrite - don't error out on skipped images<br>
+<br>
+ Bug #702471 &quot;eps to pdf OK in 9.50, but failed in 9.51 and 9.52&quot;<br>
+<br>
+ Some encode filters, in this case DCTEncode, can throw an error on exit<br>
+ (premature EOD) if we never write any data to them. This can happen<br>
+ when pdfwrite sets up to write an image to the output file, but we<br>
+ never actually write the image, because it is being 'skipped'.<br>
+<br>
+ Images can be skipped because they are fully clipped out, unfortunately<br>
+ we can't detect this before we execute begin_typed_image or we could<br>
+ avoid a lot of setup.<br>
+<br>
+ Anyway, when we get to end_image, if we skipped the image then don't<br>
+ take any notice of errors when closing the filters used to write the<br>
+ image data to the PDF file.<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-09 15:14:02 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d68f56e25110ba3baf03553c2d1839febc02dbdb">d68f56e25110ba3baf03553c2d1839febc02dbdb</a>
+<blockquote>
+<p>
+ Add docs for missing parts of gsapi.<br>
+<br>
+ Add docs for gsapi_set_param (and update the code to cope with<br>
+ long/int64_t/size_t's in line with the core code).<br>
+<br>
+ Add docs for path control functions.<br>
+<br>
+doc/API.htm<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+pcl/pl/pltop.h<br>
+psi/iapi.h<br>
+psi/psapi.c<br>
+psi/psapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-08 20:36:34 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b9a4616cdf710c79f575adb33b331cb495461d93">b9a4616cdf710c79f575adb33b331cb495461d93</a>
+<blockquote>
+<p>
+ Add documentation for gsapi_set_{stdio,poll}_with_handle.<br>
+<br>
+ Missed from earlier commit.<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-07 09:45:57 -0700
+</strong>
+<br>ray &lt;Ray.Johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=748edd2fd75c684d63486eded71ad20254de6f4c">748edd2fd75c684d63486eded71ad20254de6f4c</a>
+<blockquote>
+<p>
+ Fix Bug 702383 - Segfault due to mis-use of PostScript transparency.<br>
+<br>
+ The fix for Bug 698306 fixed that case, but this case showed that the double<br>
+ calls to .pushpdf14devicefilter still could cause problems. Another patch<br>
+ already resolved calling transparency operations WITHOUT pushing the pdf14<br>
+ device (for Bug 702327).<br>
+<br>
+ Also undefine the PostScript transparency operators to (maybe) prevent<br>
+ misuse if -dALLOWPSTRANSPARENCY is not specified.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+psi/ztrans.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-05 14:51:00 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=560ff82b0bc782465aa4591b2953954d7cf5608c">560ff82b0bc782465aa4591b2953954d7cf5608c</a>
+<blockquote>
+<p>
+ Fix a bounds check in FAPI<br>
+<br>
+ Using less than or equal to should have been less than.<br>
+<br>
+ Found while investigating an oss-fuzz issue.<br>
+<br>
+psi/zfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-04 16:57:01 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7502a26f082e71e05df33dcd1dff66655f088673">7502a26f082e71e05df33dcd1dff66655f088673</a>
+<blockquote>
+<p>
+ Add documentation for OCR devices.<br>
+<br>
+doc/Devices.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-25 13:32:26 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eb492c353084600d94877f7157840d24dd7f9301">eb492c353084600d94877f7157840d24dd7f9301</a>
+<blockquote>
+<p>
+ Update lcms2mt to lcms2-2.10rc2.<br>
+<br>
+lcms2mt/AUTHORS<br>
+lcms2mt/COPYING<br>
+lcms2mt/ChangeLog<br>
+lcms2mt/Lib/MS/lcms2_fast_float_plugin.lib<br>
+lcms2mt/Lib/MS/lcms2_static.lib<br>
+lcms2mt/Lib/MS/lcms2mt_fast_float_plugin.lib<br>
+lcms2mt/Lib/MS/lcms2mt_static.lib<br>
+lcms2mt/Makefile.am<br>
+lcms2mt/Makefile.in<br>
+lcms2mt/Projects/BorlandC_5.5/lcms2mt.rc<br>
+lcms2mt/Projects/BorlandC_5.5/lcmsdll.lk<br>
+lcms2mt/Projects/VC2013/lcms2mt.rc<br>
+lcms2mt/Projects/VC2013/lcms2mt.sln<br>
+lcms2mt/Projects/VC2013/lcms2mt_DLL/lcms2mt_DLL.vcxproj<br>
+lcms2mt/Projects/VC2015/lcms2mt.rc<br>
+lcms2mt/Projects/VC2015/lcms2mt.sln<br>
+lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj<br>
+lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters<br>
+lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj<br>
+lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj.filters<br>
+lcms2mt/Projects/VC2017/lcms2mt.rc<br>
+lcms2mt/Projects/VC2017/lcms2mt.sln<br>
+lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj<br>
+lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters<br>
+lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj<br>
+lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/jpegicc/jpegicc.vcxproj<br>
+lcms2mt/Projects/VC2019/jpegicc/jpegicc.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/lcms2mt.rc<br>
+lcms2mt/Projects/VC2019/lcms2mt.sln<br>
+lcms2mt/Projects/VC2019/lcms2mt_DLL/lcms2mt_DLL.vcxproj<br>
+lcms2mt/Projects/VC2019/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/lcms2mt_static/lcms2mt_static.vcxproj<br>
+lcms2mt/Projects/VC2019/lcms2mt_static/lcms2mt_static.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/linkicc/linkicc.vcxproj<br>
+lcms2mt/Projects/VC2019/linkicc/linkicc.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/psicc/psicc.vcxproj<br>
+lcms2mt/Projects/VC2019/psicc/psicc.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/resource.h<br>
+lcms2mt/Projects/VC2019/testbed/testbed.vcxproj<br>
+lcms2mt/Projects/VC2019/testbed/testbed.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/tiffdiff/tiffdiff.vcxproj<br>
+lcms2mt/Projects/VC2019/tiffdiff/tiffdiff.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/tifficc/tifficc.vcxproj<br>
+lcms2mt/Projects/VC2019/tifficc/tifficc.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/transicc/transicc.vcxproj<br>
+lcms2mt/Projects/VC2019/transicc/transicc.vcxproj.filters<br>
+lcms2mt/Projects/cppcheck/lcms2mt.cppcheck<br>
+lcms2mt/Projects/mac/LittleCMS/LittleCMS.xcodeproj/project.pbxproj<br>
+lcms2mt/README.1ST<br>
+lcms2mt/aclocal.m4<br>
+lcms2mt/config.guess<br>
+lcms2mt/configure<br>
+lcms2mt/configure.ac<br>
+lcms2mt/doc/LittleCMS2.10 API.pdf<br>
+lcms2mt/doc/LittleCMS2.10 Plugin API.pdf<br>
+lcms2mt/doc/LittleCMS2.10 tutorial.pdf<br>
+lcms2mt/doc/LittleCMS2.9 API.pdf<br>
+lcms2mt/doc/LittleCMS2.9 Plugin API.pdf<br>
+lcms2mt/doc/LittleCMS2.9 tutorial.pdf<br>
+lcms2mt/doc/WhyThisFork.txt<br>
+lcms2mt/include/Makefile.in<br>
+lcms2mt/include/lcms2mt.h<br>
+lcms2mt/include/lcms2mt_plugin.h<br>
+lcms2mt/plugins/README.1ST<br>
+lcms2mt/plugins/fast_float/COPYING.GPL3<br>
+lcms2mt/plugins/fast_float/Makefile<br>
+lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj<br>
+lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj.filters<br>
+lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj.user<br>
+lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj<br>
+lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj.filters<br>
+lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj.user<br>
+lcms2mt/plugins/fast_float/doc/LittleCMS fast float extensions 1.0.pdf<br>
+lcms2mt/plugins/fast_float/include/Makefile.am<br>
+lcms2mt/plugins/fast_float/include/lcms2mt_fast_float.h<br>
+lcms2mt/plugins/fast_float/src/Makefile.am<br>
+lcms2mt/plugins/fast_float/src/fast_16_tethra.c<br>
+lcms2mt/plugins/fast_float/src/fast_8_curves.c<br>
+lcms2mt/plugins/fast_float/src/fast_8_matsh.c<br>
+lcms2mt/plugins/fast_float/src/fast_8_tethra.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_15bits.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_15mats.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_cmyk.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_curves.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_internal.h<br>
+lcms2mt/plugins/fast_float/src/fast_float_matsh.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_separate.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_sup.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_tethra.c<br>
+lcms2mt/plugins/fast_float/testbed/Makefile.am<br>
+lcms2mt/plugins/fast_float/testbed/fast_float_testbed.c<br>
+lcms2mt/plugins/fast_float/testbed/test0.icc<br>
+lcms2mt/plugins/fast_float/testbed/test1.icc<br>
+lcms2mt/plugins/fast_float/testbed/test2.icc<br>
+lcms2mt/plugins/fast_float/testbed/test3.icc<br>
+lcms2mt/plugins/fast_float/testbed/test5.icc<br>
+lcms2mt/src/Makefile.am<br>
+lcms2mt/src/Makefile.in<br>
+lcms2mt/src/cmsalpha.c<br>
+lcms2mt/src/cmscam02.c<br>
+lcms2mt/src/cmscgats.c<br>
+lcms2mt/src/cmscnvrt.c<br>
+lcms2mt/src/cmserr.c<br>
+lcms2mt/src/cmsgamma.c<br>
+lcms2mt/src/cmsgmt.c<br>
+lcms2mt/src/cmshalf.c<br>
+lcms2mt/src/cmsintrp.c<br>
+lcms2mt/src/cmsio0.c<br>
+lcms2mt/src/cmsio1.c<br>
+lcms2mt/src/cmslut.c<br>
+lcms2mt/src/cmsmd5.c<br>
+lcms2mt/src/cmsmtrx.c<br>
+lcms2mt/src/cmsnamed.c<br>
+lcms2mt/src/cmsopt.c<br>
+lcms2mt/src/cmspack.c<br>
+lcms2mt/src/cmspcs.c<br>
+lcms2mt/src/cmsplugin.c<br>
+lcms2mt/src/cmsps2.c<br>
+lcms2mt/src/cmssamp.c<br>
+lcms2mt/src/cmssm.c<br>
+lcms2mt/src/cmstypes.c<br>
+lcms2mt/src/cmsvirt.c<br>
+lcms2mt/src/cmswtpnt.c<br>
+lcms2mt/src/cmsxform.c<br>
+lcms2mt/src/lcms2_internal.h<br>
+lcms2mt/src/lcms2mt.def<br>
+lcms2mt/testbed/Makefile.am<br>
+lcms2mt/testbed/Makefile.in<br>
+lcms2mt/testbed/new.icc<br>
+lcms2mt/testbed/testcms2.c<br>
+lcms2mt/testbed/testcms2.h<br>
+lcms2mt/testbed/testplugin.c<br>
+lcms2mt/testbed/zoo_icc.c<br>
+lcms2mt/utils/common/utils.h<br>
+lcms2mt/utils/common/vprf.c<br>
+lcms2mt/utils/jpgicc/Makefile.am<br>
+lcms2mt/utils/jpgicc/Makefile.in<br>
+lcms2mt/utils/jpgicc/jpgicc.c<br>
+lcms2mt/utils/linkicc/Makefile.am<br>
+lcms2mt/utils/linkicc/Makefile.in<br>
+lcms2mt/utils/linkicc/linkicc.c<br>
+lcms2mt/utils/psicc/Makefile.am<br>
+lcms2mt/utils/psicc/Makefile.in<br>
+lcms2mt/utils/psicc/psicc.c<br>
+lcms2mt/utils/samples/Makefile.am<br>
+lcms2mt/utils/tificc/Makefile.am<br>
+lcms2mt/utils/tificc/Makefile.in<br>
+lcms2mt/utils/tificc/tifdiff.c<br>
+lcms2mt/utils/tificc/tificc.c<br>
+lcms2mt/utils/transicc/Makefile.am<br>
+lcms2mt/utils/transicc/Makefile.in<br>
+lcms2mt/utils/transicc/transicc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-03 19:41:31 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a83716a1657df0a63aafa6582f47a93315aa61a6">a83716a1657df0a63aafa6582f47a93315aa61a6</a>
+<blockquote>
+<p>
+ Add skew detection/correction to downscaler.<br>
+<br>
+base/cal.mak<br>
+base/gxdownscale.c<br>
+base/gxdownscale.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-04 14:21:24 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7867660a69bcc8624f0524ab56d86001d79e5b8d">7867660a69bcc8624f0524ab56d86001d79e5b8d</a>
+<blockquote>
+<p>
+ Update doc/gdevds32.c to track updated downscaler API.<br>
+<br>
+doc/gdevds32.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-04 13:20:40 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1db215120db50db418b199ff364e17feba681f14">1db215120db50db418b199ff364e17feba681f14</a>
+<blockquote>
+<p>
+ Fix a couple of benign compiler warnings<br>
+<br>
+ Firstly a missing include file.<br>
+<br>
+ Secondly we were using a utility function from pdfwrite, and obviously<br>
+ not including the .h file. We really shouldn't be hauling in bits of<br>
+ pdfwrite, so instead duplicate the (miniscule) bit of functionality we<br>
+ want.<br>
+<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-25 17:36:24 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=278f9a53ed507f9109380ee4210fb860b35b1811">278f9a53ed507f9109380ee4210fb860b35b1811</a>
+<blockquote>
+<p>
+ txtwrite - better processing of text in type 3 fonts<br>
+<br>
+ Previously we were not able to accumulate the widths of text in a type<br>
+ 3 font. This code leverages (again) off the code in pdfwrite to exit<br>
+ to the interpreter, run the type 3 CharProc, and pick up the glyph<br>
+ advance width in setcachedevice.<br>
+<br>
+ This gives us better output for type 3 fonts, as we no longer<br>
+ think that consecutive text is in the same position.<br>
+<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-03 16:54:41 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=feee7e6afd34ff3c1fa0c30ec024be25f1a61c1e">feee7e6afd34ff3c1fa0c30ec024be25f1a61c1e</a>
+<blockquote>
+<p>
+ Rework downscaler initialisation.<br>
+<br>
+ Pass the downscaler parameters into the downscaler init routines,<br>
+ rather than explicit values.<br>
+<br>
+ This reduces the size of the API, and means that future additions<br>
+ to the structure will automatically be passed through.<br>
+<br>
+base/gxdownscale.c<br>
+base/gxdownscale.h<br>
+devices/gdevchameleon.c<br>
+devices/gdevjpeg.c<br>
+devices/gdevocr.c<br>
+devices/gdevpdfimg.c<br>
+devices/gdevpng.c<br>
+devices/gdevpsd.c<br>
+devices/gdevtifs.c<br>
+devices/gdevtifs.h<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-24 14:13:39 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7322ef87546c55b29056c1d96d8bdbb7f3ba53ef">7322ef87546c55b29056c1d96d8bdbb7f3ba53ef</a>
+<blockquote>
+<p>
+ Tesseract based OCR devices.<br>
+<br>
+ pdfocr8/24/32, ocr and hocr devices.<br>
+<br>
+ Use OCRLanguage to set languages to use (&quot;eng&quot; by default).<br>
+<br>
+Makefile.in<br>
+base/endianness.h<br>
+base/gsiorom.c<br>
+base/gxiodev.h<br>
+base/leptonica.mak<br>
+base/lib.mak<br>
+base/msvccmd.mak<br>
+base/ocr.mak<br>
+base/tess_version.h<br>
+base/tesseract.mak<br>
+base/tessocr.cpp<br>
+base/tessocr.h<br>
+base/unix-gcc.mak<br>
+base/winlib.mak<br>
+configure.ac<br>
+devices/devs.mak<br>
+devices/gdevocr.c<br>
+devices/gdevpdfimg.c<br>
+devices/gdevpdfimg.h<br>
+devices/gdevpdfocr.c<br>
+psi/msvc.mak<br>
+windows/ghostscript.vcxproj<br>
+windows/ghostscript.vcxproj.filters<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-03 18:32:56 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ff02973645a9aff2caf1bcd3032f119995e0d63f">ff02973645a9aff2caf1bcd3032f119995e0d63f</a>
+<blockquote>
+<p>
+ Fix coverity 359151.<br>
+<br>
+ Check ds-&gt;dev is non NULL before dereferencing it.<br>
+<br>
+base/gxdownscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-02 19:24:50 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=89f3dba59d801dd7c586d81d996ea8d641e1018a">89f3dba59d801dd7c586d81d996ea8d641e1018a</a>
+<blockquote>
+<p>
+ Add yet another version of nmake to makefile.<br>
+<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-02 19:23:30 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=df31667a82d8320d25c15f9eaf14fbb33a4ba0a1">df31667a82d8320d25c15f9eaf14fbb33a4ba0a1</a>
+<blockquote>
+<p>
+ Bug 702446: Fix CAL halftoning.<br>
+<br>
+ Looks like cal was interpretting halftone X phase in the wrong<br>
+ direction.<br>
+<br>
+base/gximono.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-02 12:09:53 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0006f8715f5f5d83a7823dc9f41c76a1bdf9b0f7">0006f8715f5f5d83a7823dc9f41c76a1bdf9b0f7</a>
+<blockquote>
+<p>
+ Add lcms2mt files into build_bmpcmp.sh<br>
+<br>
+toolbin/build_bmpcmp.sh<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-02 11:59:44 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b9916ac2feec23b6c91e4c5d425dde0a73b1462d">b9916ac2feec23b6c91e4c5d425dde0a73b1462d</a>
+<blockquote>
+<p>
+ Add missing line feeds on error messages in bmpcmp<br>
+<br>
+toolbin/bmpcmp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-01 22:47:36 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e3bbb3b93bcdade889b36641508f25929968089e">e3bbb3b93bcdade889b36641508f25929968089e</a>
+<blockquote>
+<p>
+ Add CIELAB comparison to bmpcmp<br>
+<br>
+ Adding the option -l will perform the difference in CIELAB<br>
+ color space, provided the application was built with a CMM and<br>
+ the source files were tiff files that had embedded ICC profiles.<br>
+<br>
+ It is necessary to use a threshold &gt; 0 and a window &gt; 1.<br>
+<br>
+ The threshold should be interpreted as dE^2 (a Euclidean norm squared<br>
+ term is used as opposed to the L infinity norm used for the other<br>
+ color spaces)<br>
+<br>
+ As a rule of thumb, dE^2 = 9 is barely noticeable in a side by side<br>
+ solid color. Colors in complex images are going to require a larger<br>
+ threshold.<br>
+<br>
+ This adds lcms2mt to the visual studio project. COLOR_MANAGED<br>
+<br>
+toolbin/bmpcmp.c<br>
+toolbin/bmpcmp.vcxproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-29 17:30:45 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bb9959b60a9b3947c091ab867616385ac3fc7794">bb9959b60a9b3947c091ab867616385ac3fc7794</a>
+<blockquote>
+<p>
+ Refactor downscaler.<br>
+<br>
+ Originally the downscaler would just get the bits it wanted from<br>
+ either get_bits or get_bits_rectangle.<br>
+<br>
+ Then we extended the downscaler to integrate ClapTrap, which means<br>
+ it may have to get its scanlines from that. This was done hackily.<br>
+<br>
+ Now, we are pondering integrating scan/skew, which means there will<br>
+ be a third possible source, and they might be used in different<br>
+ combinations.<br>
+<br>
+ To simplify everything we introduce a &quot;gx_downscaler_liner&quot; mechanism<br>
+ which wraps up getting a single line of data, and move to using<br>
+ that everywhere. Adding scan/skew should then plug in using this<br>
+ much more neatly.<br>
+<br>
+base/gxdownscale.c<br>
+base/gxdownscale.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-29 17:22:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ba2fdf5517af3bcd8a613fda84c532307d1e7024">ba2fdf5517af3bcd8a613fda84c532307d1e7024</a>
+<blockquote>
+<p>
+ Fix memory leaks in tiffsep.<br>
+<br>
+ Calling TIFFCleanup doesn't close the underlying tiffio. Call<br>
+ TIFFClose instead.<br>
+<br>
+ Now the tiff io close handler is actually called, be careful<br>
+ not to close the underlying file twice.<br>
+<br>
+ Finally, actually remember to close the comp file.<br>
+<br>
+base/gstiffio.c<br>
+devices/gdevtifs.c<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-29 17:16:00 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=052a91b91d3d339dca3ce69bcb81faee9b8ff647">052a91b91d3d339dca3ce69bcb81faee9b8ff647</a>
+<blockquote>
+<p>
+ Claptrap: Fix us overrunning components in the planar case.<br>
+<br>
+base/claptrap-planar.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-30 19:38:38 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2e4f5bdc708eaceecbce264184bc31f9b5fec107">2e4f5bdc708eaceecbce264184bc31f9b5fec107</a>
+<blockquote>
+<p>
+ Coverity ID 359131 and 359130<br>
+<br>
+ Remove some dead code after the commit which removed the ancient<br>
+ Acrobat 4 &amp; 5 compatibility hacks.<br>
+<br>
+devices/vector/gdevpdfd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-27 11:50:08 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a608d40b2d6d4a062857e23060c243a4b10aac69">a608d40b2d6d4a062857e23060c243a4b10aac69</a>
+<blockquote>
+<p>
+ Hacky fix for Memento leak in pcl_execute_macro().<br>
+<br>
+ Fixes the six remaining leaks after prev commit in:<br>
+ MEMENTO_FAILAT=15796 ./ghostpdl/membin/gpcl6 -sDEVICE=pbmraw -o /dev/null tests_private/pcl/pcl5cfts/fts.2180<br>
+<br>
+pcl/pcl/pcmacros.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-29 16:19:46 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=be333874ffd55024ce640bf8d4347dabff162be1">be333874ffd55024ce640bf8d4347dabff162be1</a>
+<blockquote>
+<p>
+ Improvements to pcl_do_resets().<br>
+<br>
+ From Henry; we now do pcl_reset_permanent on all items if we get an error.<br>
+<br>
+ This fixes all but 6 of the memento leaks in:<br>
+ MEMENTO_FAILAT=15796 ./ghostpdl/membin/gpcl6 -sDEVICE=pbmraw -o /dev/null tests_private/pcl/pcl5cfts/fts.2180<br>
+<br>
+pcl/pcl/pcommand.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-28 13:07:55 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3156b0aa8ac4e9ef440c169799658da249eb41c9">3156b0aa8ac4e9ef440c169799658da249eb41c9</a>
+<blockquote>
+<p>
+ pdfwrite - remove Acrobat 4 &amp; 5 work arounds<br>
+<br>
+ Acrobat 4 had a limit of around =/- 16,320 on real numbers (despite the<br>
+ reference stating it was +/- 32,7670, Acrobat 5 had a limit of 32,767.<br>
+ These are implementation limits, not architectural limits, and since<br>
+ co-ordinates are expressed as real numbers they place limits on the<br>
+ position of objects on the page.<br>
+<br>
+ Its clear from Bug #702436 that the clamping used by pdfwrite is not<br>
+ comprehensive; several paths are emitted that use co-ordinates outside<br>
+ the permitted range.<br>
+<br>
+ Since the implementation is flawed, and the newest of the 2 versions<br>
+ (Acrobat 5) has been obselete for 15 years, it seems pointless to try<br>
+ and improve this clamping. Instead this commit removes it entirely.<br>
+<br>
+ This removes a number of places where we test values and do some<br>
+ multiplication, so there should be a (probably immeasurable) performance<br>
+ gain from this. In addition the accuracy should be (very slightly)<br>
+ improved because there should be less problems with rounding errors.<br>
+<br>
+ This causes a large number of files to demonstrate single pixel shifts<br>
+ of a few glyphs, due to changes in rounding. In general these are very<br>
+ minor progressions, though a few could be seen to be equally minor<br>
+ regressions. Since these mostly (and in the case of regressions,<br>
+ entirely) occur at low resolution I believe this is acceptable.<br>
+<br>
+ One file, Bug694385, when sent to ps2write, exhibits a marked<br>
+ progression. This is because the clamping wasn't limited to the pdfwrite<br>
+ device, even though it was inappropriate to limit the ps2write output<br>
+ this way. A good deal of content is now included, where it was previously<br>
+ elided.<br>
+<br>
+devices/vector/gdevpdfd.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfi.c<br>
+devices/vector/gdevpdfx.h<br>
+devices/vector/gdevpdts.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-27 16:53:33 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f8a0afa4029b33d3174a31fd562a0102644c9c9e">f8a0afa4029b33d3174a31fd562a0102644c9c9e</a>
+<blockquote>
+<p>
+ pdfwrite - fix clamping for Acrobat 4 and 5 limits<br>
+<br>
+ Bug #702436 &quot;With -dCompatibilityLevel=1.4, gs -sDEVICE=pdfwrite corrupts the contents&quot;<br>
+<br>
+ This isn't 'corruption'. Acrobat 4 and 5 have some serious limitations<br>
+ on the maximum value a real number can take. Since co-ordinates are real<br>
+ numbers this limits the area which can be addressed on the media.<br>
+<br>
+ The example file is very large and, using the default resolution of 720<br>
+ dpi, some of the content has co-ordinates outside the region which can<br>
+ be addressed by old versions of Acrobat.<br>
+<br>
+ In practice we can see that many parts of our output no longer limit<br>
+ themselves to these values anyway, so we shjould remove this archaic<br>
+ limitation.<br>
+<br>
+ In the meantime we can work around this specific case by noting that the<br>
+ clip is rectangular, and will be emitted as a 're' operation, so<br>
+ clamping all 4 co-ordinates is inappropriate. We need to clamp the llx<br>
+ and lly co-ordinates, but then its the width and height we need to limit<br>
+ rather than the urx and ury co-ordinates.<br>
+<br>
+devices/vector/gdevpdfd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-26 18:57:30 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b53ad834b8cddfc55e2297e3d34ff834926a25ff">b53ad834b8cddfc55e2297e3d34ff834926a25ff</a>
+<blockquote>
+<p>
+ documentation - update man/ps2pdf.1<br>
+<br>
+ Replace reference to ps2pdf.htm with VectorDevices.htm<br>
+<br>
+man/ps2pdf.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-26 13:04:09 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6667495f56bc670322f607de419fe7e48434d3c6">6667495f56bc670322f607de419fe7e48434d3c6</a>
+<blockquote>
+<p>
+ Fix memento leak in hpgl_process_buffer().<br>
+<br>
+ The fix is to make hpgl_free_stick_fonts() call<br>
+ pl_font_glyph_width_cache_remove_nodes().<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=22007 ./ghostpdl/membin/gpcl6 -sDEVICE=pbmraw -o /dev/null tests_private/pcl/pcl5cfts/fts.1640<br>
+<br>
+ Also fixes many later leaks.<br>
+<br>
+pcl/pcl/pglabel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-25 18:41:24 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1e8dd08e6c9e721c993d28bb36e107f81d16ce0a">1e8dd08e6c9e721c993d28bb36e107f81d16ce0a</a>
+<blockquote>
+<p>
+ Fix leak after error in accum_fill_rectangle()<br>
+<br>
+ Fixes:<br>
+ ./ghostpdl/membin/gpcl6 -sDEVICE=pbmraw -o /dev/null tests_private/pcl/pcl5cfts/fts.1552<br>
+<br>
+base/gxacpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-25 11:59:52 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=776cf430dd1a96a7da33c0d33af9a6dd42bffec0">776cf430dd1a96a7da33c0d33af9a6dd42bffec0</a>
+<blockquote>
+<p>
+ Fix memory leak on error in bitmap_paint() and its callers.<br>
+<br>
+ Previously, bitmap_paint() would free its 'gs_image_enum * pen' arg, but caller<br>
+ image_PaintProc() could also attempt to free this in one error path.<br>
+<br>
+ So have changed bitmap_paint() to only free what it allocates - call<br>
+ gs_image_cleanup() instead of gs_image_cleanup_and_free_enum(); and patched<br>
+ its two callers, mask_PaintProc() and image_PaintProc(), to add calls to<br>
+ gs_free_object(pen).<br>
+<br>
+ Fixes leak in:<br>
+ MEMENTO_FAILAT=15601 ./ghostpdl/membin/gpcl6 -sDEVICE=pbmraw -o /dev/null tests_private/pcl/pcl5cfts/fts.0954<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-25 11:59:19 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=815cbc244257f224eca799413ee64b17b62ffb4a">815cbc244257f224eca799413ee64b17b62ffb4a</a>
+<blockquote>
+<p>
+ Fix error handling in image_render_interpolate_icc().<br>
+<br>
+ Need to return gs_error_VMerror if gs_alloc_bytes() returns NULL.<br>
+<br>
+ Fixes segv in:<br>
+ MEMENTO_FAILAT=15601 ./ghostpdl/membin/gpcl6 -sDEVICE=pbmraw -o /dev/null tests_private/pcl/pcl5cfts/fts.0954<br>
+<br>
+base/gxiscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-22 08:26:34 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3227677f842a1060d29acc53465c6a9c76f7d48b">3227677f842a1060d29acc53465c6a9c76f7d48b</a>
+<blockquote>
+<p>
+ Fix Bug702327: PS transparency operations before PUSH_DEVICE causes problems.<br>
+<br>
+ Add check to make sure PUSH_DEVICE is the first pdf14 compositor action<br>
+ before allowing any other operation for page mode and clist mode.<br>
+<br>
+base/gdevp14.c<br>
+base/gxclist.c<br>
+base/gxclist.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-23 14:16:51 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b4310ff9719fdafb840972649a4eb94a88165e66">b4310ff9719fdafb840972649a4eb94a88165e66</a>
+<blockquote>
+<p>
+ ps2write - ignore (most) text rendering modes with type 3 fonts<br>
+<br>
+ Bug #702233 &quot;ps2 stroked text mitre problem&quot;<br>
+<br>
+ The PDF specification says that Tr (text rendering modes) are not<br>
+ applied to type 3 fonts.<br>
+<br>
+ The PDF interpreter normally caters for this by not converting the<br>
+ glyphs to paths and applying the operation(s) but simply rendering the<br>
+ text.<br>
+<br>
+ However, when the destination is pdfwrite or ps2write, we don't apply<br>
+ the text rendering mode operations, we simply leave it up to the device<br>
+ to deal with. Ordinarily this works well, but ps2write had no provision<br>
+ for the special handling of type 3 fonts, and so was applying the text<br>
+ rendering mode to those fonts too, resulting in incorrect output.<br>
+<br>
+ This commit adds code to the PostScript output of ps2write; this checks<br>
+ the font type and does not apply the text rendering mode if the font<br>
+ type is 3. With one exception; if the text rendering mode is 3 (neither<br>
+ stroke nor fill) then we *do* apply it, because Acrobat does and if we<br>
+ don't apply it then we draw text that Acrobat does not.<br>
+<br>
+devices/vector/opdfread.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-22 11:25:43 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4d3ca982177aff19331b72a226664e281feede2c">4d3ca982177aff19331b72a226664e281feede2c</a>
+<blockquote>
+<p>
+ Fix tiff bmpcmp to organize image data upside right for windows<br>
+<br>
+toolbin/bmpcmp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-22 13:38:23 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e1354dbd1cfc7692b7559a3f4c7f86900e513edc">e1354dbd1cfc7692b7559a3f4c7f86900e513edc</a>
+<blockquote>
+<p>
+ Bug 702431: Don't cast a unsigned long to an unsigned int<br>
+<br>
+ When allocating the pixmap for a display device, we were casting the unsigned<br>
+ long bitmap size to an unsigned int, meaning on LP64 (where a long is 64 bits)<br>
+ we could end up truncating the value.<br>
+<br>
+ Change it to cast to a size_t.<br>
+<br>
+ Ultimately, we'll want to change the display device structure to store a size_t<br>
+ rather than unsigned long, but that will mean changing the display device's<br>
+ public API.<br>
+<br>
+devices/gdevdsp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-21 11:12:14 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b4cda2ee4cbdf045e05b9832fd93f6a1a5cc3bb6">b4cda2ee4cbdf045e05b9832fd93f6a1a5cc3bb6</a>
+<blockquote>
+<p>
+ Remove the last of TURBO C support.<br>
+<br>
+ Most of the TURBO C support went away years ago, and we've had no complaints,<br>
+ so remove the rest.<br>
+<br>
+base/malloc_.h<br>
+base/memory_.h<br>
+base/stdpre.h<br>
+psi/store.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-22 14:24:39 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7d6d69ff17c43664482fe0dc34676a46ba551d93">7d6d69ff17c43664482fe0dc34676a46ba551d93</a>
+<blockquote>
+<p>
+ pdfwrite - rewrite the PSPageOptions code to use non-GC memory<br>
+<br>
+ Bug #702370 &quot;PSPageOption injecting unwanted characters&quot;<br>
+<br>
+ As Peter rightly comments in the bug this is due to the contents of the<br>
+ param_string_array not being enumerated when the array pointer is<br>
+ enumerated.<br>
+<br>
+ This seems to be a general problem, but we seem to get away with it for<br>
+ NeverEmbed and AlwaysEmbed (which are handled in a much more complex<br>
+ fashion) so I've chosen to leave those alone for now.<br>
+<br>
+ For PSPageOptions this commit creates a new gs_param_string_array and<br>
+ new strings for each of the strings in the param_list. These are<br>
+ allocated in non-GC memory and the pdfwrite device has complete control<br>
+ over their lifetime now.<br>
+<br>
+ We no longer numerate the member for GC (because it should not be GC'ed)<br>
+ and we free the array and its contents when we close the device.<br>
+<br>
+ This resolves the problem for me.<br>
+<br>
+devices/vector/gdevpdf.c<br>
+devices/vector/gdevpsdf.h<br>
+devices/vector/gdevpsdp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-21 16:24:41 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=548fa474def31ddeb2864554ad0698bd53b13ea0">548fa474def31ddeb2864554ad0698bd53b13ea0</a>
+<blockquote>
+<p>
+ Add shell script to build bmpcmp with tiff and png support<br>
+<br>
+toolbin/build_bmpcmp.sh<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 18:15:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6955a325826e84c77723bab03046c801930801df">6955a325826e84c77723bab03046c801930801df</a>
+<blockquote>
+<p>
+ Extend gsapi interface with _with_handle variants for callbacks.<br>
+<br>
+ This allows us to specify specific caller_handles for each<br>
+ callback type rather than using a default one specified at<br>
+ gs instance creation time. The old functions still work.<br>
+<br>
+base/gp_mspol.c<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+base/strmio.c<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+psi/gsdll2.def<br>
+psi/gsdll32.def<br>
+psi/gsdll32metro.def<br>
+psi/gsdll64.def<br>
+psi/gsdll64metro.def<br>
+psi/gsdllARM32metro.def<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+psi/psapi.c<br>
+psi/ziodevsc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-21 08:21:05 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b0d2c264eb53c1838957151f1e18abfd1f17dd54">b0d2c264eb53c1838957151f1e18abfd1f17dd54</a>
+<blockquote>
+<p>
+ Bug 702225(pt2): Check fontconfig is new enough.<br>
+<br>
+ Turns out FC_VARIABLE is a fairly new addition to fontconfig's search<br>
+ parameters (&lt;= 2.12.6 doesn't have it &gt;=2.13.1 does), so add preprocessor<br>
+ conditions so we'll only use when fontconfig is new enough.<br>
+<br>
+base/gp_unix.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 16:23:12 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=627942b74af81c1b9b76b07dba6e4ce6234a4ab6">627942b74af81c1b9b76b07dba6e4ce6234a4ab6</a>
+<blockquote>
+<p>
+ Fix the Windows top makefile when using UFST<br>
+<br>
+ If the user chose to specify the build flags for using UFST directly on the<br>
+ nmake command line (rather than using the predefined UFST build target), we'd<br>
+ end up disabling Freetype, which has not been supported for some time.<br>
+<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 15:17:10 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=619e7f46c9c760879409f9efaa4b3e798986538e">619e7f46c9c760879409f9efaa4b3e798986538e</a>
+<blockquote>
+<p>
+ lgtm.com fixes: float * float -&gt; double.<br>
+<br>
+ Make casting explicit. Ideally we'd cast one of the floats to a<br>
+ double to start with, so the multiplication happens in doubles,<br>
+ but that produces lots of diffs.<br>
+<br>
+base/gspaint.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 11:39:08 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e27d7babcbbbee07fe9c458228d941ce3b4f8890">e27d7babcbbbee07fe9c458228d941ce3b4f8890</a>
+<blockquote>
+<p>
+ Fix typo introduced in copy/paste<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-19 12:18:29 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c9142412c3ec52e2fcb42053706352a9ee5d9a74">c9142412c3ec52e2fcb42053706352a9ee5d9a74</a>
+<blockquote>
+<p>
+ Add tiff to bmpcmp<br>
+<br>
+ This upgrades the VS solution to 2019 for the bmpcmp project. Fixes a couple<br>
+ minor issues that existed with some of the project configurations and add<br>
+ tiff support.<br>
+<br>
+toolbin/bmpcmp.c<br>
+toolbin/bmpcmp.sln<br>
+toolbin/bmpcmp.vcproj<br>
+toolbin/bmpcmp.vcxproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 14:45:15 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cf15813c35a75067e828608c665dae30999f8dd5">cf15813c35a75067e828608c665dae30999f8dd5</a>
+<blockquote>
+<p>
+ Update Acrobat2Tiff to VS2019<br>
+<br>
+toolbin/Acrobat2Tiff/Acrobat2Tiff.sln<br>
+toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vb<br>
+toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vbproj<br>
+toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Application.Designer.vb<br>
+toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Resources.Designer.vb<br>
+toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Settings.Designer.vb<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 16:02:07 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8c7bd787defa071c96289b7da9397f673fddb874">8c7bd787defa071c96289b7da9397f673fddb874</a>
+<blockquote>
+<p>
+ txtwrite - address memory problems<br>
+<br>
+ Bug #702229 &quot; txtwrite: use after free in 9.51 on some files (regression from 9.50)&quot;<br>
+ Also bug #702346 and the earlier report #701877.<br>
+<br>
+ The problems occur because its possible for a single character code in<br>
+ a PDF file to map to more than a single Unicode code point. In the case<br>
+ of the file for 701877 the character code maps to 'f' and 'i' (it is an<br>
+ fi ligature).<br>
+<br>
+ The code should deal with this, but we need to ensure we are using the<br>
+ correct index. In addition, if we do get more Unicode code points than<br>
+ we expected, we need to set the widths of the 'extra' code points to<br>
+ zero (we only want to consider the width of the original character).<br>
+<br>
+ This does mean increasing the size of the Widths array to cater for<br>
+ the possibility of more entries on output than there were on input.<br>
+<br>
+ While working on it I noticed that the Unicode remapping on little-<br>
+ endian machines was reversing the order of the Unicode values, when<br>
+ there was more than a single code point returned, so fixed that at<br>
+ the same time.<br>
+<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 12:44:45 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=be741930a01176ba8cfea1310866a1a1c69fa71c">be741930a01176ba8cfea1310866a1a1c69fa71c</a>
+<blockquote>
+<p>
+ Add yet another nmake version to the MSVC makefile.<br>
+<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 11:23:18 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a10a03a4c9713b38c4cfcd07f0ba3c722778aae0">a10a03a4c9713b38c4cfcd07f0ba3c722778aae0</a>
+<blockquote>
+<p>
+ Rejig plftable.h<br>
+<br>
+ Rather than repeatedly including the same header to get multiple<br>
+ versions of the font table built in, build the font table just<br>
+ once with all the information in it.<br>
+<br>
+ This should be smaller (fractionally), and stop lgtm.com complaining.<br>
+<br>
+pcl/pcl/pcfontpg.c<br>
+pcl/pcl/pcfsel.c<br>
+pcl/pl/plftable.c<br>
+pcl/pl/plftable.h<br>
+pcl/pl/pllfont.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 12:15:12 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ffbaace78bacb0421ae11c5a8fdef51cbd829218">ffbaace78bacb0421ae11c5a8fdef51cbd829218</a>
+<blockquote>
+<p>
+ Tweak fapiufst code to build with UFST 7.1.x<br>
+<br>
+base/fapiufst.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-19 16:20:49 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7e7fa21f9e378303df8d8529cc3a94676e433f40">7e7fa21f9e378303df8d8529cc3a94676e433f40</a>
+<blockquote>
+<p>
+ Exclude &quot;variable fonts&quot; from fontconfig search<br>
+<br>
+ Since we cannot used (and later skip over errors caused by) TTF variable<br>
+ fonts (a sort of illigitimate offspring of Multiple Master and TTF!) we<br>
+ may as well filter them out of our fontconfig search criteria.<br>
+<br>
+ Patch suggested by zdohnal@redhat.com<br>
+<br>
+base/gp_unix.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-19 18:43:48 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9f1b19d0634ad611dc73a8c05c13c88f42cb8730">9f1b19d0634ad611dc73a8c05c13c88f42cb8730</a>
+<blockquote>
+<p>
+ lgtm fixes: float * float -&gt; double<br>
+<br>
+ When we do float * float, and then use the result in a context<br>
+ where a double is expected, we implicitly cast the result of the<br>
+ multiplication to be a double. This means we can overflow<br>
+ the range of floats during the initial multiplication, when the<br>
+ result would quite easily fit into a float.<br>
+<br>
+ It's better to cast to double to start with, then do the<br>
+ multiplication (at the cost of potentially being slower - but<br>
+ not really that much slower these days).<br>
+<br>
+ In some cases I've opted NOT to change the operations (merely to<br>
+ make the casting explicit) so as to minimise diffs.<br>
+<br>
+base/gdevp14.c<br>
+base/gshtscr.c<br>
+base/gxshade.c<br>
+base/gxstroke.c<br>
+pcl/pxl/pxpaint.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-19 19:45:03 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=173e301c9908cf4656c462a89a146f7f1f5664f8">173e301c9908cf4656c462a89a146f7f1f5664f8</a>
+<blockquote>
+<p>
+ Fix &quot;integer constant overflow&quot; warning.<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-18 13:16:20 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ef0bc2a843783af2e5d76dadf801063ab6c785ef">ef0bc2a843783af2e5d76dadf801063ab6c785ef</a>
+<blockquote>
+<p>
+ Improve font copying for new PDF interpeter with pdfwrite<br>
+<br>
+ Since this commit:<br>
+<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=12c071547d<br>
+<br>
+ The 'copied font' stored by pdfwrite has maintained a pointer to the<br>
+ interpreter's 'dir' (FontDirectory) and used it to mark the names in<br>
+ the interpreter name table during GC pointer enumeration.<br>
+<br>
+ This doesn't work if the interpreter is pdfi and its working inside<br>
+ the Ghostscript PostScript interpreter, because the enumeration can<br>
+ take place after the pdfi interpreter has been destroyed. Its also not<br>
+ necessary in this case, because the pdfi name table can't be relocated.<br>
+<br>
+ But for complex reasons (see the lengthy comment in the code) it has a<br>
+ small but useful benefit when pdfwrite is being driven directly by the<br>
+ PostScript interpreter.<br>
+<br>
+ In order to avoid losing that benefit, we now only store a pointer to<br>
+ the interpreter's 'dir' member, and only mark the names during<br>
+ enumeration, if the memory allocator of the font is a garbage-collecting<br>
+ allocator.<br>
+<br>
+devices/gxfcopy.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-18 13:20:10 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=63df5adcad39572f94a0448c09598641c89f58db">63df5adcad39572f94a0448c09598641c89f58db</a>
+<blockquote>
+<p>
+ lgtm.com fix: int * int may overflow before being converted to size_t.<br>
+<br>
+base/gxdownscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 13:06:19 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c170fa2fc7dfe79dced44d7b628129e5bc7dd045">c170fa2fc7dfe79dced44d7b628129e5bc7dd045</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Don't define external functions in local scope.<br>
+<br>
+base/gxpcmap.c<br>
+pcl/pxl/pxfont.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 12:54:35 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f8529a27e1c1768bd79ff19dfa7a29790ce9e275">f8529a27e1c1768bd79ff19dfa7a29790ce9e275</a>
+<blockquote>
+<p>
+ lgtm.com: Add comment to empty conditional block to stop warning.<br>
+<br>
+base/mkromfs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 12:36:00 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=53b712ea02903910a19980b28fbf8ae6fc5bdade">53b712ea02903910a19980b28fbf8ae6fc5bdade</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Avoid shadowing params with local vars.<br>
+<br>
+base/ets.c<br>
+base/gdevmem.c<br>
+base/gsfcmap1.c<br>
+pcl/pcl/rtraster.c<br>
+pcl/pl/pjparse.c<br>
+psi/imain.c<br>
+psi/zchar.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 11:43:13 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8d9df30a48ac272e92666d52fef62580aacabfd7">8d9df30a48ac272e92666d52fef62580aacabfd7</a>
+<blockquote>
+<p>
+ Bug 702248: Spelling problem in error message.<br>
+<br>
+Resource/Init/pdf_rbld.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 11:48:54 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=349d37844880567be4630e07c0518f6671300fc6">349d37844880567be4630e07c0518f6671300fc6</a>
+<blockquote>
+<p>
+ lgtm.com: Fix &quot;comparison is always false&quot; warning.<br>
+<br>
+psi/ziodev.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 11:48:07 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2f768243df42031a3f37f256678e34c1ac97fdde">2f768243df42031a3f37f256678e34c1ac97fdde</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Multiplication of narrow type in wider context.<br>
+<br>
+base/claptrap-init.c<br>
+base/gdevdrop.c<br>
+base/gdevprn.c<br>
+base/gsfunc.c<br>
+base/gsicc_monitorcm.c<br>
+base/gxccache.c<br>
+base/gxclip2.c<br>
+base/gxclipm.c<br>
+base/gxclread.c<br>
+base/gxclrect.c<br>
+base/gxdownscale.c<br>
+base/gxfapi.c<br>
+base/gxhtbit.c<br>
+base/gxidata.c<br>
+base/gxipixel.c<br>
+base/gxshade4.c<br>
+base/sjbig2.c<br>
+base/sjbig2.h<br>
+pcl/pcl/pcsfont.c<br>
+pcl/pl/plchar.c<br>
+pcl/pxl/pximage.c<br>
+psi/zfapi.c<br>
+xps/xpsimage.c<br>
+xps/xpsjxr.c<br>
+xps/xpspng.c<br>
+xps/xpszip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-14 21:00:34 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b380ebb41878645d0d7bb2b07155667acac4fa99">b380ebb41878645d0d7bb2b07155667acac4fa99</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Fix cases where comparisons are constant.<br>
+<br>
+base/gdevdflt.c<br>
+base/gdevp14.c<br>
+base/gen_ordered.c<br>
+base/gscsepr.c<br>
+base/gsmisc.c<br>
+base/gstiffio.c<br>
+base/gxcmap.c<br>
+base/gxdownscale.c<br>
+base/mkromfs.c<br>
+base/ttfmain.c<br>
+pcl/pl/realmain.c<br>
+pcl/pxl/pxfont.c<br>
+pcl/pxl/pxink.c<br>
+psi/imain.c<br>
+psi/ireclaim.c<br>
+psi/iscannum.c<br>
+psi/zcolor.c<br>
+psi/zfont.c<br>
+psi/zfsample.c<br>
+psi/zfunc4.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-13 16:52:42 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d578f2517bbc6261a0cf31f8e2e88b2990241c0a">d578f2517bbc6261a0cf31f8e2e88b2990241c0a</a>
+<blockquote>
+<p>
+ Fix 702400: Indeterminate SEGV due to GC confusion.<br>
+<br>
+ The GC 'clump_locate' macro relied on PTR_BETWEEN (yes, also a macro)<br>
+ but on Windows MSC_VER caused pointers to be compared using only the<br>
+ low 32-bits (unsigned long is 32-bits on Windows, even 64-bit).<br>
+<br>
+ Depending on addresses, and when the GC ran, this could result in the<br>
+ GC logic being confused about addresses. This change works with 32-bit<br>
+ Windows as well as 64-bit (and may not work with TURBOC on an OLD<br>
+ CPU with segment+offset addresses, but so what?).<br>
+<br>
+base/stdpre.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-13 10:20:29 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d703f355af5292e61dcd641332e249873ab5fb8a">d703f355af5292e61dcd641332e249873ab5fb8a</a>
+<blockquote>
+<p>
+ Bug702398 -- Fix several annotation w/no AP bugs<br>
+<br>
+ 1) In the case of an annotation with no BS or Border, the code was simply<br>
+ incorrect, causing an error that meant the annotation didn't render.<br>
+<br>
+ 2) annotation wasn't rendering if atan got error<br>
+<br>
+ Found this for a PolyLine case, but also fixed it for Line, just in case.<br>
+<br>
+ 3) Fix 1st LE in Polyline<br>
+<br>
+ It was calculating dx,dy backwards, so the angle was off by 180 degrees.<br>
+<br>
+ 4) Set the color for PolyLine annotation<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-13 11:31:57 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d767c9e3297623e6708fe1c6dcab0583989ef63c">d767c9e3297623e6708fe1c6dcab0583989ef63c</a>
+<blockquote>
+<p>
+ Assuage C++'s demands for whitespace in string literal concats.<br>
+<br>
+base/stdint_.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-11 18:05:50 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0ccf0e77b1ee8e10335c2a80ddb180c9b5a4f5b6">0ccf0e77b1ee8e10335c2a80ddb180c9b5a4f5b6</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Narrow multiply -&gt; wider result.<br>
+<br>
+base/gsfcmap.c<br>
+base/gxhintn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-12 13:58:30 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bad9f11895cbb4c0f53b7b0ef8f3502789d81315">bad9f11895cbb4c0f53b7b0ef8f3502789d81315</a>
+<blockquote>
+<p>
+ graphics library - improve gx_cpath_copy<br>
+<br>
+ This function does not, currently, appear to be called from anywhere.<br>
+ For the new PDF interpreter we'd like to use it to copy the clip path(s)<br>
+ from the PostScript environment to the PDF environment, but there's a<br>
+ problem.<br>
+<br>
+ The problem is that the structures defining the list of rectangles are<br>
+ allocated using the same memory allocator as the source clip path, but<br>
+ when we come to free them, the destructor uses the memory allocator of<br>
+ the clip list. So if the destination clip path was using a different<br>
+ allocator from the source clip path, we will use the wrong allocator to<br>
+ try and free the memory.<br>
+<br>
+ Chris thinks this may be an attempt to cope with stack-based allocations<br>
+ of the clip path where the allocator is NULL. So to cope with that<br>
+ we use the existing code (allocator from the source clip path) if the<br>
+ destination clip path's allocator is NULL (stack based) and we use the<br>
+ destination clip path's allocator otherwise.<br>
+<br>
+base/gxcpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-11 11:08:26 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ae6b0b0e768f618728f66580227fffc92896903c">ae6b0b0e768f618728f66580227fffc92896903c</a>
+<blockquote>
+<p>
+ Remove &quot;magic numbers&quot; from profile type selection<br>
+<br>
+base/gdevp14.c<br>
+base/gscms.h<br>
+base/gsequivc.c<br>
+base/gsicc.c<br>
+base/gsicc_cache.c<br>
+base/gsicc_manage.c<br>
+base/gstext.c<br>
+base/gxclthrd.c<br>
+base/gxcmap.c<br>
+base/gxiscale.c<br>
+devices/gdevjpeg.c<br>
+devices/gdevpdfimg.c<br>
+devices/gdevpng.c<br>
+devices/gdevtfnx.c<br>
+devices/gdevtifs.c<br>
+devices/gdevtsep.c<br>
+devices/vector/gdevxps.c<br>
+psi/zicc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-07 10:43:54 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2bb52bc877645068977c17c8a433e5b959b51eba">2bb52bc877645068977c17c8a433e5b959b51eba</a>
+<blockquote>
+<p>
+ Spot overprint in RGB Blend color spaces<br>
+<br>
+ If the blending color space is RGB based,<br>
+ special consideration must be made for doing<br>
+ overprint with separation and devicen color spaces.<br>
+<br>
+ In particular if we are going out to a separation<br>
+ device we could have RGB+spot support but not<br>
+ if the separation color was a process name like<br>
+ Cyan.<br>
+<br>
+ Also implement the missing gxdso_pdf14_sep_device<br>
+ special operation.<br>
+<br>
+base/gdevdflt.c<br>
+base/gdevp14.c<br>
+base/gscdevn.c<br>
+base/gscspace.h<br>
+base/gsstate.c<br>
+base/gstext.c<br>
+base/gxblend.c<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-11 15:41:09 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a7def309186f123008dcedfc0a6b07b6328c9c13">a7def309186f123008dcedfc0a6b07b6328c9c13</a>
+<blockquote>
+<p>
+ lgtm.com: configuration file fixes.<br>
+<br>
+.lgtm.yml<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-11 00:57:18 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f03b3f51957fcaab6b953ba79bb32d2096ad49b">4f03b3f51957fcaab6b953ba79bb32d2096ad49b</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Avoid narrow mult cast to longer type.<br>
+<br>
+ Avoid masking overflows through relying on implicit casting.<br>
+<br>
+base/gdevabuf.c<br>
+base/gdevdflt.c<br>
+base/gdevp14.c<br>
+base/gen_ordered.c<br>
+base/gsfcmap.c<br>
+base/gsfunc0.c<br>
+base/gsht.c<br>
+base/gshtscr.c<br>
+base/gsicc_create.c<br>
+base/gsptype1.c<br>
+base/gxblend1.c<br>
+base/gxdownscale.c<br>
+base/gxht_thresh.c<br>
+base/gxicolor.c<br>
+base/gximono.c<br>
+base/gxiscale.c<br>
+base/gxpcmap.c<br>
+base/sidscale.c<br>
+base/siscale.c<br>
+base/sjpx_openjpeg.c<br>
+devices/gdevdm24.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpsds.c<br>
+pcl/pcl/pglfill.c<br>
+pcl/pxl/pxpaint.c<br>
+xps/xpstiff.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-10 12:31:02 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4c305cb14b76bebfe0e147bcd90f4cc2ec7482ac">4c305cb14b76bebfe0e147bcd90f4cc2ec7482ac</a>
+<blockquote>
+<p>
+ Add lgtm configuration file.<br>
+<br>
+.lgtm.yml<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-10 12:19:48 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9b89ef860f52a6ca9696559c39104feba41e1de8">9b89ef860f52a6ca9696559c39104feba41e1de8</a>
+<blockquote>
+<p>
+ lgtm.com fixes: gpdl tweaks.<br>
+<br>
+gpdl/jpgtop.c<br>
+gpdl/pngtop.c<br>
+gpdl/psitop.c<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-09 17:42:37 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b778f827810b9f14c758334dd94f3f8df4d27bd4">b778f827810b9f14c758334dd94f3f8df4d27bd4</a>
+<blockquote>
+<p>
+ lgtm.com fix: Use | not || when combining bitflags.<br>
+<br>
+base/gxclpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-09 17:49:36 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c2dbf6acdc8b86cc0d74ff74d222720558ceb397">c2dbf6acdc8b86cc0d74ff74d222720558ceb397</a>
+<blockquote>
+<p>
+ lgtm.com fix: Remove code for duplicated &quot;if&quot; condition.<br>
+<br>
+toolbin/halftone/ETS/ipview.html<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-09 17:45:01 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d9b37029db10bdeaf5eaee00bac2eb0653644c77">d9b37029db10bdeaf5eaee00bac2eb0653644c77</a>
+<blockquote>
+<p>
+ lgtm.com tweak: Make it clear that something isn't a typo.<br>
+<br>
+ Use &quot;INTERPATCH_PADDING != 0&quot; rather than &quot;INTERPATCH_PADDING&quot; to<br>
+ avoid the appearance of a typo.<br>
+<br>
+base/gxshade6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-09 17:38:24 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8836aca9a03b99fc6f0ceb3994dbb78d442d634a">8836aca9a03b99fc6f0ceb3994dbb78d442d634a</a>
+<blockquote>
+<p>
+ lgtm.com: Miscellaneous fixes in support scripts.<br>
+<br>
+ Remove unused local variables, correct semicolon usage. Avoid<br>
+ &quot;return fn()&quot; where fn always returns None.<br>
+<br>
+pcl/tools/check_deps.py<br>
+pcl/tools/makeromttf.py<br>
+pcl/tools/pxlasm.py<br>
+pcl/tools/pxldis.py<br>
+pcl/tools/revlist.py<br>
+psi/msvc.mak<br>
+toolbin/gitlog2changelog.py<br>
+toolbin/halftone/ETS/ipview.html<br>
+toolbin/ocheck.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-09 12:35:27 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8620f18686d3350590894590264f4cd71ef3dccb">8620f18686d3350590894590264f4cd71ef3dccb</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent SEGV during pjl_set_init_from_defaults.<br>
+<br>
+ Prevent SEGV by propagating all error codes.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=25933 ./membin/gpcl6 -sDEVICE=pbmraw -dMaxBitmap=2000 -o /dev/null ./tests_private/pcl/pcl5efts/fts.0051<br>
+<br>
+pcl/pl/pjparse.c<br>
+pcl/pl/pjparse.h<br>
+pcl/pl/pjparsei.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-08 21:50:30 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9e553991e4c99814eb342d83b4fb42b5af457390">9e553991e4c99814eb342d83b4fb42b5af457390</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent numerous memory leaks.<br>
+<br>
+ Prevent memory leaks by propagating error codes and freeing loose objects.<br>
+<br>
+ Also resolve some compiler warnings.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=19484 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5efts/fts.0051<br>
+<br>
+base/gscspace.c<br>
+base/gxclrast.c<br>
+base/gxcpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-08 14:50:08 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a0a3ac239e990a76e937710dce75f3ace1e25be7">a0a3ac239e990a76e937710dce75f3ace1e25be7</a>
+<blockquote>
+<p>
+ lgtm.com issue: Add some missing &quot;repeat include&quot; guards.<br>
+<br>
+base/gximdecode.h<br>
+contrib/lips4/gdevlips.h<br>
+contrib/lips4/gdevlprn.h<br>
+devices/rinkj/evenbetter-rll.h<br>
+devices/rinkj/rinkj-byte-stream.h<br>
+devices/rinkj/rinkj-config.h<br>
+devices/rinkj/rinkj-device.h<br>
+devices/rinkj/rinkj-dither.h<br>
+devices/rinkj/rinkj-epson870.h<br>
+devices/rinkj/rinkj-screen-eb.h<br>
+devices/vector/gdevagl.h<br>
+devices/vector/gdevpdfg.h<br>
+ijs/ijs.h<br>
+ijs/ijs_client.h<br>
+jbig2dec/jbig2.h<br>
+lcms2mt/include/lcms2mt.h<br>
+lcms2mt/include/lcms2mt_plugin.h<br>
+lcms2mt/src/lcms2_internal.h<br>
+pcl/pcl/pgfdata.h<br>
+pcl/pl/plfapi.h<br>
+pcl/pl/plparams.h<br>
+pcl/pl/plufstlp.h<br>
+pcl/pl/plvocab.h<br>
+pcl/pxl/pxbfont.h<br>
+xps/ghostxps.h<br>
+xps/xpsfapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-08 12:23:26 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1883e1010c35da56bc47ad439b9e45401a3060da">1883e1010c35da56bc47ad439b9e45401a3060da</a>
+<blockquote>
+<p>
+ lgtm.com fix: Remove duplicate keys from enumeration.<br>
+<br>
+pcl/tools/pxlasm.py<br>
+pcl/tools/pxldis.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-07 18:30:02 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=95fe80c3c670f1f5200c21ea8df3e6139b711acc">95fe80c3c670f1f5200c21ea8df3e6139b711acc</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Fix comparison of narrow loop var with wider limit.<br>
+<br>
+base/gxcmap.c<br>
+base/ttfmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-07 18:14:23 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7592dd988af75e40f0e449e17905751a5117e4f5">7592dd988af75e40f0e449e17905751a5117e4f5</a>
+<blockquote>
+<p>
+ Fix implicit declaration of var in ETS support script.<br>
+<br>
+toolbin/halftone/ETS/ipview.html<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-07 18:12:30 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=de1f4bc1918fe1a972c3e8119f3c24266aff4cc4">de1f4bc1918fe1a972c3e8119f3c24266aff4cc4</a>
+<blockquote>
+<p>
+ Fix missing comma in pxlasm.py<br>
+<br>
+pcl/tools/pxlasm.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-07 17:48:08 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fa4eb803adf41c0353fd7efbb4b45321eb2dec06">fa4eb803adf41c0353fd7efbb4b45321eb2dec06</a>
+<blockquote>
+<p>
+ Tweak stream.h to avoid the use of &quot;template&quot;.<br>
+<br>
+ &quot;template&quot; is a reserved word in C++, and so this header won't<br>
+ compile when included from a .cpp file.<br>
+<br>
+base/stream.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-06 18:01:07 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=efd0b47fe66a99097e200d76be1a4846ae2ef692">efd0b47fe66a99097e200d76be1a4846ae2ef692</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leak in gx_path_assign_free.<br>
+<br>
+ Prevent memory leak by freeing path on all errors.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=16246 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.2120<br>
+<br>
+base/gxpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-06 12:11:05 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6d7c22dd453515d3f3f74af695a08abed26f657b">6d7c22dd453515d3f3f74af695a08abed26f657b</a>
+<blockquote>
+<p>
+ lgtm.com fixes for ghostscript.<br>
+<br>
+ Avoid using the same header include guard in more than one file.<br>
+<br>
+ Use the correct format specifier in a printf-like error string<br>
+ in lcms2mt.<br>
+<br>
+contrib/gdevbjc_.h<br>
+lcms2mt/src/cmsio0.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-03 19:04:42 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1ad7ac685aa07b1dceb0bf9e28e68a47492fb920">1ad7ac685aa07b1dceb0bf9e28e68a47492fb920</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent SEGV in hpgl_LB.<br>
+<br>
+ Prevent SEGV by cleanly freeing stick fonts on all errors.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15422 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1920<br>
+<br>
+pcl/pcl/pglabel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-04 10:29:06 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c34c60394ebf68356866c6160fd0f7dfa1c4d0ce">c34c60394ebf68356866c6160fd0f7dfa1c4d0ce</a>
+<blockquote>
+<p>
+ Coverity 957905<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-04 08:31:43 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=54e26f03a7403112463ad69874be9ab66cc4c863">54e26f03a7403112463ad69874be9ab66cc4c863</a>
+<blockquote>
+<p>
+ PDF interpreter - minor fixes<br>
+<br>
+ Remove what looks like a left-over debugging print, make a couple of<br>
+ indenting fixes.<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-02 23:31:30 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=92dc0f411477a0b920eea64ab305e60d2755ac9d">92dc0f411477a0b920eea64ab305e60d2755ac9d</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks in hpgl_fill_polyfill_background.<br>
+<br>
+ The code has been refactored to always call grestore to balance the gsave.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=19724 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1890<br>
+<br>
+pcl/pcl/pgdraw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-02 12:58:21 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=160d2d57ebbe610b770206f6f9773d9300ca97f9">160d2d57ebbe610b770206f6f9773d9300ca97f9</a>
+<blockquote>
+<p>
+ Coverity 357907<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-02 12:25:59 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5b96425e2414dfb130490bf0da2a5e03da099951">5b96425e2414dfb130490bf0da2a5e03da099951</a>
+<blockquote>
+<p>
+ Fix mistake in debug print variable count<br>
+<br>
+base/gstrans.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-02 09:26:05 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1407aa54f6c2df62d432a9b895a0001e62defcd8">1407aa54f6c2df62d432a9b895a0001e62defcd8</a>
+<blockquote>
+<p>
+ Coverity 357906<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-02 13:33:04 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=339ddd9dba998b82d4b71bdaee456ee80408c24f">339ddd9dba998b82d4b71bdaee456ee80408c24f</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks in hpgl_print_symbol_mode_char.<br>
+<br>
+ The code has been refactored to always call grestore to balance the gsave. The label buffer must<br>
+ always be destroyed if it was successfully initialised.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=18349 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1850<br>
+<br>
+pcl/pcl/pglabel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-01 16:24:38 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8c432810d36e24613b84f8506ab3929f9d13e612">8c432810d36e24613b84f8506ab3929f9d13e612</a>
+<blockquote>
+<p>
+ Squashed commit of the page_group branch<br>
+<br>
+ The issue this branch is trying to solve is to ensure<br>
+ that the alpha blending occurs in the proper page group<br>
+ color space. If the page group is CMYK and the device is<br>
+ RGB then the final alpha blend must occur prior to the<br>
+ color conversion. Currently with the head code this is<br>
+ not the case. This work required a significant rework<br>
+ of how the transparency group pop occurred since if it<br>
+ is the final group, the blend will not occur until the<br>
+ put_image operation. The group color handling was<br>
+ completely reworked and simplified. The reworked code<br>
+ now maintains a group_color object that is related to<br>
+ its own color rather than the parent as before.<br>
+<br>
+ In addition, during the push_device operation, a buffer<br>
+ is not created. Previously an entire page buffer was<br>
+ created. If we have a page group that is smaller than<br>
+ the whole page, this will save us in space. The downside<br>
+ of this is that we need to ensure we have a buffer in place<br>
+ when the first drawing operation occurs.<br>
+<br>
+ There were several issues with the bitrgbtags devices as<br>
+ well as the pngalpha and psdcmyk16 devices that had to<br>
+ be considered during the put_image operation.<br>
+ operation<br>
+<br>
+base/gdevdflt.c<br>
+base/gdevp14.c<br>
+base/gdevp14.h<br>
+base/gsicc_cache.c<br>
+base/gstparam.h<br>
+base/gstrans.c<br>
+base/gstrans.h<br>
+base/gxblend.h<br>
+base/gxblend1.c<br>
+base/gxdevsop.h<br>
+devices/devs.mak<br>
+devices/gdevpng.c<br>
+devices/vector/gdevpdft.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-01 12:17:18 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d41990615baaee9bba6ce7ae3e5a025a71744c51">d41990615baaee9bba6ce7ae3e5a025a71744c51</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent SEGV in pcl_pattern_RF.<br>
+<br>
+ The call to pl_dict_put will free the pattern if an error occurs so the pcl_pattern_free_pattern<br>
+ is not required. Freeing the pattern data is now handled here to prevent leaks and also to<br>
+ prevent double freeing.<br>
+<br>
+ Two typos were also cleared up.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15000 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1816<br>
+<br>
+pcl/pcl/pcuptrn.c<br>
+pcl/pcl/pglfill.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-29 20:43:17 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8ba1ead91f1c051df75302dc49531d9f2497ef51">8ba1ead91f1c051df75302dc49531d9f2497ef51</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent SEGV in hpgl_LB.<br>
+<br>
+ Update code to propagate error codes correctly and and clean up stick fonts.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=17298 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1640<br>
+<br>
+pcl/pcl/pglabel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-30 08:33:48 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2844006034232cb95fdd295d7fedf5fed8390a8e">2844006034232cb95fdd295d7fedf5fed8390a8e</a>
+<blockquote>
+<p>
+ PDF interpreter Ignore non-array Annots<br>
+<br>
+ Yet another customer file, so no bug report.<br>
+<br>
+ The supplied file is badly broken in several different ways. Most of<br>
+ these Ghostscript already coped with but the file contains a new fault<br>
+ we haven't seen before. The same object is referenced by different pages<br>
+ once as a Font dictionary and once as an Annots array.<br>
+<br>
+ Since the object is actually a font dictionary, the page referencing it<br>
+ as an array fails with an error, because it has the wrong type.<br>
+<br>
+ This commit simply ignores such errors and carries on, emitting the<br>
+ usual warning. Its a little involved as there are several places where<br>
+ we need to check the type of the object.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-28 14:49:14 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=45920485627a943f07eea0c5b1243b5eb540b498">45920485627a943f07eea0c5b1243b5eb540b498</a>
+<blockquote>
+<p>
+ clusterpush.pl: added excludes for mupdf's mupdfwrap.py.<br>
+<br>
+ Also add mudrawpy product.<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-27 11:04:57 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1b4c3669a20cb2b63e49300b03082b189acfe347">1b4c3669a20cb2b63e49300b03082b189acfe347</a>
+<blockquote>
+<p>
+ Bug 702364: Fix missing echogs dependencies<br>
+<br>
+contrib/contrib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-27 10:36:11 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9d2de2ee4c3858095d8dfb05cc7d113bf40d81c1">9d2de2ee4c3858095d8dfb05cc7d113bf40d81c1</a>
+<blockquote>
+<p>
+ Rename devices/contrib.mak to devices/dcontrib.mak<br>
+<br>
+ because we also have contrib/contrib.mak<br>
+<br>
+Makefile.in<br>
+base/unix-gcc.mak<br>
+base/winlib.mak<br>
+devices/dcontrib.mak<br>
+toolbin/headercompile.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-27 10:20:00 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f210e4c009f7d401767336a264c2e4b9cf668216">f210e4c009f7d401767336a264c2e4b9cf668216</a>
+<blockquote>
+<p>
+ Bug 702349: Fix symbol clash between lcms2mt and lcms2<br>
+<br>
+ Shared library (libgs) with lcms2mt could clash if the calling app also<br>
+ included lcms2.<br>
+<br>
+ Using gcc (or compatible) this builds lcms2mt using the -fvisibility=hidden<br>
+ option, so symbols are not exported.<br>
+<br>
+Makefile.in<br>
+base/lcms2mt.mak<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-23 18:23:17 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7c96228899ea05b40cdb31dc5a4c3f61aa0d39e6">7c96228899ea05b40cdb31dc5a4c3f61aa0d39e6</a>
+<blockquote>
+<p>
+ Fix Bug 702014: ps2epsi problems (regression?).<br>
+<br>
+ The ps2epsi and ps2epsi.ps were quite a mess, and relied on non-standard<br>
+ operators only available with -dNOSAFER since we made SAFER the default.<br>
+ Even running ps2epsi with -dNOSAFER (by export GS_OPTIONS=-dNOSAFER)<br>
+ had problems -- it could not even convert examples/colorcir.ps to EPSI<br>
+ (throwing an error about colorcirsave). Both of the aforementioned<br>
+ files are replaced with this commit, and the ps2epsi.bat and ps2epsi.cmd<br>
+ are updated to use the new ps2epsi.ps file<br>
+<br>
+ Also, input files with multiple pages were never correct since the preview<br>
+ was derived only from the first page. The ps2epsi.ps checks if the file is<br>
+ already an EPSF, then don't use eps2write on the input, but warn if the<br>
+ %%Pages comment indicates that there is more than a single page.<br>
+<br>
+ Note that -dNOOUTERSAVE is needed in the invocation so that if we use<br>
+ eps2write, the 'restore' will close the device and write the tempfile<br>
+ with the EPSF.<br>
+<br>
+ Then ps2epsi.ps reads the input file, capturing the BBox, stops after<br>
+ %%EndComments, removes any existing preview, constructs a new preview<br>
+ using the 'bit' device with appropriate parameters, writes the preview<br>
+ in the EPSI Preview format (using writehexstring) and then copies the<br>
+ remainder of the EPSF file to the output.<br>
+<br>
+ The ps2epsi.ps has some checking for valid invocation, since someone<br>
+ may try to use it without the scripts.<br>
+<br>
+ Since all of the actual conversion is done by the ps2epsi.ps, this change<br>
+ makes windows and linux produce equivalent files.<br>
+<br>
+lib/ps2epsi<br>
+lib/ps2epsi.bat<br>
+lib/ps2epsi.cmd<br>
+lib/ps2epsi.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-23 18:22:15 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=01b1eb1ef43952026ed8bf8728744522abfbfc19">01b1eb1ef43952026ed8bf8728744522abfbfc19</a>
+<blockquote>
+<p>
+ Fix gssetgs.bat to use either 32 or 64 bit executables (64-bit preferred).<br>
+<br>
+lib/gssetgs.bat<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-24 14:13:54 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f69f7a2c8b05c3f8a4e14d30453dcb599ca8b64d">f69f7a2c8b05c3f8a4e14d30453dcb599ca8b64d</a>
+<blockquote>
+<p>
+ Update msvc.mak to allow for new nmake version.<br>
+<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-23 11:42:57 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6a46e31d5005cf136679ac7c54cb91d91654710d">6a46e31d5005cf136679ac7c54cb91d91654710d</a>
+<blockquote>
+<p>
+ Document that gsapi_set_stdio doesn't affect devices<br>
+<br>
+ Using -sOutputFile=%stdout (counterintuitively) does not direct device output<br>
+ to the stdout handler callback set by gsapi_set_stdio().<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-17 16:22:06 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=60a535f9f49fece2761a1c0c8069f87f7514182c">60a535f9f49fece2761a1c0c8069f87f7514182c</a>
+<blockquote>
+<p>
+ Bug 702335: jbig2dec: Refill input buffer upon failure to parse segment header.<br>
+<br>
+ Before commit 2b2dcf4ccf401ed210f03c858b304994749fd2b3 there was<br>
+ a debug message when attempting to parse a a segment header and<br>
+ the data supplied to jbig2dec was not enough. Commit 2b2dcf4<br>
+ incorrectly changed the debug message into a fatal error message,<br>
+ due misinterpreting the message text as something that warranted<br>
+ a fatal error.<br>
+<br>
+ When data was supplied in chunks to jbig2_data_in() in repeated<br>
+ calls such that a segment header's referred-to segment numbers<br>
+ field straddled a chunk boundary then jbig2dec would indicate a<br>
+ fatal error. The file in bug 702335 caused this to happen.<br>
+<br>
+ Instead jbig2dec should be asking the caller for more data so<br>
+ that the entire segment header can be parsed during a single call<br>
+ to jbig2_data_in().<br>
+<br>
+ By convering the fatal error back to a a debug message the problem<br>
+ is resolved. The message itself is also rewored to clearly<br>
+ indicate that the situation is non-fatal and that the caller will<br>
+ be asked to provide more data.<br>
+<br>
+jbig2dec/jbig2_segment.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-16 05:05:21 -0700
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=85b1119bb3493608b1e84acfaa7b27a6e5259b43">85b1119bb3493608b1e84acfaa7b27a6e5259b43</a>
+<blockquote>
+<p>
+ Fix URF filter configuration code.<br>
+<br>
+ I was missing some quoting.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-15 10:22:05 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d845756b28a9cdadaf5374cc4fa130963ea65adc">d845756b28a9cdadaf5374cc4fa130963ea65adc</a>
+<blockquote>
+<p>
+ PDF interpreter - reject insane Tc values early<br>
+<br>
+ No bug report, the file is from a customer and confidential.<br>
+<br>
+ The file has been created by a bfo.com product, but then additionally<br>
+ modified by an unknown application. The problem is that the file<br>
+ contains this sequence:<br>
+<br>
+ 1 0 0 0.999999 21.6 9.900086 cm<br>
+ /R3 9 Tf -2147483647 Tc -0.39301 Tw<br>
+ 4.8 -21.95 Td<br>
+ [( )]TJ<br>
+<br>
+ The parameter supplied to Tc is clearly mad. Not invalid but it attempts<br>
+ to move the current point (after drawing the space) by 2,147,483,647<br>
+ unscaled text units. This works out at around 471 miles. Given that this<br>
+ value is the maximum negative 32-bit integer (0xFFFFFFFF) I doubt this<br>
+ is actually intentional.<br>
+<br>
+ The scaling by the CTM causes a limitcheck error when trying to draw<br>
+ the text. We could fix this by running the TJ in a stopped context<br>
+ but that would be expensive performance-wise because TJ is a very common<br>
+ operator.<br>
+<br>
+ Instead this commit checks that the result of Tc, when scaled by the<br>
+ CTM, will fit into our fixed-point representation. If it does not then<br>
+ we throw an error there and then. The PDF interpreter then catches that<br>
+ during the Tc operator (which is less commonly used than TJ) and emits<br>
+ a warning, while ignoring the Tc value.<br>
+<br>
+ This may, of course, result in incorrect output, though it seems<br>
+ unlikely given the size of the numbers involved, which is why we give<br>
+ the user a warning.<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-10 15:35:02 -0700
+</strong>
+<br>ray &lt;Ray.Johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b503c46c124cf5aaa82a71e28f624f2ef2b71e71">b503c46c124cf5aaa82a71e28f624f2ef2b71e71</a>
+<blockquote>
+<p>
+ Bug 702320: Valgrind complains about UMR.<br>
+<br>
+ The file for this bug does show that the stroke_color stack based struct<br>
+ in not initialized. Init fill_color and stroke_color. This is probably a<br>
+ bug tail from the fill_stroke commit.<br>
+<br>
+ Also explicitly set 'zeros' to 0 to clarify the expected contents.<br>
+<br>
+base/gxclbits.c<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-10 18:04:14 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1b08043d16bb10d939e858ea8d650807301d6e05">1b08043d16bb10d939e858ea8d650807301d6e05</a>
+<blockquote>
+<p>
+ Remove some errant remains of Google analytics<br>
+<br>
+ The GA runes are now added by Apache when files are served from casper.<br>
+<br>
+doc/API.htm<br>
+doc/C-style.htm<br>
+doc/Commprod.htm<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-10 11:11:15 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8f52736b546329ae2e3ad760f722eac0dec6994e">8f52736b546329ae2e3ad760f722eac0dec6994e</a>
+<blockquote>
+<p>
+ Update/augment ETS source copyrights<br>
+<br>
+base/ets.c<br>
+base/ets.h<br>
+base/ets_tm.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-09 18:07:01 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cbb82ba4baaa2a9da11c603d742a58a51c4e50e1">cbb82ba4baaa2a9da11c603d742a58a51c4e50e1</a>
+<blockquote>
+<p>
+ Update copyright to 2020<br>
+<br>
+Resource/CIDFont/ArtifexBullet<br>
+Resource/ColorSpace/DefaultCMYK<br>
+Resource/ColorSpace/DefaultGray<br>
+Resource/ColorSpace/DefaultRGB<br>
+Resource/ColorSpace/TrivialCMYK<br>
+Resource/ColorSpace/sGray<br>
+Resource/ColorSpace/sRGB<br>
+Resource/Decoding/FCO_Dingbats<br>
+Resource/Decoding/FCO_Symbol<br>
+Resource/Decoding/FCO_Unicode<br>
+Resource/Decoding/FCO_Wingdings<br>
+Resource/Decoding/Latin1<br>
+Resource/Decoding/StandardEncoding<br>
+Resource/Decoding/Unicode<br>
+Resource/Encoding/CEEncoding<br>
+Resource/Encoding/ExpertEncoding<br>
+Resource/Encoding/ExpertSubsetEncoding<br>
+Resource/Encoding/NotDefEncoding<br>
+Resource/Encoding/Wingdings<br>
+Resource/Init/FCOfontmap-PCLPS2<br>
+Resource/Init/Fontmap.GS<br>
+Resource/Init/gs_agl.ps<br>
+Resource/Init/gs_btokn.ps<br>
+Resource/Init/gs_cff.ps<br>
+Resource/Init/gs_cidcm.ps<br>
+Resource/Init/gs_ciddc.ps<br>
+Resource/Init/gs_cidfm.ps<br>
+Resource/Init/gs_cidfn.ps<br>
+Resource/Init/gs_cidtt.ps<br>
+Resource/Init/gs_cmap.ps<br>
+Resource/Init/gs_cspace.ps<br>
+Resource/Init/gs_dbt_e.ps<br>
+Resource/Init/gs_diskn.ps<br>
+Resource/Init/gs_dps1.ps<br>
+Resource/Init/gs_dps2.ps<br>
+Resource/Init/gs_dscp.ps<br>
+Resource/Init/gs_epsf.ps<br>
+Resource/Init/gs_fapi.ps<br>
+Resource/Init/gs_fntem.ps<br>
+Resource/Init/gs_fonts.ps<br>
+Resource/Init/gs_frsd.ps<br>
+Resource/Init/gs_icc.ps<br>
+Resource/Init/gs_il1_e.ps<br>
+Resource/Init/gs_init.ps<br>
+Resource/Init/gs_lev2.ps<br>
+Resource/Init/gs_ll3.ps<br>
+Resource/Init/gs_mex_e.ps<br>
+Resource/Init/gs_mgl_e.ps<br>
+Resource/Init/gs_mro_e.ps<br>
+Resource/Init/gs_pdf_e.ps<br>
+Resource/Init/gs_pdfwr.ps<br>
+Resource/Init/gs_res.ps<br>
+Resource/Init/gs_resmp.ps<br>
+Resource/Init/gs_setpd.ps<br>
+Resource/Init/gs_statd.ps<br>
+Resource/Init/gs_std_e.ps<br>
+Resource/Init/gs_sym_e.ps<br>
+Resource/Init/gs_trap.ps<br>
+Resource/Init/gs_ttf.ps<br>
+Resource/Init/gs_typ32.ps<br>
+Resource/Init/gs_typ42.ps<br>
+Resource/Init/gs_type1.ps<br>
+Resource/Init/gs_wan_e.ps<br>
+Resource/Init/pdf_base.ps<br>
+Resource/Init/pdf_draw.ps<br>
+Resource/Init/pdf_font.ps<br>
+Resource/Init/pdf_main.ps<br>
+Resource/Init/pdf_ops.ps<br>
+Resource/Init/pdf_rbld.ps<br>
+Resource/Init/pdf_sec.ps<br>
+Resource/SubstCID/CNS1-WMode<br>
+Resource/SubstCID/GB1-WMode<br>
+Resource/SubstCID/Japan1-WMode<br>
+Resource/SubstCID/Korea1-WMode<br>
+arch/arch_autoconf.h.in<br>
+arch/windows-arm-msvc.h<br>
+arch/windows-x64-msvc.h<br>
+arch/windows-x86-msvc.h<br>
+base/all-arch.mak<br>
+base/assert_.h<br>
+base/bench.c<br>
+base/bobbin.c<br>
+base/bobbin.h<br>
+base/claptrap-impl.h<br>
+base/claptrap.c<br>
+base/claptrap.h<br>
+base/ctype_.h<br>
+base/dirent_.h<br>
+base/dos_.h<br>
+base/echogs.c<br>
+base/errno_.h<br>
+base/ets.h<br>
+base/ets_tm.h<br>
+base/expat.mak<br>
+base/fapi_bs.mak<br>
+base/fapi_ft.c<br>
+base/fapibstm.c<br>
+base/fapiufst.c<br>
+base/fcntl_.h<br>
+base/freetype.mak<br>
+base/gconf.c<br>
+base/gconf.h<br>
+base/gdbflags.h<br>
+base/gdebug.h<br>
+base/gdevabuf.c<br>
+base/gdevbbox.c<br>
+base/gdevbbox.h<br>
+base/gdevdbit.c<br>
+base/gdevdcrd.c<br>
+base/gdevdcrd.h<br>
+base/gdevddrw.c<br>
+base/gdevddrw.h<br>
+base/gdevdevn.c<br>
+base/gdevdevn.h<br>
+base/gdevdevnprn.h<br>
+base/gdevdflt.c<br>
+base/gdevdgbr.c<br>
+base/gdevdrop.c<br>
+base/gdevdsha.c<br>
+base/gdevemap.c<br>
+base/gdevepo.c<br>
+base/gdevepo.h<br>
+base/gdevflp.c<br>
+base/gdevflp.h<br>
+base/gdevhit.c<br>
+base/gdevkrnlsclass.c<br>
+base/gdevkrnlsclass.h<br>
+base/gdevm1.c<br>
+base/gdevm16.c<br>
+base/gdevm2.c<br>
+base/gdevm24.c<br>
+base/gdevm32.c<br>
+base/gdevm4.c<br>
+base/gdevm40.c<br>
+base/gdevm48.c<br>
+base/gdevm56.c<br>
+base/gdevm64.c<br>
+base/gdevm8.c<br>
+base/gdevmem.c<br>
+base/gdevmem.h<br>
+base/gdevmpla.c<br>
+base/gdevmpla.h<br>
+base/gdevmplt.c<br>
+base/gdevmplt.h<br>
+base/gdevmr1.c<br>
+base/gdevmr2n.c<br>
+base/gdevmr8n.c<br>
+base/gdevmrop.h<br>
+base/gdevmrun.c<br>
+base/gdevmrun.h<br>
+base/gdevmx.c<br>
+base/gdevnfwd.c<br>
+base/gdevoflt.c<br>
+base/gdevoflt.h<br>
+base/gdevp14.c<br>
+base/gdevp14.h<br>
+base/gdevpccm.c<br>
+base/gdevpccm.h<br>
+base/gdevpipe.c<br>
+base/gdevplnx.c<br>
+base/gdevplnx.h<br>
+base/gdevppla.c<br>
+base/gdevppla.h<br>
+base/gdevprn.c<br>
+base/gdevprn.h<br>
+base/gdevpxat.h<br>
+base/gdevpxen.h<br>
+base/gdevpxop.h<br>
+base/gdevrops.c<br>
+base/gdevsclass.c<br>
+base/gdevsclass.h<br>
+base/gdevvec.c<br>
+base/gdevvec.h<br>
+base/gen_ordered.c<br>
+base/gen_ordered.h<br>
+base/genarch.c<br>
+base/genconf.c<br>
+base/gendev.c<br>
+base/genht.c<br>
+base/gp.h<br>
+base/gp_dosfe.c<br>
+base/gp_dosfs.c<br>
+base/gp_dvx.c<br>
+base/gp_getnv.c<br>
+base/gp_mktmp.c<br>
+base/gp_msdll.c<br>
+base/gp_msdos.c<br>
+base/gp_mshdl.c<br>
+base/gp_mslib.c<br>
+base/gp_mspol.c<br>
+base/gp_msprn.c<br>
+base/gp_mswin.c<br>
+base/gp_mswin.h<br>
+base/gp_nsync.c<br>
+base/gp_ntfs.c<br>
+base/gp_nxpsprn.c<br>
+base/gp_os2.c<br>
+base/gp_os2.h<br>
+base/gp_os2fs.c<br>
+base/gp_os2pr.c<br>
+base/gp_os9.c<br>
+base/gp_paper.c<br>
+base/gp_psync.c<br>
+base/gp_stdia.c<br>
+base/gp_stdin.c<br>
+base/gp_strdl.c<br>
+base/gp_unifn.c<br>
+base/gp_unifs.c<br>
+base/gp_unix.c<br>
+base/gp_upapr.c<br>
+base/gp_vms.c<br>
+base/gp_wgetv.c<br>
+base/gp_win32.c<br>
+base/gp_winfs.c<br>
+base/gp_winfs2.c<br>
+base/gp_wpapr.c<br>
+base/gp_wsync.c<br>
+base/gp_wutf8.c<br>
+base/gp_wxpsprn.cpp<br>
+base/gpcheck.h<br>
+base/gpgetenv.h<br>
+base/gpmisc.c<br>
+base/gpmisc.h<br>
+base/gpsync.h<br>
+base/gs.mak<br>
+base/gs_dll_call.h<br>
+base/gs_mgl_e.h<br>
+base/gs_mro_e.h<br>
+base/gsalloc.c<br>
+base/gsalloc.h<br>
+base/gsargs.c<br>
+base/gsargs.h<br>
+base/gsbitcom.c<br>
+base/gsbitmap.h<br>
+base/gsbitops.c<br>
+base/gsbitops.h<br>
+base/gsbittab.c<br>
+base/gsbittab.h<br>
+base/gsccode.h<br>
+base/gsccolor.h<br>
+base/gscdef.c<br>
+base/gscdefs.h<br>
+base/gscdevn.c<br>
+base/gscdevn.h<br>
+base/gscedata.c<br>
+base/gscedata.h<br>
+base/gscencs.c<br>
+base/gscencs.h<br>
+base/gschar.c<br>
+base/gschar.h<br>
+base/gschar0.c<br>
+base/gscicach.c<br>
+base/gscicach.h<br>
+base/gscie.c<br>
+base/gscie.h<br>
+base/gsciemap.c<br>
+base/gscindex.h<br>
+base/gsclipsr.c<br>
+base/gsclipsr.h<br>
+base/gscms.h<br>
+base/gscolor.c<br>
+base/gscolor.h<br>
+base/gscolor1.c<br>
+base/gscolor1.h<br>
+base/gscolor2.c<br>
+base/gscolor2.h<br>
+base/gscolor3.c<br>
+base/gscolor3.h<br>
+base/gscompt.h<br>
+base/gscoord.c<br>
+base/gscoord.h<br>
+base/gscparam.c<br>
+base/gscpixel.c<br>
+base/gscpixel.h<br>
+base/gscpm.h<br>
+base/gscrd.c<br>
+base/gscrd.h<br>
+base/gscrdp.c<br>
+base/gscrdp.h<br>
+base/gscrypt1.c<br>
+base/gscrypt1.h<br>
+base/gscscie.c<br>
+base/gscsel.h<br>
+base/gscsepr.c<br>
+base/gscsepr.h<br>
+base/gscspace.c<br>
+base/gscspace.h<br>
+base/gscssub.c<br>
+base/gscssub.h<br>
+base/gsdcolor.h<br>
+base/gsdevice.c<br>
+base/gsdevice.h<br>
+base/gsdevmem.c<br>
+base/gsdll.h<br>
+base/gsdllwin.h<br>
+base/gsdparam.c<br>
+base/gsdps1.c<br>
+base/gsdsrc.c<br>
+base/gsdsrc.h<br>
+base/gsequivc.c<br>
+base/gsequivc.h<br>
+base/gserrors.h<br>
+base/gsexit.h<br>
+base/gsfcid.c<br>
+base/gsfcid2.c<br>
+base/gsfcmap.c<br>
+base/gsfcmap.h<br>
+base/gsfcmap1.c<br>
+base/gsflip.c<br>
+base/gsflip.h<br>
+base/gsfname.c<br>
+base/gsfname.h<br>
+base/gsfont.c<br>
+base/gsfont.h<br>
+base/gsfont0.c<br>
+base/gsfont0c.c<br>
+base/gsform1.h<br>
+base/gsftopts.h<br>
+base/gsfunc.c<br>
+base/gsfunc.h<br>
+base/gsfunc0.c<br>
+base/gsfunc0.h<br>
+base/gsfunc3.c<br>
+base/gsfunc3.h<br>
+base/gsfunc4.c<br>
+base/gsfunc4.h<br>
+base/gsgc.h<br>
+base/gsgcache.c<br>
+base/gsgcache.h<br>
+base/gsgdata.c<br>
+base/gsgdata.h<br>
+base/gsgstate.c<br>
+base/gsgstate.h<br>
+base/gshsb.c<br>
+base/gshsb.h<br>
+base/gsht.c<br>
+base/gsht.h<br>
+base/gsht1.c<br>
+base/gsht1.h<br>
+base/gshtscr.c<br>
+base/gshtx.c<br>
+base/gshtx.h<br>
+base/gsicc.c<br>
+base/gsicc.h<br>
+base/gsicc_cache.c<br>
+base/gsicc_cache.h<br>
+base/gsicc_cms.h<br>
+base/gsicc_create.c<br>
+base/gsicc_create.h<br>
+base/gsicc_lcms2.c<br>
+base/gsicc_lcms2mt.c<br>
+base/gsicc_manage.c<br>
+base/gsicc_manage.h<br>
+base/gsicc_monitorcm.c<br>
+base/gsicc_nocm.c<br>
+base/gsicc_profilecache.c<br>
+base/gsicc_profilecache.h<br>
+base/gsicc_replacecm.c<br>
+base/gsimage.c<br>
+base/gsimage.h<br>
+base/gsimpath.c<br>
+base/gsinit.c<br>
+base/gsio.h<br>
+base/gsiodev.c<br>
+base/gsiodevs.c<br>
+base/gsiodisk.c<br>
+base/gsioram.c<br>
+base/gsiorom.c<br>
+base/gsiorom.h<br>
+base/gsipar3x.h<br>
+base/gsiparam.h<br>
+base/gsiparm3.h<br>
+base/gsiparm4.h<br>
+base/gsjconf.h<br>
+base/gsjmorec.h<br>
+base/gslib.c<br>
+base/gslib.h<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+base/gsline.c<br>
+base/gsline.h<br>
+base/gslparam.h<br>
+base/gsmalloc.c<br>
+base/gsmalloc.h<br>
+base/gsmatrix.c<br>
+base/gsmatrix.h<br>
+base/gsmchunk.c<br>
+base/gsmchunk.h<br>
+base/gsmd5.c<br>
+base/gsmd5.h<br>
+base/gsmdebug.h<br>
+base/gsmemory.c<br>
+base/gsmemory.h<br>
+base/gsmemraw.h<br>
+base/gsmemret.c<br>
+base/gsmemret.h<br>
+base/gsmisc.c<br>
+base/gsnamecl.c<br>
+base/gsnamecl.h<br>
+base/gsncdummy.c<br>
+base/gsncdummy.h<br>
+base/gsnogc.c<br>
+base/gsnogc.h<br>
+base/gsnotify.c<br>
+base/gsnotify.h<br>
+base/gsovrc.c<br>
+base/gsovrc.h<br>
+base/gspaint.c<br>
+base/gspaint.h<br>
+base/gsparam.c<br>
+base/gsparam.h<br>
+base/gsparam2.c<br>
+base/gsparams.c<br>
+base/gsparams.h<br>
+base/gsparamx.c<br>
+base/gsparamx.h<br>
+base/gspath.c<br>
+base/gspath.h<br>
+base/gspath1.c<br>
+base/gspath2.h<br>
+base/gspcolor.c<br>
+base/gspcolor.h<br>
+base/gspenum.h<br>
+base/gspmdrv.c<br>
+base/gspmdrv.h<br>
+base/gspmdrv.rc<br>
+base/gsptype1.c<br>
+base/gsptype1.h<br>
+base/gsptype2.c<br>
+base/gsptype2.h<br>
+base/gsrect.h<br>
+base/gsrefct.h<br>
+base/gsromfs0.c<br>
+base/gsrop.c<br>
+base/gsrop.h<br>
+base/gsroprun.c<br>
+base/gsroprun1.h<br>
+base/gsroprun24.h<br>
+base/gsroprun8.h<br>
+base/gsropt.h<br>
+base/gsroptab.c<br>
+base/gsserial.c<br>
+base/gsserial.h<br>
+base/gsshade.c<br>
+base/gsshade.h<br>
+base/gssprintf.h<br>
+base/gsstate.c<br>
+base/gsstate.h<br>
+base/gsstrl.h<br>
+base/gsstrtok.h<br>
+base/gsstruct.h<br>
+base/gsstype.h<br>
+base/gstext.c<br>
+base/gstext.h<br>
+base/gstiffio.c<br>
+base/gstiffio.h<br>
+base/gstparam.h<br>
+base/gstrans.c<br>
+base/gstrans.h<br>
+base/gstrap.c<br>
+base/gstrap.h<br>
+base/gstype1.c<br>
+base/gstype1.h<br>
+base/gstype2.c<br>
+base/gstype42.c<br>
+base/gstypes.h<br>
+base/gsuid.h<br>
+base/gsutil.c<br>
+base/gsutil.h<br>
+base/gswin.rc<br>
+base/gsxfont.h<br>
+base/gx.h<br>
+base/gxacpath.c<br>
+base/gxalloc.h<br>
+base/gxalpha.h<br>
+base/gxarith.h<br>
+base/gxband.h<br>
+base/gxbcache.c<br>
+base/gxbcache.h<br>
+base/gxbitfmt.h<br>
+base/gxbitmap.h<br>
+base/gxbitops.h<br>
+base/gxblend.c<br>
+base/gxblend.h<br>
+base/gxblend1.c<br>
+base/gxccache.c<br>
+base/gxccman.c<br>
+base/gxcdevn.h<br>
+base/gxchar.c<br>
+base/gxchar.h<br>
+base/gxchrout.c<br>
+base/gxchrout.h<br>
+base/gxcht.c<br>
+base/gxcid.h<br>
+base/gxcie.h<br>
+base/gxcindex.h<br>
+base/gxclbits.c<br>
+base/gxcldev.h<br>
+base/gxclfile.c<br>
+base/gxclimag.c<br>
+base/gxclio.h<br>
+base/gxclip.c<br>
+base/gxclip.h<br>
+base/gxclip2.c<br>
+base/gxclip2.h<br>
+base/gxclipm.c<br>
+base/gxclipm.h<br>
+base/gxclipsr.h<br>
+base/gxclist.c<br>
+base/gxclist.h<br>
+base/gxcllzw.c<br>
+base/gxclmem.c<br>
+base/gxclmem.h<br>
+base/gxclpage.c<br>
+base/gxclpage.h<br>
+base/gxclpath.c<br>
+base/gxclpath.h<br>
+base/gxclrast.c<br>
+base/gxclread.c<br>
+base/gxclrect.c<br>
+base/gxclthrd.c<br>
+base/gxclthrd.h<br>
+base/gxclutil.c<br>
+base/gxclzlib.c<br>
+base/gxcmap.c<br>
+base/gxcmap.h<br>
+base/gxcolor2.h<br>
+base/gxcomp.h<br>
+base/gxcoord.h<br>
+base/gxcpath.c<br>
+base/gxcpath.h<br>
+base/gxcspace.h<br>
+base/gxctable.c<br>
+base/gxctable.h<br>
+base/gxcvalue.h<br>
+base/gxdcconv.c<br>
+base/gxdcconv.h<br>
+base/gxdcolor.c<br>
+base/gxdcolor.h<br>
+base/gxdda.h<br>
+base/gxdevbuf.h<br>
+base/gxdevcli.h<br>
+base/gxdevice.h<br>
+base/gxdevmem.h<br>
+base/gxdevndi.c<br>
+base/gxdevrop.h<br>
+base/gxdevsop.h<br>
+base/gxdht.h<br>
+base/gxdhtres.h<br>
+base/gxdhtserial.c<br>
+base/gxdhtserial.h<br>
+base/gxdither.h<br>
+base/gxdownscale.c<br>
+base/gxdownscale.h<br>
+base/gxdtfill.h<br>
+base/gxfapi.c<br>
+base/gxfapi.h<br>
+base/gxfapiu.c<br>
+base/gxfapiu.h<br>
+base/gxfarith.h<br>
+base/gxfcache.h<br>
+base/gxfcid.h<br>
+base/gxfcmap.h<br>
+base/gxfcmap1.h<br>
+base/gxfill.c<br>
+base/gxfill.h<br>
+base/gxfillsl.h<br>
+base/gxfilltr.h<br>
+base/gxfillts.h<br>
+base/gxfixed.h<br>
+base/gxfmap.h<br>
+base/gxfont.h<br>
+base/gxfont0.h<br>
+base/gxfont0c.h<br>
+base/gxfont1.h<br>
+base/gxfont42.h<br>
+base/gxfrac.h<br>
+base/gxftype.h<br>
+base/gxfunc.h<br>
+base/gxgetbit.h<br>
+base/gxgstate.h<br>
+base/gxhintn.c<br>
+base/gxhintn.h<br>
+base/gxhintn1.c<br>
+base/gxhldevc.c<br>
+base/gxhldevc.h<br>
+base/gxht.c<br>
+base/gxht.h<br>
+base/gxht_thresh.c<br>
+base/gxht_thresh.h<br>
+base/gxhtbit.c<br>
+base/gxhttile.h<br>
+base/gxhttype.h<br>
+base/gxi12bit.c<br>
+base/gxi16bit.c<br>
+base/gxiclass.h<br>
+base/gxicolor.c<br>
+base/gxidata.c<br>
+base/gxifast.c<br>
+base/gximag3x.c<br>
+base/gximag3x.h<br>
+base/gximage.c<br>
+base/gximage.h<br>
+base/gximage1.c<br>
+base/gximage3.c<br>
+base/gximage3.h<br>
+base/gximage4.c<br>
+base/gximask.c<br>
+base/gximask.h<br>
+base/gximdecode.c<br>
+base/gximono.c<br>
+base/gxiodev.h<br>
+base/gxiparam.h<br>
+base/gxipixel.c<br>
+base/gxiscale.c<br>
+base/gxline.h<br>
+base/gxlum.h<br>
+base/gxmatrix.h<br>
+base/gxmclip.c<br>
+base/gxmclip.h<br>
+base/gxobj.h<br>
+base/gxoprect.c<br>
+base/gxoprect.h<br>
+base/gxp1fill.c<br>
+base/gxp1impl.h<br>
+base/gxpaint.c<br>
+base/gxpaint.h<br>
+base/gxpath.c<br>
+base/gxpath.h<br>
+base/gxpath2.c<br>
+base/gxpcache.h<br>
+base/gxpcmap.c<br>
+base/gxpcolor.h<br>
+base/gxpcopy.c<br>
+base/gxpdash.c<br>
+base/gxpflat.c<br>
+base/gxrplane.h<br>
+base/gxsample.c<br>
+base/gxsample.h<br>
+base/gxsamplp.h<br>
+base/gxscanc.c<br>
+base/gxscanc.h<br>
+base/gxshade.c<br>
+base/gxshade.h<br>
+base/gxshade1.c<br>
+base/gxshade4.c<br>
+base/gxshade4.h<br>
+base/gxshade6.c<br>
+base/gxstate.h<br>
+base/gxstdio.h<br>
+base/gxstroke.c<br>
+base/gxsync.c<br>
+base/gxsync.h<br>
+base/gxtext.h<br>
+base/gxtmap.h<br>
+base/gxttf.h<br>
+base/gxttfb.c<br>
+base/gxttfb.h<br>
+base/gxtype1.c<br>
+base/gxtype1.h<br>
+base/gxxfont.h<br>
+base/gzacpath.h<br>
+base/gzcpath.h<br>
+base/gzht.h<br>
+base/gzline.h<br>
+base/gzpath.h<br>
+base/gzspotan.c<br>
+base/gzspotan.h<br>
+base/gzstate.h<br>
+base/ijs.mak<br>
+base/instcopy<br>
+base/jbig2.mak<br>
+base/jerror_.h<br>
+base/jmemcust.c<br>
+base/jmemcust.h<br>
+base/jpeg.mak<br>
+base/jpegxr.mak<br>
+base/lcms2.mak<br>
+base/lcms2mt.mak<br>
+base/lcups.mak<br>
+base/lcupsi.mak<br>
+base/ldf_jb2.mak<br>
+base/lib.mak<br>
+base/locale_.h<br>
+base/lwf_jp2.mak<br>
+base/malloc_.h<br>
+base/math_.h<br>
+base/memento.c<br>
+base/memento.h<br>
+base/memory_.h<br>
+base/mkromfs.c<br>
+base/msvccmd.mak<br>
+base/msvclib.mak<br>
+base/msvctail.mak<br>
+base/openjpeg.mak<br>
+base/openvms.mak<br>
+base/openvms.mmk<br>
+base/pack_ps.c<br>
+base/pcwin.mak<br>
+base/pipe_.h<br>
+base/png.mak<br>
+base/png_.h<br>
+base/ramfs.c<br>
+base/ramfs.h<br>
+base/sa85d.c<br>
+base/sa85d.h<br>
+base/sa85x.h<br>
+base/saes.c<br>
+base/saes.h<br>
+base/sarc4.c<br>
+base/sarc4.h<br>
+base/sbcp.c<br>
+base/sbcp.h<br>
+base/sbtx.h<br>
+base/scanchar.h<br>
+base/scantab.c<br>
+base/scf.h<br>
+base/scfd.c<br>
+base/scfdgen.c<br>
+base/scfdtab.c<br>
+base/scfe.c<br>
+base/scfetab.c<br>
+base/scfparam.c<br>
+base/scfx.h<br>
+base/scommon.h<br>
+base/sdcparam.c<br>
+base/sdcparam.h<br>
+base/sdct.h<br>
+base/sdctc.c<br>
+base/sdctd.c<br>
+base/sdcte.c<br>
+base/sddparam.c<br>
+base/sdeparam.c<br>
+base/seexec.c<br>
+base/setjmp_.h<br>
+base/sfilter.h<br>
+base/sfilter1.c<br>
+base/sfilter2.c<br>
+base/sfxboth.c<br>
+base/sfxcommon.c<br>
+base/sfxfd.c<br>
+base/sfxstdio.c<br>
+base/shc.c<br>
+base/shc.h<br>
+base/sidscale.c<br>
+base/sidscale.h<br>
+base/siinterp.c<br>
+base/siinterp.h<br>
+base/simscale.c<br>
+base/simscale.h<br>
+base/siscale.c<br>
+base/siscale.h<br>
+base/siscale_cal.c<br>
+base/sisparam.h<br>
+base/sjbig2.c<br>
+base/sjbig2.h<br>
+base/sjbig2_luratech.c<br>
+base/sjbig2_luratech.h<br>
+base/sjpeg.h<br>
+base/sjpegc.c<br>
+base/sjpegd.c<br>
+base/sjpege.c<br>
+base/sjpx_luratech.c<br>
+base/sjpx_luratech.h<br>
+base/sjpx_none.c<br>
+base/sjpx_openjpeg.c<br>
+base/sjpx_openjpeg.h<br>
+base/slzwc.c<br>
+base/slzwd.c<br>
+base/slzwe.c<br>
+base/slzwx.h<br>
+base/smd5.c<br>
+base/smd5.h<br>
+base/smtf.h<br>
+base/spdiff.c<br>
+base/spdiffx.h<br>
+base/spngp.c<br>
+base/spngpx.h<br>
+base/spprint.c<br>
+base/spprint.h<br>
+base/spsdf.c<br>
+base/spsdf.h<br>
+base/srdline.h<br>
+base/srld.c<br>
+base/srle.c<br>
+base/srlx.h<br>
+base/ssha2.c<br>
+base/ssha2.h<br>
+base/sstring.c<br>
+base/sstring.h<br>
+base/stat_.h<br>
+base/std.h<br>
+base/stdint_.h<br>
+base/stdio_.h<br>
+base/stdpre.h<br>
+base/stream.c<br>
+base/stream.h<br>
+base/strimpl.h<br>
+base/string_.h<br>
+base/strmio.c<br>
+base/strmio.h<br>
+base/stub.mak<br>
+base/szlibc.c<br>
+base/szlibd.c<br>
+base/szlibe.c<br>
+base/szlibx.h<br>
+base/szlibxx.h<br>
+base/tiff.mak<br>
+base/time_.h<br>
+base/ttcalc.c<br>
+base/ttcalc.h<br>
+base/ttcommon.h<br>
+base/ttconf.h<br>
+base/ttconfig.h<br>
+base/ttfinp.c<br>
+base/ttfinp.h<br>
+base/ttfmain.c<br>
+base/ttfmemd.c<br>
+base/ttfmemd.h<br>
+base/ttfoutl.h<br>
+base/ttfsfnt.h<br>
+base/ttinterp.c<br>
+base/ttinterp.h<br>
+base/ttload.c<br>
+base/ttload.h<br>
+base/ttmisc.h<br>
+base/ttobjs.c<br>
+base/ttobjs.h<br>
+base/tttables.h<br>
+base/tttype.h<br>
+base/tttypes.h<br>
+base/ugcclib.mak<br>
+base/unistd_.h<br>
+base/unix-aux.mak<br>
+base/unix-dll.mak<br>
+base/unix-end.mak<br>
+base/unix-gcc.mak<br>
+base/unixansi.mak<br>
+base/unixhead.mak<br>
+base/unixinst.mak<br>
+base/unixlink.mak<br>
+base/valgrind.h<br>
+base/version.mak<br>
+base/vms_x_fix.h<br>
+base/vmsmath.h<br>
+base/windows_.h<br>
+base/winlib.mak<br>
+base/winplat.mak<br>
+base/winrtsup.cpp<br>
+base/winrtsup.h<br>
+base/wrfont.c<br>
+base/wrfont.h<br>
+base/write_t1.c<br>
+base/write_t1.h<br>
+base/write_t2.c<br>
+base/write_t2.h<br>
+base/x_.h<br>
+base/zlib.mak<br>
+configure.ac<br>
+contrib/gdevadmp.c<br>
+devices/contrib.mak<br>
+devices/devs.mak<br>
+devices/gdev3852.c<br>
+devices/gdev4081.c<br>
+devices/gdev8510.c<br>
+devices/gdev8bcm.c<br>
+devices/gdev8bcm.h<br>
+devices/gdevatx.c<br>
+devices/gdevbit.c<br>
+devices/gdevbj10.c<br>
+devices/gdevbjc.h<br>
+devices/gdevbjcl.c<br>
+devices/gdevbjcl.h<br>
+devices/gdevbmp.c<br>
+devices/gdevbmp.h<br>
+devices/gdevbmpc.c<br>
+devices/gdevccr.c<br>
+devices/gdevcdj.c<br>
+devices/gdevcfax.c<br>
+devices/gdevchameleon.c<br>
+devices/gdevcif.c<br>
+devices/gdevclj.c<br>
+devices/gdevcljc.c<br>
+devices/gdevcmykog.c<br>
+devices/gdevcslw.c<br>
+devices/gdevdfax.c<br>
+devices/gdevdjet.c<br>
+devices/gdevdjtc.c<br>
+devices/gdevdljm.c<br>
+devices/gdevdljm.h<br>
+devices/gdevdm24.c<br>
+devices/gdevdsp.c<br>
+devices/gdevdsp.h<br>
+devices/gdevdsp2.h<br>
+devices/gdevepsc.c<br>
+devices/gdevepsn.c<br>
+devices/gdevescp.c<br>
+devices/gdevfax.c<br>
+devices/gdevfax.h<br>
+devices/gdevfpng.c<br>
+devices/gdevhl7x.c<br>
+devices/gdevicov.c<br>
+devices/gdevijs.c<br>
+devices/gdevimgn.c<br>
+devices/gdevjbig2.c<br>
+devices/gdevjpeg.c<br>
+devices/gdevjpx.c<br>
+devices/gdevl31s.c<br>
+devices/gdevlbp8.c<br>
+devices/gdevlj56.c<br>
+devices/gdevlp8k.c<br>
+devices/gdevlxm.c<br>
+devices/gdevmeds.c<br>
+devices/gdevmeds.h<br>
+devices/gdevmgr.c<br>
+devices/gdevmgr.h<br>
+devices/gdevmiff.c<br>
+devices/gdevn533.c<br>
+devices/gdevo182.c<br>
+devices/gdevokii.c<br>
+devices/gdevpbm.c<br>
+devices/gdevpcl.c<br>
+devices/gdevpcl.h<br>
+devices/gdevpcx.c<br>
+devices/gdevpdfimg.c<br>
+devices/gdevpe.c<br>
+devices/gdevperm.c<br>
+devices/gdevphex.c<br>
+devices/gdevpjet.c<br>
+devices/gdevplan.c<br>
+devices/gdevplib.c<br>
+devices/gdevplib.h<br>
+devices/gdevpm.h<br>
+devices/gdevpng.c<br>
+devices/gdevpsd.c<br>
+devices/gdevpsd.h<br>
+devices/gdevpsim.c<br>
+devices/gdevpxut.c<br>
+devices/gdevpxut.h<br>
+devices/gdevrinkj.c<br>
+devices/gdevsj48.c<br>
+devices/gdevsnfb.c<br>
+devices/gdevsppr.c<br>
+devices/gdevstc.c<br>
+devices/gdevstc.h<br>
+devices/gdevstc1.c<br>
+devices/gdevstc2.c<br>
+devices/gdevstc3.c<br>
+devices/gdevstc4.c<br>
+devices/gdevtfax.c<br>
+devices/gdevtfax.h<br>
+devices/gdevtfnx.c<br>
+devices/gdevtifs.c<br>
+devices/gdevtifs.h<br>
+devices/gdevtknk.c<br>
+devices/gdevtrac.c<br>
+devices/gdevtsep.c<br>
+devices/gdevupd.c<br>
+devices/gdevwpr2.c<br>
+devices/gdevx.c<br>
+devices/gdevx.h<br>
+devices/gdevxalt.c<br>
+devices/gdevxcf.c<br>
+devices/gdevxcmp.c<br>
+devices/gdevxcmp.h<br>
+devices/gdevxini.c<br>
+devices/gdevxres.c<br>
+devices/gxfcopy.c<br>
+devices/gxfcopy.h<br>
+devices/minftrsz.c<br>
+devices/minftrsz.h<br>
+devices/rinkj/evenbetter-rll.c<br>
+devices/rinkj/evenbetter-rll.h<br>
+devices/rinkj/rinkj-byte-stream.c<br>
+devices/rinkj/rinkj-byte-stream.h<br>
+devices/rinkj/rinkj-config.c<br>
+devices/rinkj/rinkj-config.h<br>
+devices/rinkj/rinkj-device.c<br>
+devices/rinkj/rinkj-device.h<br>
+devices/rinkj/rinkj-dither.c<br>
+devices/rinkj/rinkj-dither.h<br>
+devices/rinkj/rinkj-epson870.c<br>
+devices/rinkj/rinkj-epson870.h<br>
+devices/rinkj/rinkj-screen-eb.c<br>
+devices/rinkj/rinkj-screen-eb.h<br>
+devices/vector/gdevagl.c<br>
+devices/vector/gdevagl.h<br>
+devices/vector/gdevpdf.c<br>
+devices/vector/gdevpdfb.c<br>
+devices/vector/gdevpdfb.h<br>
+devices/vector/gdevpdfc.c<br>
+devices/vector/gdevpdfc.h<br>
+devices/vector/gdevpdfd.c<br>
+devices/vector/gdevpdfe.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfg.h<br>
+devices/vector/gdevpdfi.c<br>
+devices/vector/gdevpdfj.c<br>
+devices/vector/gdevpdfk.c<br>
+devices/vector/gdevpdfm.c<br>
+devices/vector/gdevpdfo.c<br>
+devices/vector/gdevpdfo.h<br>
+devices/vector/gdevpdfp.c<br>
+devices/vector/gdevpdfr.c<br>
+devices/vector/gdevpdft.c<br>
+devices/vector/gdevpdfu.c<br>
+devices/vector/gdevpdfv.c<br>
+devices/vector/gdevpdfx.h<br>
+devices/vector/gdevpdt.c<br>
+devices/vector/gdevpdt.h<br>
+devices/vector/gdevpdtb.c<br>
+devices/vector/gdevpdtb.h<br>
+devices/vector/gdevpdtc.c<br>
+devices/vector/gdevpdtd.c<br>
+devices/vector/gdevpdtd.h<br>
+devices/vector/gdevpdte.c<br>
+devices/vector/gdevpdtf.c<br>
+devices/vector/gdevpdtf.h<br>
+devices/vector/gdevpdti.c<br>
+devices/vector/gdevpdti.h<br>
+devices/vector/gdevpdts.c<br>
+devices/vector/gdevpdts.h<br>
+devices/vector/gdevpdtt.c<br>
+devices/vector/gdevpdtt.h<br>
+devices/vector/gdevpdtv.c<br>
+devices/vector/gdevpdtv.h<br>
+devices/vector/gdevpdtw.c<br>
+devices/vector/gdevpdtw.h<br>
+devices/vector/gdevpdtx.h<br>
+devices/vector/gdevpsdf.h<br>
+devices/vector/gdevpsdi.c<br>
+devices/vector/gdevpsdp.c<br>
+devices/vector/gdevpsds.c<br>
+devices/vector/gdevpsds.h<br>
+devices/vector/gdevpsdu.c<br>
+devices/vector/gdevpsf.h<br>
+devices/vector/gdevpsf1.c<br>
+devices/vector/gdevpsf2.c<br>
+devices/vector/gdevpsfm.c<br>
+devices/vector/gdevpsft.c<br>
+devices/vector/gdevpsfu.c<br>
+devices/vector/gdevpsfx.c<br>
+devices/vector/gdevpsu.c<br>
+devices/vector/gdevpsu.h<br>
+devices/vector/gdevpx.c<br>
+devices/vector/gdevtxtw.c<br>
+devices/vector/gdevxps.c<br>
+devices/vector/opdfread.ps<br>
+devices/vector/whitelst.c<br>
+devices/vector/whitelst.h<br>
+doc/API.htm<br>
+doc/C-style.htm<br>
+doc/Commprod.htm<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+gpdl/gpdl.mak<br>
+gpdl/jbig2top.c<br>
+gpdl/jp2ktop.c<br>
+gpdl/jpgtop.c<br>
+gpdl/pngtop.c<br>
+gpdl/psitop.c<br>
+gpdl/pspcl6_gcc.mak<br>
+gpdl/pspcl6_msvc.mak<br>
+gpdl/pwgtop.c<br>
+gpdl/tifftop.c<br>
+ijs/Makefile.am<br>
+ijs/configure.ac<br>
+ijs/ijs.c<br>
+ijs/ijs.h<br>
+ijs/ijs_client.c<br>
+ijs/ijs_client.h<br>
+ijs/ijs_client_example.c<br>
+ijs/ijs_exec_unix.c<br>
+ijs/ijs_exec_win.c<br>
+ijs/ijs_server.c<br>
+ijs/ijs_server_example.c<br>
+ijs/unistd_.h<br>
+ios/ios_arch-arm.h<br>
+ios/ios_arch-x86.h<br>
+jbig2dec/config_win32.h<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2.h<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_arith.h<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+jbig2dec/jbig2_arith_iaid.h<br>
+jbig2dec/jbig2_arith_int.c<br>
+jbig2dec/jbig2_arith_int.h<br>
+jbig2dec/jbig2_generic.c<br>
+jbig2dec/jbig2_generic.h<br>
+jbig2dec/jbig2_halftone.c<br>
+jbig2dec/jbig2_halftone.h<br>
+jbig2dec/jbig2_huffman.c<br>
+jbig2dec/jbig2_huffman.h<br>
+jbig2dec/jbig2_hufftab.c<br>
+jbig2dec/jbig2_hufftab.h<br>
+jbig2dec/jbig2_image.c<br>
+jbig2dec/jbig2_image.h<br>
+jbig2dec/jbig2_image_pbm.c<br>
+jbig2dec/jbig2_image_png.c<br>
+jbig2dec/jbig2_image_rw.h<br>
+jbig2dec/jbig2_mmr.c<br>
+jbig2dec/jbig2_mmr.h<br>
+jbig2dec/jbig2_page.c<br>
+jbig2dec/jbig2_page.h<br>
+jbig2dec/jbig2_priv.h<br>
+jbig2dec/jbig2_refinement.c<br>
+jbig2dec/jbig2_refinement.h<br>
+jbig2dec/jbig2_segment.c<br>
+jbig2dec/jbig2_segment.h<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+jbig2dec/jbig2_symbol_dict.h<br>
+jbig2dec/jbig2_text.c<br>
+jbig2dec/jbig2_text.h<br>
+jbig2dec/jbig2dec.c<br>
+jbig2dec/memcmp.c<br>
+jbig2dec/os_types.h<br>
+jbig2dec/pbm2png.c<br>
+lib/FCOfontmap-PCLPS3<br>
+lib/FCOfontmap-PS3<br>
+lib/Fontmap.ATB<br>
+lib/Fontmap.ATM<br>
+lib/Fontmap.OS2<br>
+lib/Fontmap.SGI<br>
+lib/Fontmap.Sol<br>
+lib/Fontmap.Ult<br>
+lib/Fontmap.VMS<br>
+lib/align.ps<br>
+lib/caption.ps<br>
+lib/cat.ps<br>
+lib/cid2code.ps<br>
+lib/docie.ps<br>
+lib/font2pcl.ps<br>
+lib/gs_ce_e.ps<br>
+lib/gs_il2_e.ps<br>
+lib/gs_kanji.ps<br>
+lib/gs_ksb_e.ps<br>
+lib/gs_lgo_e.ps<br>
+lib/gs_lgx_e.ps<br>
+lib/gs_wl1_e.ps<br>
+lib/gs_wl2_e.ps<br>
+lib/gs_wl5_e.ps<br>
+lib/gslp.ps<br>
+lib/gsnup.ps<br>
+lib/image-qa.ps<br>
+lib/jispaper.ps<br>
+lib/lines.ps<br>
+lib/mkcidfm.ps<br>
+lib/pdf2dsc.ps<br>
+lib/pdf_info.ps<br>
+lib/pfbtopfa.ps<br>
+lib/ppath.ps<br>
+lib/pphs.ps<br>
+lib/prfont.ps<br>
+lib/ps2ai.ps<br>
+lib/ps2epsi.ps<br>
+lib/rollconv.ps<br>
+lib/stcinfo.ps<br>
+lib/stcolor.ps<br>
+lib/stocht.ps<br>
+lib/traceimg.ps<br>
+lib/traceop.ps<br>
+lib/uninfo.ps<br>
+lib/viewcmyk.ps<br>
+lib/viewgif.ps<br>
+lib/viewmiff.ps<br>
+lib/viewpbm.ps<br>
+lib/viewpcx.ps<br>
+lib/viewps2a.ps<br>
+lib/viewraw.ps<br>
+lib/viewrgb.ps<br>
+lib/winmaps.ps<br>
+lib/zeroline.ps<br>
+pcl/pcl/pcbiptrn.c<br>
+pcl/pcl/pcbiptrn.h<br>
+pcl/pcl/pccid.c<br>
+pcl/pcl/pccid.h<br>
+pcl/pcl/pccolor.c<br>
+pcl/pcl/pccoord.h<br>
+pcl/pcl/pccprint.c<br>
+pcl/pcl/pccsbase.c<br>
+pcl/pcl/pccsbase.h<br>
+pcl/pcl/pcdict.h<br>
+pcl/pcl/pcdither.c<br>
+pcl/pcl/pcdither.h<br>
+pcl/pcl/pcdraw.c<br>
+pcl/pcl/pcdraw.h<br>
+pcl/pcl/pcfont.c<br>
+pcl/pcl/pcfont.h<br>
+pcl/pcl/pcfontpg.c<br>
+pcl/pcl/pcfontst.h<br>
+pcl/pcl/pcfrgrnd.c<br>
+pcl/pcl/pcfrgrnd.h<br>
+pcl/pcl/pcfsel.c<br>
+pcl/pcl/pcfsel.h<br>
+pcl/pcl/pcht.c<br>
+pcl/pcl/pcht.h<br>
+pcl/pcl/pcident.c<br>
+pcl/pcl/pcident.h<br>
+pcl/pcl/pcimpl.c<br>
+pcl/pcl/pcindxed.c<br>
+pcl/pcl/pcindxed.h<br>
+pcl/pcl/pcjob.c<br>
+pcl/pcl/pcl.mak<br>
+pcl/pcl/pcl_top.mak<br>
+pcl/pcl/pclookup.c<br>
+pcl/pcl/pclookup.h<br>
+pcl/pcl/pcmacros.c<br>
+pcl/pcl/pcmisc.c<br>
+pcl/pcl/pcmtx3.c<br>
+pcl/pcl/pcmtx3.h<br>
+pcl/pcl/pcommand.c<br>
+pcl/pcl/pcommand.h<br>
+pcl/pcl/pcpage.c<br>
+pcl/pcl/pcpage.h<br>
+pcl/pcl/pcpalet.c<br>
+pcl/pcl/pcpalet.h<br>
+pcl/pcl/pcparam.h<br>
+pcl/pcl/pcparse.c<br>
+pcl/pcl/pcparse.h<br>
+pcl/pcl/pcpatrn.c<br>
+pcl/pcl/pcpatrn.h<br>
+pcl/pcl/pcpattyp.h<br>
+pcl/pcl/pcpatxfm.c<br>
+pcl/pcl/pcpatxfm.h<br>
+pcl/pcl/pcrect.c<br>
+pcl/pcl/pcsfont.c<br>
+pcl/pcl/pcstate.h<br>
+pcl/pcl/pcstatus.c<br>
+pcl/pcl/pcsymbol.c<br>
+pcl/pcl/pcsymbol.h<br>
+pcl/pcl/pctext.c<br>
+pcl/pcl/pctop.c<br>
+pcl/pcl/pctop.h<br>
+pcl/pcl/pctpm.h<br>
+pcl/pcl/pcuptrn.c<br>
+pcl/pcl/pcuptrn.h<br>
+pcl/pcl/pcursor.c<br>
+pcl/pcl/pcursor.h<br>
+pcl/pcl/pcwhtidx.c<br>
+pcl/pcl/pcwhtidx.h<br>
+pcl/pcl/pcxfmst.h<br>
+pcl/pcl/pgchar.c<br>
+pcl/pcl/pgcolor.c<br>
+pcl/pcl/pgconfig.c<br>
+pcl/pcl/pgdraw.c<br>
+pcl/pcl/pgdraw.h<br>
+pcl/pcl/pgfdata.c<br>
+pcl/pcl/pgfdata.h<br>
+pcl/pcl/pgfont.c<br>
+pcl/pcl/pgfont.h<br>
+pcl/pcl/pgframe.c<br>
+pcl/pcl/pggeom.c<br>
+pcl/pcl/pggeom.h<br>
+pcl/pcl/pginit.c<br>
+pcl/pcl/pginit.h<br>
+pcl/pcl/pglabel.c<br>
+pcl/pcl/pglfill.c<br>
+pcl/pcl/pgmand.h<br>
+pcl/pcl/pgmisc.c<br>
+pcl/pcl/pgmisc.h<br>
+pcl/pcl/pgparse.c<br>
+pcl/pcl/pgpoly.c<br>
+pcl/pcl/pgstate.h<br>
+pcl/pcl/pgvector.c<br>
+pcl/pcl/rtgmode.c<br>
+pcl/pcl/rtgmode.h<br>
+pcl/pcl/rtmisc.c<br>
+pcl/pcl/rtmisc.h<br>
+pcl/pcl/rtraster.c<br>
+pcl/pcl/rtraster.h<br>
+pcl/pcl/rtrstcmp.c<br>
+pcl/pcl/rtrstcmp.h<br>
+pcl/pcl/rtrstst.h<br>
+pcl/pl/pjparse.c<br>
+pcl/pl/pjparse.h<br>
+pcl/pl/pjparsei.c<br>
+pcl/pl/pjtop.c<br>
+pcl/pl/pjtop.h<br>
+pcl/pl/pl.mak<br>
+pcl/pl/plalloc.c<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plchar.c<br>
+pcl/pl/plchar.h<br>
+pcl/pl/pldebug.h<br>
+pcl/pl/pldict.c<br>
+pcl/pl/pldict.h<br>
+pcl/pl/pldraw.c<br>
+pcl/pl/pldraw.h<br>
+pcl/pl/plfapi.c<br>
+pcl/pl/plfapi.h<br>
+pcl/pl/plfont.c<br>
+pcl/pl/plfont.h<br>
+pcl/pl/plftable.c<br>
+pcl/pl/plftable.h<br>
+pcl/pl/plht.c<br>
+pcl/pl/plht.h<br>
+pcl/pl/plimpl.c<br>
+pcl/pl/pllfont.c<br>
+pcl/pl/pllfont.h<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+pcl/pl/plparams.c<br>
+pcl/pl/plparams.h<br>
+pcl/pl/plparse.h<br>
+pcl/pl/plromfs.mak<br>
+pcl/pl/plsymbol.c<br>
+pcl/pl/plsymbol.h<br>
+pcl/pl/pltop.c<br>
+pcl/pl/pltop.h<br>
+pcl/pl/pluchar.c<br>
+pcl/pl/plufont.c<br>
+pcl/pl/plufstlp.c<br>
+pcl/pl/plufstlp.h<br>
+pcl/pl/plufstlp1.c<br>
+pcl/pl/plulfont.c<br>
+pcl/pl/plvalue.c<br>
+pcl/pl/plvalue.h<br>
+pcl/pl/plvocab.c<br>
+pcl/pl/plvocab.h<br>
+pcl/pl/plwimg.c<br>
+pcl/pl/plwimg.h<br>
+pcl/pl/plwmainc.c<br>
+pcl/pl/plwreg.c<br>
+pcl/pl/plwreg.h<br>
+pcl/pl/plwres.h<br>
+pcl/pl/realmain.c<br>
+pcl/pxl/pxasm.ps<br>
+pcl/pxl/pxattr.h<br>
+pcl/pxl/pxbfont.c<br>
+pcl/pxl/pxbfont.h<br>
+pcl/pxl/pxbfont.ps<br>
+pcl/pxl/pxcet.txt<br>
+pcl/pxl/pxdict.h<br>
+pcl/pxl/pxdiff.txt<br>
+pcl/pxl/pxenum.h<br>
+pcl/pxl/pxerrors.c<br>
+pcl/pxl/pxerrors.h<br>
+pcl/pxl/pxffont.c<br>
+pcl/pxl/pxfont.c<br>
+pcl/pxl/pxfont.h<br>
+pcl/pxl/pxfts.txt<br>
+pcl/pxl/pxgstate.c<br>
+pcl/pxl/pxgstate.h<br>
+pcl/pxl/pximage.c<br>
+pcl/pxl/pximpl.c<br>
+pcl/pxl/pxink.c<br>
+pcl/pxl/pxl.mak<br>
+pcl/pxl/pxlib.txt<br>
+pcl/pxl/pxoper.h<br>
+pcl/pxl/pxpaint.c<br>
+pcl/pxl/pxparse.c<br>
+pcl/pxl/pxparse.h<br>
+pcl/pxl/pxptable.c<br>
+pcl/pxl/pxptable.h<br>
+pcl/pxl/pxpthr.c<br>
+pcl/pxl/pxpthr.h<br>
+pcl/pxl/pxsessio.c<br>
+pcl/pxl/pxspec.txt<br>
+pcl/pxl/pxstate.c<br>
+pcl/pxl/pxstate.h<br>
+pcl/pxl/pxstream.c<br>
+pcl/pxl/pxsymbol.ps<br>
+pcl/pxl/pxsymbol.psc<br>
+pcl/pxl/pxsymbol.psh<br>
+pcl/pxl/pxtag.h<br>
+pcl/pxl/pxtop.c<br>
+pcl/pxl/pxvalue.c<br>
+pcl/pxl/pxvalue.h<br>
+pcl/tools/pxlasm.py<br>
+pcl/tools/pxldis.py<br>
+pcl/tools/suite.tcl<br>
+psi/bfont.h<br>
+psi/btoken.h<br>
+psi/dmmain.c<br>
+psi/dmmain.r<br>
+psi/dpmain.c<br>
+psi/dscparse.c<br>
+psi/dscparse.h<br>
+psi/dstack.h<br>
+psi/dwdll.c<br>
+psi/dwdll.h<br>
+psi/dwimg.c<br>
+psi/dwimg.h<br>
+psi/dwmain.c<br>
+psi/dwmain.rc<br>
+psi/dwmainc.c<br>
+psi/dwnodll.c<br>
+psi/dwreg.c<br>
+psi/dwreg.h<br>
+psi/dwres.h<br>
+psi/dwtext.c<br>
+psi/dwtext.h<br>
+psi/dwtrace.c<br>
+psi/dwtrace.h<br>
+psi/dxmain.c<br>
+psi/dxmainc.c<br>
+psi/estack.h<br>
+psi/files.h<br>
+psi/ghost.h<br>
+psi/gs.c<br>
+psi/gsdll.c<br>
+psi/gsdll2.rc<br>
+psi/gsdll32.rc<br>
+psi/gserver.c<br>
+psi/gsos2.rc<br>
+psi/ialloc.c<br>
+psi/ialloc.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+psi/iastate.h<br>
+psi/iastruct.h<br>
+psi/ibnum.c<br>
+psi/ibnum.h<br>
+psi/ichar.h<br>
+psi/ichar1.h<br>
+psi/icharout.h<br>
+psi/icid.h<br>
+psi/icie.h<br>
+psi/icolor.h<br>
+psi/iconf.c<br>
+psi/iconf.h<br>
+psi/icontext.c<br>
+psi/icontext.h<br>
+psi/icremap.h<br>
+psi/icsmap.h<br>
+psi/icstate.h<br>
+psi/iddict.h<br>
+psi/iddstack.h<br>
+psi/idebug.c<br>
+psi/idebug.h<br>
+psi/idict.c<br>
+psi/idict.h<br>
+psi/idictdef.h<br>
+psi/idicttpl.h<br>
+psi/idisp.c<br>
+psi/idisp.h<br>
+psi/idosave.h<br>
+psi/idparam.c<br>
+psi/idparam.h<br>
+psi/idsdata.h<br>
+psi/idstack.c<br>
+psi/idstack.h<br>
+psi/ierrors.h<br>
+psi/iesdata.h<br>
+psi/iestack.h<br>
+psi/ifapi.h<br>
+psi/ifcid.h<br>
+psi/ifilter.h<br>
+psi/ifilter2.h<br>
+psi/ifont.h<br>
+psi/ifont1.h<br>
+psi/ifont2.h<br>
+psi/ifont42.h<br>
+psi/ifrpred.h<br>
+psi/ifunc.h<br>
+psi/ifwpred.h<br>
+psi/igc.c<br>
+psi/igc.h<br>
+psi/igcref.c<br>
+psi/igcstr.c<br>
+psi/igcstr.h<br>
+psi/igstate.h<br>
+psi/iht.h<br>
+psi/iimage.h<br>
+psi/iinit.c<br>
+psi/iinit.h<br>
+psi/ilevel.h<br>
+psi/ilocate.c<br>
+psi/imain.c<br>
+psi/imain.h<br>
+psi/imainarg.c<br>
+psi/imainarg.h<br>
+psi/imemory.h<br>
+psi/iminst.h<br>
+psi/iname.c<br>
+psi/iname.h<br>
+psi/inamedef.h<br>
+psi/inameidx.h<br>
+psi/inames.h<br>
+psi/inamestr.h<br>
+psi/inobtokn.c<br>
+psi/inouparm.c<br>
+psi/int.mak<br>
+psi/interp.c<br>
+psi/interp.h<br>
+psi/iosdata.h<br>
+psi/iostack.h<br>
+psi/ipacked.h<br>
+psi/iparam.c<br>
+psi/iparam.h<br>
+psi/iparray.h<br>
+psi/ipcolor.h<br>
+psi/iplugin.c<br>
+psi/iplugin.h<br>
+psi/ireclaim.c<br>
+psi/iref.h<br>
+psi/isave.c<br>
+psi/isave.h<br>
+psi/iscan.c<br>
+psi/iscan.h<br>
+psi/iscanbin.c<br>
+psi/iscanbin.h<br>
+psi/iscannum.c<br>
+psi/iscannum.h<br>
+psi/isdata.h<br>
+psi/isstate.h<br>
+psi/istack.c<br>
+psi/istack.h<br>
+psi/istkparm.h<br>
+psi/istream.h<br>
+psi/istruct.h<br>
+psi/itoken.h<br>
+psi/iutil.c<br>
+psi/iutil.h<br>
+psi/iutil2.c<br>
+psi/iutil2.h<br>
+psi/ivmem2.h<br>
+psi/ivmspace.h<br>
+psi/main.h<br>
+psi/mkfilelt.cpp<br>
+psi/msvc.mak<br>
+psi/msvc32.mak<br>
+psi/msvc64.mak<br>
+psi/nsisinst.nsi<br>
+psi/oparc.h<br>
+psi/opcheck.h<br>
+psi/opdef.h<br>
+psi/oper.h<br>
+psi/opextern.h<br>
+psi/os2.mak<br>
+psi/ostack.h<br>
+psi/psapi.c<br>
+psi/psapi.h<br>
+psi/psromfs.mak<br>
+psi/store.h<br>
+psi/zalg.c<br>
+psi/zarith.c<br>
+psi/zarray.c<br>
+psi/zbfont.c<br>
+psi/zbseq.c<br>
+psi/zcfont.c<br>
+psi/zchar.c<br>
+psi/zchar1.c<br>
+psi/zchar2.c<br>
+psi/zchar32.c<br>
+psi/zchar42.c<br>
+psi/zchar42.h<br>
+psi/zcharout.c<br>
+psi/zcharx.c<br>
+psi/zcid.c<br>
+psi/zcie.c<br>
+psi/zcie.h<br>
+psi/zcolor.c<br>
+psi/zcolor.h<br>
+psi/zcolor1.c<br>
+psi/zcolor2.c<br>
+psi/zcolor3.c<br>
+psi/zcontrol.c<br>
+psi/zcrd.c<br>
+psi/zcsindex.c<br>
+psi/zcspixel.c<br>
+psi/zcssepr.c<br>
+psi/zdevcal.c<br>
+psi/zdevice.c<br>
+psi/zdevice2.c<br>
+psi/zdfilter.c<br>
+psi/zdict.c<br>
+psi/zdouble.c<br>
+psi/zdps1.c<br>
+psi/zdscpars.c<br>
+psi/zfaes.c<br>
+psi/zfapi.c<br>
+psi/zfarc4.c<br>
+psi/zfbcp.c<br>
+psi/zfcid.c<br>
+psi/zfcid0.c<br>
+psi/zfcid1.c<br>
+psi/zfcmap.c<br>
+psi/zfdctd.c<br>
+psi/zfdcte.c<br>
+psi/zfdecode.c<br>
+psi/zfile.c<br>
+psi/zfile.h<br>
+psi/zfile1.c<br>
+psi/zfileio.c<br>
+psi/zfilter.c<br>
+psi/zfilter2.c<br>
+psi/zfimscale.c<br>
+psi/zfjbig2.c<br>
+psi/zfjpx.c<br>
+psi/zfmd5.c<br>
+psi/zfont.c<br>
+psi/zfont0.c<br>
+psi/zfont1.c<br>
+psi/zfont2.c<br>
+psi/zfont32.c<br>
+psi/zfont42.c<br>
+psi/zfontenum.c<br>
+psi/zform.c<br>
+psi/zfproc.c<br>
+psi/zfrsd.c<br>
+psi/zfrsd.h<br>
+psi/zfsample.c<br>
+psi/zfsha2.c<br>
+psi/zfunc.c<br>
+psi/zfunc.h<br>
+psi/zfunc0.c<br>
+psi/zfunc3.c<br>
+psi/zfunc4.c<br>
+psi/zfzlib.c<br>
+psi/zgeneric.c<br>
+psi/zgstate.c<br>
+psi/zht.c<br>
+psi/zht1.c<br>
+psi/zht2.c<br>
+psi/zht2.h<br>
+psi/zicc.c<br>
+psi/zicc.h<br>
+psi/zimage.c<br>
+psi/zimage3.c<br>
+psi/ziodev.c<br>
+psi/ziodev2.c<br>
+psi/ziodevsc.c<br>
+psi/zmath.c<br>
+psi/zmatrix.c<br>
+psi/zmedia2.c<br>
+psi/zmisc.c<br>
+psi/zmisc1.c<br>
+psi/zmisc2.c<br>
+psi/zmisc3.c<br>
+psi/zncdummy.c<br>
+psi/zpacked.c<br>
+psi/zpaint.c<br>
+psi/zpath.c<br>
+psi/zpath1.c<br>
+psi/zpcolor.c<br>
+psi/zpdf_r6.c<br>
+psi/zpdfops.c<br>
+psi/zrelbit.c<br>
+psi/zshade.c<br>
+psi/zstack.c<br>
+psi/zstring.c<br>
+psi/zsysvm.c<br>
+psi/ztoken.c<br>
+psi/ztrans.c<br>
+psi/ztrap.c<br>
+psi/ztype.c<br>
+psi/zupath.c<br>
+psi/zusparam.c<br>
+psi/zutf8.c<br>
+psi/zvmem.c<br>
+psi/zvmem2.c<br>
+psi/zwinutf8.c<br>
+toolbin/GenSubstCID.ps<br>
+toolbin/afmutil.py<br>
+toolbin/color/icc_creator/ICC_Creator/CIELAB.h<br>
+toolbin/color/icc_creator/ICC_Creator/ICC_Creator.cpp<br>
+toolbin/color/icc_creator/ICC_Creator/ICC_Creator.h<br>
+toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.cpp<br>
+toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.h<br>
+toolbin/color/icc_creator/ICC_Creator/icc_create.cpp<br>
+toolbin/color/icc_creator/ICC_Creator/icc_create.h<br>
+toolbin/color/icc_creator/README.txt<br>
+toolbin/encs2c.ps<br>
+toolbin/errlist.tcl<br>
+toolbin/extractFonts.ps<br>
+toolbin/extractICCprofiles.ps<br>
+toolbin/gen_ldf_jb2.py<br>
+toolbin/genfontmap.ps<br>
+toolbin/gitlog2changelog.py<br>
+toolbin/gsmake.tcl<br>
+toolbin/halftone/gen_ordered/gen_ordered_main.c<br>
+toolbin/halftone/gen_stochastic/gen_stochastic.c<br>
+toolbin/headers.tcl<br>
+toolbin/jpxtopdf.c<br>
+toolbin/leaks.tcl<br>
+toolbin/makehist.tcl<br>
+toolbin/memory.py<br>
+toolbin/ocheck.py<br>
+toolbin/pre.tcl<br>
+toolbin/precheck.tcl<br>
+toolbin/split_changelog.py<br>
+toolbin/suite.tcl<br>
+toolbin/tests/build_revision.py<br>
+toolbin/tests/check_all.py<br>
+toolbin/tests/check_comments.py<br>
+toolbin/tests/check_dirs.py<br>
+toolbin/tests/check_docrefs.py<br>
+toolbin/tests/cmpi.py<br>
+toolbin/tests/compare_checksumdb.py<br>
+toolbin/tests/compare_checksums.py<br>
+toolbin/tests/dump_checksum.py<br>
+toolbin/tests/dump_checksum_plus.py<br>
+toolbin/tests/dump_checksum_raw.py<br>
+toolbin/tests/fuzzy.c<br>
+toolbin/tests/get_baseline_log.py<br>
+toolbin/tests/get_baselines.py<br>
+toolbin/tests/gscheck_all.py<br>
+toolbin/tests/gscheck_fuzzypdf.py<br>
+toolbin/tests/gscheck_pdfwrite.py<br>
+toolbin/tests/gscheck_raster.py<br>
+toolbin/tests/gscheck_testfiles.py<br>
+toolbin/tests/gsconf.py<br>
+toolbin/tests/gsparamsets.py<br>
+toolbin/tests/gssum.py<br>
+toolbin/tests/gstestgs.py<br>
+toolbin/tests/gstestutils.py<br>
+toolbin/tests/gsutil.py<br>
+toolbin/tests/make_baselinedb.py<br>
+toolbin/tests/make_testdb.py<br>
+toolbin/tests/make_two_pdfversions<br>
+toolbin/tests/make_two_versions<br>
+toolbin/tests/myoptparse.py<br>
+toolbin/tests/rasterdb.py<br>
+toolbin/tests/revert_baseline<br>
+toolbin/tests/revert_pdfbaseline<br>
+toolbin/tests/run_nightly.py<br>
+toolbin/tests/run_parallel<br>
+toolbin/tests/run_regression.py<br>
+toolbin/tests/testdiff.py<br>
+toolbin/tests/update_baseline.py<br>
+toolbin/tests/update_specific<br>
+toolbin/tmake.tcl<br>
+xps/ghostxps.h<br>
+xps/xps.mak<br>
+xps/xpsanalyze.c<br>
+xps/xpscff.c<br>
+xps/xpscolor.c<br>
+xps/xpscommon.c<br>
+xps/xpscrc.c<br>
+xps/xpsdoc.c<br>
+xps/xpsfapi.c<br>
+xps/xpsfapi.h<br>
+xps/xpsfont.c<br>
+xps/xpsglyphs.c<br>
+xps/xpsgradient.c<br>
+xps/xpshash.c<br>
+xps/xpsimage.c<br>
+xps/xpsjpeg.c<br>
+xps/xpsjxr.c<br>
+xps/xpsmem.c<br>
+xps/xpsopacity.c<br>
+xps/xpspage.c<br>
+xps/xpspath.c<br>
+xps/xpspng.c<br>
+xps/xpsresource.c<br>
+xps/xpsromfs.mak<br>
+xps/xpstiff.c<br>
+xps/xpstile.c<br>
+xps/xpstop.c<br>
+xps/xpsttf.c<br>
+xps/xpsutf.c<br>
+xps/xpsvisual.c<br>
+xps/xpsxml.c<br>
+xps/xpszip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-09 09:40:05 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=87688cd48fb52c305e159b785bd184232426a766">87688cd48fb52c305e159b785bd184232426a766</a>
+<blockquote>
+<p>
+ Bug 702322: fix uninitalized data reads<br>
+<br>
+ gs_scan_token() keeps a local copy of the scanner state, and copies from and to<br>
+ the scanner state that is passed into it. There are several code paths that<br>
+ can leave some important entries in the structure uninitalized when we copy the<br>
+ local copy to the parameter.<br>
+<br>
+ This just ensures those specific entries are always set to *something* sane.<br>
+<br>
+psi/iscan.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-09 09:07:38 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c96962212ed44463b3bd5cf34f3f790e9d14cd0b">c96962212ed44463b3bd5cf34f3f790e9d14cd0b</a>
+<blockquote>
+<p>
+ Clarify path matching for SAFER controls<br>
+<br>
+ Make it explicit that the 'form' of the paths (e.g. absolute vs relative) must<br>
+ match between --permit-file-* paramters and the actual path used to reference<br>
+ the file<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-08 16:06:44 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ebabebad34a3811230b7bfe351eface7f5efc8a9">ebabebad34a3811230b7bfe351eface7f5efc8a9</a>
+<blockquote>
+<p>
+ PostScript interpreter - don't leave A85Decode pdf_rules uninitialised<br>
+<br>
+ Bug #702319 &quot;Read of uninitialized value according to valgrind...&quot;<br>
+<br>
+ There are a number of other bugs which relate to this particular problem:<br>
+ 690976, 692983 and 693485. The problem has come about as a cumulative<br>
+ result of working on these bugs.<br>
+<br>
+ Starting with commit :<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=e0ecca32ecd12dae3310fac4b65dc224031c85a2<br>
+ for bug 690976 a new flag 'pdf_rules' was added to the Ascii85Decode<br>
+ state. This is initialised from the dictionary operand in PostScript<br>
+ by zA85D() in zfdecode.c. When this flag is true the ASCII85Decode<br>
+ filter will silently accept just '~' as a valid termination for a string<br>
+ (should be '~&gt;').<br>
+<br>
+ However this is not the only way to initialise an Ascii85Decode filter,<br>
+ the PostScript token scanner can also use s_A85D_init_inline() which<br>
+ does not initialise the flag. From this point we have the potential<br>
+ for testing an unitialised variable in s_A85D_process(), if we get an<br>
+ encoded string which terminates with a '~' and the filter was<br>
+ instantiated from PostScript.<br>
+<br>
+ When fixing bug 692983, this commit:<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d561224d1495321d40012230abbcf835b298f557<br>
+<br>
+ Alex specifically added a comment that pdf_rules must not be initialised<br>
+ in s_A85D_init_inline() but didn't say why! The reason is that the<br>
+ regular stream initialisation code (s_A85D-init) also uses this inline<br>
+ function, so if it altered pdf_rules it would overwrite the value<br>
+ previously set by zA85D().<br>
+<br>
+ Since the initialisation is done in two places, the only way to fix this<br>
+ is to initialise pdf_rules in gs_scan_token() which this commit duly<br>
+ does. I've also added comments in s_A85D_init_inline to explain more<br>
+ clearly *why* pdf_rules must not be initialised here.<br>
+<br>
+base/sa85d.h<br>
+psi/iscan.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-31 08:26:37 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=668917a10e7eada030f7d2dddec9f579fddeed3d">668917a10e7eada030f7d2dddec9f579fddeed3d</a>
+<blockquote>
+<p>
+ Change MaxLocalVM and MaxGlobalVM to be size_t instead of 'long'<br>
+<br>
+ The sizeof long differs between 64-bit Windows and linux, and<br>
+ Robin changed the Max values for other params to be size_t in<br>
+ commit d7961033. This change extends that to the other memory<br>
+ size related params.<br>
+<br>
+ Also fix vm_threshold to be int64_t, not size_t since that<br>
+ corresponds to the parameter setting in zusparam.c. This is<br>
+ also limited to the max signed value that corresponds to<br>
+ size_t (MAX_VM_THRESHOLD) in case size_t is &lt; 64 bits.<br>
+<br>
+base/gsalloc.c<br>
+base/gsalloc.h<br>
+base/std.h<br>
+psi/ireclaim.c<br>
+psi/ivmem2.h<br>
+psi/zusparam.c<br>
+psi/zvmem2.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-05 12:24:36 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d8ed6363166841dcb067d7adc6ad6b52a1b1f90c">d8ed6363166841dcb067d7adc6ad6b52a1b1f90c</a>
+<blockquote>
+<p>
+ jbig2dec: Initiate variable before avoids using uninited data during cleanup.<br>
+<br>
+ Fixes OSS-fuzz issue 21571.<br>
+ Also fixes Coverity CID 355467.<br>
+<br>
+ Thanks to OSS-fuzz for reporting.<br>
+<br>
+jbig2dec/jbig2_text.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-27 05:41:07 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dc6b8098b52db7e1a9b20c1ef6f1006555c04b1b">dc6b8098b52db7e1a9b20c1ef6f1006555c04b1b</a>
+<blockquote>
+<p>
+ jbig2dec: Adjust number of bytes consumed by MMR decoder.<br>
+<br>
+ The MMR decoder pre-buffers up to 32 bits of encoded input data in a word<br>
+ buffer before they are consumed by the MMR decoder. Once bits are consumed, the<br>
+ pre-buffer will be filled up with more input data. When filling up the buffer<br>
+ the decoder would previously stay clear of reading data belonging to succeeding<br>
+ segments, but still indicated that it consumed those bytes it never read. Once<br>
+ finished the MMR decoder lied to the caller by propagating the incorrect number<br>
+ of consumed bytes. The caller subtracted the consumed number of bytes from the<br>
+ size and end up in underflow causing the next MMR decoding to first read input<br>
+ data at the wrong location, later ending up attempting to read outside the MMR<br>
+ encoded input buffer.<br>
+<br>
+ Now, the MMR decoder keeps track of how many bits it has consumed and<br>
+ accurately rounds this number up to a whole number of bytes to the caller.<br>
+<br>
+ Fixes OSS-fuzz issue 17855.<br>
+<br>
+ Thanks to OSS-fuzz for reporting.<br>
+<br>
+jbig2dec/jbig2_mmr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-26 14:20:11 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f14f35c6e3218554cd351b848447cfa83b3c4256">f14f35c6e3218554cd351b848447cfa83b3c4256</a>
+<blockquote>
+<p>
+ jbig2dec: Plug leak of image upon error.<br>
+<br>
+ Fixes OSS-Fuzz issue 17513.<br>
+<br>
+ Thanks to OSS-fuzz for reporting.<br>
+<br>
+jbig2dec/jbig2_text.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-25 01:12:52 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d293095a593f7106e16027fb9782324ee7bb36f8">d293095a593f7106e16027fb9782324ee7bb36f8</a>
+<blockquote>
+<p>
+ jbig2dec: Need to store local copy of error message.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-02 13:06:06 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6728387b7f4b803ea5a26eb220ce24e4ff65e710">6728387b7f4b803ea5a26eb220ce24e4ff65e710</a>
+<blockquote>
+<p>
+ PDF interpreter - Fix incorrect CIDFontType2 with Type1C descendants<br>
+<br>
+ Customer bug report. The file contains a CIDFont declared like this:<br>
+<br>
+ 16 0 obj<br>
+ &lt;&lt;<br>
+ ...<br>
+ /Subtype /CIDFontType2<br>
+ ...<br>
+ &gt;&gt;<br>
+<br>
+ The /Subtype /CIDFontType2 means that the font is a CIDFont with<br>
+ TrueType outlines. However the actual font:<br>
+<br>
+ 10 0 obj<br>
+ &lt;&lt;<br>
+ /Subtype /Type1C<br>
+ /Length 49432<br>
+ /Length1 49432<br>
+ &gt;&gt;<br>
+<br>
+ is a Type1C (Compact Font Format) font. The PDF file is, quite simply,<br>
+ incorrect. The Subtype should be /CIDFontType0. Interestingly we already<br>
+ have code in the CIDFontType2 case to handle an incorrect value of<br>
+ Subtype being set to /CIDFontType0 so this is the reverse case.<br>
+<br>
+ If we discover we are reading a Type1C font, and the parent is a CIDFont<br>
+ with a Subtype of CIDFontType2, then change the parent dictionary to<br>
+ have a Subtype of /CIDFOntType0C and read the font as a CIDFont.<br>
+<br>
+Resource/Init/pdf_font.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-01 19:48:03 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1c363593d7880b305e5da0cae8964bf090af3e61">1c363593d7880b305e5da0cae8964bf090af3e61</a>
+<blockquote>
+<p>
+ Speed up gx_get_bits_std_to_native.<br>
+<br>
+ We don't need to fetch the color_mapping_procs for every pixel;<br>
+ just once will do.<br>
+<br>
+base/gdevdgbr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-01 14:27:33 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=85225cda5e2b2d557942c6ff13887e418eccb6cc">85225cda5e2b2d557942c6ff13887e418eccb6cc</a>
+<blockquote>
+<p>
+ Remove pgs-&gt;alpha<br>
+<br>
+ The alpha value in the graphic state is not used and will<br>
+ only lead to confusion for people working on transparency.<br>
+<br>
+base/gdevp14.c<br>
+base/gsalpha.c<br>
+base/gsalpha.h<br>
+base/gsstate.c<br>
+base/gxclpath.c<br>
+base/gxcmap.c<br>
+base/gxgstate.h<br>
+base/lib.mak<br>
+windows/ghostscript.vcxproj<br>
+windows/ghostscript.vcxproj.filters<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-31 15:17:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=295bcef3b977c12885e30fdbae326f63d0771caa">295bcef3b977c12885e30fdbae326f63d0771caa</a>
+<blockquote>
+<p>
+ Squash 'set but unused' warning in gdevcups.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-31 14:59:04 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a32c6fdce5fab7d5918d02d30a4cf6696af58db3">a32c6fdce5fab7d5918d02d30a4cf6696af58db3</a>
+<blockquote>
+<p>
+ Squash some compiler warnings.<br>
+<br>
+base/gsicc_cache.c<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-31 13:00:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4dd43e9ca448777bbd585ef3ce97e9cf593f395d">4dd43e9ca448777bbd585ef3ce97e9cf593f395d</a>
+<blockquote>
+<p>
+ Coverity 355259: Avoid &quot;Failure to restore&quot; warning from coverity.<br>
+<br>
+ Coverity complains that pgs-&gt;fillconstantalpha isn't restored<br>
+ before the file exits. While we're not too fussed about what<br>
+ happens to it in an error condition, simply hoisting a couple<br>
+ of lines up a bit solves the problem and should shut it up.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-30 19:01:10 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=32805b5689be664f9b76502669775baa53f55677">32805b5689be664f9b76502669775baa53f55677</a>
+<blockquote>
+<p>
+ Redefine deprecated .setopacityalpha and .setshapealpha<br>
+<br>
+ .setopacityalpha and .setshapealpha have been replaced with<br>
+ .setfillconstantalpha/.setstrokeconstantalpha and .setalphaisshape, operators<br>
+ which actually do what PDF requires.<br>
+<br>
+ As an interim measure, to allow users that rely on these operators some time<br>
+ to adjust, define versions of .setopacityalpha and .setshapealpha which<br>
+ approximate what the old implementations did.<br>
+<br>
+ As with the rest of the transparency operators they only exist when gs is<br>
+ given the -dALLOWPSTRANSPARENCY option. Also, they are in pdf_main.ps just so<br>
+ they grouped in proximity to where the rest of the ALLOWPSTRANSPARENCY logic is<br>
+ implemented.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-30 09:59:23 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3ff82b33f24ed54c2d3bb88ec31da7d2f9fd2765">3ff82b33f24ed54c2d3bb88ec31da7d2f9fd2765</a>
+<blockquote>
+<p>
+ Fail configure with unsupported shared tiff/jpeg combo<br>
+<br>
+ With the changes to support consuming the various TIFF input forms, we cannot<br>
+ support all combinations of mixing share and local libtiff and libjpeg.<br>
+<br>
+ For simplicity just reject mixing those configs.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-25 14:00:55 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6756b355c238c319fe66087dece15174e62f9f15">6756b355c238c319fe66087dece15174e62f9f15</a>
+<blockquote>
+<p>
+ Fix shared libtiff and libjpeg build<br>
+<br>
+ When building with shared libs, we should not try to include our custom libjpeg<br>
+ memory management context into the TIFF reader implementation context.<br>
+<br>
+gpdl/gpdl.mak<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-30 14:47:25 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b8bda01581b94e9159533460cfe79436f4d5ac21">b8bda01581b94e9159533460cfe79436f4d5ac21</a>
+<blockquote>
+<p>
+ Coverity 94826 Add missing offset to buffer size used for clist cmd.<br>
+<br>
+base/gxclpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-29 15:32:36 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b09cbe8e577fb14504932dc8d9096187ec4e0840">b09cbe8e577fb14504932dc8d9096187ec4e0840</a>
+<blockquote>
+<p>
+ Fix infinite loop in PDF interpreter 'pagespotcolors' procedure<br>
+<br>
+ The file tests_private/pdf/uploads/poc1_pdf_gs.pdf has the single page<br>
+ Parent object as itself. This only showed up with &quot;DeviceN&quot; devices that<br>
+ search the PDF for the number of spot colorants on the page.<br>
+<br>
+ Note that this file is broken in other respects since it has a /Count<br>
+ of 9 pages, but only a single page. This change also adds handling for<br>
+ the //null object returned when a page isn't found since there isn't<br>
+ actually a second page, and adds an error message when this is the case.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-30 12:24:45 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4dde07159da5786570ad4f8d2b7b3c0b828802ab">4dde07159da5786570ad4f8d2b7b3c0b828802ab</a>
+<blockquote>
+<p>
+ Coverity 141130 Initialize shape and alpha of group for image.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-30 19:51:57 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=baa1a80f7824e26fb31f5f5f782980518b6cbfd9">baa1a80f7824e26fb31f5f5f782980518b6cbfd9</a>
+<blockquote>
+<p>
+ Coverity 355259: Fix precedence of assignment/comparison.<br>
+<br>
+ This was leading to code being thought of as being unreachable.<br>
+<br>
+base/gxstroke.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-30 10:45:25 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=22a31bda026deb8e3748f25bc2cf3b46263e689c">22a31bda026deb8e3748f25bc2cf3b46263e689c</a>
+<blockquote>
+<p>
+ Update doc to deprecate transparency PS methods<br>
+<br>
+doc/Language.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-27 13:54:02 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6a3c36f8c5e83448f5d1e5f24ee01c0e80a92877">6a3c36f8c5e83448f5d1e5f24ee01c0e80a92877</a>
+<blockquote>
+<p>
+ Fix Bug 702177: VMerrors with some BufferSpace and/or -K limits.<br>
+<br>
+ Interestingly, the two examples given in the bug succeed on Windows 64<br>
+ but don't on linux. The difference is due to an 8 byte difference in the<br>
+ size of gx_clist_state (the per band writer state). In the case of the<br>
+ Bug690546.pdf file, the space left in the BufferSpace area after the<br>
+ logic increased it was only 2,200 bytes on linux, but was 12k bytes on<br>
+ Windows (it made an extra pass through the automatic &quot;increase space&quot;<br>
+ loop in gdev_prn_setup_as_command_list. Fix the calculation in<br>
+ clist_init_states so that the amount of extra space corresponds to the<br>
+ amount expected by clist command writing (data_bits_size + cmd_largest_size)<br>
+ rather than the insufficient and arbitrary &quot;100&quot;.<br>
+<br>
+ Note that although the Bug692057.pdf returned VMerror from cmd_put_list_op, the<br>
+ 'fallback; method of gx_default_strip_tile_rectangle still produces the SAME<br>
+ raster from psdcmyk16 and does not change the performance or clist file size<br>
+ Robin's commit cbee0840 fixed this case.<br>
+<br>
+base/gxclist.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-27 14:46:05 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d12d2085b5bd08ca1e813d97f3f7f7e630e791a0">d12d2085b5bd08ca1e813d97f3f7f7e630e791a0</a>
+<blockquote>
+<p>
+ Squashed commit of the opacity_shape branch<br>
+<br>
+ This commit removes shape.alpha and opacity.alpha from the<br>
+ graphic state. This involved removal of methods in the<br>
+ postscript based PDF interpreter, changes in the pdf14 device,<br>
+ changes in pdfwrite, the XPS interpreter, and the PS<br>
+ transparency test file that is present in examples and on<br>
+ the cluster. The goal of this commit was to avoid<br>
+ confusion and conflicts between shape.alpha opacity.alpha and<br>
+ the stroke and fill alpha values (CA ca). This change<br>
+ resulted in progressions in the XPS file. There were changes<br>
+ in a couple PDF files that required some investigation. In<br>
+ particular, the change in the dashed lines of Bug694981.pdf. Robin<br>
+ and I looked at this. Robin determined it was due to<br>
+ differences in stroke_add and stroke_fill not giving identical results.<br>
+ In the end, the new output looks closer the what AR provides.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+Resource/Init/pdf_main.ps<br>
+Resource/Init/pdf_ops.ps<br>
+base/gdevp14.c<br>
+base/gdevp14.h<br>
+base/gstparam.h<br>
+base/gstrans.c<br>
+base/gstrans.h<br>
+base/gxblend.c<br>
+base/gxclimag.c<br>
+base/gxclpath.c<br>
+base/gxclpath.h<br>
+base/gxclrast.c<br>
+base/gxgstate.h<br>
+devices/vector/gdevpdft.c<br>
+examples/transparency_example.ps<br>
+psi/ztrans.c<br>
+xps/xpscolor.c<br>
+xps/xpsgradient.c<br>
+xps/xpsimage.c<br>
+xps/xpsopacity.c<br>
+xps/xpspath.c<br>
+xps/xpstile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-27 15:28:22 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1241ea6848d254de9a9dbcb8c8edf10a59761d1d">1241ea6848d254de9a9dbcb8c8edf10a59761d1d</a>
+<blockquote>
+<p>
+ PDF interpreter - cope with Form XObjects leaving junk on the stack<br>
+<br>
+ No bug report, customer supplied file. The file has a Form XObject<br>
+ where the stream ends:<br>
+<br>
+ /Image20 Do Q<br>
+ EMC Tendstream<br>
+<br>
+ which is clearly invalid. This leaves a T lying around which gets<br>
+ converted to a name and remains on the stack. When we come to complete<br>
+ the form processing we expect that the stack will be clean, because it<br>
+ isn't we end up corrupting an internal variable, which causes the<br>
+ *next* Form XObject to fail.<br>
+<br>
+ We cope with this here by adding code to check the objects on the stack<br>
+ and remove them one by one until we get back to a dictionary which<br>
+ contains a name we expect to find (because we pushed it on entry to the<br>
+ procedure) or run out of stack objects in which case we will throw an<br>
+ error.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-26 19:50:51 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f3e37d28f6a76cb7cfc2a291aeb98b8f1c6ba178">f3e37d28f6a76cb7cfc2a291aeb98b8f1c6ba178</a>
+<blockquote>
+<p>
+ Add murun to the list of products for clusterpush.pl<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-26 07:21:57 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3df1313a6ef334d9c6da2fcd78347fb5eb7a3859">3df1313a6ef334d9c6da2fcd78347fb5eb7a3859</a>
+<blockquote>
+<p>
+ Fix CID 355224. Non-zero return code not possible, but Coverity doesn't get it.<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-24 10:15:39 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=748b5c3c86779dc0cf4ccc144530cf37f692375e">748b5c3c86779dc0cf4ccc144530cf37f692375e</a>
+<blockquote>
+<p>
+ Rejig &quot;fast&quot; stroking of miter joins.<br>
+<br>
+ This spins out of Bug 702196, though it's not strictly speaking<br>
+ related. Bug 702196 deals with lines being incorrectly recognised<br>
+ as being &quot;thin&quot;. Thin lines aren't mitred. When we fix the<br>
+ erroneous classification of lines as thin, this causes more<br>
+ lines to be mitre joined than before. This in turn exposes<br>
+ the bug that we (partially) fix here.<br>
+<br>
+ gs -sDEVICE=pdfwrite -o out.pdf tests_private/ps/ps3cet/11-28.PS<br>
+<br>
+ gs -sDEVICE=png16m -o out%d.png -r300 -dMaxBitmap=2G out.pdf<br>
+<br>
+ Page 4 of the output shows strange mitre extrusions from the edge<br>
+ of paths.<br>
+<br>
+ Investigation shows the file is 'strokepath'ing the path (with<br>
+ mitre joins), and the stroking the resultant path (again with<br>
+ mitre joins). The initial 'strokepath' conversion includes little<br>
+ &quot;wedges&quot; of path internally to give the &quot;underjoin&quot; in the path.<br>
+ When restroked, due to the mitre join still being set, these<br>
+ wedges turn into spikes.<br>
+<br>
+ The fix, implemented here, is to revise the way we do mitre joins.<br>
+ For paths stroked using the &quot;fast&quot; code, with miter joins, we<br>
+ perform slightly more complicated calculations at each join. This<br>
+ allows us to do the joins by moving the existing points of the<br>
+ paths 'inline'. This removes the need for the 'wedges', and<br>
+ actually gives us a much cleaner path overall.<br>
+<br>
+ This *should* help with pathological scan conversion cases too,<br>
+ because it means we will have fewer 'sleepers' in the 'train<br>
+ tracks' when strokepath is used.<br>
+<br>
+ This may not kick in in all cases where we'd like it to, because<br>
+ for some files, we use 'traditional' stroking, and so don't<br>
+ execute this code. One way around this would be to change<br>
+ gs_strokepath to disable 'traditional' filling in the presence<br>
+ of mitre joins, but that produces strange effects, so we're<br>
+ leaving it for now.<br>
+<br>
+base/gxstroke.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-18 15:11:01 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9dc0eb31d79bf819c97420aaf2f6fc5cf3a52c10">9dc0eb31d79bf819c97420aaf2f6fc5cf3a52c10</a>
+<blockquote>
+<p>
+ Bug 702196: Fix incorrect detection of &quot;thin&quot; lines while stroking.<br>
+<br>
+ When stroking lines, we spot whether a line is 'thin' (i.e. the<br>
+ perpendicular width of the line is less than 1 pixel), and handle<br>
+ those cases specially by using custom 'thin line' routines. This<br>
+ gives more pleasing results than slavishly following the 'any part<br>
+ of a pixel' rule.<br>
+<br>
+ The current code makes this determination in 2 places. Firstly,<br>
+ we calculate 'always_thin', by scaling the perpendicular vector<br>
+ and seeing if all possible lines will be 'thin'. Secondly, in<br>
+ the case when we aren't 'always_thin', we calculate it for each<br>
+ line segment in turn by calling 'width_is_thin'.<br>
+<br>
+ Unfortunately, the threshold used for the simple early rejection<br>
+ test in 'width_is_thin' is wrong. Rather than checking against<br>
+ 0.5, we should be checking against sqrt(1/8). This causes lines<br>
+ near 45 degrees to be improperly treated as thin. This is a<br>
+ simple fix.<br>
+<br>
+ This gives lots of progressions - so many that you wonder how we<br>
+ never spotted this before.<br>
+<br>
+ Unfortunately, buried in these progressions, there are a few files<br>
+ which, while improved, are still imperfect.<br>
+<br>
+ In some files, that use 'non-uniform' scales, (such as<br>
+ (53 0 0 21 0 0 )) a stroke of constant width can 'pop' between<br>
+ thick and thin as we move around the path; a near vertical<br>
+ line segment may be thin, whereas a near horizontal line segment<br>
+ might be thick due to the difference in scale. This is visually<br>
+ jarring.<br>
+<br>
+ To fix this, therefore, we'd need to modify the width_is_thin<br>
+ testing in non-uniform cases, so that it gives us the same results<br>
+ all the way around. Doing this would be complex, and ultimately<br>
+ actually ends up equivalent to us just relying on &quot;always_thin&quot;<br>
+ (with the exception of strictly vertical and horizontal line<br>
+ segements). We therefore disable the non-orthogonal test in<br>
+ 'width_is_thin' entirely.<br>
+<br>
+base/gxstroke.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-24 16:49:13 -0700
+</strong>
+<br>ray &lt;Ray.Johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d49dbf133ac49d09d626bab08ee92835a50a646a">d49dbf133ac49d09d626bab08ee92835a50a646a</a>
+<blockquote>
+<p>
+ Fix bug 702182: VMerror due to leaks in pattern cache due to locking.<br>
+<br>
+ If the tile being loaded by the clist reader was already in the cache and<br>
+ was locked, the slot would be re-loaded (with the same tile) without freeing<br>
+ up the previously loaded tile. It would be nicer to be able to skip reading<br>
+ the tile in this case, but we need to consume the data from the clist sequence,<br>
+ so just unlock it so it can be freed, then re-load it (presumably setting the<br>
+ lock again).<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-24 18:09:16 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1258814b0532f06217cbfaffc5254c9645f69b42">1258814b0532f06217cbfaffc5254c9645f69b42</a>
+<blockquote>
+<p>
+ Don't delete copied libjpeg source files after use<br>
+<br>
+ For reasons I'm not totally convinced are still valid, we copy the libpeg source<br>
+ files into the build directory (normally 'obj') and compile them from there,<br>
+ then delete them.<br>
+<br>
+ This apparently causes problems with oss-fuzz coverage builds, and it also makes<br>
+ debugging a pain, because the source files don't exist where the debug info<br>
+ thinks they should.<br>
+<br>
+base/jpeg.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-24 15:22:01 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0ec0004cb9366002dbd97f40c32d8da6d33c1904">0ec0004cb9366002dbd97f40c32d8da6d33c1904</a>
+<blockquote>
+<p>
+ Remove unused base/gsalphac.[ch]<br>
+<br>
+ This was the compositing device used for Display Postscript/NeXT specific<br>
+ alpha blending. Since we haven't supported DPS properly for many years, and<br>
+ officially dropped it completely a couple of years ago, and this compositing<br>
+ device has not been included in the build for several years....<br>
+<br>
+ ....just delete the files and remove references to them.<br>
+<br>
+base/gsalphac.c<br>
+base/gsalphac.h<br>
+doc/Develop.htm<br>
+windows/ghostscript.vcproj<br>
+windows/ghostscript.vcxproj<br>
+windows/ghostscript.vcxproj.filters<br>
+windows/ghostscript_rt.vcxproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-24 15:19:23 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1c9bd8e0aa41e69c4bd46a6c553320d97af1ce7c">1c9bd8e0aa41e69c4bd46a6c553320d97af1ce7c</a>
+<blockquote>
+<p>
+ Disable PPC optimisations in libpng<br>
+<br>
+ Since we don't include the libpng source file with the PowerPC optimizations<br>
+ in our build, and it only applies to reading, which we don't rely on, just<br>
+ disable calling the optimizations.<br>
+<br>
+ Cures a linker error on PowerPCle platforms<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-23 15:27:37 -0700
+</strong>
+<br>ray &lt;Ray.Johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cca279886b3bbb4d3af5768880565c9f7b372c08">cca279886b3bbb4d3af5768880565c9f7b372c08</a>
+<blockquote>
+<p>
+ Fix Bug 702181: SEGV when BufferSpace is at or above -K alloc limit<br>
+<br>
+ The issue with this file is that one of the pages is done in page mode because<br>
+ it was so small, but the 'resize' call when doing page 2 was not checking the<br>
+ allocation request against the limit, so the malloc would succeed, but the very<br>
+ next (and all subsequent) allocations would fail. The gdev_prn_allocate would<br>
+ capture the ecode, but would still call the clist_enable_multi_thread_render<br>
+ resulting in the SEGV.<br>
+<br>
+ Add the check in the gs_heap_resize_object function, and make sure and leave<br>
+ the 'monitor' after failure, then don't call clist_enable_multi_thread if the<br>
+ resize failed.<br>
+<br>
+base/gdevprn.c<br>
+base/gsmalloc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-20 10:26:17 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=886347337de7e121e3e1ffa348aa74856c8290ed">886347337de7e121e3e1ffa348aa74856c8290ed</a>
+<blockquote>
+<p>
+ Bug 702190: Set CFLAGS and CFLAGSAUX separately in Makefile<br>
+<br>
+ Building with -DGS_NO_FILESYSTEM allows support for environment without a<br>
+ proper file system, by stubbing out the gp_ calls that would normally access<br>
+ the file system.<br>
+<br>
+ Obviously, for Ghostscript to function, that means it requires its resource<br>
+ and initialisation files to be built into the binary in the ROMFS.<br>
+<br>
+ A problem arises if you include the -DGS_NO_FILESYSTEM CFLAG when building the<br>
+ mkromfs utility, which creates the ROMFS, since denying it access to the file<br>
+ system results in an empty ROMFS. Previously, setting CFLAGS to include<br>
+ -DGS_NO_FILESYSTEM when calling configure resulted in that flag being applied to<br>
+ the main build, and the auxiliary tools build (including mkromfs), unless the<br>
+ build specified was a cross-compilation.<br>
+<br>
+ This splits the CFLAGS and CFLAGSAUX so they are set separately in the Makefile<br>
+ so configure can filter out unwanted flags from the auxtools flags.<br>
+<br>
+ Currently, the only one being filtered is -DGS_NO_FILESYSTEM<br>
+<br>
+Makefile.in<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-19 16:19:57 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7710a398e132e13f9e0ff2f83188cbe7d2b59b1f">7710a398e132e13f9e0ff2f83188cbe7d2b59b1f</a>
+<blockquote>
+<p>
+ Bug 702115: use the offical method to detect gcc<br>
+<br>
+ In the early days of autoconf there was no defined way to check if the selected<br>
+ compiler was gcc (or compatible) or not. Projects used the autoconf internal<br>
+ shell variable ac_cv_prog_gcc to get that info.<br>
+<br>
+ autoconf introduced the GCC shell variable as the official way to know (a long<br>
+ time ago), and we never revised our configure.ac to reflect that.<br>
+<br>
+ This does so.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-19 16:12:46 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=66c2469c7d4543f32d6dc93edf1d649e809b8419">66c2469c7d4543f32d6dc93edf1d649e809b8419</a>
+<blockquote>
+<p>
+ Remove deprecated opvp/oprp devices from default build<br>
+<br>
+ They can currently be reinstated with --with-openprinting<br>
+<br>
+ That option does not appear in the --help output because we want people to have<br>
+ to ask us about it, so we know if people actually use opvp/oprp, and still<br>
+ need them.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-23 09:07:36 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fedfb0e00755d9529d15751650864d304708f0e1">fedfb0e00755d9529d15751650864d304708f0e1</a>
+<blockquote>
+<p>
+ Remove analytics stuff.<br>
+<br>
+ Analytics and cookie stuff will be added at serve time by Apache.<br>
+<br>
+ See /etc/apache2/sites-available/ghostscript.com-le-ssl.conf for more info<br>
+<br>
+doc/API.htm<br>
+doc/C-style.htm<br>
+doc/Commprod.htm<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-21 18:08:43 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d98ab1f82e64e11db6478c4ff3e3bcffcc69836e">d98ab1f82e64e11db6478c4ff3e3bcffcc69836e</a>
+<blockquote>
+<p>
+ jbig2dec: Cast literal to avoid shifting outside of valid range.<br>
+<br>
+ Fixes Coverity CID 355175.<br>
+<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-21 16:49:33 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1677b6c0d7b090ad7691e766d4809f9badeecd20">1677b6c0d7b090ad7691e766d4809f9badeecd20</a>
+<blockquote>
+<p>
+ jbig2dec: Record stream errors in separate struct field.<br>
+<br>
+ Previously the number of remaining bytes in a read word (&gt;= 0) and the error<br>
+ state (&lt; 0) was stored in the same int field. Fixing signedness conversion<br>
+ warnings changed the type of the field to an unsigned field. The error state<br>
+ should have been stored separately at that time but it was overlooked. In this<br>
+ commit the error state is separated out into its own field.<br>
+<br>
+ Fixes Coverity CID 355176.<br>
+<br>
+jbig2dec/jbig2_arith.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-21 15:59:21 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a80f7f12e7a2fb0caa1ea9ac6fa8981cc539a1bc">a80f7f12e7a2fb0caa1ea9ac6fa8981cc539a1bc</a>
+<blockquote>
+<p>
+ jbig2dec: Use correct define for maxium value of type.<br>
+<br>
+ Fixes Coverity CID 355177.<br>
+<br>
+jbig2dec/jbig2_page.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-21 16:20:28 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f0c17451afb66e6fcf3bd453490b4b9d2b06b42">4f0c17451afb66e6fcf3bd453490b4b9d2b06b42</a>
+<blockquote>
+<p>
+ jbig2dec: Fix two overlooked warnings.<br>
+<br>
+ While working to fix all warnings seen when -Wsign-conversion is<br>
+ enabled, these two warnings were accidentally introduced by commit<br>
+ ff53af0d4ff9291aa5039522f5553a2850dd569d and not noticed in the<br>
+ avalanche of warnings emitted due to -Wsign-conversion. This commit<br>
+ changes the indicies to the type of the limit variable, fixing the<br>
+ warnings.<br>
+<br>
+jbig2dec/jbig2_page.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-21 10:00:42 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a45d7217c8c1578475ee9204d1f4ad46520f44d1">a45d7217c8c1578475ee9204d1f4ad46520f44d1</a>
+<blockquote>
+<p>
+ PDF interpreter - swallow errors reading ICC profiles and continue<br>
+<br>
+ Bug #702240 &quot;Invalid ICC profile aborts PDF ineterpretation&quot;<br>
+<br>
+ The file contains an ICCbased space which references an embedded ICC<br>
+ profile, which is Flate compressed. The compressed stream has been<br>
+ corrupted and cannot be decompressed.<br>
+<br>
+ This causes the colour space code to throw an ioerror and terminate<br>
+ interpretation, Acrobat (as usual) doesn't even give a warning.<br>
+<br>
+ This commit checks for an error creating the ReusableStreamDecode and<br>
+ if it fails sets the Data Source in the stream dictionary to null. We<br>
+ will later use the /N value in the stream dictionary to set a reasonable<br>
+ fallback space (in this case CMYK).<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-12 02:54:08 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9b2fc96b3ffc1c9d3d39b3d0ce27bf8abba7b8cf">9b2fc96b3ffc1c9d3d39b3d0ce27bf8abba7b8cf</a>
+<blockquote>
+<p>
+ jbig2dec: Fix signedness conversions.<br>
+<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+jbig2dec/jbig2_huffman.c<br>
+jbig2dec/jbig2_priv.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-12 00:27:13 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f2613ed2159e8efc6b5b593e668a00d8bea9ace8">f2613ed2159e8efc6b5b593e668a00d8bea9ace8</a>
+<blockquote>
+<p>
+ jbig2dec: Use uint32_t when counting segments.<br>
+<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2_priv.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-12 00:26:59 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ff53af0d4ff9291aa5039522f5553a2850dd569d">ff53af0d4ff9291aa5039522f5553a2850dd569d</a>
+<blockquote>
+<p>
+ jbig2dec: Always use uint32_t when counting pages.<br>
+<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2_page.c<br>
+jbig2dec/jbig2_priv.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-11 20:56:06 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6073e803bd652cd8fdb17f6be6beea05a13fd4f0">6073e803bd652cd8fdb17f6be6beea05a13fd4f0</a>
+<blockquote>
+<p>
+ jbig2dec: Handle errors from reading jbig2 streams.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-11 20:55:51 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1e9b5185c889266c9a3d6f25c9df558d41335d46">1e9b5185c889266c9a3d6f25c9df558d41335d46</a>
+<blockquote>
+<p>
+ jbig2dec: Use size_t for string length.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-11 18:42:26 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dc3f780ee3c9e43f34ba1c0b1101b41c58b40710">dc3f780ee3c9e43f34ba1c0b1101b41c58b40710</a>
+<blockquote>
+<p>
+ jbig2dec: Avoid formatting error messages twice in error callback.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-11 16:35:53 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9b5008aa2bc1c6a6acb2c6f90d1ef8d6bad9e66a">9b5008aa2bc1c6a6acb2c6f90d1ef8d6bad9e66a</a>
+<blockquote>
+<p>
+ jbig2dec: Pass segment numbers as unsigned values to error callback.<br>
+<br>
+ According to the JBIG2 specification segments numbers are 32 bit unsigned<br>
+ integer. Previously any segment numbers larger than INT32_MAX would be passed<br>
+ as negative numbers.<br>
+<br>
+ Some parts of the decoder do not yet know, or do not have access to the<br>
+ currently decoded segment number, and this needs to be specially indicated.<br>
+ Therefore jbig2dec appropriates the unlikely segment number 0xffffffff to<br>
+ indicate an unknown segment number.<br>
+<br>
+ This is a change of the public API.<br>
+<br>
+base/sjbig2.c<br>
+gpdl/jbig2top.c<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2.h<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+jbig2dec/jbig2_arith_int.c<br>
+jbig2dec/jbig2_halftone.c<br>
+jbig2dec/jbig2_huffman.c<br>
+jbig2dec/jbig2_image.c<br>
+jbig2dec/jbig2_mmr.c<br>
+jbig2dec/jbig2_page.c<br>
+jbig2dec/jbig2_priv.h<br>
+jbig2dec/jbig2_refinement.c<br>
+jbig2dec/jbig2_segment.c<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-17 01:48:00 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ea9b3a676a516a603fabb593085d14a67356db6f">ea9b3a676a516a603fabb593085d14a67356db6f</a>
+<blockquote>
+<p>
+ Bug 701721: jbig2dec: Fix under/overflow handling in arithmetic integer decoder.<br>
+<br>
+ The previous detection logic caused GCC's -Wlogical-op to trip.<br>
+ Not only that, but the detection logic never took into account<br>
+ that underflow is not possible (the worst case is V == INT32_MIN,<br>
+ but offset is always &gt; 0, so underflow cannot happen), nor take<br>
+ varying offset values into account (hardcoded limits meant that<br>
+ the offset was ignored even if it could not cause an overflow),<br>
+ but instead could cause non-clamped values to be emitted.<br>
+<br>
+ This corrected logic adheres to the Annex A. Table A.1 in the specification.<br>
+<br>
+jbig2dec/jbig2_arith_int.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-01 18:08:34 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=92faea67b31570e84b978a77b43c8f38bdad7bd4">92faea67b31570e84b978a77b43c8f38bdad7bd4</a>
+<blockquote>
+<p>
+ jbig2dec: Avoid warning by copying bytes instead of characters.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-29 17:10:00 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f20fc43d80e31780935be96393800cc1fac8ac50">f20fc43d80e31780935be96393800cc1fac8ac50</a>
+<blockquote>
+<p>
+ jbig2dec: Enable warnings for signedness in comparisons.<br>
+<br>
+jbig2dec/configure.ac.in<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-29 12:09:40 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5947fb2f1c022982e82406639517ebacae8d5cf6">5947fb2f1c022982e82406639517ebacae8d5cf6</a>
+<blockquote>
+<p>
+ jbig2dec: Address all signedness comparison issues.<br>
+<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+jbig2dec/jbig2_arith_iaid.h<br>
+jbig2dec/jbig2_halftone.c<br>
+jbig2dec/jbig2_halftone.h<br>
+jbig2dec/jbig2_huffman.c<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+jbig2dec/jbig2_text.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-29 12:09:22 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9394be6a45aea026f61900e1cb661a30db192c15">9394be6a45aea026f61900e1cb661a30db192c15</a>
+<blockquote>
+<p>
+ jbig2dec: Remove trailing whitespace.<br>
+<br>
+jbig2dec/CHANGES<br>
+jbig2dec/autogen.sh<br>
+jbig2dec/configure.ac.in<br>
+jbig2dec/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-29 16:26:53 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1899ce3f1844cf941d19c38fc8de8f126bf7419d">1899ce3f1844cf941d19c38fc8de8f126bf7419d</a>
+<blockquote>
+<p>
+ jbig2dec: Avoid passing NULL buffer to snprintf().<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 17:07:27 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4239ceeb4dd39e2ac183a01877b62761ae13bae4">4239ceeb4dd39e2ac183a01877b62761ae13bae4</a>
+<blockquote>
+<p>
+ jbig2dec: Avoid artificially limiting jbig2dec.<br>
+<br>
+ Commit 7366747076f3b75def52079bd4d5021539a16394 fixes bug 694949 by<br>
+ adding an artificial limit (that does not come from the JBIG2<br>
+ specification) to the sizes of generic regions compared with the image<br>
+ they will be composed onto. A problem with such artificial limits is<br>
+ that they are arbitrary. This is exemplified by the changes in<br>
+ 0d21a58ab12b9584faa54baa48ce0dab350af53e to make jbig2dec not error<br>
+ out on commonly occurring images. It is impossible to know whether<br>
+ this updated limit is enough, or whether an even large generic region<br>
+ in a JBIG2 image will be found in the future.<br>
+<br>
+ Instead of imposing these kinds of limits, jbig2dec should attempt to<br>
+ decode any JBIG2 image given to it. If the user wants to limit the<br>
+ amount of memory jbig2dec may use for decoding any JBIG2 image, this<br>
+ is a better way of implicitly limiting image sizes.<br>
+<br>
+jbig2dec/configure.ac.in<br>
+jbig2dec/jbig2_generic.c<br>
+jbig2dec/snprintf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 19:01:05 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cd1ef5475a3bda7a97851abc679c75e2ee64dec3">cd1ef5475a3bda7a97851abc679c75e2ee64dec3</a>
+<blockquote>
+<p>
+ Bug 702165: jbig2dec: Treat end of stream as fatal error, and remember errors.<br>
+<br>
+ * Treat reading beyond end of stream in arithmetic decoder as a fatal error.<br>
+<br>
+ * Remember previously encountered stream errors in arithmetic decoder.<br>
+<br>
+ * Ignore trailing bytes after terminating marker code in stream.<br>
+<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_huffman.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 18:12:31 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=30842ee99923fa10a7301494fd08b998e7acf57b">30842ee99923fa10a7301494fd08b998e7acf57b</a>
+<blockquote>
+<p>
+ jbig2dec: Add overflow detection for IAID context size.<br>
+<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 17:58:40 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=17e84cb1a4903fab26b5fc5d2e4805a1097f5a33">17e84cb1a4903fab26b5fc5d2e4805a1097f5a33</a>
+<blockquote>
+<p>
+ jbig2dec: Let arithmetic decoder and the underlying stream report errors.<br>
+<br>
+ When a called function indicates an error, the caller should print warnings.<br>
+ Since the arithmetic decoder now uses the normal way of reporting errors,<br>
+ the callers of the decoder are changed to report warnings.<br>
+<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_arith.h<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+jbig2dec/jbig2_arith_int.c<br>
+jbig2dec/jbig2_generic.c<br>
+jbig2dec/jbig2_huffman.c<br>
+jbig2dec/jbig2_priv.h<br>
+jbig2dec/jbig2_refinement.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 17:31:48 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=716560bf5f2bc4b821ca6924ec648ca4949826bb">716560bf5f2bc4b821ca6924ec648ca4949826bb</a>
+<blockquote>
+<p>
+ jbig2dec: Handle under-/overflow detection and messaging better.<br>
+<br>
+ Previously SYMWIDTH was capped too early in order to prevent underflow<br>
+ Moreover TOTWIDTH was allowed to overflow.<br>
+<br>
+ Now the value DW is checked compared to SYMWIDTH, preventing over<br>
+ underflow and overflow at the correct limits, and an overflow<br>
+ check has been added for TOTWIDTH.<br>
+<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-16 22:56:06 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cf43daf9f8381a9accf36d12bad2324d021ec8c6">cf43daf9f8381a9accf36d12bad2324d021ec8c6</a>
+<blockquote>
+<p>
+ jbig2dec: Use unsigned suffix when defining UINT32_MAX.<br>
+<br>
+ Also move UINT32_MAX/INT32_MAX to internal header so they are defined<br>
+ (the same) in every jbig2 source code file.<br>
+<br>
+jbig2dec/jbig2_arith_int.c<br>
+jbig2dec/jbig2_generic.c<br>
+jbig2dec/jbig2_image.c<br>
+jbig2dec/jbig2_mmr.c<br>
+jbig2dec/jbig2_page.c<br>
+jbig2dec/jbig2_priv.h<br>
+jbig2dec/jbig2_segment.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 17:19:12 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a47257407ee8938051f14da81890869a5ade0c26">a47257407ee8938051f14da81890869a5ade0c26</a>
+<blockquote>
+<p>
+ jbig2dec: Keep type of index and array length the same.<br>
+<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 16:57:23 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b610aebdd36d939a878e336c255c734b4432e023">b610aebdd36d939a878e336c255c734b4432e023</a>
+<blockquote>
+<p>
+ jbig2dec: Add more references to specification.<br>
+<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 15:52:26 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d4dc797e4a65871134f6a244cb8421a33fe91360">d4dc797e4a65871134f6a244cb8421a33fe91360</a>
+<blockquote>
+<p>
+ jbig2dec: Add command line option to limit memory usage.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 15:52:06 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a64ec1a232aa675e75d71da2632c6fca9a7fddcf">a64ec1a232aa675e75d71da2632c6fca9a7fddcf</a>
+<blockquote>
+<p>
+ jbig2dec: Mention all long options in usage and manpage.<br>
+<br>
+jbig2dec/jbig2dec.1<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 15:45:47 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3f01ab3739773db83040d8c2a7c3562b9103ed4e">3f01ab3739773db83040d8c2a7c3562b9103ed4e</a>
+<blockquote>
+<p>
+ jbig2dec: Separate command line tool error callback state from parameters.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-05 03:31:43 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e4dd74c63031c705b3b6938fdac6b69e6317f00a">e4dd74c63031c705b3b6938fdac6b69e6317f00a</a>
+<blockquote>
+<p>
+ Propagate errors when closing pipe.<br>
+<br>
+base/gdevpipe.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-17 15:52:20 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=97ad9c044a1d3f87b16b2be754e088e49cc1f398">97ad9c044a1d3f87b16b2be754e088e49cc1f398</a>
+<blockquote>
+<p>
+ Bring master up to date 9.52 release branch<br>
+<br>
+ Add references to the 64 bit windows exes<br>
+<br>
+ Release notes for 9.52 release<br>
+<br>
+ Version, dates etc for 9.52 release<br>
+<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-19 08:12:38 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c126cabcc5760aec6458b97729c78c821e24d122">c126cabcc5760aec6458b97729c78c821e24d122</a>
+<blockquote>
+<p>
+ Bump version prior to 9.52 release<br>
+<br>
+Resource/Init/gs_init.ps<br>
+base/version.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-18 10:40:39 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7ba3000d394406331c8e49c87e1d6494887c4e98">7ba3000d394406331c8e49c87e1d6494887c4e98</a>
+<blockquote>
+<p>
+ CID: 355082. Fix comparison of size_t &lt; 0.<br>
+<br>
+ Now we're using param_read_size_t, we no longer need to check<br>
+ for the returned value being &lt; 0. This check is pickled into<br>
+ the coertion code contained within that function.<br>
+<br>
+base/gsdparam.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-17 00:44:02 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4cbc36fe4546bce70537bc65541f65b4d7259a5b">4cbc36fe4546bce70537bc65541f65b4d7259a5b</a>
+<blockquote>
+<p>
+ Bug 702151: Avoid truncating pointers in debug code.<br>
+<br>
+ Introduce a PRI_INTPTR and use that to consistently display<br>
+ pointers. We avoid using %p, as that displays inconsistently<br>
+ between platforms. Sometimes it does 0x%x, sometimes just %x.<br>
+<br>
+base/gdevdrop.c<br>
+base/gdevnfwd.c<br>
+base/gdevprn.c<br>
+base/gsalloc.c<br>
+base/gschar0.c<br>
+base/gscie.c<br>
+base/gsciemap.c<br>
+base/gscspace.c<br>
+base/gsfcmap1.c<br>
+base/gsfont.c<br>
+base/gsht.c<br>
+base/gsicc_cache.c<br>
+base/gsicc_manage.c<br>
+base/gsicc_profilecache.c<br>
+base/gsimage.c<br>
+base/gsmalloc.c<br>
+base/gsmchunk.c<br>
+base/gsmemory.c<br>
+base/gsmisc.c<br>
+base/gsrefct.h<br>
+base/gsstate.c<br>
+base/gsstruct.h<br>
+base/gstrans.c<br>
+base/gstype1.c<br>
+base/gstype2.c<br>
+base/gxacpath.c<br>
+base/gxalloc.h<br>
+base/gxbcache.c<br>
+base/gxccache.c<br>
+base/gxccman.c<br>
+base/gxclist.c<br>
+base/gxclmem.c<br>
+base/gxclread.c<br>
+base/gxclthrd.c<br>
+base/gxclutil.c<br>
+base/gxcpath.c<br>
+base/gxcpath.h<br>
+base/gxfill.c<br>
+base/gxfillsl.h<br>
+base/gxht.c<br>
+base/gxpath.c<br>
+base/gxpcmap.c<br>
+base/scfd.c<br>
+base/scfe.c<br>
+base/sfxfd.c<br>
+base/sfxstdio.c<br>
+base/stdint_.h<br>
+base/stream.c<br>
+base/szlibc.c<br>
+devices/gdevfax.c<br>
+devices/gdevx.c<br>
+psi/ialloc.c<br>
+psi/idebug.c<br>
+psi/idict.c<br>
+psi/idicttpl.h<br>
+psi/idstack.c<br>
+psi/igc.c<br>
+psi/igcref.c<br>
+psi/igcstr.c<br>
+psi/iinit.c<br>
+psi/ilocate.c<br>
+psi/imain.c<br>
+psi/imainarg.c<br>
+psi/iname.c<br>
+psi/interp.c<br>
+psi/isave.c<br>
+psi/iutil.c<br>
+psi/zcie.c<br>
+psi/zcontrol.c<br>
+psi/zvmem.c<br>
+xps/xpshash.c<br>
+xps/xpsresource.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-12 17:22:36 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d7961033ee224fc5d2c96a16bea3f3399dd29561">d7961033ee224fc5d2c96a16bea3f3399dd29561</a>
+<blockquote>
+<p>
+ Add support for 64bit and size_t paramaters.<br>
+<br>
+ Cope with both int64_t's and size_t's with appropriate<br>
+ rangechecks when casting will cause problems.<br>
+<br>
+ -d values on the command line are read as int64_t's.<br>
+<br>
+ If we ever find outselves wanting to assign a size_t where<br>
+ the 63rd bit matters, then we may have to rethink this :)<br>
+<br>
+ We also change various params (such as MaxBitmap, MaxPatternBitmap<br>
+ etc) to be size_t's. This affects the device structure itself.<br>
+<br>
+base/gsdparam.c<br>
+base/gslib.c<br>
+base/gsparam.c<br>
+base/gsparam.h<br>
+base/gsparam2.c<br>
+base/gsparams.c<br>
+base/gxdevcli.h<br>
+base/gxpcache.h<br>
+base/gxpcmap.c<br>
+base/gxpcolor.h<br>
+base/spprint.c<br>
+base/spprint.h<br>
+base/spsdf.c<br>
+devices/vector/gdevpsdp.c<br>
+pcl/pl/plmain.c<br>
+psi/imainarg.c<br>
+psi/iparam.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-15 14:48:29 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e1b322c8ca8f08b5af398a912c511dc041cd9c86">e1b322c8ca8f08b5af398a912c511dc041cd9c86</a>
+<blockquote>
+<p>
+ Fix bug 702142: SMask profile 'swap' could cause clist to use wrong profile<br>
+<br>
+ The SMask 'swap' of profiles for the 'default' colorspaces in the icc_manager<br>
+ was not being detected by the clist logic since the colorspace id was still<br>
+ set to the cs_Device*_id value (1, 3, or 4).<br>
+<br>
+ The fix is to have the clist writing check for unknown color_space check BOTH<br>
+ the color_space.id and the color_space.space, and flag 'unknown' if either<br>
+ differed. The color_space.space includes the icc_profile info.<br>
+<br>
+ This results in a few progressions as well as fixing the file of this bug.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 15:07:37 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0fad2491ae5d9dae39807266b6f0f2584a02bdd8">0fad2491ae5d9dae39807266b6f0f2584a02bdd8</a>
+<blockquote>
+<p>
+ Bug 702217: Reinstate dynamic libs LDFLAGS for MacOS<br>
+<br>
+ With the significant revamp of the platform detection functions in configure<br>
+ the LDFLAGS for building the gs shared library on MacOS went astray. This<br>
+ puts them back in.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-16 09:06:16 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aaf5edb15fceaae962569bae30eb4633480c1d15">aaf5edb15fceaae962569bae30eb4633480c1d15</a>
+<blockquote>
+<p>
+ Repair device subclassing after fill+stroke commit<br>
+<br>
+ Bug 702221 &quot;Ghostscript 9.51 - SIGFPE when -dFirstPage or -dLastPage is set&quot;<br>
+<br>
+ The fill+stroke commit had an error with the default method for handling<br>
+ fill_stroke_path which passed the subclassing device as a parameter to<br>
+ the child, instead of passing the child device. This caused seg faults,<br>
+ floating point exceptions, hangs, and possibly other problems.<br>
+<br>
+ In addition the object filtering device had been modified to pass the<br>
+ fill+stroke method to the default handler, instead of checking to see<br>
+ if vector operations should be dropped.<br>
+<br>
+ This commit fixes both problems.<br>
+<br>
+base/gdevoflt.c<br>
+base/gdevsclass.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 10:56:43 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b5682afdd022f0c1f1a20f83568300655bc27bfe">b5682afdd022f0c1f1a20f83568300655bc27bfe</a>
+<blockquote>
+<p>
+ Add ARCH_MAX_SIZE_T to configure's arch.h prototype<br>
+<br>
+arch/arch_autoconf.h.in<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 10:53:15 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=09d359ca87e47cac31c7f1466250b3299818ce86">09d359ca87e47cac31c7f1466250b3299818ce86</a>
+<blockquote>
+<p>
+ Don't fail on missing freetype for auxtools run<br>
+<br>
+ When cross compiling, we shouldn't fail the recursive call to configure if<br>
+ there's no freetype - since it's not required for auxtools.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-13 18:57:30 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bba815fd5ab0427b96ad2f2d6d96e7d69b4964ad">bba815fd5ab0427b96ad2f2d6d96e7d69b4964ad</a>
+<blockquote>
+<p>
+ Bug 702191. Change Tr modes 2 and 6 to use fill_stroke operation.<br>
+<br>
+ Thanks to Ken Sharp who made the change to the PDF interpreter pdf_ops.ps.<br>
+ This showed a few files that had SEGV. This was due to both the fill and<br>
+ stroke having pattern colors where the pattern bits did not fit in the cache.<br>
+ The stroke color could eject the fill pattern from the cache. The fix is to<br>
+ lock the fill pattern in the cache as well as the stroke pattern (and unlock<br>
+ it as well after the fill_stroke).<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+base/gspaint.c<br>
+psi/dwmainc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-13 13:01:23 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3353e8f68c8b4b13db8f712e3d01503d9043df65">3353e8f68c8b4b13db8f712e3d01503d9043df65</a>
+<blockquote>
+<p>
+ pdfwrite - fix previous commit<br>
+<br>
+ commit 2a691356aeb538388ecbf0cafdf422bde771bad0 accidentally left a<br>
+ debugging hack in place, which would lead to lots of files including<br>
+ a ToUnicode CMap when that wasn't necessary, fix it here.<br>
+<br>
+devices/vector/gdevpdtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-13 11:10:50 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2a691356aeb538388ecbf0cafdf422bde771bad0">2a691356aeb538388ecbf0cafdf422bde771bad0</a>
+<blockquote>
+<p>
+ pdfwrite - preserve ToUnicode CMaps with non-standard mappings<br>
+<br>
+ Bug #702201 &quot;pdfwrite changes ligature&quot;<br>
+<br>
+ The title is incorrect, pdfwrite does not 'change ligature'. The PDF<br>
+ file uses an ffi ligature glyph from the embedded font, but the<br>
+ ToUnicode CMap does not map that to U+FB03, it maps it to 3 Unicode<br>
+ code points; f, f and i.<br>
+<br>
+ When we emit a simple font we check its Encoding to see if it needs a<br>
+ ToUnicode CMap, if it doesn't then we don't emit one. Because all the<br>
+ glyphs in this font are named, and have standard names, we don't need to<br>
+ emit a ToUnicode CMap and so we don't (keeps the file size down).<br>
+<br>
+ However, that means that PDF consumers will map the ligature glyph to a<br>
+ ligature ffi when copy/pasting (it has no other effect).<br>
+<br>
+ Here we check the Unicode code points as they are added to the internal<br>
+ record. If any of them is not 2 bytes long, then its not a standard<br>
+ mapping (simple fonts can only map to a single point). In that case we<br>
+ note the exception and when we come to write the font, in the code that<br>
+ checks the Encoding to see if we need to write a ToUnicode, we check<br>
+ this value, if we've seen a multiple code point in the ToUnicode CMap<br>
+ then we don't elide it, we embed the one we picked up.<br>
+<br>
+ This is not actually a bug IMO, there's nothing wrong with the mapping<br>
+ as it stands because an ffi glyph in the document really should map to<br>
+ a single Unicode code point ffi ligature. However, the creator of the<br>
+ PDF file obviously didn't want that, so we;ll now honour it.<br>
+<br>
+ NB this only affects the emission of a ToUnicode CMap, which is only<br>
+ used for copy/paste/search. The PDF contents are not affected by this<br>
+ commit.<br>
+<br>
+devices/vector/gdevpdte.c<br>
+devices/vector/gdevpdtf.c<br>
+devices/vector/gdevpdtf.h<br>
+devices/vector/gdevpdtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-13 08:16:34 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0bb921da9e702375618aa5fe7e85bf589e9a0108">0bb921da9e702375618aa5fe7e85bf589e9a0108</a>
+<blockquote>
+<p>
+ Tiny tweak to release notes<br>
+<br>
+ to say &quot;in the 9.50 release notes&quot; rather than &quot;above&quot;.<br>
+<br>
+doc/History9.htm<br>
+doc/News.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 11:37:33 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6018c8989f1c670d0b8c44d79438faa68dbe5a06">6018c8989f1c670d0b8c44d79438faa68dbe5a06</a>
+<blockquote>
+<p>
+ Bring master up to date with 9.51 release branch<br>
+<br>
+ Dates etc for 9.51 RC1<br>
+<br>
+ Plus prelim changelog<br>
+<br>
+ Dates, changelog etc for 9.51rc2<br>
+<br>
+ Add mention of deprecating/removing opvp/oprp devices<br>
+<br>
+ Dates/logs for 9.51 release candidate 3<br>
+<br>
+ Dates, changelog etc for 9.51 release<br>
+<br>
+Makefile.in<br>
+base/version.mak<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+psi/winint.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-12 17:46:43 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e61555d8b960f1a87664fc378f4ce63619a762aa">e61555d8b960f1a87664fc378f4ce63619a762aa</a>
+<blockquote>
+<p>
+ Change 9.28 to 9.50 in the SAFER section<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-11 15:48:13 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b2d084d01a22261281fc35e990efc46dde6ea8f9">b2d084d01a22261281fc35e990efc46dde6ea8f9</a>
+<blockquote>
+<p>
+ Improve debugging error messages in fontconfig code.<br>
+<br>
+ Change the order we retrieve values, so we get FC_FILE (which *should* always<br>
+ succeed) first. Thus we can use that in subsequent DEBUG messages, giving<br>
+ slightly more useful diagnostics.<br>
+<br>
+base/gp_unix.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-11 13:18:00 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=09a575f0fdc6edde7e42f325167318a1b199839f">09a575f0fdc6edde7e42f325167318a1b199839f</a>
+<blockquote>
+<p>
+ (fontconfig) Don't stop enumerating fonts on error.<br>
+<br>
+ We only want to finish enumerating the fontconfig fonts list once the list<br>
+ is exhausted, not when an individual font gives an error.<br>
+<br>
+ In the event a font gives an error, skip it and move on.<br>
+<br>
+base/gp_unix.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-05 13:12:12 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=32fde6e59a76fa7bcc7c3b977a77b871a740f568">32fde6e59a76fa7bcc7c3b977a77b871a740f568</a>
+<blockquote>
+<p>
+ More problems with TTF &quot;notdef&quot; glyphs<br>
+<br>
+ The font in this file is questionable according to the spec. The spec says GID 0<br>
+ in a TTF *must* be the &quot;notdef&quot; glyph which, traditionally, is a hollow<br>
+ rectangle glyph. This contradicts what Postscript and PDF expect which is that<br>
+ the .notdef glyph will be non-marking.<br>
+<br>
+ The problem is many PDF embedded TTF fonts ignore this, and populate GID 0 with<br>
+ a &quot;meaningful&quot; glyph rather than an actual notdef.<br>
+<br>
+ Previously, the fonts that did this were all ones that used MS Unicode cmap<br>
+ tables and hence we used that to determine whether to image GID 0 or not in<br>
+ TTFs.<br>
+<br>
+ This file does not use a Unicode cmap, but rather an Apple cmap table. In this<br>
+ case, the cmap table maps every character code to GID 0, GID 0 being the only<br>
+ glyph defined in the font.<br>
+<br>
+ So, tweak the heuristic so that in the event we have what *looks* like a<br>
+ notdef, we'll look up the character code in the TTF cmap table, and if<br>
+ the cmap table maps that code to GID 0, then we'll image the glyph.<br>
+ Otherwise, we will force it to be non-marking.<br>
+<br>
+ (Bug 702167)<br>
+<br>
+Resource/Init/gs_ttf.ps<br>
+psi/zfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-09 07:08:00 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3f7832e4b9568e70bdf3bb32c877c4bf5e9dc3b4">3f7832e4b9568e70bdf3bb32c877c4bf5e9dc3b4</a>
+<blockquote>
+<p>
+ PS interpreter - another 64-bit integer fix<br>
+<br>
+ Bug #702197 &quot;Integer overflowin --for-- on Windows&quot;<br>
+<br>
+ Both the limit and the control variable were being passed to types<br>
+ which truncated values when long or int were not 64-bit types.<br>
+<br>
+psi/zcontrol.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-09 05:22:22 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9a0c0303127e4dba3fdc244cf3d75684e5cc8358">9a0c0303127e4dba3fdc244cf3d75684e5cc8358</a>
+<blockquote>
+<p>
+ PS interpreter - fix cvrs with 64-bit integers<br>
+<br>
+ Bug #702195 &quot;Integer overflow in cvrs on Windows&quot;<br>
+<br>
+ Another 64-bit integer fix, we were casting the result of the radix<br>
+ calculation through a long which on Windows is not 64-bit (on Linux it<br>
+ is), leading to truncation o the result.<br>
+<br>
+ Fixed by casting through ps_uint instead. We also need to check for<br>
+ CPSI mode here as we must use a 32-bit intermediate integer if we are in<br>
+ CPSI mode and emit a rangecheck if the integer overflows 32 bits.<br>
+<br>
+psi/ztype.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-08 00:26:16 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=56840269a9df474a029f12ce8e4e41bb2abea313">56840269a9df474a029f12ce8e4e41bb2abea313</a>
+<blockquote>
+<p>
+ PS interpreter some 64-bit integer fixes<br>
+<br>
+ Bug #702194 &quot;cvi produces incorrect results&quot;<br>
+<br>
+ This was simply caused by a cast through long. However its not enough<br>
+ merely to change the cast, we must also check for running in CPSI mode<br>
+ and throw an error if the returned integer cannot be represented in a<br>
+ 32-bit word, for compatibility with test suites.<br>
+<br>
+ In addition (see bug #702134) when exp throws an undefinedresult error<br>
+ delay setting the stack variable until after we have tested the result,<br>
+ so that we do not end up returning a INF on the stack, as is done in<br>
+ other code paths which check for NaN and INF.<br>
+<br>
+ Thirdly; in div cater for the case of an integer divided by a real and<br>
+ check the result for NaN and INF (as the other cases do). This now<br>
+ properly throws an error and does not return NaN or INF on the stack.<br>
+<br>
+psi/zarith.c<br>
+psi/zmath.c<br>
+psi/ztype.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-05 09:58:47 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=933a09069dea35d570694e157013f272995ca5c4">933a09069dea35d570694e157013f272995ca5c4</a>
+<blockquote>
+<p>
+ Fix Raspbian build failure with mm_constant_zeros.<br>
+<br>
+ Moved 'static __m128i mm_constant_zeros' inside MM_SETUP macro definition, so<br>
+ it only appears if MM_SETUP() is actually used.<br>
+<br>
+base/gsroprun.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-03 16:56:59 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=417b80ba6b16de181b2eb2fe5ca2e04565228f5f">417b80ba6b16de181b2eb2fe5ca2e04565228f5f</a>
+<blockquote>
+<p>
+ Bug 702166: Image pattern phase mismatch when using clist<br>
+<br>
+ The gxclimag.c code, when it does 'cmd_put_drawing_color' was not updating<br>
+ the tile_phase. The Kanji text set the tile_phase to 100, but the begin_image<br>
+ was supposed to be 0,0 but the writer was not performing the set_tile_phase.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-04 17:42:04 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2a3b9b17cc32401b45382c42e081733d4f6d1a62">2a3b9b17cc32401b45382c42e081733d4f6d1a62</a>
+<blockquote>
+<p>
+ Cups device: Windows: avoid using an uninitialised mutex.<br>
+<br>
+cups/libs/cups/globals.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-03 16:40:31 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cbee08400ca895bb5f52de6cf8cb44ba59cc5fd8">cbee08400ca895bb5f52de6cf8cb44ba59cc5fd8</a>
+<blockquote>
+<p>
+ Bug 702177: Avoid SEGV on low memory in cmd_put_halftone.<br>
+<br>
+ Ensure that cmd_put_list_op cannot return NULL without<br>
+ setting an error code.<br>
+<br>
+base/gxclutil.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-03 11:53:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e9dc0327b8458ed7c3f1ca07870c7e54dbef6aa4">e9dc0327b8458ed7c3f1ca07870c7e54dbef6aa4</a>
+<blockquote>
+<p>
+ Simplify change to clusterpush.pl for ifilters.<br>
+<br>
+ No need to keep filters and ifilters separately as we pass<br>
+ them through with &quot;filter=&quot; and &quot;ifilter=&quot; intact.<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-03 10:55:43 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fa944725e4b3ca01e7a63608a2b5afc320d9a4d2">fa944725e4b3ca01e7a63608a2b5afc320d9a4d2</a>
+<blockquote>
+<p>
+ Add support to clusterpush.pl for ifilter.<br>
+<br>
+ Needs tweaks within the cluster too, so don't try using<br>
+ this immediately!<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-03 10:02:57 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ab41133a6852dbb3cecdfd19ccd4737f27d7be28">ab41133a6852dbb3cecdfd19ccd4737f27d7be28</a>
+<blockquote>
+<p>
+ Avoid potential Memento leak in gs_lib_ctx_set_icc_directory().<br>
+<br>
+ Return gs_error_VMerror after alloc failure, not -1. This doesn't fix a<br>
+ known memento squeeze test case, but returning -1 after alloc failure breaks<br>
+ gs_main_finit()'s cleanup and leaks blocks.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-03 09:47:52 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a07bf9d0dee6c44865c25ed8c36cf68150301b39">a07bf9d0dee6c44865c25ed8c36cf68150301b39</a>
+<blockquote>
+<p>
+ Fixed Memento leak in gs_seticcdirectory().<br>
+<br>
+ Return gs_error_VMerror instead of -1, after alloc failure. This enables<br>
+ gs_main_finit() to clean up properly.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=111090 ./ghostpdl/membin/gs -sDEVICE=bit -o /dev/null examples/text_graphic_image.pdf<br>
+<br>
+base/gsicc_manage.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 20:05:57 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=05ebf9f3c38ff9b15f54122c682f88ee9dd9d55e">05ebf9f3c38ff9b15f54122c682f88ee9dd9d55e</a>
+<blockquote>
+<p>
+ Avoid compiler warning for MM_SETUP() __m128i mm_constant_ones.<br>
+<br>
+ This avoids warning about mm_constant_ones being used uninitialised.<br>
+<br>
+ Generated code for release build is unchanged.<br>
+<br>
+base/gsroprun.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 17:12:23 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=612ca06e4a41db0f0023827c878a55423500237e">612ca06e4a41db0f0023827c878a55423500237e</a>
+<blockquote>
+<p>
+ minor fix to toolbin/squeeze2text.py to cope with no input.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 19:13:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=968216b16318407a179e7907dd5d6d2ebc54bb25">968216b16318407a179e7907dd5d6d2ebc54bb25</a>
+<blockquote>
+<p>
+ Fix typo in 16bit saturation blending code.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 17:10:43 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2c5687fef9709b04dd96957677ff9accd16ee1f7">2c5687fef9709b04dd96957677ff9accd16ee1f7</a>
+<blockquote>
+<p>
+ Fix 16bit blending problem.<br>
+<br>
+ Seen with:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -o out%d.psd -r72 -dMaxBitmap=2000M<br>
+ tests_private/pdf/forms/v1.5/proxy_vol_1_number_1_1.pdf<br>
+<br>
+ on page 3.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-27 12:08:22 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=155894abeb41e90f9e2c8cb942269c2a2e1a6018">155894abeb41e90f9e2c8cb942269c2a2e1a6018</a>
+<blockquote>
+<p>
+ Reimplement saturation blendmode.<br>
+<br>
+ To test the results of deep color rendering, we ran a psdcmyk vs<br>
+ psdcmyk16 comparison. This showed differences on page 17 of the<br>
+ Altona_technical_v20_x4.pdf file in one patch. Simplifying the<br>
+ file showed that the saturation blend mode was showing a<br>
+ significant difference in one tile.<br>
+<br>
+ Saturation blend mode is defined to not make any changes if we<br>
+ are writing over a pure grey color (as there is no 'hue' for<br>
+ it to saturate). You'd expect that the blending function would be<br>
+ continuous (i.e. that a small peturbation of the background color<br>
+ should only produce a small peturbation in the output), but this<br>
+ is NOT the case around pure greys.<br>
+<br>
+ The example in the tested file, shows that psdcmyk is called with<br>
+ 7a, 7a, 7a, which therefore leaves the background unchanged. For<br>
+ psdcmyk16, it's called with 7a01 7a03 7a01, which therefore does<br>
+ NOT leave the background unchanged. Testing by changing the 8 bit<br>
+ inputs to 7b 7a 7b (a small peturbation), gives output of 99 64 99<br>
+ (a large change).<br>
+<br>
+ So, actually, the results given seem reasonable in that case.<br>
+<br>
+ HOWEVER, in investigating what now seems to be a red herring, I<br>
+ believe I've spotted a problem in the implementation. The scaling<br>
+ of the components subtracts y when it should be subtracting minb.<br>
+<br>
+ The only way I could actually work that out though, was to completely<br>
+ reimplement the code, and optimise it. I believe the new code is<br>
+ slightly clearer (in that it follows the spec more explicitly) and<br>
+ possibly slightly more performant, so I am committing that rather<br>
+ than attempting to patch the existing code.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 11:04:32 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=549a133dfcbdf2b3b028134d287d334f8fd623fd">549a133dfcbdf2b3b028134d287d334f8fd623fd</a>
+<blockquote>
+<p>
+ Fix 64bit non-console windows build.<br>
+<br>
+ The creation of the text window was truncating the pointer to<br>
+ long (32bit) size. No idea how we've been getting away with this<br>
+ in the past. I can only assume this has been exposed by<br>
+ differences in the runtime lib with vs2019 as compared to<br>
+ earlier versions.<br>
+<br>
+psi/dwtext.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-28 10:34:12 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1a4e859544336c9034c49bd9f735529401422961">1a4e859544336c9034c49bd9f735529401422961</a>
+<blockquote>
+<p>
+ Remove trailing white space from a prior commit<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 17:16:26 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fa1bc6dce44b6fc69e9852553aec4b7a419d0d9c">fa1bc6dce44b6fc69e9852553aec4b7a419d0d9c</a>
+<blockquote>
+<p>
+ Bug 702155 Alternate tint transform and shadings<br>
+<br>
+ Add option to match AR shadings for corner case, which<br>
+ is not as detailed in the PDF specification.<br>
+<br>
+ If the source space is DeviceN or Separation and the<br>
+ colorants are not supported (i.e. if we are using the alternate tint<br>
+ transform) the interpolation should occur in the source space to<br>
+ accommodate non-linear tint transform functions.<br>
+ e.g. We had a case where the transform function<br>
+ was an increasing staircase. Including that function in the<br>
+ gradient smoothness calculation gave us severe quantization. AR on<br>
+ the other hand is doing the interpolation in device color space<br>
+ and has a smooth result for that case. So AR is not following the spec. The<br>
+ bit below solves the issues for Type 4 and Type 5 shadings as<br>
+ this will avoid interpolations in source space. Type 6 and Type 7 will still<br>
+ have interpolations in the source space even if pfs-&gt;cs_always_linear == true.<br>
+ So the approach below does not solve those issues. To do that<br>
+ without changing the shading code, we could make a linear<br>
+ approximation to the alternate tint transform, which would<br>
+ ensure smoothness like what AR provides.<br>
+<br>
+base/gxshade.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-27 07:46:32 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=55222ef42e6574967810f8591ea308dbfc81b0a4">55222ef42e6574967810f8591ea308dbfc81b0a4</a>
+<blockquote>
+<p>
+ Fix differences seen between page mode and clist mode exposed by commit b3a73575<br>
+<br>
+ The code in gxipixel.c skips gridfitting if fill_adjust is 0, but the clist<br>
+ writer logic wasn't updating the fill_adjust, so the reader could have the<br>
+ wrong value. Seen with fts_25_2505 and fts_25_2506 which have an image with<br>
+ SMask and also have large text (non-cached, so painted with fill) preceding<br>
+ (drawn under) the image. Text is drawn with fill_adjust 0.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 09:10:20 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8539dd741abec3d5b8e4417e512ae0847224f7a0">8539dd741abec3d5b8e4417e512ae0847224f7a0</a>
+<blockquote>
+<p>
+ Fixes needed for pdfi after fill/stroke -- check for null pattern<br>
+<br>
+ Change to test for pgs-&gt;colours.pattern.p_tile to be NULL before<br>
+ attempting to dereference it.<br>
+<br>
+ pdfi has a 'null' pattern frequently, which didn't seem to matter before the<br>
+ fill/stroke changes, but does matter now.<br>
+<br>
+ I think the gs/pdf implementation sets up a specific &quot;null&quot; pattern<br>
+ that gets around this issue, but currently pdfi does not do this.<br>
+ Maybe it should?<br>
+<br>
+base/gspaint.c<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 15:22:04 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b6bd379a249b81213db5fdecf29ed11f2ce00e9e">b6bd379a249b81213db5fdecf29ed11f2ce00e9e</a>
+<blockquote>
+<p>
+ Fix signed issue in 16bit alpha blending fill_rectangle routines.<br>
+<br>
+ As seen by the central spot in the pink region of page 1 of:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -o out%d.psd -dMaxBitmap=2000M<br>
+ tests_private/pdf/pdf_1.7_ATS_EXXPA1DC_PDFACT.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 15:09:35 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b942845ee596dbcf37cf2af2381f0b298b962317">b942845ee596dbcf37cf2af2381f0b298b962317</a>
+<blockquote>
+<p>
+ pdfwrite - Fix indeterminism with QL shading tests<br>
+<br>
+ When creating a new colour space to put in a PDF file we perform various<br>
+ tests to see if its a space we have already written, to prevent writing<br>
+ duplicate spaces (we perform similar tests for most resources).<br>
+<br>
+ In some cases, when we write the resource to a file, we create an MD5<br>
+ hash and compare those to see if the resources are the same. In the<br>
+ case of colour spaces, however, they are retained in memory and so we<br>
+ use a different method. We 'serialise' the colour space. This is not the<br>
+ same as writing it to the PDF file, and its a graphics library thing not<br>
+ a pdfwrite function. Basically this writes out the content of the<br>
+ various C structures. The stream we use is an in-memory stream.<br>
+<br>
+ Unfortunately, for Separation colour spaces, there was a fault in the<br>
+ function which writes the colour space name, and it was writing out<br>
+ the bytes forming the address of the name instead of the actual string.<br>
+<br>
+ This could, very rarely, mean that we would mis-identify a new colour<br>
+ space as being the same as an old colour space, and so would reuse the<br>
+ old space instead of creating a new one.<br>
+<br>
+ I've checked the DeviceN code and it does not suffer the same problem.<br>
+<br>
+base/gscsepr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 13:03:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=988cfb770d12441dfef9002f799757e5cd869e48">988cfb770d12441dfef9002f799757e5cd869e48</a>
+<blockquote>
+<p>
+ Fix the overflow case in 16 bit saturation blending.<br>
+<br>
+ As seen with the second apple of the bottom row of page 1<br>
+ of:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -r72 -o out%d.psd -dMaxBitmap=2000M<br>
+ ../tests_private/pdf/PDF_1.7_ATS/AIX4G1C3.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 17:10:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=293e2b7f6298a6049254d18250d4f82f78ac2978">293e2b7f6298a6049254d18250d4f82f78ac2978</a>
+<blockquote>
+<p>
+ Fix for bug 702150: make pl_main_run_file_utf8() check for error from s_process_read_buf().<br>
+<br>
+ Avoids infinite loop in:<br>
+ ./membin/gpcl6 -sDEVICE=ppmraw -o /dev/null .<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 18:24:55 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=342229c7533310f9a46fbfd7a7dd2eaa976746f0">342229c7533310f9a46fbfd7a7dd2eaa976746f0</a>
+<blockquote>
+<p>
+ minor improvements to toolbin/squeeze2text.py.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 08:25:13 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dd0961426d3e1718c17fa226f3c2c06f7eb296ce">dd0961426d3e1718c17fa226f3c2c06f7eb296ce</a>
+<blockquote>
+<p>
+ CID 354310: Remove pointless unsigned comparison with 0.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 08:11:49 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fae43bf37f78a2eef5a4418f428c41bdfd8a2738">fae43bf37f78a2eef5a4418f428c41bdfd8a2738</a>
+<blockquote>
+<p>
+ CID 354291: Add error handling for inability to allocate<br>
+<br>
+ Coverity complained about setting dash.pattern = NULL and &quot;Passing &quot;&amp;dash&quot;<br>
+ to &quot;gstate_copy_dash&quot;, which dereferences null &quot;dash.pattern&quot; which is either<br>
+ wrong, or *very* misleading. We assume that it means that gx_set_dash() *may*<br>
+ access that pointer.<br>
+<br>
+ In truth, this can never happen in these circumstances.<br>
+<br>
+ Nevertheless, in gx_set_dash() is we have a NULL mem (allocator) pointer and the<br>
+ dash pattern pointer is NULL at the point we have to copy into it, then throw<br>
+ an error.<br>
+<br>
+base/gsline.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 19:59:03 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b3a7357594634fbd89a4cbf782d094289628acd6">b3a7357594634fbd89a4cbf782d094289628acd6</a>
+<blockquote>
+<p>
+ Fix bug 702139 - clist clipping bug.<br>
+<br>
+ When characters are filled as paths, the fill_adjust may be set to 0.<br>
+ Clip paths are supposed to match fill paths, i.e. the 'any part of pixel'<br>
+ rule, so we need fill_adjust of 0.5 (not 0). The most foolproof way to fix<br>
+ this is to set it in the reader when processing 'begin_clip' and restore<br>
+ it when handling the end_clip.<br>
+<br>
+ There are many progressions with this change, but it also exposes some<br>
+ cases where the change in clipping allows other elements to be seen that<br>
+ were previously hidden. Those few instances are minor and mostly seem to<br>
+ occur when page mode differs from clist mode. Examination of some of those<br>
+ cases shows that the clip path with clist mode now matches page mode and<br>
+ other elements (e.g. images) differ in extent between page and clist mode.<br>
+<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 19:39:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ea7aa02cc5c540c3332e0d4e81209a920360d45e">ea7aa02cc5c540c3332e0d4e81209a920360d45e</a>
+<blockquote>
+<p>
+ Fix gx_default_copy_alpha_hl_color for 16 bit operation.<br>
+<br>
+ The code to write the composite data back to buffers to be sent<br>
+ to copy_alpha was getting the first byte of each 16 bit pair<br>
+ wrong in the 16bit data case.<br>
+<br>
+ Also, when we 'restart' after skipping a zero byte in the 16bit<br>
+ case we need to skip 2 bytes per pixel, not one.<br>
+<br>
+ This can be seen when running:<br>
+<br>
+ gs -r72 -o out%d.psd -sDEVICE=psdcmyk16 -dMaxBitmap=2000M<br>
+ ../tests_private/comparefiles/js.pdf<br>
+<br>
+base/gdevdbit.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 18:19:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d720180603fcd3853436fb002c6ff9c7fc956b27">d720180603fcd3853436fb002c6ff9c7fc956b27</a>
+<blockquote>
+<p>
+ Fix psdcmyk16 blending issue.<br>
+<br>
+ Use uint32_t rather than int to avoid signedness issues.<br>
+<br>
+ Seen in the psdcmyk16 page mode rendering of<br>
+<br>
+ tests_private/comparefiles/Bug692766.pdf<br>
+<br>
+ (bad colors in 4th rgb circle intersection test).<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 15:57:36 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8f038b63bc2fab4a71191583d36b1894ae3576f5">8f038b63bc2fab4a71191583d36b1894ae3576f5</a>
+<blockquote>
+<p>
+ Fix coverity issues 354292 and 354293.<br>
+<br>
+ Don't bother testing an unsigned value for clipping against 0.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 08:58:32 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ed426e9202e04e7d90194d92daedf9a12610b9f9">ed426e9202e04e7d90194d92daedf9a12610b9f9</a>
+<blockquote>
+<p>
+ Replace 0 with NULL for pointer validation/setting.<br>
+<br>
+ Also make validation an explicit comparison with NULL i.e.:<br>
+ &quot;if (mem != NULL)&quot; rather than &quot;if (mem)&quot;.<br>
+<br>
+base/gsline.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 17:30:54 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b6fc7f2b05fa3cb7b120b05dbfa68a90da731a30">b6fc7f2b05fa3cb7b120b05dbfa68a90da731a30</a>
+<blockquote>
+<p>
+ Add support for multiple squeezes in one run.<br>
+<br>
+ E.g. MEMENTO_SQUEEZES=115867-1..+3,119928-1..+3 ...<br>
+<br>
+ This is equivalent running multiple times with MEMENTO_FAILAT set to 115866,<br>
+ 115867, 11588, 119927, 119928, 119929.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 10:38:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cc6f92959507212b83130a24dd40b330e8ca9634">cc6f92959507212b83130a24dd40b330e8ca9634</a>
+<blockquote>
+<p>
+ Fix for MEMENTO_FAILAT=119928: only call gs_grestoreall_for_restore() if vmsave-&gt;gsave not NULL.<br>
+<br>
+ Also fix error cleanup in gs_gsave_for_save(), otherwise this fix breaks<br>
+ previous fix for MEMENTO_FAILAT=115802.<br>
+<br>
+ [Thanks to chrisl for this and various other recent fixes.]<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=119928 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsstate.c<br>
+psi/isave.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 11:21:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c2a030517d269b020c99bcf754cefccb556ad7bd">c2a030517d269b020c99bcf754cefccb556ad7bd</a>
+<blockquote>
+<p>
+ toolbin/squeeze2text.py: improve log output.<br>
+<br>
+ With -p, if there is gap in 'Memory squeezing @ &lt;N&gt;' output (because of calls<br>
+ to free()), output next &lt;N&gt;.<br>
+<br>
+ Also flush log output to avoid looking like we've hung.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 21:00:21 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bab28178da29dabd691f7dee11ab5de62e329aa7">bab28178da29dabd691f7dee11ab5de62e329aa7</a>
+<blockquote>
+<p>
+ Fix issue with fts_14_1416.pdf and psdcmyk16<br>
+<br>
+ This was missed in the fix. Affected only 16 bit devices.<br>
+<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=b1ac0686eea6adcf2db8cabf7858796494b4459d<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 20:05:49 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a2d4a7715f465911f174a8e764ab40b40455dd68">a2d4a7715f465911f174a8e764ab40b40455dd68</a>
+<blockquote>
+<p>
+ Fix Ink names leaking.<br>
+<br>
+ The cause of the leak was a typo in gx_final_DeviceN.<br>
+<br>
+ Once this is fixed, we hit a problem where ink names are set<br>
+ to be a pointer to a static empty string, which can't be<br>
+ freed. Change to using NULL to mean empty ink name.<br>
+<br>
+base/gscdevn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:01:43 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6d678da952f7f4a19fb8b9e12f8cb8013d31f04d">6d678da952f7f4a19fb8b9e12f8cb8013d31f04d</a>
+<blockquote>
+<p>
+ Memento/Valgrind tweak.<br>
+<br>
+ Ensure we mark the contents of a block readable before we<br>
+ look for pointers in it, and don't overrun the end.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:57:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=44f00686cbaea612747c336dc201ae3f682cc81b">44f00686cbaea612747c336dc201ae3f682cc81b</a>
+<blockquote>
+<p>
+ Squash some unused variable warnings.<br>
+<br>
+base/claptrap-planar.c<br>
+base/gp_unifs.c<br>
+base/gxclpath.c<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:14:23 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=26c2173179946ec8f70445f5941a4a20e707af88">26c2173179946ec8f70445f5941a4a20e707af88</a>
+<blockquote>
+<p>
+ pdf14_{fill_stroke_path,clist_fill_stroke_path_pattern_setup} cleanups.<br>
+<br>
+ Use a nicer method of breaking const (to avoid warnings). Ensure<br>
+ that we always put everything back as it was when we leave the<br>
+ functions, even if we have an error.<br>
+<br>
+ Remove needless cleanup code to handle functions that can never<br>
+ return an error to us returning an error.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:35:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a8839dbb536440bce927c4cb4977643495eee26a">a8839dbb536440bce927c4cb4977643495eee26a</a>
+<blockquote>
+<p>
+ pdf14_clist_fill_stroke_path_pattern_setup overprint fix.<br>
+<br>
+ Only enable CompatibleOverprint for the stroke part of stroke/fill<br>
+ patterns if we are in a subtractive space.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 11:24:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3e84f1e1b0c52bd55145e35f8ddc0d5b8d1b65c5">3e84f1e1b0c52bd55145e35f8ddc0d5b8d1b65c5</a>
+<blockquote>
+<p>
+ Squash some warnings with gs_swapcolors_quick breaking const.<br>
+<br>
+ At various places in the code, we call gs_swapcolors_quick where<br>
+ we only have a const pgs.<br>
+<br>
+ Properly, we should copy the pgs to a non-const pgs, and then use<br>
+ that, but that would be a performance hit.<br>
+<br>
+ In all cases, we change the graphics state, then restore it before<br>
+ exit, so effectively it is const over the entire call of the<br>
+ enclosing procedure.<br>
+<br>
+ Rather than having lots of small hacky casts removing const, we<br>
+ push the const breakage into gs_swapcolors_quick itself where we<br>
+ do it in the &quot;approved&quot; way using a union.<br>
+<br>
+base/gdevp14.c<br>
+base/gsstate.c<br>
+base/gxfill.c<br>
+base/gxgstate.h<br>
+devices/vector/gdevpdfd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 10:10:25 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b61365607b75d456943f95360bff101c288ba555">b61365607b75d456943f95360bff101c288ba555</a>
+<blockquote>
+<p>
+ Avoid floating point in gxblend.c<br>
+<br>
+ Use fixed point in preference.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 08:23:59 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f8cd087b8a7b8c9b5cf5b8fd4d29e237f6103c7b">f8cd087b8a7b8c9b5cf5b8fd4d29e237f6103c7b</a>
+<blockquote>
+<p>
+ Implement OPM tracking in pdfwrite<br>
+<br>
+ More than somewhat to my surprise, the release testing of 9.51 revealed<br>
+ that pdfwrite was not tracking the state of overprint mode (OPM). It<br>
+ could be set by setdistillerparams, and in no other way.<br>
+<br>
+ This commit adds tracking the OPM in the graphics state, removes the<br>
+ old overprint_mode variable from the device, but preserves the ability<br>
+ to alter the OPM using setdistillerparms.<br>
+<br>
+ This also alters the initial state of OPM, the distiller params<br>
+ reference states that the 'factory default' of OPM is 1, but the PDF<br>
+ Reference says that the initial state of OPM is 0. We need to start<br>
+ with the correct setting of OPM so we change it form 1 to 0<br>
+ in gs_pdfwr.ps.<br>
+<br>
+ In passing, cast a const gs_gstate * to a gs_gstate * when used by<br>
+ gs_swapcolours_quick, in order to avoid a compiler warning.<br>
+<br>
+ This causes a small number of progressions in files using OPM (which is<br>
+ rare, its even rarer to actually alter it during the course of the file)<br>
+<br>
+Resource/Init/gs_pdfwr.ps<br>
+devices/vector/gdevpdfb.h<br>
+devices/vector/gdevpdfd.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 16:24:12 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b1ac0686eea6adcf2db8cabf7858796494b4459d">b1ac0686eea6adcf2db8cabf7858796494b4459d</a>
+<blockquote>
+<p>
+ Bug 702117 Knockout groups containing non-isolated groups<br>
+<br>
+ So this ended up being rather complicated. The first issue was that<br>
+ we were not setting the backdrop properly for non-isolated groups that<br>
+ reside in knockout groups. When that was fixed, it was revealed that we<br>
+ were not doing the recompositing operation for non-isolated knockout groups. This meant<br>
+ that the backdrop was getting applied twice effectively (once in the original<br>
+ fill and then again when the group was popped). The only file that showed<br>
+ this issue was the crazy Altona page with the many overlapping groups. Customer<br>
+ file added to provide a clearer case in the regression tests.<br>
+<br>
+base/gdevp14.c<br>
+base/gxblend.c<br>
+base/gxblend1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 17:09:41 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4ac299b11d53cf1d174a8351290918b536aa5859">4ac299b11d53cf1d174a8351290918b536aa5859</a>
+<blockquote>
+<p>
+ Fix MEMENTO_FAILAT=115867 - segv in i_unregister_root() after failure in i_register_root().<br>
+<br>
+ In pl_main_delete_instance(), don't call gs_unregister_root() if<br>
+ minst-&gt;device_root is NULL.<br>
+<br>
+ Also in pl_top_create_device(), check return from<br>
+ gs_register_struct_root(). But this doesn't appear to make any difference to<br>
+ the handling of the memento error.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=115867 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 16:51:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9022073cb754ace5923c08e81d3b8d0be352abd9">9022073cb754ace5923c08e81d3b8d0be352abd9</a>
+<blockquote>
+<p>
+ Fix deep color group compose issue.<br>
+<br>
+ In commit bb7d57e84e9fe I reordered parameters to keep 8/16<br>
+ branches consistent, and missed one case.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:27:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7c8c6c4ba0df88b5cbc4c0e8dab5f643a133603e">7c8c6c4ba0df88b5cbc4c0e8dab5f643a133603e</a>
+<blockquote>
+<p>
+ Remove needless &quot;isolated&quot; parameter from pdf14_mark_rect routines.<br>
+<br>
+ The value was carefully plumbed through (only in the 8bit case) in<br>
+ a recent commit, but was never actually used. Remove it a) because<br>
+ it's pointless passing a variable we don't use, and b) because it's<br>
+ another difference between 8 and 16 bit versions.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:21:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c3c922510f0498d68d7a369f0ffd70379e3d5359">c3c922510f0498d68d7a369f0ffd70379e3d5359</a>
+<blockquote>
+<p>
+ Fix typing mistake in 16bit transparency.<br>
+<br>
+ When promoting from 8 to 16 bit, shape and src_alpha become<br>
+ uint16_ts rather than bytes.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:06:38 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=713c776695f7a18cfd326e84fdef0b2911770609">713c776695f7a18cfd326e84fdef0b2911770609</a>
+<blockquote>
+<p>
+ Fix more overprint problems with deep color transparency.<br>
+<br>
+ Again, overprint changes to the 8 bit paths had not been<br>
+ pulled across to the 16 bit path.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 07:10:40 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=075abaaa9ffa03af26bed1a32d3e5114511ee786">075abaaa9ffa03af26bed1a32d3e5114511ee786</a>
+<blockquote>
+<p>
+ Added toolbin/squeeze2text.py, for processing output from MEMENTO_SQUEEZEAT=...<br>
+<br>
+ An alternative to squeeze2html.pl, outputing just summary information.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 11:18:11 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fbcf5865f688201fba239c5dde0078e6733538c4">fbcf5865f688201fba239c5dde0078e6733538c4</a>
+<blockquote>
+<p>
+ Fix for MEMENTO_FAILAT=115802: make gs_gsave_for_save() call gs_gsave() so it can restore after error.<br>
+<br>
+ Previously, zsave() called gs_gsave_for_save() then gs_gsave(), but if<br>
+ gs_gsave() failed we ended up with SEGV in finalise code.<br>
+<br>
+ To allow zsave() to restore things after gs_gsave() failure, we would need to<br>
+ add an include of base/gxgstate.h.<br>
+<br>
+ Instead we remove the call of gs_gsave() from zsave() and append it to<br>
+ gs_gsave_for_save(), where things can be easily restored if it fails.<br>
+<br>
+ [There are no other callers of gs_gsave_for_save().]<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=115802 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsstate.c<br>
+psi/zvmem.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 09:44:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=356e24a53c60710ecfee991bb91cd503e3d9873b">356e24a53c60710ecfee991bb91cd503e3d9873b</a>
+<blockquote>
+<p>
+ Avoid leaks if we get alloc failure when closing down (found by memento).<br>
+<br>
+ In gs_main_finit(), ignore gs_error_VMerror from interp_reclaim(). Such error<br>
+ ultimately comes from gs_vmreclaim() calling context_state_load(), but the<br>
+ missing info doesn't seem to be required for gs_main_finit() to carry on.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=147801 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+psi/imain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 17:40:51 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e1257c1f03a4b16794d0c2df035b7ed8685a4254">e1257c1f03a4b16794d0c2df035b7ed8685a4254</a>
+<blockquote>
+<p>
+ Fix image_color_icc_prep to properly align planar buffers.<br>
+<br>
+base/gxicolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 10:50:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5ee682a20c494e8f1c65a7a95470252df6d9cdf4">5ee682a20c494e8f1c65a7a95470252df6d9cdf4</a>
+<blockquote>
+<p>
+ Enable CAL for gxicolor halftoning.<br>
+<br>
+ Looks like the calling code was unfinished, and the build<br>
+ changes were not done.<br>
+<br>
+ Also, squash some warnings.<br>
+<br>
+base/gxicolor.c<br>
+base/gximono.c<br>
+base/lib.mak<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 15:57:47 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d26e2d1c628d88263c4d946bdaf2145a438a1416">d26e2d1c628d88263c4d946bdaf2145a438a1416</a>
+<blockquote>
+<p>
+ Ensure the memory entry in a cloned gstate is correct.<br>
+<br>
+ In theory, we could end up cloning a graphics state with one allocator, then<br>
+ assigning the &quot;memory&quot; entry in the cloned state to that of the state we are<br>
+ cloning.<br>
+<br>
+ In practice the two have (so far) been the same, but that is not guaranteed.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 11:08:57 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1faa24d998afa6ce98279f26514fe14edbd62e8e">1faa24d998afa6ce98279f26514fe14edbd62e8e</a>
+<blockquote>
+<p>
+ Fix segfault cleaning up after gstate clone failure.<br>
+<br>
+ For me this happens with MEMENTO_FAILAT=112447 and for Julian it happens with<br>
+ MEMENTO_FAILAT=115905.<br>
+<br>
+ Basically, the order of events was that we'd allocate a new gstate, copy the<br>
+ contents of the existing gstate to the new one, then copy the dash pattern<br>
+ (which could fail) and copy the &quot;client_data&quot; (which could and, in this case,<br>
+ did fail). When either of those failed, we'd jump to the error handling and<br>
+ exit with the error.<br>
+<br>
+ The problem is that, by jumping to the &quot;fail&quot; label, we skip over all the code<br>
+ that fixes up the reference counts (and various other things) to account for<br>
+ the newly created gstate.<br>
+<br>
+ This commit reorders things so we allocate the gstate, copy the client data,<br>
+ copy the dash pattern, *then* assign the contents of the old gstate to the new<br>
+ one, and carry on. Thus, by the time the gstate contents are copied, the<br>
+ function cannot fail, and everything is sure to be correctly setup.<br>
+<br>
+ In the event that either the dash pattern or the client data fail to allocate,<br>
+ the new gstate is still filled with NULLs, except for the subset of<br>
+ &quot;gs_gstate_parts&quot; which are allocated and setup correctly so we can safely<br>
+ free the graphics state object before returning the error.<br>
+<br>
+ Also, use NULL for pointer validation instead of 0.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 17:43:18 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f51ae6f4bf85dfa5be4b48a1a46ac69c653500c3">f51ae6f4bf85dfa5be4b48a1a46ac69c653500c3</a>
+<blockquote>
+<p>
+ Make sure pattern fills use proper alpha settings<br>
+<br>
+ Fix for regression of fts_28_2804.pdf pdfwrite output rendering<br>
+ with fill-stroke commit. This also fixes the rendering of fts_25_2526.pdf<br>
+ Bug 702033. Required a minor change in the XPS interpreter to make<br>
+ sure that patterns did not have their opacity double applied.<br>
+<br>
+base/gdevp14.c<br>
+xps/xpstile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 17:20:09 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=59806f121beba543de6d78a1b5765919bce9b2cb">59806f121beba543de6d78a1b5765919bce9b2cb</a>
+<blockquote>
+<p>
+ Bug 702105: Premature EOF Infinite loop in interpolated imagemask stream.<br>
+<br>
+ Fix supplied by Peter Cherepanov. Many thanks.<br>
+<br>
+base/simscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 16:58:06 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f860dbd9e699fcef50018fbd7cf84565237d78a3">f860dbd9e699fcef50018fbd7cf84565237d78a3</a>
+<blockquote>
+<p>
+ Fix &quot;blue gradients&quot; seen with psdrgb device.<br>
+<br>
+ Since the fill/stroke commit went in, some files have been showing<br>
+ gradients in the wrong colours. For instance this one, spotted in<br>
+ release testing:<br>
+<br>
+ gs -sDEVICE=psdrgb -r72 -dMaxBitmap=2000M -o out%d.psd<br>
+ ../tests_private/comparefiles/Layout.pdf<br>
+<br>
+ Bisecting the fill/stroke branch back, it seems the commit that<br>
+ caused it is the one that stops psdrgb using 'devn' colors.<br>
+<br>
+ This causes gradients to drop to using the color_info.comp_bits and<br>
+ comp_shift information, which the psd devices don't fill in.<br>
+<br>
+ The fix here is to make psd_prn_open call the standard function for<br>
+ setting up these values.<br>
+<br>
+devices/gdevpsd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 14:48:05 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ddccae87e67a4ea101f289549e2d1692b0230509">ddccae87e67a4ea101f289549e2d1692b0230509</a>
+<blockquote>
+<p>
+ Bug701972 -- fix pdfwrite image downscaling bug<br>
+<br>
+ Calculate the bits on the row using the input image width,<br>
+ not the output image width.<br>
+<br>
+ I had to add an extra argument to a few functions to propagate the info<br>
+ down to where it is needed.<br>
+<br>
+ Note obscure case involving calling psdf_setup_image_to_mask_filter()<br>
+ for a Type 4 image and CompatibilityLevel &lt; 1.3. This change just<br>
+ adds the extra input_width arg, which doesn't change whatever it was<br>
+ doing before. If there is a bug lurking here, it seems unlikely<br>
+ anybody cares?<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+devices/vector/gdevpsdf.h<br>
+devices/vector/gdevpsdi.c<br>
+devices/vector/gdevpsds.c<br>
+devices/vector/gdevpsds.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 09:22:55 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4e2eaa8324ee4428de337ae3c31a695e68ede75b">4e2eaa8324ee4428de337ae3c31a695e68ede75b</a>
+<blockquote>
+<p>
+ Set the BitsPerComponent for alt stream in pdfwrite<br>
+<br>
+ Add this to the image[1] code where it was missing<br>
+<br>
+ This fixes bug where compressed images were correct, but if<br>
+ -dEncodeGrayImages=false was used, then they were truncated.<br>
+<br>
+ This is related to trimmed/rescaled image for Bug701972.<br>
+ See the sample trim-nobug.pdf attached to that bug.<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 19:25:24 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=76fb18bc255a88cab5fbb2410b411e580f53486d">76fb18bc255a88cab5fbb2410b411e580f53486d</a>
+<blockquote>
+<p>
+ Bug 702131: Fix overprint in additive spaces.<br>
+<br>
+ We should only enter CompatibleOverprint blend mode if we<br>
+ are in an subtractive space. This stops pdf14 trying to honour<br>
+ drawn_comps even in additive spaces.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 14:02:24 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f1b16fe2d0c6f23923fd26d03544030bc285365a">f1b16fe2d0c6f23923fd26d03544030bc285365a</a>
+<blockquote>
+<p>
+ Fix bug 702079: SEGV with clist and PCL caused by wrong color in images.<br>
+<br>
+ The clist_image_plane_data function was called with the dev_color for a band<br>
+ being type &lt;pattern&gt; when the image had type &lt;pure&gt;, but the code was not<br>
+ calling cmd_put_drawing_color to update the bands for the image because uses_color<br>
+ was false. Add rop3_uses_S(pgs0&gt;log_op) as well as (||) rop3_uses_T(pgs-&gt;log_op)<br>
+ when CombineWitColor is true.<br>
+ Note that extra calls to cmd_put_drawing_color before an image are low cost<br>
+ and do nothing if the current device color is already the same.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 09:48:07 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=646007af056447fefd61eabfcdae85bfd6017d24">646007af056447fefd61eabfcdae85bfd6017d24</a>
+<blockquote>
+<p>
+ Bug 702128 : clist pdf14 overprint state<br>
+<br>
+ This change ensures that gxdso_overprint_active<br>
+ gets the proper state information.<br>
+<br>
+ When the clist writer is active with the pdf14 device, the writer maintains<br>
+ the current overprint state (as the writer has no access to the pdf14 member variables)<br>
+ and must know what to put in the clist.<br>
+<br>
+ When the clist writer is not present (i.e. page mode), the pdf14 device<br>
+ maintains the information.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 11:46:45 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6ace930c11984e64aded98f1ff8db47104424354">6ace930c11984e64aded98f1ff8db47104424354</a>
+<blockquote>
+<p>
+ Bug 702068 continued: Fix smasked images with masks.<br>
+<br>
+ Release testing has shown up another case that needs help.<br>
+<br>
+ gs/bin -sDEVICE=ppmraw -o out.ppm -r300 -dMaxBitmap=1G<br>
+ tests_private/pdf/sumatra/1901_-_tiling_inconsistencies.pdf<br>
+<br>
+ This shows horizontal white lines in the &quot;Next&quot; &quot;Up&quot; &quot;Previous&quot;<br>
+ images at the top of the page.<br>
+<br>
+ Investigation shows this is due to the images having Masks as well<br>
+ as SMasks.<br>
+<br>
+ The Mask image is run to a 1 bit memory device, which means that<br>
+ the gxdso to check if we are in an SMask doesn't work. We work<br>
+ around this by introducing a new flag to gs_pixel_image_common<br>
+ that we can set to indicate that we are within an smask. We set<br>
+ this when we set the masked image up (using the gxdso), and check<br>
+ it when we come to do the gridfitting.<br>
+<br>
+base/gsiparam.h<br>
+base/gxclrast.c<br>
+base/gximage.c<br>
+base/gximage3.c<br>
+base/gxipixel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 19:31:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bb7d57e84e9fe615832b2d5811f4c9cd4d443cd1">bb7d57e84e9fe615832b2d5811f4c9cd4d443cd1</a>
+<blockquote>
+<p>
+ Sync deep colour blending with recent changes to 8 bit blending.<br>
+<br>
+ Release testing reveals problems with deep color blending and<br>
+ overprint. This is because changes were made to the 8bit<br>
+ branches of gxblend.c that weren't fully reflected in the<br>
+ 16bit branches.<br>
+<br>
+ Reapply those changes here.<br>
+<br>
+ While we're at it, address some other minor code cleanups,<br>
+ including keeping the ordering of parameters the same between 8<br>
+ and 16 bit to avoid confusion in future.<br>
+<br>
+ The command that showed the inital problem was:<br>
+<br>
+ bin/gswin32c.exe -o out.psd -sDEVICE=psdcmyk16 tests_private/comparefiles/Bug695916.pdf<br>
+<br>
+ where the image of the Earth did not appear.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 13:27:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e51ba18f031c4b5f6a14c0a559391fe30f409dd1">e51ba18f031c4b5f6a14c0a559391fe30f409dd1</a>
+<blockquote>
+<p>
+ Bug 702130: Fix JPEG memory failure problems.<br>
+<br>
+ The SEGV reported by Memento squeezing (which oddly is at 113600<br>
+ for me, rather than Julian's higher number) is caused by jpeglib<br>
+ calling 'mem_term' on something that failed to 'mem_init'.<br>
+<br>
+ The fix is to use gs_memory_chunk_unwrap rather than target/release,<br>
+ and to check whether mem == cmem to see whether that actually did<br>
+ unwrap.<br>
+<br>
+ This runs us into a further problem, where we are freeing the<br>
+ custom memory descriptor using a gc memory pointer, where it was<br>
+ allocated using a non gc one.<br>
+<br>
+ Rather than just changing the free to use the non gc one, we take<br>
+ the opportunity to ensure that ALL the blocks are in non gc memory.<br>
+ JPEGlib will take poorly to its memory being gc'd away, and none<br>
+ of it needs to subject to gc.<br>
+<br>
+ Credit goes largely to Chris for this fix.<br>
+<br>
+base/sjpegc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 18:44:53 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=55a7a41998f35ae23aedf2fdb83698dde1453d58">55a7a41998f35ae23aedf2fdb83698dde1453d58</a>
+<blockquote>
+<p>
+ Bug 702124 (continued): Avoid FP errors leading to empty pattern cells.<br>
+<br>
+ The limited accuracy of floats can cause pattern cells to appear to<br>
+ be empty when they are not.<br>
+<br>
+ Avoid adding the (often large) tx and ty components in until after we<br>
+ have calculated the width/heights.<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 18:43:00 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=182d5c10ed11570dd08e6203d832e06a73853f17">182d5c10ed11570dd08e6203d832e06a73853f17</a>
+<blockquote>
+<p>
+ Bug 702124: Avoid VMerror when a pattern cell height is 0.<br>
+<br>
+ We detect buffer_height == 0 and take it to mean that we can't<br>
+ get a large enough buffer for even a single scanline. Actually<br>
+ it can mean that the pattern cell was empty, which gives a<br>
+ spurious error.<br>
+<br>
+base/gxmclip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 17:08:12 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f5b7acb59c4f2e88591aab9f355813e0b7b68db5">f5b7acb59c4f2e88591aab9f355813e0b7b68db5</a>
+<blockquote>
+<p>
+ Fix segv after memento squeeze in psdf_DCT_filter().<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=117152 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+devices/vector/gdevpsdu.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 14:54:42 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9fd069e5c91126e78b51625c72d884615370098c">9fd069e5c91126e78b51625c72d884615370098c</a>
+<blockquote>
+<p>
+ Fixed double free after alloc failure in gs_lib_ctx_set_icc_directory*() (found by memento).<br>
+<br>
+ After we've freed p_ctx-&gt;profiledir we need to set it to NULL otherwise if we<br>
+ return an error it will be freed a second time when we close down.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=101810 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 11:12:37 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d86e9d8251e142ab9aae9f50923414c0c18bf1d3">d86e9d8251e142ab9aae9f50923414c0c18bf1d3</a>
+<blockquote>
+<p>
+ Fixed leak on error in gs_fapi_ufst_init() (found by memento).<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=22 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/fapiufst.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 19:48:01 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d7d68f45bfc227f7c7a6fdd5f8ef078bbf7ca77f">d7d68f45bfc227f7c7a6fdd5f8ef078bbf7ca77f</a>
+<blockquote>
+<p>
+ Bug 702121: PCL performance degradation<br>
+<br>
+ Henry chased the cause down to commit b399f84, an attempt to<br>
+ fix Bug 700624. Looking at that code now, it has a silly typo<br>
+ in it, that was causing it not be triggered in cases when it<br>
+ should have been. Fixed here.<br>
+<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 11:11:40 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b58e9010ce17bce450e4c042b93bafc460b9d94a">b58e9010ce17bce450e4c042b93bafc460b9d94a</a>
+<blockquote>
+<p>
+ Alternative fix for leaks after error in gs_main_init_with_args01()<br>
+<br>
+ When memory squeezing gpdl, Julian found leaks in the gpdl<br>
+ startup of the postscript interpreter when allocations failed<br>
+ in gs_main_init_with_args01().<br>
+<br>
+ Here, we fix the problem by making the psitop.c layer within gpdl<br>
+ call the appropriate shutdown code when we catch the error. This<br>
+ moves gpdl to being consistent with other users of the gs_main<br>
+ layer.<br>
+<br>
+ Memento memory squeezing around the point of failure (event 2035)<br>
+ now shows this to be OK.<br>
+<br>
+ MEMENTO_SQUEEZEAT=2034 ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+gpdl/psitop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 18:47:37 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5fc8e7c0b656d4e2be8f5e316121f06039c35273">5fc8e7c0b656d4e2be8f5e316121f06039c35273</a>
+<blockquote>
+<p>
+ Revert &quot;Fix leaks after error in gs_main_init_with_args01() (found by memento).&quot;<br>
+<br>
+ This reverts commit f35924926cb35f08be5a12ded4a00eb2f42aed3e.<br>
+<br>
+ When memory squeezing gpdl, Julian found leaks in the gpdl<br>
+ startup of the postscript interpreter when allocations failed<br>
+ in gs_main_init_with_args01().<br>
+<br>
+ The initial fix attempted was to make gs_main_init_with_args01()<br>
+ closedown the interpreter on such errors. This worked for the<br>
+ tested cases, but hid problems with non-memory related errors<br>
+ (such as not being able to open a file specified on the command<br>
+ line) when called by gs (rather than gpdl).<br>
+<br>
+ The change attempted resulted in gs_main_finit() being called<br>
+ twice as gs (and other users of the gs_main APIs) expect to have<br>
+ to call gs_main_finit() to shut down after gs_main_init_with_args01()<br>
+ returns an error code.<br>
+<br>
+ The real problem is that gpdl is not doing this in the same way as<br>
+ other callers.<br>
+<br>
+ The gs_main layer has existed for donkeys years, so it's probably<br>
+ best that we just take it as fixed and don't require callers to<br>
+ start changing stuff now.<br>
+<br>
+ Accordingly, I am reverting the attempted fix here, and will<br>
+ try a different fix for it that only affects gpdl shortly.<br>
+<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 16:48:21 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cd5f21df6c710664ff0ba3f100ca5283d9367ed8">cd5f21df6c710664ff0ba3f100ca5283d9367ed8</a>
+<blockquote>
+<p>
+ Bug 702116 Avoid NULL dereference<br>
+<br>
+ In certain cases if the source color space is separation or deviceN<br>
+ and we are doing image interpolation with the use of fast color option<br>
+ there was a potential dereference of a NULL pointer since the color<br>
+ space will not have an ICC profile.<br>
+<br>
+base/gxiscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-11 16:48:24 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1f6b351a5048b5a14d52431c833da6ed3386a7bf">1f6b351a5048b5a14d52431c833da6ed3386a7bf</a>
+<blockquote>
+<p>
+ Change to improve memory and speed (Bug 702099)<br>
+<br>
+ As described in the bug, the patch to disable high-level images in<br>
+ pattern-clists when Interpolate is true is no longer needed (hasn't<br>
+ been since 2015), and it causes the memory and performance problems<br>
+ with this type of file.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 15:10:54 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c5883877d1dc7abbd7600eb688f7cf4ad34db0cc">c5883877d1dc7abbd7600eb688f7cf4ad34db0cc</a>
+<blockquote>
+<p>
+ Bug 702114 non-isolated group in knockout group<br>
+<br>
+ Make sure to use the parents backdrop as our backdrop when we<br>
+ push a non-isolated group that resides in a knockout group.<br>
+ Note though that this apparently is not the case if we are<br>
+ constructing a soft mask.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 10:54:47 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=06a08fca00194531df25652b46eca8f8e4dfd7cc">06a08fca00194531df25652b46eca8f8e4dfd7cc</a>
+<blockquote>
+<p>
+ Bug 702113 Softmask with transfer function<br>
+<br>
+ In a couple spots we look at the value of the background value<br>
+ of the softmask to decide if we really need the softmask in<br>
+ areas outside the group bounding box. These checks were not<br>
+ considering the impact of the transfer function.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 10:22:32 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6fc5cbc5bc57ae2c47d1276f1ea0c0f16017b4bb">6fc5cbc5bc57ae2c47d1276f1ea0c0f16017b4bb</a>
+<blockquote>
+<p>
+ Bump version number pending 9.51 release<br>
+<br>
+Resource/Init/gs_init.ps<br>
+base/gscdefs.h<br>
+base/version.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-19 08:14:27 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e49830f8efdbc3a9f4e8acaf708b68a742f515aa">e49830f8efdbc3a9f4e8acaf708b68a742f515aa</a>
+<blockquote>
+<p>
+ Version, dates etc for 9.52 release<br>
+<br>
+Resource/Init/gs_init.ps<br>
+base/version.mak<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-17 15:54:28 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0cade062486c0ae9c883970dea1c555a8ffcff84">0cade062486c0ae9c883970dea1c555a8ffcff84</a>
+<blockquote>
+<p>
+ Release notes for 9.52 release<br>
+<br>
+doc/History9.htm<br>
+doc/News.htm<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-17 15:52:20 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c76b5f64e0525e4ddf9e5c311a1b75fe738298dc">c76b5f64e0525e4ddf9e5c311a1b75fe738298dc</a>
+<blockquote>
+<p>
+ Add references to the 64 bit windows exes<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 15:07:37 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eec073529fb8dc0c3bb6d612b61bf483d135c9cf">eec073529fb8dc0c3bb6d612b61bf483d135c9cf</a>
+<blockquote>
+<p>
+ Bug 702217: Reinstate dynamic libs LDFLAGS for MacOS<br>
+<br>
+ With the significant revamp of the platform detection functions in configure<br>
+ the LDFLAGS for building the gs shared library on MacOS went astray. This<br>
+ puts them back in.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-16 09:06:16 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a9cd9959372b9f14b493b87df57664ea831c5d80">a9cd9959372b9f14b493b87df57664ea831c5d80</a>
+<blockquote>
+<p>
+ Repair device subclassing after fill+stroke commit<br>
+<br>
+ Bug 702221 &quot;Ghostscript 9.51 - SIGFPE when -dFirstPage or -dLastPage is set&quot;<br>
+<br>
+ The fill+stroke commit had an error with the default method for handling<br>
+ fill_stroke_path which passed the subclassing device as a parameter to<br>
+ the child, instead of passing the child device. This caused seg faults,<br>
+ floating point exceptions, hangs, and possibly other problems.<br>
+<br>
+ In addition the object filtering device had been modified to pass the<br>
+ fill+stroke method to the default handler, instead of checking to see<br>
+ if vector operations should be dropped.<br>
+<br>
+ This commit fixes both problems.<br>
+<br>
+base/gdevoflt.c<br>
+base/gdevsclass.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 10:56:43 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f712440a2f251ae06277ec4a5ffe8ce7599aa4d8">f712440a2f251ae06277ec4a5ffe8ce7599aa4d8</a>
+<blockquote>
+<p>
+ Add ARCH_MAX_SIZE_T to configure's arch.h prototype<br>
+<br>
+arch/arch_autoconf.h.in<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 10:53:15 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=214d16924543fb3116a031463052e8b0eff3f1ae">214d16924543fb3116a031463052e8b0eff3f1ae</a>
+<blockquote>
+<p>
+ Don't fail on missing freetype for auxtools run<br>
+<br>
+ When cross compiling, we shouldn't fail the recursive call to configure if<br>
+ there's no freetype - since it's not required for auxtools.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-12 11:49:11 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b02467bd535d50d221e4f7c371867603f5368f36">b02467bd535d50d221e4f7c371867603f5368f36</a>
+<blockquote>
+<p>
+ Dates, changelog etc for 9.51 release<br>
+<br>
+base/gscdefs.h<br>
+base/version.mak<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 17:10:43 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=15f5f8bad503e9d3e63db9c3ca395deffd6b1e20">15f5f8bad503e9d3e63db9c3ca395deffd6b1e20</a>
+<blockquote>
+<p>
+ Fix 16bit blending problem.<br>
+<br>
+ Seen with:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -o out%d.psd -r72 -dMaxBitmap=2000M<br>
+ tests_private/pdf/forms/v1.5/proxy_vol_1_number_1_1.pdf<br>
+<br>
+ on page 3.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 11:16:51 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d5809b79052b20c723700cce75e7e1543a3ddc23">d5809b79052b20c723700cce75e7e1543a3ddc23</a>
+<blockquote>
+<p>
+ Dates/logs for 9.51 release candidate 3<br>
+<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 11:04:32 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f6e3e9238bb5cf7fe44c3c845be286a3314ed905">f6e3e9238bb5cf7fe44c3c845be286a3314ed905</a>
+<blockquote>
+<p>
+ Fix 64bit non-console windows build.<br>
+<br>
+ The creation of the text window was truncating the pointer to<br>
+ long (32bit) size. No idea how we've been getting away with this<br>
+ in the past. I can only assume this has been exposed by<br>
+ differences in the runtime lib with vs2019 as compared to<br>
+ earlier versions.<br>
+<br>
+psi/dwtext.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 09:02:51 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ffe0e5cf33feee7672e5f4281f0c0b0ff66bddda">ffe0e5cf33feee7672e5f4281f0c0b0ff66bddda</a>
+<blockquote>
+<p>
+ Add mention of deprecating/removing opvp/oprp devices<br>
+<br>
+doc/History9.htm<br>
+doc/News.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-28 08:30:36 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a1478a72a3ccb8564c2b1c5c87d3dbe23a5ffff2">a1478a72a3ccb8564c2b1c5c87d3dbe23a5ffff2</a>
+<blockquote>
+<p>
+ Dates, changelog etc for 9.51rc2<br>
+<br>
+base/gscdefs.h<br>
+base/version.mak<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 15:22:04 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dbaddcf6e251229a1506f2df33844365df39de44">dbaddcf6e251229a1506f2df33844365df39de44</a>
+<blockquote>
+<p>
+ Fix signed issue in 16bit alpha blending fill_rectangle routines.<br>
+<br>
+ As seen by the central spot in the pink region of page 1 of:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -o out%d.psd -dMaxBitmap=2000M<br>
+ tests_private/pdf/pdf_1.7_ATS_EXXPA1DC_PDFACT.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 15:09:35 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4ad8020c3cb63345dd76119e8978c3353940a68e">4ad8020c3cb63345dd76119e8978c3353940a68e</a>
+<blockquote>
+<p>
+ pdfwrite - Fix indeterminism with QL shading tests<br>
+<br>
+ When creating a new colour space to put in a PDF file we perform various<br>
+ tests to see if its a space we have already written, to prevent writing<br>
+ duplicate spaces (we perform similar tests for most resources).<br>
+<br>
+ In some cases, when we write the resource to a file, we create an MD5<br>
+ hash and compare those to see if the resources are the same. In the<br>
+ case of colour spaces, however, they are retained in memory and so we<br>
+ use a different method. We 'serialise' the colour space. This is not the<br>
+ same as writing it to the PDF file, and its a graphics library thing not<br>
+ a pdfwrite function. Basically this writes out the content of the<br>
+ various C structures. The stream we use is an in-memory stream.<br>
+<br>
+ Unfortunately, for Separation colour spaces, there was a fault in the<br>
+ function which writes the colour space name, and it was writing out<br>
+ the bytes forming the address of the name instead of the actual string.<br>
+<br>
+ This could, very rarely, mean that we would mis-identify a new colour<br>
+ space as being the same as an old colour space, and so would reuse the<br>
+ old space instead of creating a new one.<br>
+<br>
+ I've checked the DeviceN code and it does not suffer the same problem.<br>
+<br>
+base/gscsepr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 13:03:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3cb8b3a403450d617b2b96ec0349bb99ce0d8379">3cb8b3a403450d617b2b96ec0349bb99ce0d8379</a>
+<blockquote>
+<p>
+ Fix the overflow case in 16 bit saturation blending.<br>
+<br>
+ As seen with the second apple of the bottom row of page 1<br>
+ of:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -r72 -o out%d.psd -dMaxBitmap=2000M<br>
+ ../tests_private/pdf/PDF_1.7_ATS/AIX4G1C3.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 17:10:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5d4305e916d3f75492d03dfd79ab1aaedf9545e3">5d4305e916d3f75492d03dfd79ab1aaedf9545e3</a>
+<blockquote>
+<p>
+ Fix for bug 702150: make pl_main_run_file_utf8() check for error from s_process_read_buf().<br>
+<br>
+ Avoids infinite loop in:<br>
+ ./membin/gpcl6 -sDEVICE=ppmraw -o /dev/null .<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 18:24:55 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2c6efee0f594ad29394bf8a303f21d85dcb1d70a">2c6efee0f594ad29394bf8a303f21d85dcb1d70a</a>
+<blockquote>
+<p>
+ minor improvements to toolbin/squeeze2text.py.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 08:25:13 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ef5dfe7e3b3858bdfb20c168b4818c4d65fb932f">ef5dfe7e3b3858bdfb20c168b4818c4d65fb932f</a>
+<blockquote>
+<p>
+ CID 354310: Remove pointless unsigned comparison with 0.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 08:11:49 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=29335f43967a0f089d6f2f37883a22f1516f7bde">29335f43967a0f089d6f2f37883a22f1516f7bde</a>
+<blockquote>
+<p>
+ CID 354291: Add error handling for inability to allocate<br>
+<br>
+ Coverity complained about setting dash.pattern = NULL and &quot;Passing &quot;&amp;dash&quot;<br>
+ to &quot;gstate_copy_dash&quot;, which dereferences null &quot;dash.pattern&quot; which is either<br>
+ wrong, or *very* misleading. We assume that it means that gx_set_dash() *may*<br>
+ access that pointer.<br>
+<br>
+ In truth, this can never happen in these circumstances.<br>
+<br>
+ Nevertheless, in gx_set_dash() is we have a NULL mem (allocator) pointer and the<br>
+ dash pattern pointer is NULL at the point we have to copy into it, then throw<br>
+ an error.<br>
+<br>
+base/gsline.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 19:59:03 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1d0889b9fcf3a5d5012fad021b4c53828879016e">1d0889b9fcf3a5d5012fad021b4c53828879016e</a>
+<blockquote>
+<p>
+ Fix bug 702139 - clist clipping bug.<br>
+<br>
+ When characters are filled as paths, the fill_adjust may be set to 0.<br>
+ Clip paths are supposed to match fill paths, i.e. the 'any part of pixel'<br>
+ rule, so we need fill_adjust of 0.5 (not 0). The most foolproof way to fix<br>
+ this is to set it in the reader when processing 'begin_clip' and restore<br>
+ it when handling the end_clip.<br>
+<br>
+ There are many progressions with this change, but it also exposes some<br>
+ cases where the change in clipping allows other elements to be seen that<br>
+ were previously hidden. Those few instances are minor and mostly seem to<br>
+ occur when page mode differs from clist mode. Examination of some of those<br>
+ cases shows that the clip path with clist mode now matches page mode and<br>
+ other elements (e.g. images) differ in extent between page and clist mode.<br>
+<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 19:39:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=86f81e9b799b66207c699768616a6e3ba3c311c3">86f81e9b799b66207c699768616a6e3ba3c311c3</a>
+<blockquote>
+<p>
+ Fix gx_default_copy_alpha_hl_color for 16 bit operation.<br>
+<br>
+ The code to write the composite data back to buffers to be sent<br>
+ to copy_alpha was getting the first byte of each 16 bit pair<br>
+ wrong in the 16bit data case.<br>
+<br>
+ Also, when we 'restart' after skipping a zero byte in the 16bit<br>
+ case we need to skip 2 bytes per pixel, not one.<br>
+<br>
+ This can be seen when running:<br>
+<br>
+ gs -r72 -o out%d.psd -sDEVICE=psdcmyk16 -dMaxBitmap=2000M<br>
+ ../tests_private/comparefiles/js.pdf<br>
+<br>
+base/gdevdbit.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 18:19:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=635303ca7d8a36b3dabc9afbd9132f4b9a36dce5">635303ca7d8a36b3dabc9afbd9132f4b9a36dce5</a>
+<blockquote>
+<p>
+ Fix psdcmyk16 blending issue.<br>
+<br>
+ Use uint32_t rather than int to avoid signedness issues.<br>
+<br>
+ Seen in the psdcmyk16 page mode rendering of<br>
+<br>
+ tests_private/comparefiles/Bug692766.pdf<br>
+<br>
+ (bad colors in 4th rgb circle intersection test).<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 15:57:36 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a00c75369e082798d82202a2b64d8e4b484d0c11">a00c75369e082798d82202a2b64d8e4b484d0c11</a>
+<blockquote>
+<p>
+ Fix coverity issues 354292 and 354293.<br>
+<br>
+ Don't bother testing an unsigned value for clipping against 0.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 08:58:32 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=32f3d6703a7e5c6582c066837783c6697e98b1ca">32f3d6703a7e5c6582c066837783c6697e98b1ca</a>
+<blockquote>
+<p>
+ Replace 0 with NULL for pointer validation/setting.<br>
+<br>
+ Also make validation an explicit comparison with NULL i.e.:<br>
+ &quot;if (mem != NULL)&quot; rather than &quot;if (mem)&quot;.<br>
+<br>
+base/gsline.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 17:30:54 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6c1002cc251907e702fd5db9dc81365a964816c6">6c1002cc251907e702fd5db9dc81365a964816c6</a>
+<blockquote>
+<p>
+ Add support for multiple squeezes in one run.<br>
+<br>
+ E.g. MEMENTO_SQUEEZES=115867-1..+3,119928-1..+3 ...<br>
+<br>
+ This is equivalent running multiple times with MEMENTO_FAILAT set to 115866,<br>
+ 115867, 11588, 119927, 119928, 119929.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 10:38:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=39557bd53eee75a8b8f762457ce57a5437e79d6c">39557bd53eee75a8b8f762457ce57a5437e79d6c</a>
+<blockquote>
+<p>
+ Fix for MEMENTO_FAILAT=119928: only call gs_grestoreall_for_restore() if vmsave-&gt;gsave not NULL.<br>
+<br>
+ Also fix error cleanup in gs_gsave_for_save(), otherwise this fix breaks<br>
+ previous fix for MEMENTO_FAILAT=115802.<br>
+<br>
+ [Thanks to chrisl for this and various other recent fixes.]<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=119928 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsstate.c<br>
+psi/isave.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 11:21:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=60507d492507817bb5ae14a17a01d19c50d41e0a">60507d492507817bb5ae14a17a01d19c50d41e0a</a>
+<blockquote>
+<p>
+ toolbin/squeeze2text.py: improve log output.<br>
+<br>
+ With -p, if there is gap in 'Memory squeezing @ &lt;N&gt;' output (because of calls<br>
+ to free()), output next &lt;N&gt;.<br>
+<br>
+ Also flush log output to avoid looking like we've hung.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 21:00:21 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3a9ea36465e97ce729c5ab26dc8e0d1435b7b246">3a9ea36465e97ce729c5ab26dc8e0d1435b7b246</a>
+<blockquote>
+<p>
+ Fix issue with fts_14_1416.pdf and psdcmyk16<br>
+<br>
+ This was missed in the fix. Affected only 16 bit devices.<br>
+<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=b1ac0686eea6adcf2db8cabf7858796494b4459d<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 20:05:49 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8f3320f9b6214907d24a4a9f77638b199aa95f8e">8f3320f9b6214907d24a4a9f77638b199aa95f8e</a>
+<blockquote>
+<p>
+ Fix Ink names leaking.<br>
+<br>
+ The cause of the leak was a typo in gx_final_DeviceN.<br>
+<br>
+ Once this is fixed, we hit a problem where ink names are set<br>
+ to be a pointer to a static empty string, which can't be<br>
+ freed. Change to using NULL to mean empty ink name.<br>
+<br>
+base/gscdevn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:01:43 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b28d57e7422d2d4df8c805342ad01dfc6c6e1232">b28d57e7422d2d4df8c805342ad01dfc6c6e1232</a>
+<blockquote>
+<p>
+ Memento/Valgrind tweak.<br>
+<br>
+ Ensure we mark the contents of a block readable before we<br>
+ look for pointers in it, and don't overrun the end.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:57:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0822ac2a5f1f02315a783504fccf615a55cf494f">0822ac2a5f1f02315a783504fccf615a55cf494f</a>
+<blockquote>
+<p>
+ Squash some unused variable warnings.<br>
+<br>
+base/claptrap-planar.c<br>
+base/gp_unifs.c<br>
+base/gxclpath.c<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:14:23 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=82a2d6356858c0a4ab9ff7fa294c0380d04aa9e3">82a2d6356858c0a4ab9ff7fa294c0380d04aa9e3</a>
+<blockquote>
+<p>
+ pdf14_{fill_stroke_path,clist_fill_stroke_path_pattern_setup} cleanups.<br>
+<br>
+ Use a nicer method of breaking const (to avoid warnings). Ensure<br>
+ that we always put everything back as it was when we leave the<br>
+ functions, even if we have an error.<br>
+<br>
+ Remove needless cleanup code to handle functions that can never<br>
+ return an error to us returning an error.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:35:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b1ff23ccf08707af544de59d6c59971d0c17098c">b1ff23ccf08707af544de59d6c59971d0c17098c</a>
+<blockquote>
+<p>
+ pdf14_clist_fill_stroke_path_pattern_setup overprint fix.<br>
+<br>
+ Only enable CompatibleOverprint for the stroke part of stroke/fill<br>
+ patterns if we are in a subtractive space.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 11:24:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=389324fd827e1172eb358b616a32af5fcb2633f6">389324fd827e1172eb358b616a32af5fcb2633f6</a>
+<blockquote>
+<p>
+ Squash some warnings with gs_swapcolors_quick breaking const.<br>
+<br>
+ At various places in the code, we call gs_swapcolors_quick where<br>
+ we only have a const pgs.<br>
+<br>
+ Properly, we should copy the pgs to a non-const pgs, and then use<br>
+ that, but that would be a performance hit.<br>
+<br>
+ In all cases, we change the graphics state, then restore it before<br>
+ exit, so effectively it is const over the entire call of the<br>
+ enclosing procedure.<br>
+<br>
+ Rather than having lots of small hacky casts removing const, we<br>
+ push the const breakage into gs_swapcolors_quick itself where we<br>
+ do it in the &quot;approved&quot; way using a union.<br>
+<br>
+base/gdevp14.c<br>
+base/gsstate.c<br>
+base/gxfill.c<br>
+base/gxgstate.h<br>
+devices/vector/gdevpdfd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 10:10:25 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=449433ff6689c603a56186dbde5721f6139aa939">449433ff6689c603a56186dbde5721f6139aa939</a>
+<blockquote>
+<p>
+ Avoid floating point in gxblend.c<br>
+<br>
+ Use fixed point in preference.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 08:23:59 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6badfb362efe0fb4f0c3df106a33ecd5b0265ef7">6badfb362efe0fb4f0c3df106a33ecd5b0265ef7</a>
+<blockquote>
+<p>
+ Implement OPM tracking in pdfwrite<br>
+<br>
+ More than somewhat to my surprise, the release testing of 9.51 revealed<br>
+ that pdfwrite was not tracking the state of overprint mode (OPM). It<br>
+ could be set by setdistillerparams, and in no other way.<br>
+<br>
+ This commit adds tracking the OPM in the graphics state, removes the<br>
+ old overprint_mode variable from the device, but preserves the ability<br>
+ to alter the OPM using setdistillerparms.<br>
+<br>
+ This also alters the initial state of OPM, the distiller params<br>
+ reference states that the 'factory default' of OPM is 1, but the PDF<br>
+ Reference says that the initial state of OPM is 0. We need to start<br>
+ with the correct setting of OPM so we change it form 1 to 0<br>
+ in gs_pdfwr.ps.<br>
+<br>
+ In passing, cast a const gs_gstate * to a gs_gstate * when used by<br>
+ gs_swapcolours_quick, in order to avoid a compiler warning.<br>
+<br>
+ This causes a small number of progressions in files using OPM (which is<br>
+ rare, its even rarer to actually alter it during the course of the file)<br>
+<br>
+Resource/Init/gs_pdfwr.ps<br>
+devices/vector/gdevpdfb.h<br>
+devices/vector/gdevpdfd.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 16:24:12 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3dc65600d6d4eb060398f06f148cfe4f07a82439">3dc65600d6d4eb060398f06f148cfe4f07a82439</a>
+<blockquote>
+<p>
+ Bug 702117 Knockout groups containing non-isolated groups<br>
+<br>
+ So this ended up being rather complicated. The first issue was that<br>
+ we were not setting the backdrop properly for non-isolated groups that<br>
+ reside in knockout groups. When that was fixed, it was revealed that we<br>
+ were not doing the recompositing operation for non-isolated knockout groups. This meant<br>
+ that the backdrop was getting applied twice effectively (once in the original<br>
+ fill and then again when the group was popped). The only file that showed<br>
+ this issue was the crazy Altona page with the many overlapping groups. Customer<br>
+ file added to provide a clearer case in the regression tests.<br>
+<br>
+base/gdevp14.c<br>
+base/gxblend.c<br>
+base/gxblend1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 17:09:41 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=416baca7c4bcf0b1794b7b1647250bf09adaee9d">416baca7c4bcf0b1794b7b1647250bf09adaee9d</a>
+<blockquote>
+<p>
+ Fix MEMENTO_FAILAT=115867 - segv in i_unregister_root() after failure in i_register_root().<br>
+<br>
+ In pl_main_delete_instance(), don't call gs_unregister_root() if<br>
+ minst-&gt;device_root is NULL.<br>
+<br>
+ Also in pl_top_create_device(), check return from<br>
+ gs_register_struct_root(). But this doesn't appear to make any difference to<br>
+ the handling of the memento error.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=115867 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 16:51:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4eb54af16c69ef36371291bd43f853865adea1eb">4eb54af16c69ef36371291bd43f853865adea1eb</a>
+<blockquote>
+<p>
+ Fix deep color group compose issue.<br>
+<br>
+ In commit bb7d57e84e9fe I reordered parameters to keep 8/16<br>
+ branches consistent, and missed one case.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:27:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a2276988137021618bb3ca440aba50e126160bcd">a2276988137021618bb3ca440aba50e126160bcd</a>
+<blockquote>
+<p>
+ Remove needless &quot;isolated&quot; parameter from pdf14_mark_rect routines.<br>
+<br>
+ The value was carefully plumbed through (only in the 8bit case) in<br>
+ a recent commit, but was never actually used. Remove it a) because<br>
+ it's pointless passing a variable we don't use, and b) because it's<br>
+ another difference between 8 and 16 bit versions.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:21:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9ddcae93fe1629e81d36b17b7fec9de787b411cc">9ddcae93fe1629e81d36b17b7fec9de787b411cc</a>
+<blockquote>
+<p>
+ Fix typing mistake in 16bit transparency.<br>
+<br>
+ When promoting from 8 to 16 bit, shape and src_alpha become<br>
+ uint16_ts rather than bytes.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:06:38 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7de8fe5a49df0f9154fa707a934e39c012c3cc2a">7de8fe5a49df0f9154fa707a934e39c012c3cc2a</a>
+<blockquote>
+<p>
+ Fix more overprint problems with deep color transparency.<br>
+<br>
+ Again, overprint changes to the 8 bit paths had not been<br>
+ pulled across to the 16 bit path.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 07:10:40 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2d3f8c01231d52a5595e2727b31b8044188a5af8">2d3f8c01231d52a5595e2727b31b8044188a5af8</a>
+<blockquote>
+<p>
+ Added toolbin/squeeze2text.py, for processing output from MEMENTO_SQUEEZEAT=...<br>
+<br>
+ An alternative to squeeze2html.pl, outputing just summary information.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 11:18:11 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=777d79315e0094bef83d241bc0d5683ea6775a55">777d79315e0094bef83d241bc0d5683ea6775a55</a>
+<blockquote>
+<p>
+ Fix for MEMENTO_FAILAT=115802: make gs_gsave_for_save() call gs_gsave() so it can restore after error.<br>
+<br>
+ Previously, zsave() called gs_gsave_for_save() then gs_gsave(), but if<br>
+ gs_gsave() failed we ended up with SEGV in finalise code.<br>
+<br>
+ To allow zsave() to restore things after gs_gsave() failure, we would need to<br>
+ add an include of base/gxgstate.h.<br>
+<br>
+ Instead we remove the call of gs_gsave() from zsave() and append it to<br>
+ gs_gsave_for_save(), where things can be easily restored if it fails.<br>
+<br>
+ [There are no other callers of gs_gsave_for_save().]<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=115802 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsstate.c<br>
+psi/zvmem.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 09:44:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6db4560f1e31bb92321894e0d008d310aa600097">6db4560f1e31bb92321894e0d008d310aa600097</a>
+<blockquote>
+<p>
+ Avoid leaks if we get alloc failure when closing down (found by memento).<br>
+<br>
+ In gs_main_finit(), ignore gs_error_VMerror from interp_reclaim(). Such error<br>
+ ultimately comes from gs_vmreclaim() calling context_state_load(), but the<br>
+ missing info doesn't seem to be required for gs_main_finit() to carry on.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=147801 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+psi/imain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 17:40:51 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eb726fb4d2597cfcd4986dd9c105cf1ab71d09e3">eb726fb4d2597cfcd4986dd9c105cf1ab71d09e3</a>
+<blockquote>
+<p>
+ Fix image_color_icc_prep to properly align planar buffers.<br>
+<br>
+base/gxicolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 10:50:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e01371e00caa8f5d08ef150a6f594c93ca495be2">e01371e00caa8f5d08ef150a6f594c93ca495be2</a>
+<blockquote>
+<p>
+ Enable CAL for gxicolor halftoning.<br>
+<br>
+ Looks like the calling code was unfinished, and the build<br>
+ changes were not done.<br>
+<br>
+ Also, squash some warnings.<br>
+<br>
+base/gxicolor.c<br>
+base/gximono.c<br>
+base/lib.mak<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 15:57:47 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c4e7cddc4d053f2850e697696e2498180547961a">c4e7cddc4d053f2850e697696e2498180547961a</a>
+<blockquote>
+<p>
+ Ensure the memory entry in a cloned gstate is correct.<br>
+<br>
+ In theory, we could end up cloning a graphics state with one allocator, then<br>
+ assigning the &quot;memory&quot; entry in the cloned state to that of the state we are<br>
+ cloning.<br>
+<br>
+ In practice the two have (so far) been the same, but that is not guaranteed.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 11:08:57 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=239e70cd02491bab1cce9092c07c959427358646">239e70cd02491bab1cce9092c07c959427358646</a>
+<blockquote>
+<p>
+ Fix segfault cleaning up after gstate clone failure.<br>
+<br>
+ For me this happens with MEMENTO_FAILAT=112447 and for Julian it happens with<br>
+ MEMENTO_FAILAT=115905.<br>
+<br>
+ Basically, the order of events was that we'd allocate a new gstate, copy the<br>
+ contents of the existing gstate to the new one, then copy the dash pattern<br>
+ (which could fail) and copy the &quot;client_data&quot; (which could and, in this case,<br>
+ did fail). When either of those failed, we'd jump to the error handling and<br>
+ exit with the error.<br>
+<br>
+ The problem is that, by jumping to the &quot;fail&quot; label, we skip over all the code<br>
+ that fixes up the reference counts (and various other things) to account for<br>
+ the newly created gstate.<br>
+<br>
+ This commit reorders things so we allocate the gstate, copy the client data,<br>
+ copy the dash pattern, *then* assign the contents of the old gstate to the new<br>
+ one, and carry on. Thus, by the time the gstate contents are copied, the<br>
+ function cannot fail, and everything is sure to be correctly setup.<br>
+<br>
+ In the event that either the dash pattern or the client data fail to allocate,<br>
+ the new gstate is still filled with NULLs, except for the subset of<br>
+ &quot;gs_gstate_parts&quot; which are allocated and setup correctly so we can safely<br>
+ free the graphics state object before returning the error.<br>
+<br>
+ Also, use NULL for pointer validation instead of 0.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 17:43:18 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=db5b51109ddee39b17b2ff2c2ac12f41a70785ef">db5b51109ddee39b17b2ff2c2ac12f41a70785ef</a>
+<blockquote>
+<p>
+ Make sure pattern fills use proper alpha settings<br>
+<br>
+ Fix for regression of fts_28_2804.pdf pdfwrite output rendering<br>
+ with fill-stroke commit. This also fixes the rendering of fts_25_2526.pdf<br>
+ Bug 702033. Required a minor change in the XPS interpreter to make<br>
+ sure that patterns did not have their opacity double applied.<br>
+<br>
+base/gdevp14.c<br>
+xps/xpstile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 17:20:09 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cddd44e1bfcdaba1c289c3d83645613d136e5e3e">cddd44e1bfcdaba1c289c3d83645613d136e5e3e</a>
+<blockquote>
+<p>
+ Bug 702105: Premature EOF Infinite loop in interpolated imagemask stream.<br>
+<br>
+ Fix supplied by Peter Cherepanov. Many thanks.<br>
+<br>
+base/simscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 16:58:06 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=59089ab66b3faaa683bb3aeb0bf856b7aa284f9b">59089ab66b3faaa683bb3aeb0bf856b7aa284f9b</a>
+<blockquote>
+<p>
+ Fix &quot;blue gradients&quot; seen with psdrgb device.<br>
+<br>
+ Since the fill/stroke commit went in, some files have been showing<br>
+ gradients in the wrong colours. For instance this one, spotted in<br>
+ release testing:<br>
+<br>
+ gs -sDEVICE=psdrgb -r72 -dMaxBitmap=2000M -o out%d.psd<br>
+ ../tests_private/comparefiles/Layout.pdf<br>
+<br>
+ Bisecting the fill/stroke branch back, it seems the commit that<br>
+ caused it is the one that stops psdrgb using 'devn' colors.<br>
+<br>
+ This causes gradients to drop to using the color_info.comp_bits and<br>
+ comp_shift information, which the psd devices don't fill in.<br>
+<br>
+ The fix here is to make psd_prn_open call the standard function for<br>
+ setting up these values.<br>
+<br>
+devices/gdevpsd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 14:48:05 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=25cd0c72b98f9efc6968254d1e3a2f33ec376369">25cd0c72b98f9efc6968254d1e3a2f33ec376369</a>
+<blockquote>
+<p>
+ Bug701972 -- fix pdfwrite image downscaling bug<br>
+<br>
+ Calculate the bits on the row using the input image width,<br>
+ not the output image width.<br>
+<br>
+ I had to add an extra argument to a few functions to propagate the info<br>
+ down to where it is needed.<br>
+<br>
+ Note obscure case involving calling psdf_setup_image_to_mask_filter()<br>
+ for a Type 4 image and CompatibilityLevel &lt; 1.3. This change just<br>
+ adds the extra input_width arg, which doesn't change whatever it was<br>
+ doing before. If there is a bug lurking here, it seems unlikely<br>
+ anybody cares?<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+devices/vector/gdevpsdf.h<br>
+devices/vector/gdevpsdi.c<br>
+devices/vector/gdevpsds.c<br>
+devices/vector/gdevpsds.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 09:22:55 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e9523603ac713e365702b81c228edcaaac667dc4">e9523603ac713e365702b81c228edcaaac667dc4</a>
+<blockquote>
+<p>
+ Set the BitsPerComponent for alt stream in pdfwrite<br>
+<br>
+ Add this to the image[1] code where it was missing<br>
+<br>
+ This fixes bug where compressed images were correct, but if<br>
+ -dEncodeGrayImages=false was used, then they were truncated.<br>
+<br>
+ This is related to trimmed/rescaled image for Bug701972.<br>
+ See the sample trim-nobug.pdf attached to that bug.<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 19:25:24 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=924f7ea07c7773a3b1510c6206c9a34227e4b39e">924f7ea07c7773a3b1510c6206c9a34227e4b39e</a>
+<blockquote>
+<p>
+ Bug 702131: Fix overprint in additive spaces.<br>
+<br>
+ We should only enter CompatibleOverprint blend mode if we<br>
+ are in an subtractive space. This stops pdf14 trying to honour<br>
+ drawn_comps even in additive spaces.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 14:02:24 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d98b553c829fad94cd4338910468d2b1b6ee64f7">d98b553c829fad94cd4338910468d2b1b6ee64f7</a>
+<blockquote>
+<p>
+ Fix bug 702079: SEGV with clist and PCL caused by wrong color in images.<br>
+<br>
+ The clist_image_plane_data function was called with the dev_color for a band<br>
+ being type &lt;pattern&gt; when the image had type &lt;pure&gt;, but the code was not<br>
+ calling cmd_put_drawing_color to update the bands for the image because uses_color<br>
+ was false. Add rop3_uses_S(pgs0&gt;log_op) as well as (||) rop3_uses_T(pgs-&gt;log_op)<br>
+ when CombineWitColor is true.<br>
+ Note that extra calls to cmd_put_drawing_color before an image are low cost<br>
+ and do nothing if the current device color is already the same.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 09:48:07 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f55464d5c1640075a67a8b50557a48766783e08">4f55464d5c1640075a67a8b50557a48766783e08</a>
+<blockquote>
+<p>
+ Bug 702128 : clist pdf14 overprint state<br>
+<br>
+ This change ensures that gxdso_overprint_active<br>
+ gets the proper state information.<br>
+<br>
+ When the clist writer is active with the pdf14 device, the writer maintains<br>
+ the current overprint state (as the writer has no access to the pdf14 member variables)<br>
+ and must know what to put in the clist.<br>
+<br>
+ When the clist writer is not present (i.e. page mode), the pdf14 device<br>
+ maintains the information.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 11:46:45 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f1887408860910c19c980f05fd0f8fc93b5f06a1">f1887408860910c19c980f05fd0f8fc93b5f06a1</a>
+<blockquote>
+<p>
+ Bug 702068 continued: Fix smasked images with masks.<br>
+<br>
+ Release testing has shown up another case that needs help.<br>
+<br>
+ gs/bin -sDEVICE=ppmraw -o out.ppm -r300 -dMaxBitmap=1G<br>
+ tests_private/pdf/sumatra/1901_-_tiling_inconsistencies.pdf<br>
+<br>
+ This shows horizontal white lines in the &quot;Next&quot; &quot;Up&quot; &quot;Previous&quot;<br>
+ images at the top of the page.<br>
+<br>
+ Investigation shows this is due to the images having Masks as well<br>
+ as SMasks.<br>
+<br>
+ The Mask image is run to a 1 bit memory device, which means that<br>
+ the gxdso to check if we are in an SMask doesn't work. We work<br>
+ around this by introducing a new flag to gs_pixel_image_common<br>
+ that we can set to indicate that we are within an smask. We set<br>
+ this when we set the masked image up (using the gxdso), and check<br>
+ it when we come to do the gridfitting.<br>
+<br>
+base/gsiparam.h<br>
+base/gxclrast.c<br>
+base/gximage.c<br>
+base/gximage3.c<br>
+base/gxipixel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 19:31:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=51a0be1a6ac3bae2dc1b8bcdd91f58f76b9132c9">51a0be1a6ac3bae2dc1b8bcdd91f58f76b9132c9</a>
+<blockquote>
+<p>
+ Sync deep colour blending with recent changes to 8 bit blending.<br>
+<br>
+ Release testing reveals problems with deep color blending and<br>
+ overprint. This is because changes were made to the 8bit<br>
+ branches of gxblend.c that weren't fully reflected in the<br>
+ 16bit branches.<br>
+<br>
+ Reapply those changes here.<br>
+<br>
+ While we're at it, address some other minor code cleanups,<br>
+ including keeping the ordering of parameters the same between 8<br>
+ and 16 bit to avoid confusion in future.<br>
+<br>
+ The command that showed the inital problem was:<br>
+<br>
+ bin/gswin32c.exe -o out.psd -sDEVICE=psdcmyk16 tests_private/comparefiles/Bug695916.pdf<br>
+<br>
+ where the image of the Earth did not appear.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 13:27:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b7faa941d09db8856378e45d4f5c81b5f93e5f90">b7faa941d09db8856378e45d4f5c81b5f93e5f90</a>
+<blockquote>
+<p>
+ Bug 702130: Fix JPEG memory failure problems.<br>
+<br>
+ The SEGV reported by Memento squeezing (which oddly is at 113600<br>
+ for me, rather than Julian's higher number) is caused by jpeglib<br>
+ calling 'mem_term' on something that failed to 'mem_init'.<br>
+<br>
+ The fix is to use gs_memory_chunk_unwrap rather than target/release,<br>
+ and to check whether mem == cmem to see whether that actually did<br>
+ unwrap.<br>
+<br>
+ This runs us into a further problem, where we are freeing the<br>
+ custom memory descriptor using a gc memory pointer, where it was<br>
+ allocated using a non gc one.<br>
+<br>
+ Rather than just changing the free to use the non gc one, we take<br>
+ the opportunity to ensure that ALL the blocks are in non gc memory.<br>
+ JPEGlib will take poorly to its memory being gc'd away, and none<br>
+ of it needs to subject to gc.<br>
+<br>
+ Credit goes largely to Chris for this fix.<br>
+<br>
+base/sjpegc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 18:44:53 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=619c0231952c20cc14f0eaf603e0cb01aa937eff">619c0231952c20cc14f0eaf603e0cb01aa937eff</a>
+<blockquote>
+<p>
+ Bug 702124 (continued): Avoid FP errors leading to empty pattern cells.<br>
+<br>
+ The limited accuracy of floats can cause pattern cells to appear to<br>
+ be empty when they are not.<br>
+<br>
+ Avoid adding the (often large) tx and ty components in until after we<br>
+ have calculated the width/heights.<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 18:43:00 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8edb1b1e7bb84ff4598819fe078eb0ed2c4948d5">8edb1b1e7bb84ff4598819fe078eb0ed2c4948d5</a>
+<blockquote>
+<p>
+ Bug 702124: Avoid VMerror when a pattern cell height is 0.<br>
+<br>
+ We detect buffer_height == 0 and take it to mean that we can't<br>
+ get a large enough buffer for even a single scanline. Actually<br>
+ it can mean that the pattern cell was empty, which gives a<br>
+ spurious error.<br>
+<br>
+base/gxmclip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 17:08:12 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6beaf42d25f3969b6dc3d8e1b1795017708000c5">6beaf42d25f3969b6dc3d8e1b1795017708000c5</a>
+<blockquote>
+<p>
+ Fix segv after memento squeeze in psdf_DCT_filter().<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=117152 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+devices/vector/gdevpsdu.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 14:54:42 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8d052b3de78b8034daed23e668758c76a8d8c478">8d052b3de78b8034daed23e668758c76a8d8c478</a>
+<blockquote>
+<p>
+ Fixed double free after alloc failure in gs_lib_ctx_set_icc_directory*() (found by memento).<br>
+<br>
+ After we've freed p_ctx-&gt;profiledir we need to set it to NULL otherwise if we<br>
+ return an error it will be freed a second time when we close down.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=101810 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 11:12:37 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dbde03ca37da96a94f4b7a6f0ba22a47a7bc2cb1">dbde03ca37da96a94f4b7a6f0ba22a47a7bc2cb1</a>
+<blockquote>
+<p>
+ Fixed leak on error in gs_fapi_ufst_init() (found by memento).<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=22 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/fapiufst.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 19:48:01 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=08695f8ccebb0d25eb2a5933ecee92281eefc1be">08695f8ccebb0d25eb2a5933ecee92281eefc1be</a>
+<blockquote>
+<p>
+ Bug 702121: PCL performance degradation<br>
+<br>
+ Henry chased the cause down to commit b399f84, an attempt to<br>
+ fix Bug 700624. Looking at that code now, it has a silly typo<br>
+ in it, that was causing it not be triggered in cases when it<br>
+ should have been. Fixed here.<br>
+<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 11:11:40 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e2cdef26db058e84c2cf4dff5f638e669f961b52">e2cdef26db058e84c2cf4dff5f638e669f961b52</a>
+<blockquote>
+<p>
+ Alternative fix for leaks after error in gs_main_init_with_args01()<br>
+<br>
+ When memory squeezing gpdl, Julian found leaks in the gpdl<br>
+ startup of the postscript interpreter when allocations failed<br>
+ in gs_main_init_with_args01().<br>
+<br>
+ Here, we fix the problem by making the psitop.c layer within gpdl<br>
+ call the appropriate shutdown code when we catch the error. This<br>
+ moves gpdl to being consistent with other users of the gs_main<br>
+ layer.<br>
+<br>
+ Memento memory squeezing around the point of failure (event 2035)<br>
+ now shows this to be OK.<br>
+<br>
+ MEMENTO_SQUEEZEAT=2034 ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+gpdl/psitop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 18:47:37 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bbecd13cc34f3dcdcedd726e7de12c988da9794a">bbecd13cc34f3dcdcedd726e7de12c988da9794a</a>
+<blockquote>
+<p>
+ Revert &quot;Fix leaks after error in gs_main_init_with_args01() (found by memento).&quot;<br>
+<br>
+ This reverts commit f35924926cb35f08be5a12ded4a00eb2f42aed3e.<br>
+<br>
+ When memory squeezing gpdl, Julian found leaks in the gpdl<br>
+ startup of the postscript interpreter when allocations failed<br>
+ in gs_main_init_with_args01().<br>
+<br>
+ The initial fix attempted was to make gs_main_init_with_args01()<br>
+ closedown the interpreter on such errors. This worked for the<br>
+ tested cases, but hid problems with non-memory related errors<br>
+ (such as not being able to open a file specified on the command<br>
+ line) when called by gs (rather than gpdl).<br>
+<br>
+ The change attempted resulted in gs_main_finit() being called<br>
+ twice as gs (and other users of the gs_main APIs) expect to have<br>
+ to call gs_main_finit() to shut down after gs_main_init_with_args01()<br>
+ returns an error code.<br>
+<br>
+ The real problem is that gpdl is not doing this in the same way as<br>
+ other callers.<br>
+<br>
+ The gs_main layer has existed for donkeys years, so it's probably<br>
+ best that we just take it as fixed and don't require callers to<br>
+ start changing stuff now.<br>
+<br>
+ Accordingly, I am reverting the attempted fix here, and will<br>
+ try a different fix for it that only affects gpdl shortly.<br>
+<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-11 16:48:24 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=68be233f36feb045e442a18c4f4e4d2ced52b197">68be233f36feb045e442a18c4f4e4d2ced52b197</a>
+<blockquote>
+<p>
+ Change to improve memory and speed (Bug 702099)<br>
+<br>
+ As described in the bug, the patch to disable high-level images in<br>
+ pattern-clists when Interpolate is true is no longer needed (hasn't<br>
+ been since 2015), and it causes the memory and performance problems<br>
+ with this type of file.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 15:10:54 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2dea734a6184668511758fe1929a1d3166df85b6">2dea734a6184668511758fe1929a1d3166df85b6</a>
+<blockquote>
+<p>
+ Bug 702114 non-isolated group in knockout group<br>
+<br>
+ Make sure to use the parents backdrop as our backdrop when we<br>
+ push a non-isolated group that resides in a knockout group.<br>
+ Note though that this apparently is not the case if we are<br>
+ constructing a soft mask.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 10:54:47 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9af467b71198710bc42509e00b730a716b8e4828">9af467b71198710bc42509e00b730a716b8e4828</a>
+<blockquote>
+<p>
+ Bug 702113 Softmask with transfer function<br>
+<br>
+ In a couple spots we look at the value of the background value<br>
+ of the softmask to decide if we really need the softmask in<br>
+ areas outside the group bounding box. These checks were not<br>
+ considering the impact of the transfer function.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 11:37:33 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b6d36e3205a8b065014b3965cb3c8269408309ca">b6d36e3205a8b065014b3965cb3c8269408309ca</a>
+<blockquote>
+<p>
+ Dates etc for 9.51 RC1<br>
+<br>
+ Plus prelim changelog<br>
+<br>
+Makefile.in<br>
+base/gscdefs.h<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+psi/winint.mak<br>
+<p>
+</blockquote>
+<hr>
+<hr size=20>
+
+
+
<h2><a name="Version9.52"></a>Version 9.52 (2020-03-19)</h2>
<p> Highlights in this release include:
<ul>
@@ -228380,7 +241809,7 @@ Bump the versioning after the 8.71 release.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -228393,7 +241822,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Install.htm b/doc/Install.htm
index 759376d9..31ae9352 100644
--- a/doc/Install.htm
+++ b/doc/Install.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -427,7 +418,7 @@ comment at the beginning of the latter file for more information.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -440,7 +431,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Internal.htm b/doc/Internal.htm
index ac848116..c7706bbc 100644
--- a/doc/Internal.htm
+++ b/doc/Internal.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -105,7 +96,7 @@ at the beginning of the procedure.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -118,7 +109,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Language.htm b/doc/Language.htm
index 15f39e37..4da4a0bb 100644
--- a/doc/Language.htm
+++ b/doc/Language.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -458,11 +449,13 @@ 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.</p>
+in PDF</a>". Previously (in 9.52 and earlier), Ghostscript's model
+maintained separate alpha and mask values for opacity and shape. This
+model has been changed (as of 9.53) and instead Ghostscript maintains separate
+float values for stroke and fill alpha values with a boolean that indicates
+if these should be interpreted as shape or alpha values to be more in line with the
+PDF specification.
+</p>
<p>
What follows is a subset of all the custom operators related to transparency, but
covers the most useful, most common requirements.
@@ -504,25 +497,70 @@ the blending mode is <code>/Compatible</code>.</dd>
</dl>
<dl>
-<dt><code>&lt;0..1&gt; .setopacityalpha -</code></dt>
+<dt><code>[Deprecated as of 9.53] &lt;0..1&gt; .setopacityalpha -</code></dt>
<dd>Sets the opacity alpha value in the graphics state.
-The initial opacity alpha value is 1.</dd>
+The initial opacity alpha value is 1. Note, it is strongly
+suggested that this method not be used as it currently may
+give inconsistent results when mixed with methods that
+set stroke and fill alpha values. </dd>
</dl>
<dl>
-<dt><code>- .currentopacityalpha &lt;0..1&gt;</code></dt>
-<dd>Returns the graphics state opacity alpha on the stack.</dd>
+<dt><code>[Deprecated as of 9.53] - .currentopacityalpha &lt;0..1&gt;</code></dt>
+<dd>Returns the graphics state opacity alpha on the stack. Note, it is strongly
+suggested that this method not be used as it currently may
+give inconsistent results when mixed with methods that
+set stroke and fill alpha values.</dd>
</dl>
<dl>
-<dt><code>&lt;0..1&gt; .setshapealpha -</code></dt>
+<dt><code>[Deprecated as of 9.53] &lt;0..1&gt; .setshapealpha -</code></dt>
<dd>Sets the shape alpha value in the graphics state.
-The initial shape alpha value is 1.</dd>
+The initial shape alpha value is 1. Note, it is strongly
+suggested that this method not be used as it currently may
+give inconsistent results when mixed with methods that
+set stroke and fill alpha values.</dd>
+</dl>
+
+<dl>
+<dt><code>[Deprecated as of 9.53] - .currentshapealpha &lt;0..1&gt;</code></dt>
+<dd>Returns the graphics state shape alpha on the stack. Note, it is strongly
+suggested that this method not be used as it currently may
+give inconsistent results when mixed with methods that
+set stroke and fill alpha values.</dd>
+</dl>
+
+<dl>
+<dt><code>&lt;0..1&gt; .setstrokeconstantalpha -</code></dt>
+<dd>Sets the stroke alpha value in the graphics state.
+The initial stroke alpha value is 1.</dd>
+</dl>
+
+<dl>
+<dt><code> - .currentstrokeconstantalpha &lt;0..1&gt;</code></dt>
+<dd>Returns the graphics state stroke alpha value on the stack.</dd>
+</dl>
+
+<dl>
+<dt><code>&lt;0..1&gt; .setfillconstantalpha -</code></dt>
+<dd>Sets the fill alpha value in the graphics state.
+The initial fill alpha value is 1.</dd>
+</dl>
+
+<dl>
+<dt><code> - .currentfillconstantalpha &lt;0..1&gt;</code></dt>
+<dd>Returns the graphics state fill alpha value on the stack.</dd>
+</dl>
+
+<dl>
+<dt><code>&lt;bool&gt; .setalphaisshape -</code></dt>
+<dd>If true, the values set by setstrokeconstantalpha and setfillconstantalpha are interpreted as shape values.
+The initial value of the AIS flag is <code>false</code>.</dd>
</dl>
<dl>
-<dt><code>- .currentshapealpha &lt;0..1&gt;</code></dt>
-<dd>Returns the graphics state shape alpha on the stack.</dd>
+<dt><code> - .currentalphaisshape &lt;0..1&gt;</code></dt>
+<dd>Returns the graphics state alpha is shape (AIS) on the stack.</dd>
</dl>
<dl>
@@ -576,7 +614,7 @@ onto the group that now becomes current.</dd>
</dl>
<dl>
-<dt><code>&lt;paramdict&gt; &lt;llx&gt; &lt;lly&gt; &lt;urx&gt; &lt;ury&gt;
+<dt><code>&lt;cs_set?&gt; &lt;paramdict&gt; &lt;llx&gt; &lt;lly&gt; &lt;urx&gt; &lt;ury&gt;
.begintransparencymaskgroup -</code></dt>
<dd>Begins a new transparency mask, which is represented as a group.
The <code>ll/ur</code> coordinates
@@ -592,6 +630,22 @@ are the bounding box of the mask in the current user coordinate system.
<dd>(optional) Function object (produced by applying
<code>.buildfunction</code> to a Function dictionary).</dd>
</dl>
+The <code>cs_set</code> parameter is a boolean indicating whether the color
+space for the mask group is the current color space in the graphics state, or
+whether mask group color space should be inherited from the previous group
+in the transparency group stack. In general, for the most consistent results,
+it is recommended that this be set to <code>true</code>, and the intended
+color space set in the graphics state prior to the <code>.begintransparencymaskgroup</code>
+call.
+</dl>
+<dl>
+<dt><code>&lt;mask#&gt; .endtransparencymask -</code></dt>
+<dd>Ends the current transparency mask group, compositing the mask group being ended
+and setting it as the current soft mask in the graphics state.
+<p>
+The <code>mask#</code> parameter indicates whether the mask should be treated as
+as opacity mask (<code>0</code>) or shape (<code>1</code>).
+</dd>
</dl>
<h5><a name="Transparency_ImageType"></a>New ImageType</h5>
@@ -2012,7 +2066,7 @@ will install resource files into <code>/gs/Resource</code>.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -2025,7 +2079,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Lib.htm b/doc/Lib.htm
index 924a1e6e..aa240f69 100644
--- a/doc/Lib.htm
+++ b/doc/Lib.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -1034,7 +1025,7 @@ is finished, it should execute:
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -1047,7 +1038,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Make.htm b/doc/Make.htm
index e38e1438..9ca66b04 100644
--- a/doc/Make.htm
+++ b/doc/Make.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -1514,7 +1505,7 @@ msvc.mak sets the other options automatically.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -1527,7 +1518,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/News.htm b/doc/News.htm
index ab0fe755..75c18da1 100644
--- a/doc/News.htm
+++ b/doc/News.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -95,19 +86,41 @@ overview</a>.
<!-- [1.0 end visible header] ============================================== -->
<!-- [2.0 begin contents] ================================================== -->
-<h2><a name="Version9.52"></a>Version 9.52 (2020-03-19)</h2>
+<h2><a name="Version9.53.0"></a>Version 9.53.0 (2020-09-10)</h2>
<p> Highlights in this release include:
<ul>
<li>
-<p>The 9.52 release replaces the 9.51 release after a problem was reported with 9.51
-which warranted the quick turnaround. Thus, like 9.51, 9.52 is primarily a maintenance
-release, consolidating the changes we introduced in 9.50.
+<p>The 9.53.0 release is primarily maintenance.
</li>
<li>
-<p>We have continued our work on code hygiene for this release, with a focus on the
-static analysis tool Coverity (from <a href="https://www.synopsys.com">Synopsys, Inc</a>)
-and we have now adopted a policy of maintaining zero Coverity issues in the
-Ghostscript/GhostPDL source base.
+<p>The most obvious change is the (re-)introduction of the patch level to the version number,
+this helps facilitate a revised policy on handling security related issues.
+</li>
+<li>
+<p>Our efforts in code hygiene and maintainability continue.
+</li>
+<li>
+<p>We have added the capability to build with the Tesseract OCR engine. In such
+a build, new devices are available (pdfocr8/pdfocr24/pdfocr32) which render the
+output file to an image, OCR that image, and output the image "wrapped" up as a
+PDF file, with the OCR generated text information included as "invisible" text
+(in PDF terms, text rendering mode 3).
+<p>Due to some patches to the Tesseract sources that are required (integrated
+upstream, but awaiting release), time constraints, and the experimental nature
+of the feature, we only support including Tesseract from source, not linking to
+Tesseract shared libraries. Whether we add this capability will be largely
+dependant on community demand for the feature.
+</li>
+<li>
+<p>We have added Python bindings for the <code>gsapi</code> interface, can be found
+in <code>demos/python</code>. These are experimental, and we welcome feedback from
+interested developers.
+</li>
+<li>
+<p>For those integrating Ghostscript/GhostPDL via the <code>gsapi</code> interface, we
+have added new capabilities to that, specifically in terms of setting and interrogating
+device parameters. These, along with the existing interface calls, are documented in:
+<a href="API.htm">Ghostscript Interpreter API</a>
</li>
<li>
<p><b>IMPORTANT:</b> In consultation with a representative of
@@ -120,8 +133,8 @@ us, so we can discuss your use case, and revise our plans accordingly.
</li>
<li>
<p>IMPORTANT: We have forked LittleCMS2 into LittleCMS2mt (the "mt" indicating "multi-thread").
-LCMS2 is not thread-safe, and cannot be made thread-safe without breaking the ABI. Our fork
-will be thread-safe and include performance enhancements (these changes have all be been
+LCMS2 is not thread safe and cannot be made thread safe without breaking the ABI. Our fork
+will be thread safe and include performance enhancements (these changes have all be been
offered and rejected upstream). We will maintain compatibility between Ghostscript and LCMS2
for a time, but not in perpetuity. If there is sufficient interest, our fork will be
available as its own package separately from Ghostscript (and MuPDF).
@@ -138,25 +151,31 @@ specific release in question listed in parentheses). We include these,
for now, as we are aware that not everyone upgrades with every release.</h4>
<ul>
<li>
+<p>(9.53.0) As of 9.53.0, we have (re-)introduced the patch level to the version number,
+this helps facilitate a revised policy on handling security related issues.
+<p><strong>Note for GSView Users:</strong>The patch level addition breaks GSView 5 (it is
+hardcoded to check for versions <code>704-999</code>. It is possible, but not guaranteed that
+a GSView update might be forthcoming to resolve this.
+</li>
+<li>
<p>(9.52) As of 9.52, the Windows binaries released by the Ghostscript development
-team are built with Microsoft Visual Studio 2019. As a result Microsoft Windows XP and
-earlier are no longer supported by these binaries. This does not imply we are or will
+team are built with Microsoft Visual Studio 2019. As a result, Microsoft Windows XP and
+earlier are no longer supported by these binaries. This does not imply we are, or will
start relying upon features only available in VS2019, so the <code>nmake</code> Makefiles
will continue to allow older Visual Studio versions (back to VS2005) to build Ghostscript.
</li>
<li>
<p>(9.52) <code>-dALLOWPSTRANSPARENCY</code>: The transparency compositor (and related
features), whilst we are improving it, remains sensitive to being driven correctly, and
-incorrect use can have unexpected/undefined results. Hence, as part of improving security,
+incorrect use can have unexpected/undefined results. Hence, as part of improving security
we limited access to these operators, originally using the <code>-dSAFER</code> feature.
As we made "SAFER" the default mode, that became unacceptable, hence the new option
-<a href="Use.htm#ALLOWPSTRANSPARENCY">-dALLOWPSTRANSPARENCY</a> which enables
-access to the operators.
+<code>-dALLOWPSTRANSPARENCY</code> which enables access to the operators.
</li>
<li>
<p>(9.50) There are a couple of subtle incompatibilities between the old and new SAFER
implementations. Firstly, as mentioned in the 9.50 release notes, SAFER now leaves
-standard Postscript functionality unchanged (except for the file access limitations).
+standard Postcript functionality unchanged (except for the file access limitations).
Secondly, the interaction with <code>save</code>&sol;<code>restore</code> operations,
see <a href="Use.htm#Safer">SAFER</a>.
<p><strong>Important Note for Windows Users</strong>:
@@ -167,21 +186,21 @@ change in behaviour compared to the old code which, on Windows, was case
in that it now supports (although does not enforce) case sensitivity.
</li>
<li>
-<p>(9.27) The process of &quot;tidying&quot; the Postscript name space should have removed
+<p>(9.27) The process of &quot;tidying&quot; the PostScript name space should have removed
only non-standard and undocumented operators. Nevertheless, it is possible that
any integrations or utilities that rely on those non-standard and undocumented
-operators may stop working, or may change behaviour.
+operators may stop working or may change behaviour.
<p>If you encounter such a case, please contact us (either the #ghostscript IRC channel,
or the gs-devel mailing list would be best), and we'll work with you to either find an
-alternative solution or return the previous functionality if there is genuinely no other
+alternative solution or return the previous functionality, if there is genuinely no other
option.
<p>One case we know this has occurred is GSView 5 (and earlier). GSView 5 support for PDF
-files relied upon internal use only features that are no longer available. GSView 5 will
-still work as previously for Postscript files. For PDF files, users are encouraged to look
+files relied upon internal use only features which are no longer available. GSView 5 will
+still work as previously for PostScript files. For PDF files, users are encouraged to look
at <a href="https://www.mupdf.com">MuPDF</a>.
</li>
</ul>
-<h3><a name="9.52_changelog"></a>Changelog</h3>
+<h3><a name="9.53.0_changelog"></a>Changelog</h3>
<p>See the <a href="History9.htm">history file</a> for complete log
of changes.
@@ -206,7 +225,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Ps-style.htm b/doc/Ps-style.htm
index 29c268cc..862e6460 100644
--- a/doc/Ps-style.htm
+++ b/doc/Ps-style.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -536,7 +527,7 @@ that could be made into a procedure.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -549,7 +540,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Ps2epsi.htm b/doc/Ps2epsi.htm
index 84db926c..ed352607 100644
--- a/doc/Ps2epsi.htm
+++ b/doc/Ps2epsi.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -216,7 +207,7 @@ encapsulation fails because of the nature of the original PostScript file.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -229,7 +220,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Psfiles.htm b/doc/Psfiles.htm
index bfea3bc5..119054af 100644
--- a/doc/Psfiles.htm
+++ b/doc/Psfiles.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -881,7 +872,7 @@ when passing files with -dJOBSERVER.</dd>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -894,7 +885,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Readme.htm b/doc/Readme.htm
index 8e259902..9c27128e 100644
--- a/doc/Readme.htm
+++ b/doc/Readme.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -568,7 +559,7 @@ command-line options.</dd></dt>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -581,7 +572,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Release.htm b/doc/Release.htm
index 4c568b27..4795a73f 100644
--- a/doc/Release.htm
+++ b/doc/Release.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -832,7 +823,7 @@ These are included in the Ghostscript release archive.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -845,7 +836,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/SavedPages.htm b/doc/SavedPages.htm
index ddd80a9d..e70d4546 100644
--- a/doc/SavedPages.htm
+++ b/doc/SavedPages.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -317,7 +308,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Source.htm b/doc/Source.htm
index 1855f907..77f7c8bb 100644
--- a/doc/Source.htm
+++ b/doc/Source.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -452,7 +443,7 @@ and so on.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -465,7 +456,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Unix-lpr.htm b/doc/Unix-lpr.htm
index 166eb6e3..320ade33 100644
--- a/doc/Unix-lpr.htm
+++ b/doc/Unix-lpr.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -291,7 +282,7 @@ is responsible for the number-of-colours part of the script.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -304,7 +295,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Use.htm b/doc/Use.htm
index 0d82ec49..e8bc3796 100644
--- a/doc/Use.htm
+++ b/doc/Use.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -2305,6 +2296,44 @@ whereas <code>-sXYZ=35</code> is equivalent to</p>
</dl>
<dl>
+<dt><code>-p</code><em>name</em><code>=</code><em>string</em></dt>
+<dd>Define a name in systemdict with the parsed version of the given string as value. The string takes a parameter definition in (something very close to) postscript format.
+This allows more complex structures to be passed in than is possible with <code>-d</code> or <code>-s</code>. For example:
+
+<blockquote><code>
+-pFoo=&quot;&lt;&lt; /Bar[1 2 3]/Baz 0.1 /Whizz (string) /Bang &lt;0123&gt; &gt;&gt;&quot;
+</code></blockquote>
+
+<p>This means that <code>-p</code> can do the job of both <code>-d</code> and <code>-s</code>. For example:</p>
+
+<blockquote><code>
+-dDownScaleFactor=3
+</code></blockquote>
+
+<p>can be equivalently performed by</p>
+
+<blockquote><code>
+-pDownScaleFactor=3
+</code></blockquote>
+
+and
+
+<blockquote><code>
+-sPAPERSIZE=letter
+</code></blockquote>
+
+<p>can be equivalently performed by</p>
+
+<blockquote><code>
+-pPAPERSIZE=&quot;(letter)&quot;
+</code></blockquote>
+
+<p>Note, that there are some 'special' values that should be set using <code>-s</code>, not <code>-p</code>, such as <code>DEVICE</code> and <code>DefaultGrayProfile</code>. Broadly, only use <code>-p</code> if you cannot set what you want using <code>-s</code> or <code>-d</code>.</p>
+
+<p>Also, internally, after setting an parameter with <code>-p</code> we perform an <code>initgraphics</code> operation. This is required to allow changes in parameters such as <code>HWResolution</code> to take effect. This means that attempting to use <code>-p</code> other than at the start of a page is liable to give unexpected results.</p>
+</dl>
+
+<dl>
<dt><code>-u</code><em>name</em></dt>
<dd>Un-define a name, cancelling <code>-d</code> or <code>-s</code>.
@@ -3524,9 +3553,16 @@ operation of <code>setpagedevice</code>, and because this capability is <i>extre
rarely used, we feel the improvement in security warrants the small reduction in
flexibility.
<p>
-Path matching is simple: it is case sensitive, and we do not implement full featured
+Path matching is very simple: it is case sensitive, and we do not implement full featured
&quot;globbing&quot; or regular expression matching (such complexity would significantly
-and negatively impact performance). The following cases are handled:
+and negatively impact performance). Further, the string parameter(s) passed to the
+<code>--permit-file-*</code> option must exactly match the string(s) used to reference
+the file(s): for example, you cannot use a absolute path to grant permission, and
+then a relative path to reference the file (or vice versa) - the path match will fail.
+Similarly, you cannot grant permission through one symlink, and then reference a file
+directly, or through an alternative symlink - again, the matching will fail.
+<p>
+The following cases are handled:
<ul>
<li>
<dt><code>&quot;&sol;path&sol;to&sol;file&quot;</code></dt>
@@ -5259,7 +5295,7 @@ PCLEOs. (see the FAPI-related source code for details).</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -5272,7 +5308,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/VectorDevices.htm b/doc/VectorDevices.htm
index 1acc9ff1..fae407d7 100644
--- a/doc/VectorDevices.htm
+++ b/doc/VectorDevices.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -240,7 +231,7 @@ and then 'wrap' the bitmap as a PDF file. Currently we do not do this either, bu
future enhancement may do so.
</p>
<p>
-If the input contains PDF-compatible transparency, but the ps2weite device is selected, or the pdfwrite device
+If the input contains PDF-compatible transparency, but the ps2write device is selected, or the pdfwrite device
is selected, but has been told to limit the PDF feature set to a version less than 1.4, the transparency
cannot be preserved. In this case the entire page is rendered to a bitmap and that bitmap is 'wrapped up'
in appropriate PDF or PostScript content. The output should be visually the same as the input, but since
@@ -1397,7 +1388,7 @@ not affected.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -1410,7 +1401,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/WhatIsGS.htm b/doc/WhatIsGS.htm
index 15835a50..2f0ecc6c 100644
--- a/doc/WhatIsGS.htm
+++ b/doc/WhatIsGS.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -176,7 +167,7 @@ from <a href="http://www.artifex.com">Artifex</a>.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -189,7 +180,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/gdevds32.c b/doc/gdevds32.c
index 96af31a9..30ac5fde 100644
--- a/doc/gdevds32.c
+++ b/doc/gdevds32.c
@@ -200,15 +200,18 @@ ds32_print_page(gx_device_printer * pdev, FILE * file)
int *trap_order = dsdev->downscale.trap_order;
gx_downscaler_t ds;
- if (num_comps == 4) {
- if (dsdev->icclink == NULL) {
- code = gx_downscaler_init_trapped(&ds, (gx_device *)pdev, 8, bpc, num_comps,
- factor, 0 /*mfs*/, &fax_adjusted_width, 0 /*aw*/, trap_w, trap_h, trap_order);
- } else {
- code = gx_downscaler_init_trapped_cm(&ds, (gx_device *)pdev, 8, bpc, num_comps,
- factor, 0 /*mfs*/, &fax_adjusted_width, 0 /*aw*/, trap_w, trap_h, trap_order,
- ds32_chunky_post_cm, dsdev->icclink, dsdev->icclink->num_output);
- }
+ if (dsdev->icclink == NULL) {
+ code = gx_downscaler_init(&ds, (gx_device *)pdev,
+ 8, bpc, num_comps,
+ &dsdev->downscale,
+ &fax_adjusted_width, 0 /*aw*/);
+ } else {
+ code = gx_downscaler_init_cm(&ds, (gx_device *)pdev,
+ 8, bpc, num_comps,
+ &dsdev->downscale,
+ &fax_adjusted_width, 0, /*aw*/
+ ds32_chunky_post_cm, dsdev->icclink,
+ dsdev->icclink->num_output);
}
if (code < 0)
return code;
diff --git a/doc/gs-vms.hlp b/doc/gs-vms.hlp
index 1fb39953..125faa30 100644
--- a/doc/gs-vms.hlp
+++ b/doc/gs-vms.hlp
@@ -1,6 +1,6 @@
1 gs
gs - GPL Ghostscript interpreter/previewer
-! Ghostscript version 9.52, 19 March 2020
+! Ghostscript version 9.53.0, 10 September 2020
Usage:
$ gs [options] [file ...]
diff --git a/doc/sample_downscale_device.htm b/doc/sample_downscale_device.htm
index 8834c3d2..dbae06ad 100644
--- a/doc/sample_downscale_device.htm
+++ b/doc/sample_downscale_device.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -263,7 +254,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
<!--FINISH EDITING HERE-->
diff --git a/doc/subclass.htm b/doc/subclass.htm
index 14b84309..e52a2ce7 100644
--- a/doc/subclass.htm
+++ b/doc/subclass.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -812,7 +803,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/thirdparty.htm b/doc/thirdparty.htm
index bc2538e3..10c57d05 100644
--- a/doc/thirdparty.htm
+++ b/doc/thirdparty.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -253,7 +244,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/examples/spots.ps b/examples/spots.ps
new file mode 100644
index 00000000..bef30004
--- /dev/null
+++ b/examples/spots.ps
@@ -0,0 +1,79 @@
+%!
+
+% Cyan
+1 0 0 0 setcmykcolor
+0 0 50 50 rectfill
+.5 0 0 0 setcmykcolor
+0 50 50 50 rectfill
+
+% Magenta
+0 1 0 0 setcmykcolor
+50 0 50 50 rectfill
+0 0.5 0 0 setcmykcolor
+50 50 50 50 rectfill
+
+% Yellow
+0 0 1 0 setcmykcolor
+100 0 50 50 rectfill
+0 0 .5 0 setcmykcolor
+100 0 50 50 rectfill
+
+% Black
+0 0 0 1 setcmykcolor
+150 0 50 50 rectfill
+0 0 0 .5 setcmykcolor
+150 50 50 50 rectfill
+
+% MuddyCyan
+[/Separation
+ (MuddyCyan)
+ /DeviceCMYK
+ {
+ 0.1 0.1 0
+ }
+] setcolorspace
+1 setcolor
+0 100 50 50 rectfill
+0.5 setcolor
+0 150 50 5000 rectfill
+
+% MuddyMagenta
+[/Separation
+ (MuddyMagenta)
+ /DeviceCMYK
+ {
+ 0.1 exch 0.1 0
+ }
+] setcolorspace
+1 setcolor
+50 100 50 50 rectfill
+0.5 setcolor
+50 150 50 5000 rectfill
+
+% MuddyYellow
+[/Separation
+ (MuddyYellow)
+ /DeviceCMYK
+ {
+ 0.1 exch 0.1 exch 0
+ }
+] setcolorspace
+1 setcolor
+100 100 50 50 rectfill
+0.5 setcolor
+100 150 50 5000 rectfill
+
+% MuddyBlack
+[/Separation
+ (MuddyBlack)
+ /DeviceCMYK
+ {
+ 0.1 exch 0.1 exch 0.1 exch
+ }
+] setcolorspace
+1 setcolor
+150 100 50 50 rectfill
+0.5 setcolor
+150 150 50 5000 rectfill
+
+showpage
diff --git a/examples/transparency_example.ps b/examples/transparency_example.ps
index 81200497..8609cf9e 100644
--- a/examples/transparency_example.ps
+++ b/examples/transparency_example.ps
@@ -5,13 +5,13 @@
systemdict /.setalphaisshape known not
{
- (\n\n%%%% WARNING: Transparency operations ignored - probably due to using -dSAFER\n\n) print flush
+ (\n\n%%%% WARNING: Transparency operations ignored - need to include -dALLOWPSTRANSPARENCY\n\n) print flush
/.pushpdf14devicefilter {pop} bind def
/.begintransparencygroup {pop pop pop pop pop} bind def
/.endtransparencygroup {} bind def
/.poppdf14devicefilter {} bind def
- /.setopacityalpha {pop} bind def
- /.setshapealpha {pop} bind def
+ /.setfillconstantalpha {pop} bind def
+ /.setstrokeconstantalpha {pop} bind def
/PageUsesTransparency false def
} if
@@ -37,7 +37,7 @@ systemdict /.setalphaisshape known not
<< >> clippath pathbbox newpath .begintransparencygroup
- .5 .setopacityalpha 1 .setshapealpha
+ .5 .setfillconstantalpha
.9 .3 .1 setrgbcolor
diff --git a/ijs/Makefile.am b/ijs/Makefile.am
index 433dff4b..9a0e148e 100644
--- a/ijs/Makefile.am
+++ b/ijs/Makefile.am
@@ -1,4 +1,4 @@
-## Copyright (C) 2001-2019 Artifex Software, Inc.
+## Copyright (C) 2001-2020 Artifex Software, Inc.
##
## Permission is hereby granted, free of charge, to any person
## obtaining a copy of this software and associated documentation
diff --git a/ijs/configure.ac b/ijs/configure.ac
index b37c3ef7..2417439f 100644
--- a/ijs/configure.ac
+++ b/ijs/configure.ac
@@ -1,4 +1,4 @@
-dnl Copyright (C) 2001-2019 Artifex Software, Inc.
+dnl Copyright (C) 2001-2020 Artifex Software, Inc.
dnl
dnl Permission is hereby granted, free of charge, to any person
dnl obtaining a copy of this software and associated documentation
diff --git a/ijs/ijs.c b/ijs/ijs.c
index b2120e8c..7226c557 100644
--- a/ijs/ijs.c
+++ b/ijs/ijs.c
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2001-2019 Artifex Software, Inc.
+ * Copyright (C) 2001-2020 Artifex Software, Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
diff --git a/ijs/ijs.h b/ijs/ijs.h
index 584c6ab1..9a03fdf4 100644
--- a/ijs/ijs.h
+++ b/ijs/ijs.h
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2001-2019 Artifex Software, Inc.
+ * Copyright (C) 2001-2020 Artifex Software, Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -22,6 +22,9 @@
* SOFTWARE.
**/
+#ifndef ijs_h_INCLUDED
+#define ijs_h_INCLUDED
+
/* This file contains common data types for IJS */
/* IJS_VERSION is decimal version number times 100 */
@@ -122,3 +125,5 @@ ijs_recv_int (IjsRecvChan *ch, int *val);
int
ijs_recv_block (IjsRecvChan *ch, char *buf, int buf_size);
+
+#endif
diff --git a/ijs/ijs_client.c b/ijs/ijs_client.c
index 6e5c335b..8e7a4a9b 100644
--- a/ijs/ijs_client.c
+++ b/ijs/ijs_client.c
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2001-2019 Artifex Software, Inc.
+ * Copyright (C) 2001-2020 Artifex Software, Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
diff --git a/ijs/ijs_client.h b/ijs/ijs_client.h
index 3bf49856..64fc6f90 100644
--- a/ijs/ijs_client.h
+++ b/ijs/ijs_client.h
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2001-2019 Artifex Software, Inc.
+ * Copyright (C) 2001-2020 Artifex Software, Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -22,6 +22,9 @@
* SOFTWARE.
**/
+#ifndef ijs_client_h_INCLUDED
+#define ijs_client_h_INCLUDED
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -94,3 +97,5 @@ ijs_client_get_version (IjsClientCtx *ctx);
#ifdef __cplusplus
}
#endif
+
+#endif
diff --git a/ijs/ijs_client_example.c b/ijs/ijs_client_example.c
index 670ded7b..873761e3 100644
--- a/ijs/ijs_client_example.c
+++ b/ijs/ijs_client_example.c
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2001-2019 Artifex Software, Inc.
+ * Copyright (C) 2001-2020 Artifex Software, Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
diff --git a/ijs/ijs_exec_unix.c b/ijs/ijs_exec_unix.c
index cbfb6cdd..a517f8c4 100644
--- a/ijs/ijs_exec_unix.c
+++ b/ijs/ijs_exec_unix.c
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2001-2019 Artifex Software, Inc.
+ * Copyright (C) 2001-2020 Artifex Software, Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
diff --git a/ijs/ijs_exec_win.c b/ijs/ijs_exec_win.c
index 51ca4901..fc522002 100644
--- a/ijs/ijs_exec_win.c
+++ b/ijs/ijs_exec_win.c
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2001-2019 Artifex Software, Inc.
+ * Copyright (C) 2001-2020 Artifex Software, Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -76,9 +76,9 @@ ijs_exec_server(const char *server_cmd, int *pfd_to, int *pfd_from,
CloseHandle(hPipeTemp);
}
if (flag)
- flag = (fd_stdin_wr = _open_osfhandle((LONG)hChildStdinWr, _O_BINARY)) != -1;
+ flag = (fd_stdin_wr = _open_osfhandle((intptr_t)hChildStdinWr, _O_BINARY)) != -1;
if (flag)
- flag = (fd_stdout_rd = _open_osfhandle((LONG)hChildStdoutRd, _O_BINARY)) != -1;
+ flag = (fd_stdout_rd = _open_osfhandle((intptr_t)hChildStdoutRd, _O_BINARY)) != -1;
/* Now create the child process. */
if (flag) {
diff --git a/ijs/ijs_server.c b/ijs/ijs_server.c
index 39478fcd..ed41ee4b 100644
--- a/ijs/ijs_server.c
+++ b/ijs/ijs_server.c
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2001-2019 Artifex Software, Inc.
+ * Copyright (C) 2001-2020 Artifex Software, Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
diff --git a/ijs/ijs_server_example.c b/ijs/ijs_server_example.c
index 1b7b6942..f090e9fa 100644
--- a/ijs/ijs_server_example.c
+++ b/ijs/ijs_server_example.c
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2001-2019 Artifex Software, Inc.
+ * Copyright (C) 2001-2020 Artifex Software, Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
diff --git a/ijs/unistd_.h b/ijs/unistd_.h
index 605895a5..bfba80f7 100644
--- a/ijs/unistd_.h
+++ b/ijs/unistd_.h
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2001-2019 Artifex Software, Inc.
+ * Copyright (C) 2001-2020 Artifex Software, Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
diff --git a/install-sh b/install-sh
index 59990a10..8175c640 100755
--- a/install-sh
+++ b/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2014-09-12.12; # UTC
+scriptversion=2018-03-11.20; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -271,15 +271,18 @@ do
fi
dst=$dst_arg
- # If destination is a directory, append the input filename; won't work
- # if double slashes aren't ignored.
+ # If destination is a directory, append the input filename.
if test -d "$dst"; then
if test "$is_target_a_directory" = never; then
echo "$0: $dst_arg: Is a directory" >&2
exit 1
fi
dstdir=$dst
- dst=$dstdir/`basename "$src"`
+ dstbase=`basename "$src"`
+ case $dst in
+ */) dst=$dst$dstbase;;
+ *) dst=$dst/$dstbase;;
+ esac
dstdir_status=0
else
dstdir=`dirname "$dst"`
@@ -288,6 +291,11 @@ do
fi
fi
+ case $dstdir in
+ */) dstdirslash=$dstdir;;
+ *) dstdirslash=$dstdir/;;
+ esac
+
obsolete_mkdir_used=false
if test $dstdir_status != 0; then
@@ -324,14 +332,16 @@ do
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
- # $RANDOM is not portable (e.g. dash); use it when possible to
- # lower collision chance
+ # Note that $RANDOM variable is not portable (e.g. dash); Use it
+ # here however when possible just to lower collision chance.
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+
trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
- # As "mkdir -p" follows symlinks and we work in /tmp possibly; so
- # create the $tmpdir first (and fail if unsuccessful) to make sure
- # that nobody tries to guess the $tmpdir name.
+ # Because "mkdir -p" follows existing symlinks and we likely work
+ # directly in world-writeable /tmp, make sure that the '$tmpdir'
+ # directory is successfully created first before we actually test
+ # 'mkdir -p' feature.
if (umask $mkdir_umask &&
$mkdirprog $mkdir_mode "$tmpdir" &&
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
@@ -434,8 +444,8 @@ do
else
# Make a couple of temp file names in the proper directory.
- dsttmp=$dstdir/_inst.$$_
- rmtmp=$dstdir/_rm.$$_
+ dsttmp=${dstdirslash}_inst.$$_
+ rmtmp=${dstdirslash}_rm.$$_
# Trap to clean up those temp files at exit.
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
@@ -500,9 +510,9 @@ do
done
# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:
diff --git a/ios/ios_arch-arm.h b/ios/ios_arch-arm.h
index 22ded1d5..f1ab071d 100644
--- a/ios/ios_arch-arm.h
+++ b/ios/ios_arch-arm.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/ios/ios_arch-x86.h b/ios/ios_arch-x86.h
index 0b871dc7..aeac82ea 100644
--- a/ios/ios_arch-x86.h
+++ b/ios/ios_arch-x86.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/CHANGES b/jbig2dec/CHANGES
index f0101b8b..3bdd57c0 100644
--- a/jbig2dec/CHANGES
+++ b/jbig2dec/CHANGES
@@ -1,3 +1,22 @@
+Version 0.19 (2020 September 10)
+
+* API change to use full 32 bit segment numbers, in accordance
+ to the JBIG2 specification.
+
+* Better handling of end of input data stream and and when
+ encountering errors in the arithmetic decoder stream. This
+ should improve many situations where jbig2dec appeared to
+ run forever.
+
+* Fix several bugs related to signedness or over-/underflow
+ checks that were not robust.
+
+* Bug fixes for issues reported by Coverity/OSS-fuzz.
+
+* Add option to limit memory usage to command line tool.
+
+* Update manpages, and command line tool usage.
+
Version 0.18 (2020 February 11)
* Performance enhancements related to decoding of MMR and generic
@@ -79,7 +98,7 @@ Version 0.7 (2004 December 8)
* successfully decodes ubc test streams 042_21, 042_22 and 042_23
* generic region template 3 handling with arbitrary AT locations
* successfully decodes ubc test streams 042_6 and 042_7
-
+
Version 0.6 (2003 December 31)
* minor portability fix for cygwin
@@ -94,7 +113,7 @@ Version 0.5 (2003 December 4)
Version 0.4 (released 2003 August 1)
- * redid license header to simplify relabelling for commercial
+ * redid license header to simplify relabelling for commercial
distribution, borrowing from Ghostscript.
Version 0.3 (released 2003 May 20)
diff --git a/jbig2dec/autogen.sh b/jbig2dec/autogen.sh
index 41a5d971..aaa8bbee 100755
--- a/jbig2dec/autogen.sh
+++ b/jbig2dec/autogen.sh
@@ -96,7 +96,7 @@ else
AM_NEEDED=`fgrep AUTOMAKE_OPTIONS Makefile.am | $VERSIONGREP`
AM_MAJOR_REQ=`echo $AM_NEEDED |cut -d. -f1`
AM_MINOR_REQ=`echo $AM_NEEDED |cut -d. -f2`
-
+
echo "checking for automake $AM_NEEDED or later..."
if [ $AM_MAJ -lt $AM_MAJOR_REQ -o $AM_MIN -lt $AM_MINOR_REQ ] ; then
diff --git a/jbig2dec/config_win32.h b/jbig2dec/config_win32.h
index 959d07e4..eef911e0 100644
--- a/jbig2dec/config_win32.h
+++ b/jbig2dec/config_win32.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/configure.ac.in b/jbig2dec/configure.ac.in
index 972d0818..95dbf639 100644
--- a/jbig2dec/configure.ac.in
+++ b/jbig2dec/configure.ac.in
@@ -27,12 +27,12 @@ AC_PROG_LIBTOOL
# platform specific compiler flags
if test "x$GCC" = xyes; then
- CFLAGS="$CFLAGS -Wall"
+ CFLAGS="$CFLAGS -Wall -Wsign-compare"
fi
# Checks for libraries.
dnl by default we want png support if possible
-AC_ARG_WITH([libpng],
+AC_ARG_WITH([libpng],
AC_HELP_STRING([--with-libpng[=prefix]],
[include support for png output (if libpng is available)]),
[ac_cv_want_libpng="$withval"], [ac_cv_want_libpng="yes"])
@@ -68,9 +68,9 @@ AC_HEADER_STDC
AC_CHECK_HEADERS([libintl.h stddef.h unistd.h strings.h])
dnl We assume the fixed-size types from stdint.h. If that header is
-dnl not available, look for the same types in a few other headers.
+dnl not available, look for the same types in a few other headers.
dnl We also attempt to define them ourselves, but only use those if
-dnl the native versions aren't available. The substitutions happen
+dnl the native versions aren't available. The substitutions happen
dnl in a file config_types.h, whose template is created by autogen.sh
stdint_types_in="no_replacement_found"
@@ -113,7 +113,7 @@ if test "x$ac_cv_header_stdint_h" != "xyes"; then
elif test "x$stdint_types_discovered" = "xno"; then
AC_MSG_ERROR([
Unable to find suitable definitions of the stdint.h types (uint32_t and friends)
-You will have to define these yourself in a separate header.
+You will have to define these yourself in a separate header.
See config_win32.h for an example.
])
fi
@@ -132,12 +132,11 @@ AC_C_BIGENDIAN
AC_FUNC_MEMCMP
dnl we use realloc() but don't depend on the zero-length behavior
dnl tested by AC_FUNC_REALLOC
-AC_REPLACE_FUNCS([snprintf])
AC_CHECK_FUNCS([memset strdup])
dnl use our included getopt if the system doesn't have getopt_long()
-AC_CHECK_FUNC(getopt_long,
+AC_CHECK_FUNC(getopt_long,
AC_DEFINE(HAVE_GETOPT_LONG,,
[Define if the local libc includes getopt_long()]
),[
diff --git a/jbig2dec/jbig2.c b/jbig2dec/jbig2.c
index 3fc6bf86..195a96e2 100644
--- a/jbig2dec/jbig2.c
+++ b/jbig2dec/jbig2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -71,12 +71,12 @@ jbig2_alloc(Jbig2Allocator *allocator, size_t size, size_t num)
/* jbig2_free and jbig2_realloc moved to the bottom of this file */
static void
-jbig2_default_error(void *data, const char *msg, Jbig2Severity severity, int32_t seg_idx)
+jbig2_default_error(void *data, const char *msg, Jbig2Severity severity, uint32_t seg_idx)
{
/* report only fatal errors by default */
if (severity == JBIG2_SEVERITY_FATAL) {
fprintf(stderr, "jbig2 decoder FATAL ERROR: %s", msg);
- if (seg_idx != -1)
+ if (seg_idx != JBIG2_UNKNOWN_SEGMENT_NUMBER)
fprintf(stderr, " (segment 0x%02x)", seg_idx);
fprintf(stderr, "\n");
fflush(stderr);
@@ -84,7 +84,7 @@ jbig2_default_error(void *data, const char *msg, Jbig2Severity severity, int32_t
}
int
-jbig2_error(Jbig2Ctx *ctx, Jbig2Severity severity, int32_t segment_number, const char *fmt, ...)
+jbig2_error(Jbig2Ctx *ctx, Jbig2Severity severity, uint32_t segment_number, const char *fmt, ...)
{
char buf[1024];
va_list ap;
@@ -108,7 +108,7 @@ jbig2_ctx_new_imp(Jbig2Allocator *allocator, Jbig2Options options, Jbig2GlobalCt
Jbig2Ctx fakectx;
fakectx.error_callback = error_callback;
fakectx.error_callback_data = error_callback_data;
- jbig2_error(&fakectx, JBIG2_SEVERITY_FATAL, -1, "incompatible jbig2dec header (%d.%d) and library (%d.%d) versions",
+ jbig2_error(&fakectx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "incompatible jbig2dec header (%d.%d) and library (%d.%d) versions",
jbig2_version_major, jbig2_version_minor, JBIG2_VERSION_MAJOR, JBIG2_VERSION_MINOR);
return NULL;
}
@@ -120,7 +120,7 @@ jbig2_ctx_new_imp(Jbig2Allocator *allocator, Jbig2Options options, Jbig2GlobalCt
result = (Jbig2Ctx *) jbig2_alloc(allocator, sizeof(Jbig2Ctx), 1);
if (result == NULL) {
- error_callback(error_callback_data, "failed to allocate initial context", JBIG2_SEVERITY_FATAL, -1);
+ error_callback(error_callback_data, "failed to allocate initial context", JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER);
return NULL;
}
@@ -138,7 +138,7 @@ jbig2_ctx_new_imp(Jbig2Allocator *allocator, Jbig2Options options, Jbig2GlobalCt
result->n_segments_max = 16;
result->segments = jbig2_new(result, Jbig2Segment *, result->n_segments_max);
if (result->segments == NULL) {
- error_callback(error_callback_data, "failed to allocate initial segments", JBIG2_SEVERITY_FATAL, -1);
+ error_callback(error_callback_data, "failed to allocate initial segments", JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER);
jbig2_free(allocator, result);
return NULL;
}
@@ -148,13 +148,13 @@ jbig2_ctx_new_imp(Jbig2Allocator *allocator, Jbig2Options options, Jbig2GlobalCt
result->max_page_index = 4;
result->pages = jbig2_new(result, Jbig2Page, result->max_page_index);
if (result->pages == NULL) {
- error_callback(error_callback_data, "failed to allocated initial pages", JBIG2_SEVERITY_FATAL, -1);
+ error_callback(error_callback_data, "failed to allocated initial pages", JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER);
jbig2_free(allocator, result->segments);
jbig2_free(allocator, result);
return NULL;
}
{
- int index;
+ uint32_t index;
for (index = 0; index < result->max_page_index; index++) {
result->pages[index].state = JBIG2_PAGE_FREE;
@@ -211,6 +211,22 @@ jbig2_get_uint32(const byte *bptr)
return ((uint32_t) get_uint16(bptr) << 16) | get_uint16(bptr + 2);
}
+static size_t
+jbig2_find_buffer_size(size_t desired)
+{
+ const size_t initial_buf_size = 1024;
+ size_t size = initial_buf_size;
+
+ if (desired == SIZE_MAX)
+ return SIZE_MAX;
+
+ while (size < desired)
+ size <<= 1;
+
+ return size;
+}
+
+
/**
* jbig2_data_in: submit data for decoding
* @ctx: The jbig2dec decoder context
@@ -226,36 +242,35 @@ jbig2_get_uint32(const byte *bptr)
int
jbig2_data_in(Jbig2Ctx *ctx, const unsigned char *data, size_t size)
{
- const size_t initial_buf_size = 1024;
-
if (ctx->buf == NULL) {
- size_t buf_size = initial_buf_size;
-
- do
- buf_size <<= 1;
- while (buf_size < size);
+ size_t buf_size = jbig2_find_buffer_size(size);
ctx->buf = jbig2_new(ctx, byte, buf_size);
if (ctx->buf == NULL) {
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate buffer when reading data");
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate buffer when reading data");
}
ctx->buf_size = buf_size;
ctx->buf_rd_ix = 0;
ctx->buf_wr_ix = 0;
- } else if (ctx->buf_wr_ix + size > ctx->buf_size) {
- if (ctx->buf_rd_ix <= (ctx->buf_size >> 1) && ctx->buf_wr_ix - ctx->buf_rd_ix + size <= ctx->buf_size) {
- memmove(ctx->buf, ctx->buf + ctx->buf_rd_ix, ctx->buf_wr_ix - ctx->buf_rd_ix);
+ } else if (size > ctx->buf_size - ctx->buf_wr_ix) {
+ size_t already = ctx->buf_wr_ix - ctx->buf_rd_ix;
+
+ if (ctx->buf_rd_ix <= (ctx->buf_size >> 1) && size <= ctx->buf_size - already) {
+ memmove(ctx->buf, ctx->buf + ctx->buf_rd_ix, already);
} else {
byte *buf;
- size_t buf_size = initial_buf_size;
+ size_t buf_size;
+
+ if (already > SIZE_MAX - size) {
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "read data causes buffer to grow too large");
+ }
+
+ buf_size = jbig2_find_buffer_size(size + already);
- do
- buf_size <<= 1;
- while (buf_size < ctx->buf_wr_ix - ctx->buf_rd_ix + size);
buf = jbig2_new(ctx, byte, buf_size);
if (buf == NULL) {
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate bigger buffer when reading data");
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate bigger buffer when reading data");
}
- memcpy(buf, ctx->buf + ctx->buf_rd_ix, ctx->buf_wr_ix - ctx->buf_rd_ix);
+ memcpy(buf, ctx->buf + ctx->buf_rd_ix, already);
jbig2_free(ctx->allocator, ctx->buf);
ctx->buf = buf;
ctx->buf_size = buf_size;
@@ -263,6 +278,7 @@ jbig2_data_in(Jbig2Ctx *ctx, const unsigned char *data, size_t size)
ctx->buf_wr_ix -= ctx->buf_rd_ix;
ctx->buf_rd_ix = 0;
}
+
memcpy(ctx->buf + ctx->buf_wr_ix, data, size);
ctx->buf_wr_ix += size;
@@ -280,17 +296,17 @@ jbig2_data_in(Jbig2Ctx *ctx, const unsigned char *data, size_t size)
if (ctx->buf_wr_ix - ctx->buf_rd_ix < 9)
return 0;
if (memcmp(ctx->buf + ctx->buf_rd_ix, jbig2_id_string, 8))
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "not a JBIG2 file header");
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "not a JBIG2 file header");
/* D.4.2 */
ctx->file_header_flags = ctx->buf[ctx->buf_rd_ix + 8];
/* Check for T.88 amendment 2 */
if (ctx->file_header_flags & 0x04)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "file header indicates use of 12 adaptive template pixels (NYI)");
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "file header indicates use of 12 adaptive template pixels (NYI)");
/* Check for T.88 amendment 3 */
if (ctx->file_header_flags & 0x08)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "file header indicates use of colored region segments (NYI)");
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "file header indicates use of colored region segments (NYI)");
if (ctx->file_header_flags & 0xFC) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "reserved bits (2-7) of file header flags are not zero (0x%02x)", ctx->file_header_flags);
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "reserved bits (2-7) of file header flags are not zero (0x%02x)", ctx->file_header_flags);
}
/* D.4.3 */
if (!(ctx->file_header_flags & 2)) { /* number of pages is known */
@@ -299,9 +315,9 @@ jbig2_data_in(Jbig2Ctx *ctx, const unsigned char *data, size_t size)
ctx->n_pages = jbig2_get_uint32(ctx->buf + ctx->buf_rd_ix + 9);
ctx->buf_rd_ix += 13;
if (ctx->n_pages == 1)
- jbig2_error(ctx, JBIG2_SEVERITY_INFO, -1, "file header indicates a single page document");
+ jbig2_error(ctx, JBIG2_SEVERITY_INFO, JBIG2_UNKNOWN_SEGMENT_NUMBER, "file header indicates a single page document");
else
- jbig2_error(ctx, JBIG2_SEVERITY_INFO, -1, "file header indicates a %d page document", ctx->n_pages);
+ jbig2_error(ctx, JBIG2_SEVERITY_INFO, JBIG2_UNKNOWN_SEGMENT_NUMBER, "file header indicates a %d page document", ctx->n_pages);
} else { /* number of pages not known */
ctx->n_pages = 0;
ctx->buf_rd_ix += 9;
@@ -309,10 +325,10 @@ jbig2_data_in(Jbig2Ctx *ctx, const unsigned char *data, size_t size)
/* determine the file organization based on the flags - D.4.2 again */
if (ctx->file_header_flags & 1) {
ctx->state = JBIG2_FILE_SEQUENTIAL_HEADER;
- jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, "file header indicates sequential organization");
+ jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, JBIG2_UNKNOWN_SEGMENT_NUMBER, "file header indicates sequential organization");
} else {
ctx->state = JBIG2_FILE_RANDOM_HEADERS;
- jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, "file header indicates random-access organization");
+ jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, JBIG2_UNKNOWN_SEGMENT_NUMBER, "file header indicates random-access organization");
}
break;
case JBIG2_FILE_SEQUENTIAL_HEADER:
@@ -322,9 +338,17 @@ jbig2_data_in(Jbig2Ctx *ctx, const unsigned char *data, size_t size)
return 0; /* need more data */
ctx->buf_rd_ix += header_size;
- if (ctx->n_segments == ctx->n_segments_max) {
+ if (ctx->n_segments >= ctx->n_segments_max) {
Jbig2Segment **segments;
+ if (ctx->n_segments_max == UINT32_MAX) {
+ ctx->state = JBIG2_FILE_EOF;
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "too many segments in jbig2 image");
+ }
+ else if (ctx->n_segments_max > (UINT32_MAX >> 2)) {
+ ctx->n_segments_max = UINT32_MAX;
+ }
+
segments = jbig2_renew(ctx, ctx->segments, Jbig2Segment *, (ctx->n_segments_max <<= 2));
if (segments == NULL) {
ctx->state = JBIG2_FILE_EOF;
@@ -333,7 +357,6 @@ jbig2_data_in(Jbig2Ctx *ctx, const unsigned char *data, size_t size)
ctx->segments = segments;
}
-
ctx->segments[ctx->n_segments++] = segment;
if (ctx->state == JBIG2_FILE_RANDOM_HEADERS) {
if ((segment->flags & 63) == 51) /* end of file */
@@ -380,7 +403,7 @@ jbig2_data_in(Jbig2Ctx *ctx, const unsigned char *data, size_t size)
segment->rows = jbig2_get_uint32(p);
p += 4;
- segment->data_length = p - s;
+ segment->data_length = (size_t) (p - s);
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, "unknown length determined to be %lu", (long) segment->data_length);
}
else if (segment->data_length > ctx->buf_wr_ix - ctx->buf_rd_ix)
@@ -403,7 +426,7 @@ jbig2_data_in(Jbig2Ctx *ctx, const unsigned char *data, size_t size)
case JBIG2_FILE_EOF:
if (ctx->buf_rd_ix == ctx->buf_wr_ix)
return 0;
- return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "garbage beyond end of file");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "garbage beyond end of file");
}
}
}
@@ -412,7 +435,7 @@ Jbig2Allocator *
jbig2_ctx_free(Jbig2Ctx *ctx)
{
Jbig2Allocator *ca;
- int i;
+ uint32_t i;
if (ctx == NULL)
return NULL;
@@ -461,29 +484,30 @@ typedef struct {
} Jbig2WordStreamBuf;
static int
-jbig2_word_stream_buf_get_next_word(Jbig2WordStream *self, size_t offset, uint32_t *word)
+jbig2_word_stream_buf_get_next_word(Jbig2Ctx *ctx, Jbig2WordStream *self, size_t offset, uint32_t *word)
{
Jbig2WordStreamBuf *z = (Jbig2WordStreamBuf *) self;
uint32_t val = 0;
int ret = 0;
- if (self == NULL || word == NULL)
- return -1;
+ if (self == NULL || word == NULL) {
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to read next word of stream because stream or output missing");
+ }
if (offset >= z->size) {
*word = 0;
return 0;
}
if (offset < z->size) {
- val |= z->data[offset] << 24;
+ val = (uint32_t) z->data[offset] << 24;
ret++;
}
if (offset + 1 < z->size) {
- val |= z->data[offset + 1] << 16;
+ val |= (uint32_t) z->data[offset + 1] << 16;
ret++;
}
if (offset + 2 < z->size) {
- val |= z->data[offset + 2] << 8;
+ val |= (uint32_t) z->data[offset + 2] << 8;
ret++;
}
if (offset + 3 < z->size) {
@@ -500,7 +524,7 @@ jbig2_word_stream_buf_new(Jbig2Ctx *ctx, const byte *data, size_t size)
Jbig2WordStreamBuf *result = jbig2_new(ctx, Jbig2WordStreamBuf, 1);
if (result == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate word stream");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate word stream");
return NULL;
}
diff --git a/jbig2dec/jbig2.h b/jbig2dec/jbig2.h
index fb195fec..38eb8603 100644
--- a/jbig2dec/jbig2.h
+++ b/jbig2dec/jbig2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -17,16 +17,16 @@
jbig2dec
*/
+#ifndef _JBIG2_H
+#define _JBIG2_H
+
#ifdef __cplusplus
extern "C"
{
#endif
-#ifndef _JBIG2_H
-#define _JBIG2_H
-
#define JBIG2_VERSION_MAJOR (0)
-#define JBIG2_VERSION_MINOR (18)
+#define JBIG2_VERSION_MINOR (19)
/* warning levels */
typedef enum {
@@ -65,7 +65,8 @@ struct _Jbig2Image {
handler is used which prints fatal errors to the stderr stream. */
/* error callback */
-typedef void (*Jbig2ErrorCallback)(void *data, const char *msg, Jbig2Severity severity, int32_t seg_idx);
+#define JBIG2_UNKNOWN_SEGMENT_NUMBER ~0U
+typedef void (*Jbig2ErrorCallback)(void *data, const char *msg, Jbig2Severity severity, uint32_t seg_idx);
/* memory allocation is likewise done via a set of callbacks so that
clients can better control memory usage. If a NULL is passed for
@@ -104,8 +105,6 @@ void jbig2_release_page(Jbig2Ctx *ctx, Jbig2Image *image);
/* mark the current page as complete, simulating an end-of-page segment (for broken streams) */
int jbig2_complete_page(Jbig2Ctx *ctx);
-#endif /* _JBIG2_H */
-
/* If we don't have a definition for inline, make it nothing so the code will compile */
#ifndef inline
#define inline
@@ -114,3 +113,5 @@ int jbig2_complete_page(Jbig2Ctx *ctx);
#ifdef __cplusplus
}
#endif
+
+#endif /* _JBIG2_H */
diff --git a/jbig2dec/jbig2_arith.c b/jbig2dec/jbig2_arith.c
index 04566337..a494abd5 100644
--- a/jbig2dec/jbig2_arith.c
+++ b/jbig2dec/jbig2_arith.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -31,15 +31,16 @@
struct _Jbig2ArithState {
uint32_t C;
- int A;
+ uint32_t A;
int CT;
uint32_t next_word;
- int next_word_bytes;
+ size_t next_word_bytes;
+ int err;
Jbig2WordStream *ws;
- int offset;
+ size_t offset;
};
/*
@@ -53,13 +54,22 @@ struct _Jbig2ArithState {
invitation to bitrot.
*/
-static void
-jbig2_arith_bytein(Jbig2ArithState *as)
+static int
+jbig2_arith_bytein(Jbig2Ctx *ctx, Jbig2ArithState *as)
{
- int new_bytes;
byte B;
- /* invariant: as->next_word_bytes > 0 */
+ /* Treat both errors and reading beyond end of stream as an error. */
+ if (as->err != 0) {
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to read from underlying stream during arithmetic decoding");
+ return -1;
+ }
+ if (as->next_word_bytes == 0) {
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to read beyond end of underlying stream during arithmetic decoding");
+ return -1;
+ }
+
+ /* At this point there is at least one byte in as->next_word. */
/* This code confused me no end when I first read it, so a quick note
* to save others (and future me's) from being similarly confused.
@@ -78,17 +88,30 @@ jbig2_arith_bytein(Jbig2ArithState *as)
* that fact for the next byte we read.
*/
- /* Figure G.3 */
+ /* Figure F.3 */
B = (byte)((as->next_word >> 24) & 0xFF);
if (B == 0xFF) {
byte B1;
- if (as->next_word_bytes == 1) {
- Jbig2WordStream *ws = as->ws;
+ /* next_word_bytes can only be == 1 here, but let's be defensive. */
+ if (as->next_word_bytes <= 1) {
+ int ret = as->ws->get_next_word(ctx, as->ws, as->offset, &as->next_word);
+ if (ret < 0) {
+ as->err = 1;
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to check for marker code due to failure in underlying stream during arithmetic decoding");
+ }
+ as->next_word_bytes = (size_t) ret;
+
+ if (as->next_word_bytes == 0) {
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to read end of possible terminating marker code, assuming terminating marker code");
+ as->next_word = 0xFF900000;
+ as->next_word_bytes = 2;
+ as->C += 0xFF00;
+ as->CT = 8;
+ return 0;
+ }
- new_bytes = ws->get_next_word(ws, as->offset, &as->next_word);
- as->next_word_bytes = new_bytes;
- as->offset += new_bytes;
+ as->offset += as->next_word_bytes;
B1 = (byte)((as->next_word >> 24) & 0xFF);
if (B1 > 0x8F) {
@@ -97,7 +120,7 @@ jbig2_arith_bytein(Jbig2ArithState *as)
#endif
as->CT = 8;
as->next_word = 0xFF000000 | (as->next_word >> 8);
- as->next_word_bytes = 4;
+ as->next_word_bytes = 2;
as->offset--;
} else {
#ifdef JBIG2_DEBUG_ARITH
@@ -128,19 +151,35 @@ jbig2_arith_bytein(Jbig2ArithState *as)
#ifdef JBIG2_DEBUG_ARITH
fprintf(stderr, "read %02x\n", B);
#endif
- as->CT = 8;
as->next_word <<= 8;
as->next_word_bytes--;
+
if (as->next_word_bytes == 0) {
- Jbig2WordStream *ws = as->ws;
+ int ret = as->ws->get_next_word(ctx, as->ws, as->offset, &as->next_word);
+ if (ret < 0) {
+ as->err = 1;
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to read from underlying stream during arithmetic decoding");
+ }
+ as->next_word_bytes = (size_t) ret;
+
+ if (as->next_word_bytes == 0) {
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to find terminating marker code before end of underlying stream, assuming terminating marker code");
+ as->next_word = 0xFF900000;
+ as->next_word_bytes = 2;
+ as->C += 0xFF00;
+ as->CT = 8;
+ return 0;
+ }
- new_bytes = ws->get_next_word(ws, as->offset, &as->next_word);
- as->offset += new_bytes;
- as->next_word_bytes = new_bytes;
+ as->offset += as->next_word_bytes;
}
+
B = (byte)((as->next_word >> 24) & 0xFF);
as->C += 0xFF00 - (B << 8);
+ as->CT = 8;
}
+
+ return 0;
}
/** Allocate and initialize a new arithmetic coding state
@@ -151,24 +190,45 @@ Jbig2ArithState *
jbig2_arith_new(Jbig2Ctx *ctx, Jbig2WordStream *ws)
{
Jbig2ArithState *result;
- int new_bytes;
+ int ret;
result = jbig2_new(ctx, Jbig2ArithState, 1);
if (result == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate arithmetic coding state");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate arithmetic coding state");
return NULL;
}
+ result->err = 0;
result->ws = ws;
+ result->offset = 0;
+
+ ret = result->ws->get_next_word(ctx, result->ws, result->offset, &result->next_word);
+ if (ret < 0) {
+ jbig2_free(ctx->allocator, result);
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to initialize underlying stream of arithmetic decoder");
+ return NULL;
+ }
+
+ result->next_word_bytes = (size_t) ret;
+ if (result->next_word_bytes == 0) {
+ jbig2_free(ctx->allocator, result);
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to read first byte from underlying stream when initializing arithmetic decoder");
+ return NULL;
+ }
- new_bytes = ws->get_next_word(ws, 0, &result->next_word);
- result->next_word_bytes = new_bytes;
- result->offset = new_bytes;
+ result->offset += result->next_word_bytes;
- /* Figure E.20 */
+ /* Figure F.1 */
result->C = (~(result->next_word >> 8)) & 0xFF0000;
- jbig2_arith_bytein(result);
+ /* Figure E.20 (2) */
+ if (jbig2_arith_bytein(ctx, result) < 0) {
+ jbig2_free(ctx->allocator, result);
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to read second byte from underlying stream when initializing arithmetic decoder");
+ return NULL;
+ }
+
+ /* Figure E.20 (3) */
result->C <<= 7;
result->CT -= 7;
result->A = 0x8000;
@@ -180,7 +240,7 @@ jbig2_arith_new(Jbig2Ctx *ctx, Jbig2WordStream *ws)
/* could put bit fields in to minimize memory usage */
typedef struct {
- unsigned short Qe;
+ uint16_t Qe;
byte mps_xor; /* mps_xor = index ^ NMPS */
byte lps_xor; /* lps_xor = index ^ NLPS ^ (SWITCH << 7) */
} Jbig2ArithQe;
@@ -235,33 +295,37 @@ static const Jbig2ArithQe jbig2_arith_Qe[MAX_QE_ARRAY_SIZE] = {
{0x5601, 46 ^ 46, 46 ^ 46}
};
-static void
-jbig2_arith_renormd(Jbig2ArithState *as)
+static int
+jbig2_arith_renormd(Jbig2Ctx *ctx, Jbig2ArithState *as)
{
/* Figure E.18 */
do {
- if (as->CT == 0)
- jbig2_arith_bytein(as);
+ if (as->CT == 0 && jbig2_arith_bytein(ctx, as) < 0) {
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to read byte from compressed data stream");
+ }
as->A <<= 1;
as->C <<= 1;
as->CT--;
} while ((as->A & 0x8000) == 0);
+
+ return 0;
}
int
-jbig2_arith_decode(Jbig2ArithState *as, Jbig2ArithCx *pcx)
+jbig2_arith_decode(Jbig2Ctx *ctx, Jbig2ArithState *as, Jbig2ArithCx *pcx)
{
Jbig2ArithCx cx = *pcx;
const Jbig2ArithQe *pqe;
unsigned int index = cx & 0x7f;
bool D;
- if (index >= MAX_QE_ARRAY_SIZE)
- return -1; /* Error */
+ if (index >= MAX_QE_ARRAY_SIZE) {
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to determine probability estimate because index out of range");
+ }
pqe = &jbig2_arith_Qe[index];
- /* Figure E.15 */
+ /* Figure F.2 */
as->A -= pqe->Qe;
if ((as->C >> 16) < as->A) {
if ((as->A & 0x8000) == 0) {
@@ -273,7 +337,10 @@ jbig2_arith_decode(Jbig2ArithState *as, Jbig2ArithCx *pcx)
D = cx >> 7;
*pcx ^= pqe->mps_xor;
}
- jbig2_arith_renormd(as);
+ if (jbig2_arith_renormd(ctx, as) < 0) {
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to renormalize decoder");
+ }
+
return D;
} else {
return cx >> 7;
@@ -290,7 +357,10 @@ jbig2_arith_decode(Jbig2ArithState *as, Jbig2ArithCx *pcx)
D = 1 - (cx >> 7);
*pcx ^= pqe->lps_xor;
}
- jbig2_arith_renormd(as);
+ if (jbig2_arith_renormd(ctx, as) < 0) {
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to renormalize decoder");
+ }
+
return D;
}
}
@@ -313,7 +383,7 @@ jbig2_arith_trace(Jbig2ArithState *as, Jbig2ArithCx cx)
#endif
static int
-test_get_word(Jbig2WordStream *self, size_t offset, uint32_t *word)
+test_get_word(Jbig2Ctx *ctx, Jbig2WordStream *self, size_t offset, uint32_t *word)
{
uint32_t val = 0;
int ret = 0;
@@ -362,11 +432,11 @@ main(int argc, char **argv)
for (i = 0; i < 256; i++) {
#ifdef JBIG2_DEBUG_ARITH
- bool D =
+ int D =
#else
(void)
#endif
- jbig2_arith_decode(as, &cx);
+ jbig2_arith_decode(ctx, as, &cx);
#ifdef JBIG2_DEBUG_ARITH
fprintf(stderr, "%3d: D = %d, ", i, D);
diff --git a/jbig2dec/jbig2_arith.h b/jbig2dec/jbig2_arith.h
index f50d232f..cf3d0ac0 100644
--- a/jbig2dec/jbig2_arith.h
+++ b/jbig2dec/jbig2_arith.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -32,7 +32,7 @@ Jbig2ArithState *jbig2_arith_new(Jbig2Ctx *ctx, Jbig2WordStream *ws);
/* decode a bit */
/* Normally returns 0 or 1. May return negative in case of error. */
-int jbig2_arith_decode(Jbig2ArithState *as, Jbig2ArithCx *pcx);
+int jbig2_arith_decode(Jbig2Ctx *ctx, Jbig2ArithState *as, Jbig2ArithCx *pcx);
/* returns true if the end of the data stream has been reached (for sanity checks) */
bool jbig2_arith_has_reached_marker(Jbig2ArithState *as);
diff --git a/jbig2dec/jbig2_arith_iaid.c b/jbig2dec/jbig2_arith_iaid.c
index caa79c80..c5666582 100644
--- a/jbig2dec/jbig2_arith_iaid.c
+++ b/jbig2dec/jbig2_arith_iaid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -37,18 +37,27 @@
#include "jbig2_arith_iaid.h"
struct _Jbig2ArithIaidCtx {
- int SBSYMCODELEN;
+ uint8_t SBSYMCODELEN;
Jbig2ArithCx *IAIDx;
};
Jbig2ArithIaidCtx *
-jbig2_arith_iaid_ctx_new(Jbig2Ctx *ctx, int SBSYMCODELEN)
+jbig2_arith_iaid_ctx_new(Jbig2Ctx *ctx, uint8_t SBSYMCODELEN)
{
- Jbig2ArithIaidCtx *result = jbig2_new(ctx, Jbig2ArithIaidCtx, 1);
- int ctx_size = 1 << SBSYMCODELEN;
+ Jbig2ArithIaidCtx *result;
+ size_t ctx_size;
+ if (sizeof(ctx_size) * 8 <= SBSYMCODELEN)
+ {
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "requested IAID arithmetic coding state size too large");
+ return NULL;
+ }
+
+ ctx_size = (size_t) 1U << SBSYMCODELEN;
+
+ result = jbig2_new(ctx, Jbig2ArithIaidCtx, 1);
if (result == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate IAID arithmetic coding state");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate IAID arithmetic coding state");
return NULL;
}
@@ -57,7 +66,7 @@ jbig2_arith_iaid_ctx_new(Jbig2Ctx *ctx, int SBSYMCODELEN)
if (result->IAIDx == NULL)
{
jbig2_free(ctx->allocator, result);
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate symbol ID in IAID arithmetic coding state");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate symbol ID in IAID arithmetic coding state");
return NULL;
}
@@ -71,16 +80,17 @@ int
jbig2_arith_iaid_decode(Jbig2Ctx *ctx, Jbig2ArithIaidCtx *actx, Jbig2ArithState *as, int32_t *p_result)
{
Jbig2ArithCx *IAIDx = actx->IAIDx;
- int SBSYMCODELEN = actx->SBSYMCODELEN;
+ uint8_t SBSYMCODELEN = actx->SBSYMCODELEN;
+ /* A.3 (1) */
int PREV = 1;
int D;
int i;
/* A.3 (2) */
for (i = 0; i < SBSYMCODELEN; i++) {
- D = jbig2_arith_decode(as, &IAIDx[PREV]);
+ D = jbig2_arith_decode(ctx, as, &IAIDx[PREV]);
if (D < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAIDx code");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode IAIDx code");
#ifdef VERBOSE
fprintf(stderr, "IAID%x: D = %d\n", PREV, D);
#endif
diff --git a/jbig2dec/jbig2_arith_iaid.h b/jbig2dec/jbig2_arith_iaid.h
index b0b3a652..73c13775 100644
--- a/jbig2dec/jbig2_arith_iaid.h
+++ b/jbig2dec/jbig2_arith_iaid.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -22,7 +22,7 @@
typedef struct _Jbig2ArithIaidCtx Jbig2ArithIaidCtx;
-Jbig2ArithIaidCtx *jbig2_arith_iaid_ctx_new(Jbig2Ctx *ctx, int SBSYMCODELEN);
+Jbig2ArithIaidCtx *jbig2_arith_iaid_ctx_new(Jbig2Ctx *ctx, uint8_t SBSYMCODELEN);
int jbig2_arith_iaid_decode(Jbig2Ctx *ctx, Jbig2ArithIaidCtx *actx, Jbig2ArithState *as, int32_t *p_result);
diff --git a/jbig2dec/jbig2_arith_int.c b/jbig2dec/jbig2_arith_int.c
index 378ac9d3..5ccffb93 100644
--- a/jbig2dec/jbig2_arith_int.c
+++ b/jbig2dec/jbig2_arith_int.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -32,13 +32,6 @@
#include "jbig2_arith.h"
#include "jbig2_arith_int.h"
-#if !defined (INT32_MIN)
-#define INT32_MIN (-0x7fffffff - 1)
-#endif
-#if !defined (INT32_MAX)
-#define INT32_MAX 0x7fffffff
-#endif
-
struct _Jbig2ArithIntCtx {
Jbig2ArithCx IAx[512];
};
@@ -49,7 +42,7 @@ jbig2_arith_int_ctx_new(Jbig2Ctx *ctx)
Jbig2ArithIntCtx *result = jbig2_new(ctx, Jbig2ArithIntCtx, 1);
if (result == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate arithmetic integer coding state");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate arithmetic integer coding state");
return NULL;
} else {
memset(result->IAx, 0, sizeof(result->IAx));
@@ -71,37 +64,37 @@ jbig2_arith_int_decode(Jbig2Ctx *ctx, Jbig2ArithIntCtx *actx, Jbig2ArithState *a
int n_tail, offset;
int i;
- S = jbig2_arith_decode(as, &IAx[PREV]);
+ S = jbig2_arith_decode(ctx, as, &IAx[PREV]);
if (S < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx S");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode IAx S");
PREV = (PREV << 1) | S;
- bit = jbig2_arith_decode(as, &IAx[PREV]);
+ bit = jbig2_arith_decode(ctx, as, &IAx[PREV]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx decision bit 0");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode IAx decision bit 0");
PREV = (PREV << 1) | bit;
if (bit) {
- bit = jbig2_arith_decode(as, &IAx[PREV]);
+ bit = jbig2_arith_decode(ctx, as, &IAx[PREV]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx decision bit 1");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode IAx decision bit 1");
PREV = (PREV << 1) | bit;
if (bit) {
- bit = jbig2_arith_decode(as, &IAx[PREV]);
+ bit = jbig2_arith_decode(ctx, as, &IAx[PREV]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx decision bit 2");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode IAx decision bit 2");
PREV = (PREV << 1) | bit;
if (bit) {
- bit = jbig2_arith_decode(as, &IAx[PREV]);
+ bit = jbig2_arith_decode(ctx, as, &IAx[PREV]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx decision bit 3");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode IAx decision bit 3");
PREV = (PREV << 1) | bit;
if (bit) {
- bit = jbig2_arith_decode(as, &IAx[PREV]);
+ bit = jbig2_arith_decode(ctx, as, &IAx[PREV]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx decision bit 4");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode IAx decision bit 4");
PREV = (PREV << 1) | bit;
if (bit) {
@@ -130,15 +123,18 @@ jbig2_arith_int_decode(Jbig2Ctx *ctx, Jbig2ArithIntCtx *actx, Jbig2ArithState *a
V = 0;
for (i = 0; i < n_tail; i++) {
- bit = jbig2_arith_decode(as, &IAx[PREV]);
+ bit = jbig2_arith_decode(ctx, as, &IAx[PREV]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx V bit %d", i);
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode IAx V bit %d", i);
PREV = ((PREV << 1) & 511) | (PREV & 256) | bit;
V = (V << 1) | bit;
}
- /* make sure not to underflow/overflow 32 bit value */
- if (V < INT32_MAX - 4436 || V > INT32_MIN + 4436)
+ /* offset is always >=0, so underflow can't happen. */
+ /* avoid overflow by clamping 32 bit value. */
+ if (V > INT32_MAX - offset)
+ V = INT32_MAX;
+ else
V += offset;
V = S ? -V : V;
*p_result = V;
diff --git a/jbig2dec/jbig2_arith_int.h b/jbig2dec/jbig2_arith_int.h
index 8d65dc95..1e310ae4 100644
--- a/jbig2dec/jbig2_arith_int.h
+++ b/jbig2dec/jbig2_arith_int.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_generic.c b/jbig2dec/jbig2_generic.c
index 32211aad..62b71022 100644
--- a/jbig2dec/jbig2_generic.c
+++ b/jbig2dec/jbig2_generic.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -42,10 +42,6 @@
#include "jbig2_page.h"
#include "jbig2_segment.h"
-#if !defined (UINT32_MAX)
-#define UINT32_MAX 0xffffffff
-#endif
-
/*
This is an explanation of the unoptimized and optimized generic
region decoder implementations below, wherein we try to explain
@@ -412,9 +408,9 @@ jbig2_decode_generic_template0(Jbig2Ctx *ctx,
for (x_minor = 0; x_minor < minor_width; x_minor++) {
int bit;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GB_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 optimized");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template0 optimized");
result |= bit << (7 - x_minor);
CONTEXT = ((CONTEXT & 0x7bf7) << 1) | bit | ((line_m1 >> (7 - x_minor)) & 0x10) | ((line_m2 >> (7 - x_minor)) & 0x800);
}
@@ -481,9 +477,9 @@ jbig2_decode_generic_template0_unopt(Jbig2Ctx *ctx,
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[4], y + params->gbat[5]) << 11;
CONTEXT |= (ppd>>2) & 0x7000; /* Next 3 pixels */
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[6], y + params->gbat[7]) << 15;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GB_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 unoptimized");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template0 unoptimized");
}
pd = pd<<1;
ppd = ppd<<1;
@@ -547,9 +543,9 @@ jbig2_decode_generic_template1_unopt(Jbig2Ctx *ctx,
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 3;
CONTEXT |= (pd>>9) & 0x01F0; /* Next 5 pixels */
CONTEXT |= (ppd>>4) & 0x1E00; /* Next 4 pixels */
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GB_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template1 unoptimized");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template1 unoptimized");
}
pd = pd<<1;
ppd = ppd<<1;
@@ -618,9 +614,9 @@ jbig2_decode_generic_template1(Jbig2Ctx *ctx,
for (x_minor = 0; x_minor < minor_width; x_minor++) {
int bit;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GB_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template1 optimized");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template1 optimized");
result |= bit << (7 - x_minor);
CONTEXT = ((CONTEXT & 0xefb) << 1) | bit | ((line_m1 >> (8 - x_minor)) & 0x8) | ((line_m2 >> (8 - x_minor)) & 0x200);
}
@@ -678,9 +674,9 @@ jbig2_decode_generic_template2_unopt(Jbig2Ctx *ctx,
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 2;
CONTEXT |= (pd>>11) & 0x078; /* Next 4 pixels */
CONTEXT |= (ppd>>7) & 0x380; /* Next 3 pixels */
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GB_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template2 unoptimized");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template2 unoptimized");
}
pd = pd<<1;
ppd = ppd<<1;
@@ -750,9 +746,9 @@ jbig2_decode_generic_template2(Jbig2Ctx *ctx,
for (x_minor = 0; x_minor < minor_width; x_minor++) {
int bit;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GB_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template2 optimized");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template2 optimized");
result |= bit << (7 - x_minor);
CONTEXT = ((CONTEXT & 0x1bd) << 1) | bit | ((line_m1 >> (10 - x_minor)) & 0x4) | ((line_m2 >> (10 - x_minor)) & 0x80);
}
@@ -809,9 +805,9 @@ jbig2_decode_generic_template3(Jbig2Ctx *ctx,
for (x_minor = 0; x_minor < minor_width; x_minor++) {
int bit;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GB_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template3 optimized");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template3 optimized");
result |= bit << (7 - x_minor);
CONTEXT = ((CONTEXT & 0x1f7) << 1) | bit | ((line_m1 >> (8 - x_minor)) & 0x10);
}
@@ -860,9 +856,9 @@ jbig2_decode_generic_template3_unopt(Jbig2Ctx *ctx,
CONTEXT = out_byte & 0x00F; /* First 4 pixels */
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 4;
CONTEXT |= (pd>>9) & 0x3E0; /* Next 5 pixels */
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GB_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template3 unoptimized");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template3 unoptimized");
}
pd = pd<<1;
out_byte = (out_byte<<1) | bit;
@@ -925,9 +921,9 @@ jbig2_decode_generic_template0_TPGDON(Jbig2Ctx *ctx,
params->gbat[6] == -2 && params->gbat[7] == -2)
{
for (y = 0; y < GBH; y++) {
- int bit = jbig2_arith_decode(as, &GB_stats[0x9B25]);
+ int bit = jbig2_arith_decode(ctx, as, &GB_stats[0x9B25]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 TPGDON1");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template0 TPGDON1");
LTP ^= bit;
if (!LTP) {
uint32_t out_byte = 0;
@@ -954,9 +950,9 @@ jbig2_decode_generic_template0_TPGDON(Jbig2Ctx *ctx,
CONTEXT = out_byte & 0x00F; /* First 4 pixels */
CONTEXT |= (pd>>8) & 0x7F0; /* Next 7 pixels */
CONTEXT |= (ppd>>2) & 0xF800; /* Final 5 pixels */
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GB_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 TPGDON2");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template0 TPGDON2");
}
pd = pd<<1;
ppd = ppd<<1;
@@ -1023,9 +1019,9 @@ jbig2_decode_generic_template0_TPGDON(Jbig2Ctx *ctx,
/* So 0 <= y < top needs bounds checking. */
for (y = 0; y < GBH; y++) {
- int bit = jbig2_arith_decode(as, &GB_stats[0x9B25]);
+ int bit = jbig2_arith_decode(ctx, as, &GB_stats[0x9B25]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 TPGDON1");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template0 TPGDON1");
LTP ^= bit;
if (!LTP) {
uint32_t out_byte = 0;
@@ -1066,9 +1062,9 @@ jbig2_decode_generic_template0_TPGDON(Jbig2Ctx *ctx,
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[4], y + params->gbat[5]) << 11;
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[6], y + params->gbat[7]) << 15;
}
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GB_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 TPGDON2");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template0 TPGDON2");
}
pd = pd<<1;
ppd = ppd<<1;
@@ -1111,9 +1107,9 @@ jbig2_decode_generic_template1_TPGDON(Jbig2Ctx *ctx,
"adaptive template pixel is out of field");
for (y = 0; y < GBH; y++) {
- int bit = jbig2_arith_decode(as, &GB_stats[0x0795]);
+ int bit = jbig2_arith_decode(ctx, as, &GB_stats[0x0795]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template1 TPGDON1");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template1 TPGDON1");
LTP ^= bit;
if (!LTP) {
uint32_t out_byte = 0;
@@ -1141,9 +1137,9 @@ jbig2_decode_generic_template1_TPGDON(Jbig2Ctx *ctx,
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 3;
CONTEXT |= (pd>>9) & 0x01F0; /* next 5 pixels */
CONTEXT |= (ppd>>4) & 0x1E00; /* next 4 pixels */
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GB_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template1 TPGDON2");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template1 TPGDON2");
}
pd = pd<<1;
ppd = ppd<<1;
@@ -1186,9 +1182,9 @@ jbig2_decode_generic_template2_TPGDON(Jbig2Ctx *ctx,
"adaptive template pixel is out of field");
for (y = 0; y < GBH; y++) {
- int bit = jbig2_arith_decode(as, &GB_stats[0xE5]);
+ int bit = jbig2_arith_decode(ctx, as, &GB_stats[0xE5]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template2 TPGDON1");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template2 TPGDON1");
LTP ^= bit;
if (!LTP) {
uint32_t out_byte = 0;
@@ -1216,9 +1212,9 @@ jbig2_decode_generic_template2_TPGDON(Jbig2Ctx *ctx,
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 2;
CONTEXT |= (pd>>11) & 0x078; /* next 4 pixels */
CONTEXT |= (ppd>>7) & 0x380; /* next 3 pixels */
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GB_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template2 TPGDON2");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template2 TPGDON2");
}
pd = pd<<1;
ppd = ppd<<1;
@@ -1261,9 +1257,9 @@ jbig2_decode_generic_template3_TPGDON(Jbig2Ctx *ctx,
"adaptive template pixel is out of field");
for (y = 0; y < GBH; y++) {
- int bit = jbig2_arith_decode(as, &GB_stats[0x0195]);
+ int bit = jbig2_arith_decode(ctx, as, &GB_stats[0x0195]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template3 TPGDON1");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template3 TPGDON1");
LTP ^= bit;
if (!LTP) {
uint32_t out_byte = 0;
@@ -1283,9 +1279,9 @@ jbig2_decode_generic_template3_TPGDON(Jbig2Ctx *ctx,
CONTEXT = out_byte & 0x0F; /* First 4 pixels */
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 4;
CONTEXT |= (pd>>9) & 0x3E0; /* next 5 pixels */
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GB_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template3 TPGDON2");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling generic template3 TPGDON2");
}
pd = pd<<1;
out_byte = (out_byte<<1) | bit;
@@ -1350,11 +1346,6 @@ jbig2_decode_generic_region(Jbig2Ctx *ctx,
{
const int8_t *gbat = params->gbat;
- if (image->stride * image->height > (1 << 26) && segment->data_length < image->stride * image->height / (1 << 16)) {
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number,
- "region is far larger than data provided (%li << %d), aborting to prevent DOS", (long) segment->data_length, image->stride * image->height);
- }
-
if (!params->MMR && params->TPGDON)
return jbig2_decode_generic_region_TPGDON(ctx, segment, params, as, image, GB_stats);
diff --git a/jbig2dec/jbig2_generic.h b/jbig2dec/jbig2_generic.h
index 39f4d3a2..6818d26a 100644
--- a/jbig2dec/jbig2_generic.h
+++ b/jbig2dec/jbig2_generic.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_halftone.c b/jbig2dec/jbig2_halftone.c
index e67c6d18..9c275f29 100644
--- a/jbig2dec/jbig2_halftone.c
+++ b/jbig2dec/jbig2_halftone.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -47,12 +47,11 @@ jbig2_hd_new(Jbig2Ctx *ctx, const Jbig2PatternDictParams *params, Jbig2Image *im
const uint32_t HPW = params->HDPW;
const uint32_t HPH = params->HDPH;
int code;
- uint32_t i;
- int j;
+ uint32_t i, j;
if (N == 0) {
/* We've wrapped. */
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "params->GRAYMAX out of range");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "params->GRAYMAX out of range");
return NULL;
}
@@ -61,7 +60,7 @@ jbig2_hd_new(Jbig2Ctx *ctx, const Jbig2PatternDictParams *params, Jbig2Image *im
if (new != NULL) {
new->patterns = jbig2_new(ctx, Jbig2Image *, N);
if (new->patterns == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate pattern in collective bitmap dictionary");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate pattern in collective bitmap dictionary");
jbig2_free(ctx->allocator, new);
return NULL;
}
@@ -73,7 +72,7 @@ jbig2_hd_new(Jbig2Ctx *ctx, const Jbig2PatternDictParams *params, Jbig2Image *im
for (i = 0; i < N; i++) {
new->patterns[i] = jbig2_image_new(ctx, HPW, HPH);
if (new->patterns[i] == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "failed to allocate pattern element image");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate pattern element image");
for (j = 0; j < i; j++)
jbig2_free(ctx->allocator, new->patterns[j]);
jbig2_free(ctx->allocator, new);
@@ -84,7 +83,7 @@ jbig2_hd_new(Jbig2Ctx *ctx, const Jbig2PatternDictParams *params, Jbig2Image *im
proper sub image */
code = jbig2_image_compose(ctx, new->patterns[i], image, -i * (int32_t) HPW, 0, JBIG2_COMPOSE_REPLACE);
if (code < 0) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "failed to compose image into collective bitmap dictionary");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to compose image into collective bitmap dictionary");
for (j = 0; j < i; j++)
jbig2_free(ctx->allocator, new->patterns[j]);
jbig2_free(ctx->allocator, new);
@@ -92,7 +91,7 @@ jbig2_hd_new(Jbig2Ctx *ctx, const Jbig2PatternDictParams *params, Jbig2Image *im
}
}
} else {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate collective bitmap dictionary");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate collective bitmap dictionary");
}
return new;
@@ -464,8 +463,7 @@ jbig2_decode_halftone_region(Jbig2Ctx *ctx, Jbig2Segment *segment,
Jbig2Image *HSKIP = NULL;
Jbig2PatternDict *HPATS;
uint32_t i;
- int32_t mg, ng;
- int32_t x, y;
+ uint32_t mg, ng;
uint16_t gray_val;
int code = 0;
@@ -487,10 +485,10 @@ jbig2_decode_halftone_region(Jbig2Ctx *ctx, Jbig2Segment *segment,
for (mg = 0; mg < params->HGH; ++mg) {
for (ng = 0; ng < params->HGW; ++ng) {
- x = (params->HGX + mg * params->HRY + ng * params->HRX) >> 8;
- y = (params->HGY + mg * params->HRX - ng * params->HRY) >> 8;
+ int64_t x = ((int64_t) params->HGX + mg * params->HRY + ng * params->HRX) >> 8;
+ int64_t y = ((int64_t) params->HGY + mg * params->HRX - ng * params->HRY) >> 8;
- if (x + HPATS->HPW <= 0 || x >= (int32_t) image->width || y + HPATS->HPH <= 0 || y >= (int32_t) image->height) {
+ if (x + HPATS->HPW <= 0 || x >= image->width || y + HPATS->HPH <= 0 || y >= image->height) {
jbig2_image_set_pixel(HSKIP, ng, mg, 1);
} else {
jbig2_image_set_pixel(HSKIP, ng, mg, 0);
@@ -519,8 +517,8 @@ jbig2_decode_halftone_region(Jbig2Ctx *ctx, Jbig2Segment *segment,
/* 6.6.5 point 5. place patterns with procedure mentioned in 6.6.5.2 */
for (mg = 0; mg < params->HGH; ++mg) {
for (ng = 0; ng < params->HGW; ++ng) {
- x = (params->HGX + mg * (int32_t) params->HRY + ng * (int32_t) params->HRX) >> 8;
- y = (params->HGY + mg * (int32_t) params->HRX - ng * (int32_t) params->HRY) >> 8;
+ int64_t x = ((int64_t) params->HGX + mg * params->HRY + ng * params->HRX) >> 8;
+ int64_t y = ((int64_t) params->HGY + mg * params->HRX - ng * params->HRY) >> 8;
/* prevent pattern index >= HNUMPATS */
gray_val = GI[ng][mg];
diff --git a/jbig2dec/jbig2_halftone.h b/jbig2dec/jbig2_halftone.h
index 22bf666c..fdeb0949 100644
--- a/jbig2dec/jbig2_halftone.h
+++ b/jbig2dec/jbig2_halftone.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -23,7 +23,7 @@
typedef struct {
int n_patterns;
Jbig2Image **patterns;
- int HPW, HPH;
+ uint32_t HPW, HPH;
} Jbig2PatternDict;
/* Table 24 */
diff --git a/jbig2dec/jbig2_huffman.c b/jbig2dec/jbig2_huffman.c
index a3bc001a..00c8532f 100644
--- a/jbig2dec/jbig2_huffman.c
+++ b/jbig2dec/jbig2_huffman.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -58,7 +58,7 @@ struct _Jbig2HuffmanState {
};
#define huff_get_next_word(hs, offset, word) \
- (hs)->ws->get_next_word((hs)->ws, (offset), (word))
+ (hs)->ws->get_next_word((hs)->ctx, (hs)->ws, (offset), (word))
/** Allocate and initialize a new huffman coding state
* the returned pointer can simply be freed; this does
@@ -80,18 +80,18 @@ jbig2_huffman_new(Jbig2Ctx *ctx, Jbig2WordStream *ws)
result->ctx = ctx;
code = huff_get_next_word(result, 0, &result->this_word);
if (code < 0) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed read first huffman word");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to read first huffman word");
jbig2_huffman_free(ctx, result);
return NULL;
}
code = huff_get_next_word(result, 4, &result->next_word);
if (code < 0) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed read second huffman word");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to read second huffman word");
jbig2_huffman_free(ctx, result);
return NULL;
}
} else {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate new huffman coding state");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate new huffman coding state");
return NULL;
}
@@ -178,7 +178,7 @@ jbig2_dump_huffman_table(const Jbig2HuffmanTable *table)
int
jbig2_huffman_skip(Jbig2HuffmanState *hs)
{
- int bits = hs->offset_bits & 7;
+ uint32_t bits = hs->offset_bits & 7;
int code;
if (bits) {
@@ -192,7 +192,7 @@ jbig2_huffman_skip(Jbig2HuffmanState *hs)
hs->offset += 4;
code = huff_get_next_word(hs, hs->offset + 4, &hs->next_word);
if (code < 0) {
- return jbig2_error(hs->ctx, JBIG2_SEVERITY_WARNING, -1, "failed to read next huffman word when skipping");
+ return jbig2_error(hs->ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to read next huffman word when skipping");
}
hs->offset_bits -= 32;
if (hs->offset_bits) {
@@ -216,11 +216,11 @@ jbig2_huffman_advance(Jbig2HuffmanState *hs, size_t advance)
}
code = huff_get_next_word(hs, hs->offset, &hs->this_word);
if (code < 0) {
- return jbig2_error(hs->ctx, JBIG2_SEVERITY_WARNING, -1, "failed to get first huffman word after advancing");
+ return jbig2_error(hs->ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to get first huffman word after advancing");
}
code = huff_get_next_word(hs, hs->offset + 4, &hs->next_word);
if (code < 0) {
- return jbig2_error(hs->ctx, JBIG2_SEVERITY_WARNING, -1, "failed to get second huffman word after advancing");
+ return jbig2_error(hs->ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to get second huffman word after advancing");
}
if (hs->offset_bits > 0)
hs->this_word = (hs->this_word << hs->offset_bits) | (hs->next_word >> (32 - hs->offset_bits));
@@ -248,7 +248,7 @@ jbig2_huffman_get_bits(Jbig2HuffmanState *hs, const int bits, int *err)
if (hs->offset_limit && hs->offset >= hs->offset_limit) {
*err = -1;
- return jbig2_error(hs->ctx, JBIG2_SEVERITY_FATAL, -1, "end of jbig2 buffer reached at offset %d", hs->offset);
+ return jbig2_error(hs->ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "end of jbig2 buffer reached at offset %d", hs->offset);
}
result = this_word >> (32 - bits);
@@ -259,7 +259,7 @@ jbig2_huffman_get_bits(Jbig2HuffmanState *hs, const int bits, int *err)
hs->this_word = hs->next_word;
code = huff_get_next_word(hs, hs->offset + 4, &hs->next_word);
if (code < 0) {
- return jbig2_error(hs->ctx, JBIG2_SEVERITY_WARNING, -1, "failed to get next huffman word");
+ return jbig2_error(hs->ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to get next huffman word");
}
if (hs->offset_bits) {
hs->this_word = (hs->this_word << hs->offset_bits) | (hs->next_word >> (32 - hs->offset_bits));
@@ -287,7 +287,7 @@ jbig2_huffman_get(Jbig2HuffmanState *hs, const Jbig2HuffmanTable *table, bool *o
if (hs->offset_limit && hs->offset >= hs->offset_limit) {
if (oob)
*oob = -1;
- return jbig2_error(hs->ctx, JBIG2_SEVERITY_FATAL, -1, "end of Jbig2WordStream reached at offset %d", hs->offset);
+ return jbig2_error(hs->ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "end of Jbig2WordStream reached at offset %d", hs->offset);
}
for (;;) {
@@ -302,7 +302,7 @@ jbig2_huffman_get(Jbig2HuffmanState *hs, const Jbig2HuffmanTable *table, bool *o
if (flags == (byte) -1 || PREFLEN == (byte) -1) {
if (oob)
*oob = -1;
- return jbig2_error(hs->ctx, JBIG2_SEVERITY_FATAL, -1, "encountered unpopulated huffman table entry");
+ return jbig2_error(hs->ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "encountered unpopulated huffman table entry");
}
next_word = hs->next_word;
@@ -312,7 +312,7 @@ jbig2_huffman_get(Jbig2HuffmanState *hs, const Jbig2HuffmanTable *table, bool *o
hs->offset += 4;
code = huff_get_next_word(hs, hs->offset + 4, &next_word);
if (code < 0) {
- return jbig2_error(hs->ctx, JBIG2_SEVERITY_WARNING, -1, "failed to get next huffman word");
+ return jbig2_error(hs->ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to get next huffman word");
}
offset_bits -= 32;
hs->next_word = next_word;
@@ -343,7 +343,7 @@ jbig2_huffman_get(Jbig2HuffmanState *hs, const Jbig2HuffmanTable *table, bool *o
hs->offset += 4;
code = huff_get_next_word(hs, hs->offset + 4, &next_word);
if (code < 0) {
- return jbig2_error(hs->ctx, JBIG2_SEVERITY_WARNING, -1, "failed to get next huffman word");
+ return jbig2_error(hs->ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to get next huffman word");
}
offset_bits -= 32;
hs->next_word = next_word;
@@ -391,7 +391,7 @@ jbig2_build_huffman_table(Jbig2Ctx *ctx, const Jbig2HuffmanParams *params)
LENCOUNT = jbig2_new(ctx, int, lencountcount);
if (LENCOUNT == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate huffman histogram");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate huffman histogram");
return NULL;
}
memset(LENCOUNT, 0, sizeof(int) * lencountcount);
@@ -414,19 +414,19 @@ jbig2_build_huffman_table(Jbig2Ctx *ctx, const Jbig2HuffmanParams *params)
if (lts <= LOG_TABLE_SIZE_MAX && log_table_size < lts)
log_table_size = lts;
}
- jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, "constructing huffman table log size %d", log_table_size);
+ jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, JBIG2_UNKNOWN_SEGMENT_NUMBER, "constructing huffman table log size %d", log_table_size);
max_j = 1 << log_table_size;
result = jbig2_new(ctx, Jbig2HuffmanTable, 1);
if (result == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate result");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate result");
jbig2_free(ctx->allocator, LENCOUNT);
return NULL;
}
result->log_table_size = log_table_size;
entries = jbig2_new(ctx, Jbig2HuffmanEntry, max_j);
if (entries == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate result entries");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate result entries");
jbig2_free(ctx->allocator, result);
jbig2_free(ctx->allocator, LENCOUNT);
return NULL;
@@ -455,7 +455,7 @@ jbig2_build_huffman_table(Jbig2Ctx *ctx, const Jbig2HuffmanParams *params)
byte eflags = 0;
if (end_j > max_j) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "ran off the end of the entries table! (%d >= %d)", end_j, max_j);
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "ran off the end of the entries table! (%d >= %d)", end_j, max_j);
jbig2_free(ctx->allocator, result->entries);
jbig2_free(ctx->allocator, result);
jbig2_free(ctx->allocator, LENCOUNT);
@@ -718,7 +718,7 @@ static const byte test_stream[] = { 0xe9, 0xcb, 0xf4, 0x00 };
static const byte test_tabindex[] = { 4, 2, 2, 1 };
static int
-test_get_word1(Jbig2WordStream *self, size_t offset, uint32_t *word)
+test_get_word1(Jbig2Ctx *ctx, Jbig2WordStream *self, size_t offset, uint32_t *word)
{
uint32_t val = 0;
int ret = 0;
@@ -2029,7 +2029,7 @@ typedef struct test_stream {
} test_stream_t;
static int
-test_get_word2(Jbig2WordStream *self, size_t offset, uint32_t *word)
+test_get_word2(Jbig2Ctx *ctx, Jbig2WordStream *self, size_t offset, uint32_t *word)
{
test_stream_t *st = (test_stream_t *) self;
uint32_t val = 0;
@@ -2072,13 +2072,13 @@ static int test2()
return 0;
}
- for (i = 0; i < countof(tests); i++) {
+ for (i = 0; i < (int) countof(tests); i++) {
Jbig2HuffmanTable *table;
Jbig2HuffmanState *hs;
test_stream_t st;
int32_t code;
bool oob;
- int j;
+ size_t j;
st.ws.get_next_word = test_get_word2;
st.h = &tests[i];
diff --git a/jbig2dec/jbig2_huffman.h b/jbig2dec/jbig2_huffman.h
index 39c50246..99cd5920 100644
--- a/jbig2dec/jbig2_huffman.h
+++ b/jbig2dec/jbig2_huffman.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_hufftab.c b/jbig2dec/jbig2_hufftab.c
index 80b9bf26..792b2849 100644
--- a/jbig2dec/jbig2_hufftab.c
+++ b/jbig2dec/jbig2_hufftab.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_hufftab.h b/jbig2dec/jbig2_hufftab.h
index 68d1b619..882f6a12 100644
--- a/jbig2dec/jbig2_hufftab.h
+++ b/jbig2dec/jbig2_hufftab.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_image.c b/jbig2dec/jbig2_image.c
index 70c985a9..2cb1e14a 100644
--- a/jbig2dec/jbig2_image.c
+++ b/jbig2dec/jbig2_image.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -30,13 +30,6 @@
#include "jbig2_priv.h"
#include "jbig2_image.h"
-#if !defined (INT32_MAX)
-#define INT32_MAX 0x7fffffff
-#endif
-#if !defined (UINT32_MAX)
-#define UINT32_MAX 0xffffffffu
-#endif
-
/* allocate a Jbig2Image structure and its associated bitmap */
Jbig2Image *
jbig2_image_new(Jbig2Ctx *ctx, uint32_t width, uint32_t height)
@@ -45,13 +38,13 @@ jbig2_image_new(Jbig2Ctx *ctx, uint32_t width, uint32_t height)
uint32_t stride;
if (width == 0 || height == 0) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to create zero sized image");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to create zero sized image");
return NULL;
}
image = jbig2_new(ctx, Jbig2Image, 1);
if (image == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate image");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate image");
return NULL;
}
@@ -59,13 +52,13 @@ jbig2_image_new(Jbig2Ctx *ctx, uint32_t width, uint32_t height)
/* check for integer multiplication overflow */
if (height > (INT32_MAX / stride)) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "integer multiplication overflow (stride=%u, height=%u)", stride, height);
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "integer multiplication overflow (stride=%u, height=%u)", stride, height);
jbig2_free(ctx->allocator, image);
return NULL;
}
image->data = jbig2_new(ctx, uint8_t, (size_t) height * stride);
if (image->data == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate image data buffer (stride=%u, height=%u)", stride, height);
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate image data buffer (stride=%u, height=%u)", stride, height);
jbig2_free(ctx->allocator, image);
return NULL;
}
@@ -117,13 +110,13 @@ jbig2_image_resize(Jbig2Ctx *ctx, Jbig2Image *image, uint32_t width, uint32_t he
/* check for integer multiplication overflow */
if (image->height > (INT32_MAX / image->stride)) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "integer multiplication overflow during resize (stride=%u, height=%u)", image->stride, height);
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "integer multiplication overflow during resize (stride=%u, height=%u)", image->stride, height);
return NULL;
}
/* use the same stride, just change the length */
data = jbig2_renew(ctx, image->data, uint8_t, (size_t) height * image->stride);
if (data == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to reallocate image");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to reallocate image");
return NULL;
}
image->data = data;
@@ -141,14 +134,14 @@ jbig2_image_resize(Jbig2Ctx *ctx, Jbig2Image *image, uint32_t width, uint32_t he
newimage = jbig2_image_new(ctx, width, height);
if (newimage == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "failed to allocate resized image");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate resized image");
return NULL;
}
jbig2_image_clear(ctx, newimage, value);
code = jbig2_image_compose(ctx, newimage, image, 0, 0, JBIG2_COMPOSE_REPLACE);
if (code < 0) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "failed to compose image buffers when resizing");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to compose image buffers when resizing");
jbig2_image_release(ctx, newimage);
return NULL;
}
@@ -358,7 +351,7 @@ jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int
(UINT32_MAX - src->height < (y > 0 ? y : -y)))
{
#ifdef JBIG2_DEBUG
- jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, "overflow in compose_image");
+ jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, JBIG2_UNKNOWN_SEGMENT_NUMBER, "overflow in compose_image");
#endif
return 0;
}
@@ -418,13 +411,13 @@ jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int
h = dst->height - y;
}
#ifdef JBIG2_DEBUG
- jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, "compositing %dx%d at (%d, %d) after clipping", w, h, x, y);
+ jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, JBIG2_UNKNOWN_SEGMENT_NUMBER, "compositing %dx%d at (%d, %d) after clipping", w, h, x, y);
#endif
/* check for zero clipping region */
if ((w <= 0) || (h <= 0)) {
#ifdef JBIG2_DEBUG
- jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, "zero clipping region");
+ jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, JBIG2_UNKNOWN_SEGMENT_NUMBER, "zero clipping region");
#endif
return 0;
}
diff --git a/jbig2dec/jbig2_image.h b/jbig2dec/jbig2_image.h
index 5074bce3..4de9a813 100644
--- a/jbig2dec/jbig2_image.h
+++ b/jbig2dec/jbig2_image.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_image_pbm.c b/jbig2dec/jbig2_image_pbm.c
index 41ea2bc2..e6170bae 100644
--- a/jbig2dec/jbig2_image_pbm.c
+++ b/jbig2dec/jbig2_image_pbm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_image_png.c b/jbig2dec/jbig2_image_png.c
index 134b7f12..81c6b95a 100644
--- a/jbig2dec/jbig2_image_png.c
+++ b/jbig2dec/jbig2_image_png.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_image_rw.h b/jbig2dec/jbig2_image_rw.h
index 63b30097..67630dfe 100644
--- a/jbig2dec/jbig2_image_rw.h
+++ b/jbig2dec/jbig2_image_rw.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_mmr.c b/jbig2dec/jbig2_mmr.c
index dcb36753..578754c9 100644
--- a/jbig2dec/jbig2_mmr.c
+++ b/jbig2dec/jbig2_mmr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -40,15 +40,12 @@
#include "jbig2_mmr.h"
#include "jbig2_segment.h"
-#if !defined (UINT32_MAX)
-#define UINT32_MAX 0xffffffff
-#endif
-
typedef struct {
uint32_t width;
uint32_t height;
const byte *data;
size_t size;
+ size_t consumed_bits;
uint32_t data_index;
uint32_t bit_index;
uint32_t word;
@@ -62,30 +59,34 @@ typedef struct {
static void
jbig2_decode_mmr_init(Jbig2MmrCtx *mmr, int width, int height, const byte *data, size_t size)
{
- size_t i;
- uint32_t word = 0;
-
mmr->width = width;
mmr->height = height;
mmr->data = data;
mmr->size = size;
mmr->data_index = 0;
- mmr->bit_index = 0;
+ mmr->bit_index = 32;
+ mmr->word = 0;
+ mmr->consumed_bits = 0;
- for (i = 0; i < size && i < 4; i++)
- word |= (data[i] << ((3 - i) << 3));
- mmr->word = word;
+ while (mmr->bit_index >= 8 && mmr->data_index < mmr->size) {
+ mmr->bit_index -= 8;
+ mmr->word |= (mmr->data[mmr->data_index] << mmr->bit_index);
+ mmr->data_index++;
+ }
}
static void
jbig2_decode_mmr_consume(Jbig2MmrCtx *mmr, int n_bits)
{
+ mmr->consumed_bits += n_bits;
+ if (mmr->consumed_bits > mmr->size * 8)
+ mmr->consumed_bits = mmr->size * 8;
+
mmr->word <<= n_bits;
mmr->bit_index += n_bits;
- while (mmr->bit_index >= 8) {
+ while (mmr->bit_index >= 8 && mmr->data_index < mmr->size) {
mmr->bit_index -= 8;
- if (mmr->data_index + 4 < mmr->size)
- mmr->word |= (mmr->data[mmr->data_index + 4] << mmr->bit_index);
+ mmr->word |= (mmr->data[mmr->data_index] << mmr->bit_index);
mmr->data_index++;
}
}
@@ -955,11 +956,11 @@ jbig2_decode_get_run(Jbig2Ctx *ctx, Jbig2MmrCtx *mmr, const mmr_table_node *tabl
do {
val = jbig2_decode_get_code(mmr, table, initial_bits);
if (val == ERROR)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "invalid code detected in MMR-coded data");
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "invalid code detected in MMR-coded data");
else if (val == UNCOMPRESSED)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "uncompressed code in MMR-coded data");
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "uncompressed code in MMR-coded data");
else if (val == ZEROES)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "zeroes code in MMR-coded data");
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "zeroes code in MMR-coded data");
result += val;
} while (val >= 64);
@@ -992,10 +993,10 @@ jbig2_decode_mmr_line(Jbig2Ctx *ctx, Jbig2MmrCtx *mmr, const byte *ref, byte *ds
if (c == 0) {
white_run = jbig2_decode_get_run(ctx, mmr, jbig2_mmr_white_decode, 8);
if (white_run < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "failed to decode white H run");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode white H run");
black_run = jbig2_decode_get_run(ctx, mmr, jbig2_mmr_black_decode, 7);
if (black_run < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "failed to decode black H run");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode black H run");
/* printf ("H %d %d\n", white_run, black_run); */
a1 = a0 + white_run;
a2 = a1 + black_run;
@@ -1004,7 +1005,7 @@ jbig2_decode_mmr_line(Jbig2Ctx *ctx, Jbig2MmrCtx *mmr, const byte *ref, byte *ds
if (a2 > mmr->width)
a2 = mmr->width;
if (a2 < a1) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "ignoring negative black H run");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "ignoring negative black H run");
a2 = a1;
}
if (a1 < mmr->width)
@@ -1013,10 +1014,10 @@ jbig2_decode_mmr_line(Jbig2Ctx *ctx, Jbig2MmrCtx *mmr, const byte *ref, byte *ds
} else {
black_run = jbig2_decode_get_run(ctx, mmr, jbig2_mmr_black_decode, 7);
if (black_run < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "failed to decode black H run");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode black H run");
white_run = jbig2_decode_get_run(ctx, mmr, jbig2_mmr_white_decode, 8);
if (white_run < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "failed to decode white H run");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode white H run");
/* printf ("H %d %d\n", black_run, white_run); */
a1 = a0 + black_run;
a2 = a1 + white_run;
@@ -1025,7 +1026,7 @@ jbig2_decode_mmr_line(Jbig2Ctx *ctx, Jbig2MmrCtx *mmr, const byte *ref, byte *ds
if (a2 > mmr->width)
a2 = mmr->width;
if (a1 < a0) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "ignoring negative white H run");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "ignoring negative white H run");
a1 = a0;
}
if (a0 < mmr->width)
@@ -1041,7 +1042,7 @@ jbig2_decode_mmr_line(Jbig2Ctx *ctx, Jbig2MmrCtx *mmr, const byte *ref, byte *ds
b2 = jbig2_find_changing_element(ref, b1, mmr->width);
if (c) {
if (b2 < a0) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "ignoring negative P run");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "ignoring negative P run");
b2 = a0;
}
if (a0 < mmr->width)
@@ -1056,7 +1057,7 @@ jbig2_decode_mmr_line(Jbig2Ctx *ctx, Jbig2MmrCtx *mmr, const byte *ref, byte *ds
b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c);
if (c) {
if (b1 < a0) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "ignoring negative V(0) run");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "ignoring negative V(0) run");
b1 = a0;
}
if (a0 < mmr->width)
@@ -1074,7 +1075,7 @@ jbig2_decode_mmr_line(Jbig2Ctx *ctx, Jbig2MmrCtx *mmr, const byte *ref, byte *ds
b1 += 1;
if (c) {
if (b1 < a0) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "ignoring negative VR(1) run");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "ignoring negative VR(1) run");
b1 = a0;
}
if (a0 < mmr->width)
@@ -1092,7 +1093,7 @@ jbig2_decode_mmr_line(Jbig2Ctx *ctx, Jbig2MmrCtx *mmr, const byte *ref, byte *ds
b1 += 2;
if (c) {
if (b1 < a0) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "ignoring negative VR(2) run");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "ignoring negative VR(2) run");
b1 = a0;
}
if (a0 < mmr->width)
@@ -1110,7 +1111,7 @@ jbig2_decode_mmr_line(Jbig2Ctx *ctx, Jbig2MmrCtx *mmr, const byte *ref, byte *ds
b1 += 3;
if (c) {
if (b1 < a0) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "ignoring negative VR(3) run");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "ignoring negative VR(3) run");
b1 = a0;
}
if (a0 < mmr->width)
@@ -1128,7 +1129,7 @@ jbig2_decode_mmr_line(Jbig2Ctx *ctx, Jbig2MmrCtx *mmr, const byte *ref, byte *ds
b1 -= 1;
if (c) {
if (b1 < a0) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "ignoring negative VL(1) run");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "ignoring negative VL(1) run");
b1 = a0;
}
if (a0 < mmr->width)
@@ -1146,7 +1147,7 @@ jbig2_decode_mmr_line(Jbig2Ctx *ctx, Jbig2MmrCtx *mmr, const byte *ref, byte *ds
b1 -= 2;
if (c) {
if (b1 < a0) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "ignoring negative VL(2) run");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "ignoring negative VL(2) run");
b1 = a0;
}
if (a0 < mmr->width)
@@ -1164,7 +1165,7 @@ jbig2_decode_mmr_line(Jbig2Ctx *ctx, Jbig2MmrCtx *mmr, const byte *ref, byte *ds
b1 -= 3;
if (c) {
if (b1 < a0) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "ignoring negative VL(3) run");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "ignoring negative VL(3) run");
b1 = a0;
}
if (a0 < mmr->width)
@@ -1249,7 +1250,7 @@ jbig2_decode_halftone_mmr(Jbig2Ctx *ctx, const Jbig2GenericRegionParams *params,
memset(dst, 0, rowstride);
code = jbig2_decode_mmr_line(ctx, &mmr, ref, dst, &eofb);
if (code < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "failed to decode halftone mmr line");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode halftone mmr line");
ref = dst;
dst += rowstride;
}
@@ -1263,6 +1264,6 @@ jbig2_decode_halftone_mmr(Jbig2Ctx *ctx, const Jbig2GenericRegionParams *params,
jbig2_decode_mmr_consume(&mmr, 24);
}
- *consumed_bytes += mmr.data_index + (mmr.bit_index >> 3) + (mmr.bit_index > 0 ? 1 : 0);
+ *consumed_bytes += (mmr.consumed_bits + 7) / 8;
return code;
}
diff --git a/jbig2dec/jbig2_mmr.h b/jbig2dec/jbig2_mmr.h
index f6317bf3..0bbe5999 100644
--- a/jbig2dec/jbig2_mmr.h
+++ b/jbig2dec/jbig2_mmr.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_page.c b/jbig2dec/jbig2_page.c
index 47445597..f318b8e5 100644
--- a/jbig2dec/jbig2_page.c
+++ b/jbig2dec/jbig2_page.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -34,13 +34,6 @@
#include "jbig2_page.h"
#include "jbig2_segment.h"
-#if !defined (INT32_MAX)
-#define INT32_MAX 0x7fffffff
-#endif
-#if !defined (UINT32_MAX)
-#define UINT32_MAX 0xffffffff
-#endif
-
/* dump the page struct info */
static void
dump_page_info(Jbig2Ctx *ctx, Jbig2Segment *segment, Jbig2Page *page)
@@ -79,13 +72,21 @@ jbig2_page_info(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_dat
/* find a free page */
{
- int index, j;
+ size_t index, j;
index = ctx->current_page;
while (ctx->pages[index].state != JBIG2_PAGE_FREE) {
index++;
if (index >= ctx->max_page_index) {
/* grow the list */
+
+ if (ctx->max_page_index == UINT32_MAX) {
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "too many pages in jbig2 image");
+ }
+ else if (ctx->max_page_index > (UINT32_MAX >> 2)) {
+ ctx->max_page_index = UINT32_MAX;
+ }
+
pages = jbig2_renew(ctx, ctx->pages, Jbig2Page, (ctx->max_page_index <<= 2));
if (pages == NULL) {
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to reallocate pages");
@@ -222,7 +223,7 @@ jbig2_complete_page(Jbig2Ctx *ctx)
/* ensure image exists before marking page as complete */
if (ctx->pages[ctx->current_page].image == NULL) {
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "page has no image, cannot be completed");
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "page has no image, cannot be completed");
}
ctx->pages[ctx->current_page].state = JBIG2_PAGE_COMPLETE;
@@ -270,27 +271,27 @@ jbig2_page_add_result(Jbig2Ctx *ctx, Jbig2Page *page, Jbig2Image *image, uint32_
int code;
if (x > INT32_MAX || y > INT32_MAX)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "unsupported image coordinates");
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "unsupported image coordinates");
/* ensure image exists first */
if (page->image == NULL)
- return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "page info possibly missing, no image defined");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "page info possibly missing, no image defined");
/* grow the page to accommodate a new stripe if necessary */
if (page->striped && page->height == 0xFFFFFFFF) {
uint32_t new_height;
if (y > UINT32_MAX - image->height)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "adding image at coordinate would grow page out of bounds");
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "adding image at coordinate would grow page out of bounds");
new_height = y + image->height;
if (page->image->height < new_height) {
Jbig2Image *resized_image = NULL;
- jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, "growing page buffer to %u rows to accommodate new stripe", new_height);
+ jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, JBIG2_UNKNOWN_SEGMENT_NUMBER, "growing page buffer to %u rows to accommodate new stripe", new_height);
resized_image = jbig2_image_resize(ctx, page->image, page->image->width, new_height, page->flags & 4);
if (resized_image == NULL) {
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "unable to resize image to accommodate new stripe");
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "unable to resize image to accommodate new stripe");
}
page->image = resized_image;
}
@@ -298,7 +299,7 @@ jbig2_page_add_result(Jbig2Ctx *ctx, Jbig2Page *page, Jbig2Image *image, uint32_
code = jbig2_image_compose(ctx, page->image, image, x, y, op);
if (code < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "failed to compose image with page");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to compose image with page");
return 0;
}
@@ -318,7 +319,7 @@ jbig2_page_add_result(Jbig2Ctx *ctx, Jbig2Page *page, Jbig2Image *image, uint32_
Jbig2Image *
jbig2_page_out(Jbig2Ctx *ctx)
{
- int index;
+ uint32_t index;
/* search for a completed page */
for (index = 0; index < ctx->max_page_index; index++) {
@@ -327,12 +328,12 @@ jbig2_page_out(Jbig2Ctx *ctx)
uint32_t page_number = ctx->pages[index].number;
if (img == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "page %d returned with no associated image", page_number);
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "page %d returned with no associated image", page_number);
continue;
}
ctx->pages[index].state = JBIG2_PAGE_RETURNED;
- jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, "page %d returned to the client", page_number);
+ jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, JBIG2_UNKNOWN_SEGMENT_NUMBER, "page %d returned to the client", page_number);
return jbig2_image_reference(ctx, img);
}
}
@@ -347,7 +348,7 @@ jbig2_page_out(Jbig2Ctx *ctx)
void
jbig2_release_page(Jbig2Ctx *ctx, Jbig2Image *image)
{
- int index;
+ uint32_t index;
if (image == NULL)
return;
@@ -357,11 +358,11 @@ jbig2_release_page(Jbig2Ctx *ctx, Jbig2Image *image)
if (ctx->pages[index].image == image) {
jbig2_image_release(ctx, image);
ctx->pages[index].state = JBIG2_PAGE_RELEASED;
- jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, "page %d released by the client", ctx->pages[index].number);
+ jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, JBIG2_UNKNOWN_SEGMENT_NUMBER, "page %d released by the client", ctx->pages[index].number);
return;
}
}
/* no matching pages */
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "failed to release unknown page");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to release unknown page");
}
diff --git a/jbig2dec/jbig2_page.h b/jbig2dec/jbig2_page.h
index a276285c..8d17fa59 100644
--- a/jbig2dec/jbig2_page.h
+++ b/jbig2dec/jbig2_page.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_priv.h b/jbig2dec/jbig2_priv.h
index cf117e6c..f8db24ee 100644
--- a/jbig2dec/jbig2_priv.h
+++ b/jbig2dec/jbig2_priv.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -55,6 +55,16 @@ typedef uint8_t byte;
#define NULL ((void*)0)
#endif
+#if !defined (INT32_MIN)
+#define INT32_MIN (-0x7fffffff - 1)
+#endif
+#if !defined (INT32_MAX)
+#define INT32_MAX 0x7fffffff
+#endif
+#if !defined (UINT32_MAX)
+#define UINT32_MAX 0xffffffffu
+#endif
+
typedef struct _Jbig2Page Jbig2Page;
typedef struct _Jbig2Segment Jbig2Segment;
@@ -76,23 +86,23 @@ struct _Jbig2Ctx {
byte *buf;
size_t buf_size;
- unsigned int buf_rd_ix;
- unsigned int buf_wr_ix;
+ size_t buf_rd_ix;
+ size_t buf_wr_ix;
Jbig2FileState state;
uint8_t file_header_flags;
uint32_t n_pages;
- int n_segments_max;
+ uint32_t n_segments_max;
Jbig2Segment **segments;
- int n_segments; /* index of last segment header parsed */
- int segment_index; /* index of last segment body parsed */
+ uint32_t n_segments; /* index of last segment header parsed */
+ uint32_t segment_index; /* index of last segment body parsed */
/* list of decoded pages, including the one in progress,
currently stored as a contiguous, 0-indexed array. */
- int current_page;
- int max_page_index;
+ uint32_t current_page;
+ uint32_t max_page_index;
Jbig2Page *pages;
};
@@ -115,7 +125,7 @@ void *jbig2_realloc(Jbig2Allocator *allocator, void *p, size_t size, size_t num)
#define jbig2_renew(ctx, p, t, size) ((t *)jbig2_realloc(ctx->allocator, (p), size, sizeof(t)))
-int jbig2_error(Jbig2Ctx *ctx, Jbig2Severity severity, int32_t seg_idx, const char *fmt, ...)
+int jbig2_error(Jbig2Ctx *ctx, Jbig2Severity severity, uint32_t seg_idx, const char *fmt, ...)
#ifdef __GNUC__
__attribute__ ((format (__printf__, 4, 5)))
#endif
@@ -129,7 +139,7 @@ int jbig2_error(Jbig2Ctx *ctx, Jbig2Severity severity, int32_t seg_idx, const ch
typedef struct _Jbig2WordStream Jbig2WordStream;
struct _Jbig2WordStream {
- int (*get_next_word)(Jbig2WordStream *self, size_t offset, uint32_t *word);
+ int (*get_next_word)(Jbig2Ctx *ctx, Jbig2WordStream *self, size_t offset, uint32_t *word);
};
Jbig2WordStream *jbig2_word_stream_buf_new(Jbig2Ctx *ctx, const byte *data, size_t size);
diff --git a/jbig2dec/jbig2_refinement.c b/jbig2dec/jbig2_refinement.c
index 7c391b03..992832ff 100644
--- a/jbig2dec/jbig2_refinement.c
+++ b/jbig2dec/jbig2_refinement.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -80,9 +80,9 @@ jbig2_decode_refinement_template0_unopt(Jbig2Ctx *ctx,
CONTEXT |= jbig2_image_get_pixel(ref, x - dx + 1, y - dy - 1) << 10;
CONTEXT |= jbig2_image_get_pixel(ref, x - dx + 0, y - dy - 1) << 11;
CONTEXT |= jbig2_image_get_pixel(ref, x - dx + params->grat[2], y - dy + params->grat[3]) << 12;
- bit = jbig2_arith_decode(as, &GR_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GR_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling refinement template0");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling refinement template0");
jbig2_image_set_pixel(image, x, y, bit);
}
}
@@ -134,9 +134,9 @@ jbig2_decode_refinement_template1_unopt(Jbig2Ctx *ctx,
CONTEXT |= jbig2_image_get_pixel(ref, x - dx + 0, y - dy + 0) << 7;
CONTEXT |= jbig2_image_get_pixel(ref, x - dx - 1, y - dy + 0) << 8;
CONTEXT |= jbig2_image_get_pixel(ref, x - dx + 0, y - dy - 1) << 9;
- bit = jbig2_arith_decode(as, &GR_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GR_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling refinement template0");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling refinement template0");
jbig2_image_set_pixel(image, x, y, bit);
}
}
@@ -211,9 +211,9 @@ jbig2_decode_refinement_template1(Jbig2Ctx *ctx,
for (x_minor = 0; x_minor < minor_width; x_minor++) {
int bit;
- bit = jbig2_arith_decode(as, &GR_stats[CONTEXT]);
+ bit = jbig2_arith_decode(ctx, as, &GR_stats[CONTEXT]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling refinement template1");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode arithmetic code when handling refinement template1");
result |= bit << (7 - x_minor);
CONTEXT = ((CONTEXT & 0x0d6) << 1) | bit |
((line_m1 >> (9 - x_minor)) & 0x002) |
@@ -312,28 +312,28 @@ jbig2_decode_refinement_TPGRON(Jbig2Ctx *ctx, const Jbig2RefinementRegionParams
if (params->GRTEMPLATE == 0 &&
(pixel_outside_field(params->grat[0], params->grat[1]) ||
refpixel_outside_field(params->grat[2], params->grat[3])))
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1,
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER,
"adaptive template pixel is out of field");
for (y = 0; y < GRH; y++) {
- int bit = jbig2_arith_decode(as, &GR_stats[start_context]);
+ int bit = jbig2_arith_decode(ctx, as, &GR_stats[start_context]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode arithmetic code when handling refinement TPGRON1");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode arithmetic code when handling refinement TPGRON1");
LTP ^= bit;
if (!LTP) {
for (x = 0; x < GRW; x++) {
- bit = jbig2_arith_decode(as, &GR_stats[mkctx(params, image, x, y)]);
+ bit = jbig2_arith_decode(ctx, as, &GR_stats[mkctx(params, image, x, y)]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode arithmetic code when handling refinement TPGRON1");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode arithmetic code when handling refinement TPGRON1");
jbig2_image_set_pixel(image, x, y, bit);
}
} else {
for (x = 0; x < GRW; x++) {
iv = implicit_value(params, image, x, y);
if (iv < 0) {
- int bit = jbig2_arith_decode(as, &GR_stats[mkctx(params, image, x, y)]);
+ int bit = jbig2_arith_decode(ctx, as, &GR_stats[mkctx(params, image, x, y)]);
if (bit < 0)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode arithmetic code when handling refinement TPGRON1");
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to decode arithmetic code when handling refinement TPGRON1");
jbig2_image_set_pixel(image, x, y, bit);
} else
jbig2_image_set_pixel(image, x, y, iv);
diff --git a/jbig2dec/jbig2_refinement.h b/jbig2dec/jbig2_refinement.h
index 49280c62..6fd584ba 100644
--- a/jbig2dec/jbig2_refinement.h
+++ b/jbig2dec/jbig2_refinement.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_segment.c b/jbig2dec/jbig2_segment.c
index 2b561969..a5de7088 100644
--- a/jbig2dec/jbig2_segment.c
+++ b/jbig2dec/jbig2_segment.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -39,10 +39,6 @@
#include "jbig2_symbol_dict.h"
#include "jbig2_text.h"
-#if !defined (UINT32_MAX)
-#define UINT32_MAX 0xffffffff
-#endif
-
Jbig2Segment *
jbig2_parse_segment_header(Jbig2Ctx *ctx, uint8_t *buf, size_t buf_size, size_t *p_header_size)
{
@@ -61,12 +57,17 @@ jbig2_parse_segment_header(Jbig2Ctx *ctx, uint8_t *buf, size_t buf_size, size_t
result = jbig2_new(ctx, Jbig2Segment, 1);
if (result == NULL) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate segment");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate segment");
return NULL;
}
/* 7.2.2 */
result->number = jbig2_get_uint32(buf);
+ if (result->number == JBIG2_UNKNOWN_SEGMENT_NUMBER) {
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "segment number too large");
+ jbig2_free(ctx->allocator, result);
+ return NULL;
+ }
/* 7.2.3 */
result->flags = buf[4];
@@ -87,7 +88,7 @@ jbig2_parse_segment_header(Jbig2Ctx *ctx, uint8_t *buf, size_t buf_size, size_t
referred_to_segment_size = result->number <= 256 ? 1 : result->number <= 65536 ? 2 : 4; /* 7.2.5 */
pa_size = result->flags & 0x40 ? 4 : 1; /* 7.2.6 */
if (offset + referred_to_segment_count * referred_to_segment_size + pa_size + 4 > buf_size) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, result->number, "insufficient data to parse segment header");
+ jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, result->number, "attempted to parse segment header with insufficient data, asking for more data");
jbig2_free(ctx->allocator, result);
return NULL;
}
@@ -99,6 +100,7 @@ jbig2_parse_segment_header(Jbig2Ctx *ctx, uint8_t *buf, size_t buf_size, size_t
referred_to_segments = jbig2_new(ctx, uint32_t, referred_to_segment_count * referred_to_segment_size);
if (referred_to_segments == NULL) {
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, result->number, "failed to allocate referred to segments");
+ jbig2_free(ctx->allocator, result);
return NULL;
}
diff --git a/jbig2dec/jbig2_segment.h b/jbig2dec/jbig2_segment.h
index 8a17fdaf..5683637a 100644
--- a/jbig2dec/jbig2_segment.h
+++ b/jbig2dec/jbig2_segment.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_symbol_dict.c b/jbig2dec/jbig2_symbol_dict.c
index 7d0c3a1d..92aa7bcc 100644
--- a/jbig2dec/jbig2_symbol_dict.c
+++ b/jbig2dec/jbig2_symbol_dict.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -70,7 +70,7 @@ void
jbig2_dump_symbol_dict(Jbig2Ctx *ctx, Jbig2Segment *segment)
{
Jbig2SymbolDict *dict = (Jbig2SymbolDict *) segment->result;
- int index;
+ uint32_t index;
char filename[24];
int code;
@@ -102,14 +102,14 @@ jbig2_sd_new(Jbig2Ctx *ctx, uint32_t n_symbols)
new_dict->glyphs = jbig2_new(ctx, Jbig2Image *, n_symbols);
new_dict->n_symbols = n_symbols;
} else {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate new empty symbol dictionary");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate new empty symbol dictionary");
return NULL;
}
if (new_dict->glyphs != NULL) {
memset(new_dict->glyphs, 0, n_symbols * sizeof(Jbig2Image *));
} else if (new_dict->n_symbols > 0) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate glyphs for new empty symbol dictionary");
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate glyphs for new empty symbol dictionary");
jbig2_free(ctx->allocator, new_dict);
return NULL;
}
@@ -215,7 +215,7 @@ jbig2_sd_cat(Jbig2Ctx *ctx, uint32_t n_dicts, Jbig2SymbolDict **dicts)
for (j = 0; j < dicts[i]->n_symbols; j++)
new_dict->glyphs[k++] = jbig2_image_reference(ctx, dicts[i]->glyphs[j]);
} else {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "failed to allocate new symbol dictionary");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "failed to allocate new symbol dictionary");
}
return new_dict;
@@ -236,7 +236,7 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx,
uint32_t SYMWIDTH, TOTWIDTH;
uint32_t HCFIRSTSYM;
uint32_t *SDNEWSYMWIDTHS = NULL;
- int SBSYMCODELEN = 0;
+ uint8_t SBSYMCODELEN = 0;
Jbig2WordStream *ws = NULL;
Jbig2HuffmanState *hs = NULL;
Jbig2ArithState *as = NULL;
@@ -271,6 +271,8 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx,
return NULL;
}
+ for (SBSYMCODELEN = 0; ((uint64_t) 1 << SBSYMCODELEN) < ((uint64_t) params->SDNUMINSYMS + params->SDNUMNEWSYMS); SBSYMCODELEN++);
+
if (params->SDHUFF) {
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, "huffman coded symbol dictionary");
hs = jbig2_huffman_new(ctx, ws);
@@ -282,6 +284,7 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx,
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to allocate for symbol bitmap");
goto cleanup;
}
+ /* 6.5.5 (2) */
if (!params->SDREFAGG) {
SDNEWSYMWIDTHS = jbig2_new(ctx, uint32_t, params->SDNUMNEWSYMS);
if (SDNEWSYMWIDTHS == NULL) {
@@ -310,7 +313,6 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx,
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to allocate symbol bitmap");
goto cleanup;
}
- for (SBSYMCODELEN = 0; ((uint64_t) 1 << SBSYMCODELEN) < ((uint64_t) params->SDNUMINSYMS + params->SDNUMNEWSYMS); SBSYMCODELEN++);
tparams.IAID = jbig2_arith_iaid_ctx_new(ctx, SBSYMCODELEN);
tparams.IARDX = jbig2_arith_int_ctx_new(ctx);
tparams.IARDY = jbig2_arith_int_ctx_new(ctx);
@@ -347,6 +349,7 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx,
tparams.SBDSOFFSET = 0;
tparams.SBRTEMPLATE = params->SDRTEMPLATE;
+ /* 6.5.5 (1) */
SDNEWSYMS = jbig2_sd_new(ctx, params->SDNUMNEWSYMS);
if (SDNEWSYMS == NULL) {
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to allocate new symbols (%u)", params->SDNUMNEWSYMS);
@@ -426,14 +429,24 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx,
break;
}
+ if (DW < 0 && SYMWIDTH < (uint32_t) -DW) {
+ code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "DW value (%d) would make SYMWIDTH (%u) negative at symbol %u", DW, SYMWIDTH, NSYMSDECODED + 1);
+ goto cleanup;
+ }
+ if (DW > 0 && (uint32_t) DW > UINT32_MAX - SYMWIDTH) {
+ code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "DW value (%d) would make SYMWIDTH (%u) too large at symbol %u", DW, SYMWIDTH, NSYMSDECODED + 1);
+ goto cleanup;
+ }
+
SYMWIDTH = SYMWIDTH + DW;
- TOTWIDTH = TOTWIDTH + SYMWIDTH;
- if ((int32_t) SYMWIDTH < 0) {
- code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "invalid SYMWIDTH value (%d) at symbol %d", SYMWIDTH, NSYMSDECODED + 1);
+ if (SYMWIDTH > UINT32_MAX - TOTWIDTH) {
+ code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "SYMWIDTH value (%u) would make TOTWIDTH (%u) too large at symbol %u", SYMWIDTH, TOTWIDTH, NSYMSDECODED + 1);
goto cleanup;
}
+
+ TOTWIDTH = TOTWIDTH + SYMWIDTH;
#ifdef JBIG2_DEBUG
- jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, "SYMWIDTH = %d TOTWIDTH = %d", SYMWIDTH, TOTWIDTH);
+ jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, "SYMWIDTH = %u TOTWIDTH = %u", SYMWIDTH, TOTWIDTH);
#endif
/* 6.5.5 (4c.ii) */
if (!params->SDHUFF || params->SDREFAGG) {
diff --git a/jbig2dec/jbig2_symbol_dict.h b/jbig2dec/jbig2_symbol_dict.h
index db1aaf75..4a7fbd3c 100644
--- a/jbig2dec/jbig2_symbol_dict.h
+++ b/jbig2dec/jbig2_symbol_dict.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2_text.c b/jbig2dec/jbig2_text.c
index 57b31de0..1501ae32 100644
--- a/jbig2dec/jbig2_text.c
+++ b/jbig2dec/jbig2_text.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -593,9 +593,14 @@ jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data
uint32_t table_index = 0;
const Jbig2HuffmanParams *huffman_params = NULL;
+ /* zero params to ease cleanup later */
+ memset(&params, 0, sizeof(Jbig2TextRegionParams));
+
/* 7.4.1 */
- if (segment->data_length < 17)
- goto too_short;
+ if (segment->data_length < 17) {
+ code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "segment too short");
+ goto cleanup2;
+ }
jbig2_get_region_segment_info(&region_info, segment_data);
offset += 17;
/* Check for T.88 amendment 3 */
@@ -603,16 +608,15 @@ jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "region segment flags indicate use of colored bitmap (NYI)");
/* 7.4.3.1.1 */
- if (segment->data_length - offset < 2)
- goto too_short;
+ if (segment->data_length - offset < 2) {
+ code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "segment too short");
+ goto cleanup2;
+ }
flags = jbig2_get_uint16(segment_data + offset);
offset += 2;
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, "text region header flags 0x%04x", flags);
- /* zero params to ease cleanup later */
- memset(&params, 0, sizeof(Jbig2TextRegionParams));
-
params.SBHUFF = flags & 0x0001;
params.SBREFINE = flags & 0x0002;
params.LOGSBSTRIPS = (flags & 0x000c) >> 2;
@@ -633,8 +637,10 @@ jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data
if (params.SBHUFF) { /* Huffman coding */
/* 7.4.3.1.2 */
- if (segment->data_length - offset < 2)
- goto too_short;
+ if (segment->data_length - offset < 2) {
+ code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "segment too short");
+ goto cleanup2;
+ }
huffman_flags = jbig2_get_uint16(segment_data + offset);
offset += 2;
@@ -643,8 +649,10 @@ jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data
} else { /* arithmetic coding */
/* 7.4.3.1.3 */
- if (segment->data_length - offset < 4)
- goto too_short;
+ if (segment->data_length - offset < 4) {
+ code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "segment too short");
+ goto cleanup2;
+ }
if ((params.SBREFINE) && !(params.SBRTEMPLATE)) {
params.sbrat[0] = segment_data[offset];
params.sbrat[1] = segment_data[offset + 1];
@@ -655,8 +663,10 @@ jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data
}
/* 7.4.3.1.4 */
- if (segment->data_length - offset < 4)
- goto too_short;
+ if (segment->data_length - offset < 4) {
+ code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "segment too short");
+ goto cleanup2;
+ }
params.SBNUMINSTANCES = jbig2_get_uint32(segment_data + offset);
offset += 4;
@@ -922,8 +932,10 @@ jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data
goto cleanup2;
}
- if (offset >= segment->data_length)
- goto too_short;
+ if (offset >= segment->data_length) {
+ code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "segment too short");
+ goto cleanup2;
+ }
ws = jbig2_word_stream_buf_new(ctx, segment_data + offset, segment->data_length - offset);
if (ws == NULL) {
code = jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to allocate word stream when handling text region image");
@@ -933,11 +945,12 @@ jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data
as = jbig2_arith_new(ctx, ws);
if (as == NULL) {
code = jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to allocate arithmetic coding context when handling text region image");
- goto cleanup2;
+ goto cleanup3;
}
if (!params.SBHUFF) {
- uint32_t SBSYMCODELEN, index;
+ uint8_t SBSYMCODELEN;
+ uint32_t index;
uint32_t SBNUMSYMS = 0;
for (index = 0; index < n_dicts; index++) {
@@ -950,12 +963,12 @@ jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data
params.IAIT = jbig2_arith_int_ctx_new(ctx);
if (params.IADT == NULL || params.IAFS == NULL || params.IADS == NULL || params.IAIT == NULL) {
code = jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to allocate text region image data");
- goto cleanup3;
+ goto cleanup4;
}
/* Table 31 */
- for (SBSYMCODELEN = 0; (1U << SBSYMCODELEN) < SBNUMSYMS; SBSYMCODELEN++) {
- }
+ for (SBSYMCODELEN = 0; ((uint64_t) 1 << SBSYMCODELEN) < (uint64_t) SBNUMSYMS; SBSYMCODELEN++);
+
params.IAID = jbig2_arith_iaid_ctx_new(ctx, SBSYMCODELEN);
params.IARI = jbig2_arith_int_ctx_new(ctx);
params.IARDW = jbig2_arith_int_ctx_new(ctx);
@@ -965,7 +978,7 @@ jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data
if (params.IAID == NULL || params.IARI == NULL ||
params.IARDW == NULL || params.IARDH == NULL || params.IARDX == NULL || params.IARDY == NULL) {
code = jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to allocate text region image data");
- goto cleanup4;
+ goto cleanup5;
}
}
@@ -974,7 +987,7 @@ jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data
segment_data + offset, segment->data_length - offset, GR_stats, as, ws);
if (code < 0) {
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to decode text region image data");
- goto cleanup4;
+ goto cleanup5;
}
if ((segment->flags & 63) == 4) {
@@ -989,7 +1002,7 @@ jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "unable to add text region to page");
}
-cleanup4:
+cleanup5:
if (!params.SBHUFF) {
jbig2_arith_iaid_ctx_free(ctx, params.IAID);
jbig2_arith_int_ctx_free(ctx, params.IARI);
@@ -999,13 +1012,15 @@ cleanup4:
jbig2_arith_int_ctx_free(ctx, params.IARDY);
}
-cleanup3:
+cleanup4:
if (!params.SBHUFF) {
jbig2_arith_int_ctx_free(ctx, params.IADT);
jbig2_arith_int_ctx_free(ctx, params.IAFS);
jbig2_arith_int_ctx_free(ctx, params.IADS);
jbig2_arith_int_ctx_free(ctx, params.IAIT);
}
+
+cleanup3:
jbig2_free(ctx->allocator, as);
jbig2_word_stream_buf_free(ctx, ws);
@@ -1027,7 +1042,4 @@ cleanup1:
jbig2_free(ctx->allocator, dicts);
return code;
-
-too_short:
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "segment too short");
}
diff --git a/jbig2dec/jbig2_text.h b/jbig2dec/jbig2_text.h
index 2c966b03..1e671289 100644
--- a/jbig2dec/jbig2_text.h
+++ b/jbig2dec/jbig2_text.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/jbig2dec.1 b/jbig2dec/jbig2dec.1
index 01f960a5..70607eb8 100644
--- a/jbig2dec/jbig2dec.1
+++ b/jbig2dec/jbig2dec.1
@@ -1,4 +1,4 @@
-.TH jbig2dec 1 "2020 February 11" "Version 0.18" "jbig2dec Manual"
+.TH jbig2dec 1 "2020 March 11" "Version 0.19" "jbig2dec Manual"
.SH NAME
jbig2dec \- File format converter specialized in JBIG2 decoding
@@ -32,35 +32,38 @@ argument to request the embedded parser.
.SH OPTIONS
The options are as follows:
.TP
-.BI -o " file"
+.BR -e ", " --embedded
+Expect embedded bit stream without file header.
+.TP
+.BI -o " file" ", --output" " file"
Store the decoded output in
.IR file .
Defaults to the input with a different extension.
Set to \fI-\fR for standard output.
.TP
-.BI -t " type"
+.BI -t " type" ", --format" " type"
Force a particular output file format. Supported are \fIpng\fR and
\fIpbm\fR.
.TP
-.BR -d " or " --dump
+.BR -d ", " --dump
Print the structure of the JBIG2 file rather than explicitly decoding it.
.TP
-.BR --hash
+.BR -m ", " --hash
Print a hash of the decoded document.
.TP
-.BR -q " or " --quiet
+.BR -q ", " --quiet
Suppress warnings and other diagnostic output.
.TP
-.BR -v " or " --verbose
+.BR -v ", " --verbose
Report additional information about the decoding process.
Pass just \fB-v\fR for information about the file as it's being decoded.
This is the same as \fB--verbose=2\fR.
Pass \fB--verbose=3\fR or higher for debugging information.
.TP
-.BR --version
+.BR -V ", " --version
Show program version information.
.TP
-.BR -h " or " --help
+.BR -h ", " --help
Show usage summary.
.SH REPORTING BUGS
diff --git a/jbig2dec/jbig2dec.c b/jbig2dec/jbig2dec.c
index 4f95589b..c61197ca 100644
--- a/jbig2dec/jbig2dec.c
+++ b/jbig2dec/jbig2dec.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -65,15 +65,129 @@ typedef struct {
SHA1_CTX *hash_ctx;
char *output_filename;
jbig2dec_format output_format;
+ size_t memory_limit;
+} jbig2dec_params_t;
+
+typedef struct {
+ int verbose;
char *last_message;
Jbig2Severity severity;
char *type;
long repeats;
-} jbig2dec_params_t;
+} jbig2dec_error_callback_state_t;
+
+typedef struct {
+ Jbig2Allocator super;
+ Jbig2Ctx *ctx;
+ size_t memory_limit;
+ size_t memory_used;
+ size_t memory_peak;
+} jbig2dec_allocator_t;
static int print_version(void);
static int print_usage(void);
+#define ALIGNMENT 16
+#define KBYTE 1024
+#define MBYTE (1024 * KBYTE)
+
+static void *jbig2dec_alloc(Jbig2Allocator *allocator_, size_t size)
+{
+ jbig2dec_allocator_t *allocator = (jbig2dec_allocator_t *) allocator_;
+ void *ptr;
+
+ if (size == 0)
+ return NULL;
+ if (size > allocator->memory_limit - ALIGNMENT - allocator->memory_used)
+ return NULL;
+
+ ptr = malloc(size + ALIGNMENT);
+ if (ptr == NULL)
+ return NULL;
+ memcpy(ptr, &size, sizeof(size));
+ allocator->memory_used += size + ALIGNMENT;
+
+ if (allocator->memory_used > allocator->memory_peak) {
+ allocator->memory_peak = allocator->memory_used;
+
+ if (allocator->ctx) {
+ size_t limit_mb = allocator->memory_limit / MBYTE;
+ size_t peak_mb = allocator->memory_peak / MBYTE;
+ jbig2_error(allocator->ctx, JBIG2_SEVERITY_DEBUG, JBIG2_UNKNOWN_SEGMENT_NUMBER, "memory: limit: %lu Mbyte peak usage: %lu Mbyte", limit_mb, peak_mb);
+ }
+ }
+
+ return (unsigned char *) ptr + ALIGNMENT;
+}
+
+static void jbig2dec_free(Jbig2Allocator *allocator_, void *p)
+{
+ jbig2dec_allocator_t *allocator = (jbig2dec_allocator_t *) allocator_;
+ size_t size;
+
+ if (p == NULL)
+ return;
+
+ memcpy(&size, (unsigned char *) p - ALIGNMENT, sizeof(size));
+ allocator->memory_used -= size + ALIGNMENT;
+ free((unsigned char *) p - ALIGNMENT);
+}
+
+static void *jbig2dec_realloc(Jbig2Allocator *allocator_, void *p, size_t size)
+{
+ jbig2dec_allocator_t *allocator = (jbig2dec_allocator_t *) allocator_;
+ unsigned char *oldp = p ? (unsigned char *) p - ALIGNMENT : NULL;
+
+ if (size > SIZE_MAX - ALIGNMENT)
+ return NULL;
+
+ if (oldp == NULL)
+ {
+ if (size == 0)
+ return NULL;
+ if (size > allocator->memory_limit - ALIGNMENT - allocator->memory_used)
+ return NULL;
+
+ p = malloc(size + ALIGNMENT);
+ }
+ else
+ {
+ size_t oldsize;
+ memcpy(&oldsize, oldp, sizeof(oldsize));
+
+ if (size == 0)
+ {
+ allocator->memory_used -= oldsize + ALIGNMENT;
+ free(oldp);
+ return NULL;
+ }
+
+ if (size > allocator->memory_limit - allocator->memory_used + oldsize)
+ return NULL;
+
+ p = realloc(oldp, size + ALIGNMENT);
+ if (p == NULL)
+ return NULL;
+
+ allocator->memory_used -= oldsize + ALIGNMENT;
+ }
+
+ memcpy(p, &size, sizeof(size));
+ allocator->memory_used += size + ALIGNMENT;
+
+ if (allocator->memory_used > allocator->memory_peak) {
+ allocator->memory_peak = allocator->memory_used;
+
+ if (allocator->ctx) {
+ size_t limit_mb = allocator->memory_limit / MBYTE;
+ size_t peak_mb = allocator->memory_peak / MBYTE;
+ jbig2_error(allocator->ctx, JBIG2_SEVERITY_DEBUG, JBIG2_UNKNOWN_SEGMENT_NUMBER, "memory: limit: %lu Mbyte peak usage: %lu Mbyte", limit_mb, peak_mb);
+ }
+ }
+
+ return (unsigned char *) p + ALIGNMENT;
+}
+
/* page hashing functions */
static void
hash_init(jbig2dec_params_t *params)
@@ -151,9 +265,10 @@ parse_options(int argc, char *argv[], jbig2dec_params_t *params)
};
int option_idx = 1;
int option;
+ int ret;
while (1) {
- option = getopt_long(argc, argv, "Vh?qv:do:t:e", long_options, &option_idx);
+ option = getopt_long(argc, argv, "Vh?qv:do:t:eM:", long_options, &option_idx);
if (option == -1)
break;
@@ -196,9 +311,14 @@ parse_options(int argc, char *argv[], jbig2dec_params_t *params)
case 'e':
params->embedded = 1;
break;
+ case 'M':
+ ret = sscanf(optarg, "%zu", &params->memory_limit);
+ if (ret != 1)
+ fprintf(stderr, "could not parse memory limit argument\n");
+ break;
default:
if (!params->verbose)
- fprintf(stdout, "unrecognized option: -%c\n", option);
+ fprintf(stderr, "unrecognized option: -%c\n", option);
break;
}
}
@@ -226,22 +346,25 @@ print_usage(void)
" embedded streams.\n"
"\n"
" available options:\n"
- " -h --help this usage summary\n"
- " -q --quiet suppress diagnostic output\n"
- " -v --verbose set the verbosity level\n"
- " -d --dump print the structure of the jbig2 file\n"
- " rather than explicitly decoding\n"
- " --version program name and version information\n"
- " --hash print a hash of the decoded document\n"
- " -e --embedded expect embedded bit stream without file header\n"
- " -o <file> send decoded output to <file>\n"
- " Defaults to the the input with a different\n"
- " extension. Pass '-' for stdout.\n"
- " -t <type> force a particular output file format\n"
+ " -h --help this usage summary\n"
+ " -q --quiet suppress diagnostic output\n"
+ " -v --verbose set the verbosity level\n"
+ " -d --dump print the structure of the jbig2 file\n"
+ " rather than explicitly decoding\n"
+ " -V --version program name and version information\n"
+ " -m --hash print a hash of the decoded document\n"
+ " -e --embedded expect embedded bit stream without file header\n"
+ " -M <limit> memory limit expressed in bytes\n"
+ " -o <file>\n"
+ " --output <file> send decoded output to <file>\n"
+ " Defaults to the the input with a different\n"
+ " extension. Pass '-' for stdout.\n"
+ " -t <type>\n"
+ " --format <type> force a particular output file format\n"
#ifdef HAVE_LIBPNG
- " supported options are 'png' and 'pbm'\n"
+ " supported options are 'png' and 'pbm'\n"
#else
- " the only supported option is 'pbm'\n"
+ " the only supported option is 'pbm'\n"
#endif
"\n");
@@ -249,27 +372,25 @@ print_usage(void)
}
static void
-error_callback(void *error_callback_data, const char *buf, Jbig2Severity severity, int32_t seg_idx)
+error_callback(void *error_callback_data, const char *message, Jbig2Severity severity, uint32_t seg_idx)
{
- jbig2dec_params_t *params = (jbig2dec_params_t *) error_callback_data;
+ jbig2dec_error_callback_state_t *state = (jbig2dec_error_callback_state_t *) error_callback_data;
char *type;
- char segment[22];
- int len;
- char *message;
+ int ret;
switch (severity) {
case JBIG2_SEVERITY_DEBUG:
- if (params->verbose < 3)
+ if (state->verbose < 3)
return;
type = "DEBUG";
break;
case JBIG2_SEVERITY_INFO:
- if (params->verbose < 2)
+ if (state->verbose < 2)
return;
type = "info";
break;
case JBIG2_SEVERITY_WARNING:
- if (params->verbose < 1)
+ if (state->verbose < 1)
return;
type = "WARNING";
break;
@@ -280,56 +401,58 @@ error_callback(void *error_callback_data, const char *buf, Jbig2Severity severit
type = "unknown message";
break;
}
- if (seg_idx == -1)
- segment[0] = '\0';
- else
- snprintf(segment, sizeof(segment), "(segment 0x%02x)", seg_idx);
- len = snprintf(NULL, 0, "jbig2dec %s %s %s", type, buf, segment);
- if (len < 0) {
- return;
- }
+ if (state->last_message != NULL && !strcmp(message, state->last_message) && state->severity == severity && state->type == type) {
+ state->repeats++;
+ if (state->repeats % 1000000 == 0) {
+ ret = fprintf(stderr, "jbig2dec %s last message repeated %ld times so far\n", state->type, state->repeats);
+ if (ret < 0)
+ goto printerror;
+ }
+ } else {
+ if (state->repeats > 1) {
+ ret = fprintf(stderr, "jbig2dec %s last message repeated %ld times\n", state->type, state->repeats);
+ if (ret < 0)
+ goto printerror;
+ }
- message = malloc(len + 1);
- if (message == NULL) {
- return;
+ if (seg_idx == JBIG2_UNKNOWN_SEGMENT_NUMBER)
+ ret = fprintf(stderr, "jbig2dec %s %s\n", type, message);
+ else
+ ret = fprintf(stderr, "jbig2dec %s %s (segment 0x%08x)\n", type, message, seg_idx);
+ if (ret < 0)
+ goto printerror;
+
+ state->repeats = 0;
+ state->severity = severity;
+ state->type = type;
+ free(state->last_message);
+ state->last_message = NULL;
+
+ if (message) {
+ state->last_message = strdup(message);
+ if (state->last_message == NULL) {
+ ret = fprintf(stderr, "jbig2dec WARNING could not duplicate message\n");
+ if (ret < 0)
+ goto printerror;
+ }
+ }
}
- len = snprintf(message, len + 1, "jbig2dec %s %s %s", type, buf, segment);
- if (len < 0)
- {
- free(message);
- return;
- }
+ return;
- if (params->last_message != NULL && strcmp(message, params->last_message)) {
- if (params->repeats > 1)
- fprintf(stderr, "jbig2dec %s last message repeated %ld times\n", params->type, params->repeats);
- fprintf(stderr, "%s\n", message);
- free(params->last_message);
- params->last_message = message;
- params->severity = severity;
- params->type = type;
- params->repeats = 0;
- } else if (params->last_message != NULL) {
- params->repeats++;
- if (params->repeats % 1000000 == 0)
- fprintf(stderr, "jbig2dec %s last message repeated %ld times so far\n", params->type, params->repeats);
- free(message);
- } else if (params->last_message == NULL) {
- fprintf(stderr, "%s\n", message);
- params->last_message = message;
- params->severity = severity;
- params->type = type;
- params->repeats = 0;
- }
+printerror:
+ fprintf(stderr, "jbig2dec WARNING could not print message\n");
+ state->repeats = 0;
+ free(state->last_message);
+ state->last_message = NULL;
}
static void
-flush_errors(jbig2dec_params_t *params)
+flush_errors(jbig2dec_error_callback_state_t *state)
{
- if (params->repeats > 1) {
- fprintf(stderr, "jbig2dec last message repeated %ld times\n", params->repeats);
+ if (state->repeats > 1) {
+ fprintf(stderr, "jbig2dec last message repeated %ld times\n", state->repeats);
}
}
@@ -338,7 +461,7 @@ make_output_filename(const char *input_filename, const char *extension)
{
char *output_filename;
const char *c, *e;
- int len;
+ size_t extlen, len;
if (extension == NULL) {
fprintf(stderr, "no filename extension; cannot create output filename!\n");
@@ -368,16 +491,18 @@ make_output_filename(const char *input_filename, const char *extension)
if (e != NULL)
len -= strlen(e);
+ extlen = strlen(extension);
+
/* allocate enough space for the base + ext */
- output_filename = (char *)malloc(len + strlen(extension) + 1);
+ output_filename = (char *)malloc(len + extlen + 1);
if (output_filename == NULL) {
fprintf(stderr, "failed to allocate memory for output filename\n");
exit(1);
}
- strncpy(output_filename, c, len);
- strncpy(output_filename + len, extension, strlen(extension));
- *(output_filename + len + strlen(extension)) = '\0';
+ memcpy(output_filename, c, len);
+ memcpy(output_filename + len, extension, extlen);
+ *(output_filename + len + extlen) = '\0';
/* return the new string */
return (output_filename);
@@ -422,10 +547,13 @@ write_document_hash(jbig2dec_params_t *params)
int
main(int argc, char **argv)
{
- FILE *f = NULL, *f_page = NULL;
+ jbig2dec_params_t params;
+ jbig2dec_error_callback_state_t error_callback_state;
+ jbig2dec_allocator_t allocator_;
+ jbig2dec_allocator_t *allocator = &allocator_;
Jbig2Ctx *ctx = NULL;
+ FILE *f = NULL, *f_page = NULL;
uint8_t buf[4096];
- jbig2dec_params_t params;
int filearg;
int result = 1;
int code;
@@ -437,11 +565,16 @@ main(int argc, char **argv)
params.output_filename = NULL;
params.output_format = jbig2dec_format_none;
params.embedded = 0;
- params.last_message = NULL;
- params.repeats = 0;
+ params.memory_limit = 0;
filearg = parse_options(argc, argv, &params);
+ error_callback_state.verbose = params.verbose;
+ error_callback_state.severity = JBIG2_SEVERITY_DEBUG;
+ error_callback_state.type = NULL;
+ error_callback_state.last_message = NULL;
+ error_callback_state.repeats = 0;
+
if (params.hash)
hash_init(&params);
@@ -487,7 +620,20 @@ main(int argc, char **argv)
goto cleanup;
}
- ctx = jbig2_ctx_new(NULL, (Jbig2Options)(f_page != NULL || params.embedded ? JBIG2_OPTIONS_EMBEDDED : 0), NULL, error_callback, &params);
+ if (params.memory_limit == 0)
+ allocator = NULL;
+ else
+ {
+ allocator->super.alloc = jbig2dec_alloc;
+ allocator->super.free = jbig2dec_free;
+ allocator->super.realloc = jbig2dec_realloc;
+ allocator->ctx = NULL;
+ allocator->memory_limit = params.memory_limit;
+ allocator->memory_used = 0;
+ allocator->memory_peak = 0;
+ }
+
+ ctx = jbig2_ctx_new((Jbig2Allocator *) allocator, (Jbig2Options)(f_page != NULL || params.embedded ? JBIG2_OPTIONS_EMBEDDED : 0), NULL, error_callback, &error_callback_state);
if (ctx == NULL) {
fclose(f);
if (f_page)
@@ -495,14 +641,29 @@ main(int argc, char **argv)
goto cleanup;
}
+ if (allocator != NULL)
+ allocator->ctx = ctx;
+
/* pull the whole file/global stream into memory */
for (;;) {
int n_bytes = fread(buf, 1, sizeof(buf), f);
-
+ if (n_bytes < 0) {
+ if (f_page != NULL)
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "unable to read jbig2 global stream");
+ else
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "unable to read jbig2 page stream");
+ }
if (n_bytes <= 0)
break;
- if (jbig2_data_in(ctx, buf, n_bytes))
+
+ if (jbig2_data_in(ctx, buf, (size_t) n_bytes) < 0)
+ {
+ if (f_page != NULL)
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "unable to process jbig2 global stream");
+ else
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "unable to process jbig2 page stream");
break;
+ }
}
fclose(f);
@@ -510,15 +671,23 @@ main(int argc, char **argv)
if (f_page != NULL) {
Jbig2GlobalCtx *global_ctx = jbig2_make_global_ctx(ctx);
- ctx = jbig2_ctx_new(NULL, JBIG2_OPTIONS_EMBEDDED, global_ctx, error_callback, &params);
+ ctx = jbig2_ctx_new((Jbig2Allocator *) allocator, JBIG2_OPTIONS_EMBEDDED, global_ctx, error_callback, &error_callback_state);
if (ctx != NULL) {
+ if (allocator != NULL)
+ allocator->ctx = ctx;
+
for (;;) {
int n_bytes = fread(buf, 1, sizeof(buf), f_page);
-
+ if (n_bytes < 0)
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "unable to read jbig2 page stream");
if (n_bytes <= 0)
break;
- if (jbig2_data_in(ctx, buf, n_bytes))
+
+ if (jbig2_data_in(ctx, buf, (size_t) n_bytes) < 0)
+ {
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "unable to process jbig2 page stream");
break;
+ }
}
}
fclose(f_page);
@@ -535,7 +704,7 @@ main(int argc, char **argv)
with parse errors. */
code = jbig2_complete_page(ctx);
if (code < 0) {
- jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "unable to complete page");
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, JBIG2_UNKNOWN_SEGMENT_NUMBER, "unable to complete page");
goto cleanup;
}
@@ -586,19 +755,24 @@ main(int argc, char **argv)
write_document_hash(&params);
}
-
} /* end params.mode switch */
+ if (allocator != NULL && allocator->ctx != NULL) {
+ size_t limit_mb = allocator->memory_limit / MBYTE;
+ size_t peak_mb = allocator->memory_peak / MBYTE;
+ jbig2_error(allocator->ctx, JBIG2_SEVERITY_DEBUG, JBIG2_UNKNOWN_SEGMENT_NUMBER, "memory: limit: %lu Mbyte peak usage: %lu Mbyte", limit_mb, peak_mb);
+ }
+
/* fin */
result = 0;
cleanup:
- flush_errors(&params);
+ flush_errors(&error_callback_state);
jbig2_ctx_free(ctx);
- if (params.last_message)
- free(params.last_message);
if (params.output_filename)
free(params.output_filename);
+ if (error_callback_state.last_message)
+ free(error_callback_state.last_message);
if (params.hash)
hash_free(&params);
diff --git a/jbig2dec/memcmp.c b/jbig2dec/memcmp.c
index fce52e5c..bd6ff5a6 100644
--- a/jbig2dec/memcmp.c
+++ b/jbig2dec/memcmp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/msvc.mak b/jbig2dec/msvc.mak
index 5c2d6bd9..446571fa 100644
--- a/jbig2dec/msvc.mak
+++ b/jbig2dec/msvc.mak
@@ -33,7 +33,7 @@ JBIG2_IMAGE_PNG_OBJ=
EXE=.exe
OBJ=.obj
NUL=
-CFLAGS=-nologo -W4 -Zi -DHAVE_STRING_H=1 -D_CRT_SECURE_NO_WARNINGS $(LIBPNG_CFLAGS)
+CFLAGS=-nologo -W4 -Zi -DHAVE_STRING_H=1 -D_CRT_SECURE_NO_WARNINGS $(LIBPNG_CFLAGS)
CC=cl
FE=-Fe
@@ -55,7 +55,7 @@ HDRS=getopt.h jbig2.h jbig2_arith.h jbig2_arith_iaid.h jbig2_arith_int.h \
all: jbig2dec$(EXE)
jbig2dec$(EXE): $(OBJS)
- $(CC) $(CFLAGS) $(FE)jbig2dec$(EXE) $(OBJS) $(LIBPNG_LDFLAGS)
+ $(CC) $(CFLAGS) $(FE)jbig2dec$(EXE) $(OBJS) $(LIBPNG_LDFLAGS)
getopt$(OBJ): getopt.c getopt.h
$(CC) $(CFLAGS) -c getopt.c
diff --git a/jbig2dec/os_types.h b/jbig2dec/os_types.h
index 3b9c9531..4c963861 100644
--- a/jbig2dec/os_types.h
+++ b/jbig2dec/os_types.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/pbm2png.c b/jbig2dec/pbm2png.c
index e697328a..97c8b2ce 100644
--- a/jbig2dec/pbm2png.c
+++ b/jbig2dec/pbm2png.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/jbig2dec/snprintf.c b/jbig2dec/snprintf.c
deleted file mode 100644
index 025396dd..00000000
--- a/jbig2dec/snprintf.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Revision 12: http://theos.com/~deraadt/snprintf.c
- *
- * Copyright (c) 1997 Theo de Raadt
- *
- * 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.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
- */
-
-#ifdef __VMS
-#include <param.h>
-#else
-#include <sys/param.h>
-#endif
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <signal.h>
-#include <stdio.h>
-#if __STDC__
-#include <stdarg.h>
-#include <stdlib.h>
-#else
-#include <varargs.h>
-#endif
-#include <setjmp.h>
-#include <unistd.h>
-#include <string.h>
-
-#ifndef roundup
-#define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
-#endif
-
-#ifdef __sgi
-#define size_t ssize_t
-#endif
-
-static int pgsize;
-static char *curobj;
-static int caught;
-static sigjmp_buf bail;
-
-#define EXTRABYTES 2 /* XXX: why 2? you don't want to know */
-
-static char *
-msetup(str, n)
-char *str;
-size_t n;
-{
- char *e;
-
- if (n == 0)
- return NULL;
- if (pgsize == 0)
- pgsize = getpagesize();
- curobj = (char *)malloc(n + EXTRABYTES + pgsize * 2);
- if (curobj == NULL)
- return NULL;
- e = curobj + n + EXTRABYTES;
- e = (char *)roundup((unsigned long)e, pgsize);
- if (mprotect(e, pgsize, PROT_NONE) == -1) {
- free(curobj);
- curobj = NULL;
- return NULL;
- }
- e = e - n - EXTRABYTES;
- *e = '\0';
- return (e);
-}
-
-static void
-mcatch(int a)
-{
- siglongjmp(bail, 1);
-}
-
-static void
-mcleanup(str, n, p)
-char *str;
-size_t n;
-char *p;
-{
- strncpy(str, p, n - 1);
- str[n - 1] = '\0';
- if (mprotect((caddr_t)(p + n + EXTRABYTES), pgsize, PROT_READ | PROT_WRITE | PROT_EXEC) == -1)
- mprotect((caddr_t)(p + n + EXTRABYTES), pgsize, PROT_READ | PROT_WRITE);
- free(curobj);
-}
-
-int
-#if __STDC__
-vsnprintf(char *str, size_t n, char const *fmt, va_list ap)
-#else
-vsnprintf(str, n, fmt, ap)
-char *str;
-size_t n;
-char *fmt;
-char *ap;
-#endif
-{
- struct sigaction osa, nsa;
- char *p;
- int ret = n + 1; /* if we bail, indicated we overflowed */
-
- memset(&nsa, 0, sizeof nsa);
- nsa.sa_handler = mcatch;
- sigemptyset(&nsa.sa_mask);
-
- p = msetup(str, n);
- if (p == NULL) {
- *str = '\0';
- return 0;
- }
- if (sigsetjmp(bail, 1) == 0) {
- if (sigaction(SIGSEGV, &nsa, &osa) == -1) {
- mcleanup(str, n, p);
- return (0);
- }
- ret = vsprintf(p, fmt, ap);
- }
- mcleanup(str, n, p);
- (void)sigaction(SIGSEGV, &osa, NULL);
- return (ret);
-}
-
-int
-#if __STDC__
-snprintf(char *str, size_t n, char const *fmt, ...)
-#else
-snprintf(str, n, fmt, va_alist)
-char *str;
-size_t n;
-char *fmt;
-va_dcl
-#endif
-{
- va_list ap;
-
-#if __STDC__
- va_start(ap, fmt);
-#else
- va_start(ap);
-#endif
-
- return (vsnprintf(str, n, fmt, ap));
- va_end(ap);
-}
diff --git a/lcms2mt/AUTHORS b/lcms2mt/AUTHORS
index dd801a9d..d581f086 100644
--- a/lcms2mt/AUTHORS
+++ b/lcms2mt/AUTHORS
@@ -38,6 +38,7 @@ Thomas Weber (Debian)
Mark Allen
Noel Carboni
Sergei Trofimovic
+Philipp Knechtges
Special Thanks
--------------
diff --git a/lcms2mt/COPYING b/lcms2mt/COPYING
index fda5c9eb..21ed6fb8 100644
--- a/lcms2mt/COPYING
+++ b/lcms2mt/COPYING
@@ -1,5 +1,5 @@
Little CMS
-Copyright (c) 1998-2011 Marti Maria Saguer
+Copyright (c) 1998-2020 Marti Maria Saguer
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
diff --git a/lcms2mt/ChangeLog b/lcms2mt/ChangeLog
index 9a30cd41..81a38b9d 100644
--- a/lcms2mt/ChangeLog
+++ b/lcms2mt/ChangeLog
@@ -1,14 +1,16 @@
+ LCMS2MT ChangeLog:
+
------------------------
-2.9.art Featured release
+2.10.art Featured release
------------------------
-Merge 2.9 with 2.8.art.
+Merge 2.10 with 2.9.art.
------------------------
-2.9 Maintenance release
+2.9.art Featured release
------------------------
-No changelog provided.
+Merge 2.9 with 2.8.art.
------------------------
2.8.art Featured release
@@ -21,6 +23,26 @@ Removed the 'THR' API functions as now unnecessary.
Changed LCMS_VERSION (and checking logic).
Extend T_EXTRA etc to allow for 63 extra channels.
+
+ Vanilla LCMS2 Changelog:
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+
+------------------------
+2.9 Maintenance release
+------------------------
+
+No changelog provided.
+
+-----------------------
+2.10 Featured release
+-----------------------
+Added a compilation toggle to remove "register" keyword in API.
+Previously commercial, fast_float plug-in is now released as open source under GPL3 license.
+MD5 functions are now accesible through plug-in API.
+Added support for Visual Studio 2019
+Bug fixing.
+
+
-----------------------
2.9 Maintenance release
-----------------------
diff --git a/lcms2mt/Makefile.am b/lcms2mt/Makefile.am
index bf3c37b0..4c25794d 100644
--- a/lcms2mt/Makefile.am
+++ b/lcms2mt/Makefile.am
@@ -14,10 +14,10 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
SUBDIRS = src include utils/tificc utils/transicc utils/linkicc utils/jpgicc utils/psicc testbed
# Additional files to distribute
-EXTRA_DIST = AUTHORS COPYING ChangeLog doc Projects include bin Lib INSTALL README.1ST autogen.sh lcms2.pc.in
+EXTRA_DIST = AUTHORS COPYING ChangeLog doc Projects include bin Lib INSTALL README.1ST autogen.sh lcms2.pc.in plugins
pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = lcms2.pc
+pkgconfig_DATA = lcms2mt.pc
# Get names of plug-ins in the source package
PLUGIN_DIRECTORIES = $(sort $(dir $(wildcard plugins/*/)))
@@ -39,17 +39,12 @@ clean-local:
# Handle plug-ins
all-local:
@for d in $(PLUGIN_DIRECTORIES); do (cd $$d; $(MAKE) $(AM_MAKEFLAGS) all ); done
-
+
check-local:
@for d in $(PLUGIN_DIRECTORIES); do (cd $$d; $(MAKE) $(AM_MAKEFLAGS) check ); done
-
+
install-exec-local:
@for d in $(PLUGIN_DIRECTORIES); do (cd $$d; $(MAKE) $(AM_MAKEFLAGS) install-exec ); done
uninstall-local:
@for d in $(PLUGIN_DIRECTORIES); do (cd $$d; $(MAKE) $(AM_MAKEFLAGS) uninstall ); done
-
-
-
-
-
diff --git a/lcms2mt/Makefile.in b/lcms2mt/Makefile.in
index 5ba77459..9bc16049 100644
--- a/lcms2mt/Makefile.in
+++ b/lcms2mt/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -110,7 +110,7 @@ DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES = lcms2.pc
+CONFIG_CLEAN_FILES = lcms2mt.pc
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -175,7 +175,7 @@ am__recursive_targets = \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
- cscope distdir dist dist-all distcheck
+ cscope distdir distdir-am dist dist-all distcheck
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -197,9 +197,9 @@ ETAGS = etags
CTAGS = ctags
CSCOPE = cscope
DIST_SUBDIRS = $(SUBDIRS)
-am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/lcms2.pc.in AUTHORS \
- COPYING ChangeLog INSTALL compile config.guess config.sub \
- depcomp install-sh ltmain.sh missing
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/lcms2mt.pc.in \
+ AUTHORS COPYING ChangeLog INSTALL compile config.guess \
+ config.sub depcomp install-sh ltmain.sh missing
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@@ -391,9 +391,9 @@ ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src include utils/tificc utils/transicc utils/linkicc utils/jpgicc utils/psicc testbed
# Additional files to distribute
-EXTRA_DIST = AUTHORS COPYING ChangeLog doc Projects include bin Lib INSTALL README.1ST autogen.sh lcms2.pc.in
+EXTRA_DIST = AUTHORS COPYING ChangeLog doc Projects include bin Lib INSTALL README.1ST autogen.sh lcms2.pc.in plugins
pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = lcms2.pc
+pkgconfig_DATA = lcms2mt.pc
# Get names of plug-ins in the source package
PLUGIN_DIRECTORIES = $(sort $(dir $(wildcard plugins/*/)))
@@ -421,8 +421,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -433,7 +433,7 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):
-lcms2.pc: $(top_builddir)/config.status $(srcdir)/lcms2.pc.in
+lcms2mt.pc: $(top_builddir)/config.status $(srcdir)/lcms2mt.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $@
mostlyclean-libtool:
@@ -572,7 +572,10 @@ distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
$(am__remove_distdir)
test -d "$(distdir)" || mkdir "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -637,7 +640,7 @@ distdir: $(DISTFILES)
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
$(am__post_remove_distdir)
dist-bzip2: distdir
@@ -663,7 +666,7 @@ dist-shar: distdir
@echo WARNING: "Support for shar distribution archives is" \
"deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
- shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
$(am__post_remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
@@ -680,7 +683,7 @@ dist dist-all:
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
- GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lz*) \
@@ -690,7 +693,7 @@ distcheck: dist
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
- GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
diff --git a/lcms2mt/Projects/BorlandC_5.5/lcms2mt.rc b/lcms2mt/Projects/BorlandC_5.5/lcms2mt.rc
new file mode 100644
index 00000000..4446318c
--- /dev/null
+++ b/lcms2mt/Projects/BorlandC_5.5/lcms2mt.rc
@@ -0,0 +1,30 @@
+
+
+1 VERSIONINFO
+FILEVERSION 2, 8, 0, 0
+PRODUCTVERSION 2, 8, 0, 0
+FILEOS VOS_NT_WINDOWS32
+FILETYPE VFT_DLL
+{
+ BLOCK "StringFileInfo"
+ {
+ BLOCK "040904E4"
+ {
+ VALUE "CompanyName", "Marti Maria\000\000"
+ VALUE "FileDescription", "lcms color engine\000"
+ VALUE "FileVersion", "2.10\000\000"
+ VALUE "InternalName", "lcms2\000"
+ VALUE "LegalCopyright", "Copyright © Marti Maria 2020\000\000"
+ VALUE "OriginalFilename", "lcms2mt.dll\000"
+ }
+
+ }
+
+ BLOCK "VarFileInfo"
+ {
+ VALUE "Translation", 0x409, 1252
+ }
+
+}
+
+
diff --git a/lcms2mt/Projects/BorlandC_5.5/lcmsdll.lk b/lcms2mt/Projects/BorlandC_5.5/lcmsdll.lk
index ed4c0fcf..637442d0 100644
--- a/lcms2mt/Projects/BorlandC_5.5/lcmsdll.lk
+++ b/lcms2mt/Projects/BorlandC_5.5/lcmsdll.lk
@@ -25,7 +25,7 @@ cmstypes.obj+
cmsvirt.obj+
cmswtpnt.obj+
cmsxform.obj
-..\..\bin\lcms2.dll
+..\..\bin\lcms2mt.dll
cw32mt.lib import32.lib
-..\..\src\lcms2.def \ No newline at end of file
+..\..\src\lcms2mt.def \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2013/lcms2mt.rc b/lcms2mt/Projects/VC2013/lcms2mt.rc
index 40768274..9f7e813c 100644
--- a/lcms2mt/Projects/VC2013/lcms2mt.rc
+++ b/lcms2mt/Projects/VC2013/lcms2mt.rc
@@ -27,8 +27,8 @@ LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN
//
1 VERSIONINFO
- FILEVERSION 2,9,0,0
- PRODUCTVERSION 2,9,0,0
+ FILEVERSION 2,10,0,0
+ PRODUCTVERSION 2,10,0,0
FILEFLAGSMASK 0x0L
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -45,12 +45,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Marti Maria"
VALUE "FileDescription", "lcms color engine"
- VALUE "FileVersion", "2.9.0.0"
+ VALUE "FileVersion", "2.10.0.0"
VALUE "InternalName", "lcms"
- VALUE "LegalCopyright", "Copyright © Marti Maria 2017"
- VALUE "OriginalFilename", "lcms2mt.dll"
+ VALUE "LegalCopyright", "Copyright © Marti Maria 2020"
+ VALUE "OriginalFilename", "lcms2.dll"
VALUE "ProductName", "LittleCMS color engine"
- VALUE "ProductVersion", "2.9.0.0"
+ VALUE "ProductVersion", "2.10.0.0"
END
END
BLOCK "VarFileInfo"
diff --git a/lcms2mt/Projects/VC2013/lcms2mt.sln b/lcms2mt/Projects/VC2013/lcms2mt.sln
index 75035059..2d44cba3 100644
--- a/lcms2mt/Projects/VC2013/lcms2mt.sln
+++ b/lcms2mt/Projects/VC2013/lcms2mt.sln
Binary files differ
diff --git a/lcms2mt/Projects/VC2013/lcms2mt_DLL/lcms2mt_DLL.vcxproj b/lcms2mt/Projects/VC2013/lcms2mt_DLL/lcms2mt_DLL.vcxproj
index 7f73cdeb..81addf6c 100644
--- a/lcms2mt/Projects/VC2013/lcms2mt_DLL/lcms2mt_DLL.vcxproj
+++ b/lcms2mt/Projects/VC2013/lcms2mt_DLL/lcms2mt_DLL.vcxproj
@@ -20,7 +20,7 @@
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{8C51BE48-ADB8-4089-A9EC-F6BF993A0548}</ProjectGuid>
- <RootNamespace>lcms2mt_DLL</RootNamespace>
+ <RootNamespace>lcms2_DLL</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
@@ -90,16 +90,16 @@
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <TargetName>lcms2mt</TargetName>
+ <TargetName>lcms2</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <TargetName>lcms2mt</TargetName>
+ <TargetName>lcms2</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <TargetName>lcms2mt</TargetName>
+ <TargetName>lcms2</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <TargetName>lcms2mt</TargetName>
+ <TargetName>lcms2</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@@ -116,7 +116,7 @@
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
- <ModuleDefinitionFile>..\..\..\src\lcms2mt.def</ModuleDefinitionFile>
+ <ModuleDefinitionFile>..\..\..\src\lcms2.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
@@ -165,7 +165,7 @@
<BrowseInformation>true</BrowseInformation>
</ClCompile>
<Link>
- <ModuleDefinitionFile>..\..\..\src\lcms2mt.def</ModuleDefinitionFile>
+ <ModuleDefinitionFile>..\..\..\src\lcms2.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
@@ -234,18 +234,18 @@
<ClCompile Include="..\..\..\src\cmsxform.c" />
</ItemGroup>
<ItemGroup>
- <CustomBuild Include="..\..\..\src\lcms2mt.def">
+ <CustomBuild Include="..\..\..\src\lcms2.def">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\src\lcms2_internal.h" />
- <ClInclude Include="..\..\..\include\lcms2mt.h" />
- <ClInclude Include="..\..\..\include\lcms2mt_plugin.h" />
+ <ClInclude Include="..\..\..\include\lcms2.h" />
+ <ClInclude Include="..\..\..\include\lcms2_plugin.h" />
<ClInclude Include="..\resource.h" />
</ItemGroup>
<ItemGroup>
- <ResourceCompile Include="..\lcms2mt.rc" />
+ <ResourceCompile Include="..\lcms2.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
diff --git a/lcms2mt/Projects/VC2015/lcms2mt.rc b/lcms2mt/Projects/VC2015/lcms2mt.rc
index 40768274..9f7e813c 100644
--- a/lcms2mt/Projects/VC2015/lcms2mt.rc
+++ b/lcms2mt/Projects/VC2015/lcms2mt.rc
@@ -27,8 +27,8 @@ LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN
//
1 VERSIONINFO
- FILEVERSION 2,9,0,0
- PRODUCTVERSION 2,9,0,0
+ FILEVERSION 2,10,0,0
+ PRODUCTVERSION 2,10,0,0
FILEFLAGSMASK 0x0L
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -45,12 +45,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Marti Maria"
VALUE "FileDescription", "lcms color engine"
- VALUE "FileVersion", "2.9.0.0"
+ VALUE "FileVersion", "2.10.0.0"
VALUE "InternalName", "lcms"
- VALUE "LegalCopyright", "Copyright © Marti Maria 2017"
- VALUE "OriginalFilename", "lcms2mt.dll"
+ VALUE "LegalCopyright", "Copyright © Marti Maria 2020"
+ VALUE "OriginalFilename", "lcms2.dll"
VALUE "ProductName", "LittleCMS color engine"
- VALUE "ProductVersion", "2.9.0.0"
+ VALUE "ProductVersion", "2.10.0.0"
END
END
BLOCK "VarFileInfo"
diff --git a/lcms2mt/Projects/VC2015/lcms2mt.sln b/lcms2mt/Projects/VC2015/lcms2mt.sln
index 402cb8ed..5a58ab79 100644
--- a/lcms2mt/Projects/VC2015/lcms2mt.sln
+++ b/lcms2mt/Projects/VC2015/lcms2mt.sln
Binary files differ
diff --git a/lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj b/lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj
index c169da69..08495c33 100644
--- a/lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj
+++ b/lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj
@@ -248,4 +248,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters b/lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters
index 4d685cce..c9542c76 100644
--- a/lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters
+++ b/lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters
@@ -118,4 +118,4 @@
<Filter>Source Files</Filter>
</CustomBuild>
</ItemGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj b/lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj
index 359e67ae..8a49f611 100644
--- a/lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj
+++ b/lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj
@@ -205,4 +205,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj.filters b/lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj.filters
index fdb81018..91149825 100644
--- a/lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj.filters
+++ b/lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj.filters
@@ -105,4 +105,4 @@
<Filter>Source Files</Filter>
</ClInclude>
</ItemGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2017/lcms2mt.rc b/lcms2mt/Projects/VC2017/lcms2mt.rc
index 40768274..9f7e813c 100644
--- a/lcms2mt/Projects/VC2017/lcms2mt.rc
+++ b/lcms2mt/Projects/VC2017/lcms2mt.rc
@@ -27,8 +27,8 @@ LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN
//
1 VERSIONINFO
- FILEVERSION 2,9,0,0
- PRODUCTVERSION 2,9,0,0
+ FILEVERSION 2,10,0,0
+ PRODUCTVERSION 2,10,0,0
FILEFLAGSMASK 0x0L
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -45,12 +45,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Marti Maria"
VALUE "FileDescription", "lcms color engine"
- VALUE "FileVersion", "2.9.0.0"
+ VALUE "FileVersion", "2.10.0.0"
VALUE "InternalName", "lcms"
- VALUE "LegalCopyright", "Copyright © Marti Maria 2017"
- VALUE "OriginalFilename", "lcms2mt.dll"
+ VALUE "LegalCopyright", "Copyright © Marti Maria 2020"
+ VALUE "OriginalFilename", "lcms2.dll"
VALUE "ProductName", "LittleCMS color engine"
- VALUE "ProductVersion", "2.9.0.0"
+ VALUE "ProductVersion", "2.10.0.0"
END
END
BLOCK "VarFileInfo"
diff --git a/lcms2mt/Projects/VC2017/lcms2mt.sln b/lcms2mt/Projects/VC2017/lcms2mt.sln
index 402cb8ed..5a58ab79 100644
--- a/lcms2mt/Projects/VC2017/lcms2mt.sln
+++ b/lcms2mt/Projects/VC2017/lcms2mt.sln
Binary files differ
diff --git a/lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj b/lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj
index e258c0de..8ae9c120 100644
--- a/lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj
+++ b/lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj
@@ -248,4 +248,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters b/lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters
index 4d685cce..c9542c76 100644
--- a/lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters
+++ b/lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters
@@ -118,4 +118,4 @@
<Filter>Source Files</Filter>
</CustomBuild>
</ItemGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj b/lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj
index 0d26f770..76195f68 100644
--- a/lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj
+++ b/lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj
@@ -205,4 +205,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj.filters b/lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj.filters
index fdb81018..91149825 100644
--- a/lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj.filters
+++ b/lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj.filters
@@ -105,4 +105,4 @@
<Filter>Source Files</Filter>
</ClInclude>
</ItemGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/jpegicc/jpegicc.vcxproj b/lcms2mt/Projects/VC2019/jpegicc/jpegicc.vcxproj
new file mode 100644
index 00000000..787b397d
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/jpegicc/jpegicc.vcxproj
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{62812507-F926-4968-96A9-17678460AD90}</ProjectGuid>
+ <RootNamespace>jpegicc</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.21006.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IncludePath);;C:\code\jpeg-9a</IncludePath>
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IncludePath);;C:\code\jpeg-9a</IncludePath>
+ <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LibraryPath);;C:\code\jpeg-9a</LibraryPath>
+ <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(LibraryPath);;C:\code\jpeg-9a</LibraryPath>
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IncludePath);;C:\code\jpeg-9a</IncludePath>
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IncludePath);;C:\code\jpeg-9a</IncludePath>
+ <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LibraryPath);;C:\code\jpeg-9a</LibraryPath>
+ <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(LibraryPath);;C:\code\jpeg-9a</LibraryPath>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libjpeg.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libjpeg.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <OmitFramePointers>true</OmitFramePointers>
+ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <BrowseInformation>false</BrowseInformation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libjpeg.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ <Bscmake>
+ <PreserveSbr>true</PreserveSbr>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <OmitFramePointers>true</OmitFramePointers>
+ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libjpeg.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\utils\common\vprf.c" />
+ <ClCompile Include="..\..\..\utils\common\xgetopt.c" />
+ <ClCompile Include="..\..\..\utils\jpgicc\iccjpeg.c" />
+ <ClCompile Include="..\..\..\utils\jpgicc\jpgicc.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\lcms2mt_static\lcms2mt_static.vcxproj">
+ <Project>{71dede59-3f1e-486b-a899-4283000f76b5}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/jpegicc/jpegicc.vcxproj.filters b/lcms2mt/Projects/VC2019/jpegicc/jpegicc.vcxproj.filters
new file mode 100644
index 00000000..a05c36d6
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/jpegicc/jpegicc.vcxproj.filters
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\utils\common\vprf.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\common\xgetopt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\jpgicc\iccjpeg.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\jpgicc\jpgicc.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/lcms2mt.rc b/lcms2mt/Projects/VC2019/lcms2mt.rc
new file mode 100644
index 00000000..9f7e813c
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/lcms2mt.rc
@@ -0,0 +1,104 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Spanish (Spain, International Sort) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESN)
+LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN
+#pragma code_page(1252)
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+1 VERSIONINFO
+ FILEVERSION 2,10,0,0
+ PRODUCTVERSION 2,10,0,0
+ FILEFLAGSMASK 0x0L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904e4"
+ BEGIN
+ VALUE "CompanyName", "Marti Maria"
+ VALUE "FileDescription", "lcms color engine"
+ VALUE "FileVersion", "2.10.0.0"
+ VALUE "InternalName", "lcms"
+ VALUE "LegalCopyright", "Copyright © Marti Maria 2020"
+ VALUE "OriginalFilename", "lcms2.dll"
+ VALUE "ProductName", "LittleCMS color engine"
+ VALUE "ProductVersion", "2.10.0.0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1252
+ END
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "#include ""windows.h""\r\n"
+ "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // Spanish (Spain, International Sort) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/lcms2mt/Projects/VC2019/lcms2mt.sln b/lcms2mt/Projects/VC2019/lcms2mt.sln
new file mode 100644
index 00000000..9563c36c
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/lcms2mt.sln
Binary files differ
diff --git a/lcms2mt/Projects/VC2019/lcms2mt_DLL/lcms2mt_DLL.vcxproj b/lcms2mt/Projects/VC2019/lcms2mt_DLL/lcms2mt_DLL.vcxproj
new file mode 100644
index 00000000..ddfbbee2
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/lcms2mt_DLL/lcms2mt_DLL.vcxproj
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{8C51BE48-ADB8-4089-A9EC-F6BF993A0548}</ProjectGuid>
+ <RootNamespace>lcms2mt_DLL</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.21006.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetName>lcms2mt</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <TargetName>lcms2mt</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetName>lcms2mt</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetName>lcms2mt</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <StringPooling>false</StringPooling>
+ </ClCompile>
+ <Link>
+ <ModuleDefinitionFile>..\..\..\src\lcms2mt.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <StringPooling>false</StringPooling>
+ </ClCompile>
+ <Link>
+ <ModuleDefinitionFile>
+ </ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <OmitFramePointers>true</OmitFramePointers>
+ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <StringPooling>true</StringPooling>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <ModuleDefinitionFile>..\..\..\src\lcms2mt.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <PreserveSbr>true</PreserveSbr>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <OmitFramePointers>true</OmitFramePointers>
+ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <StringPooling>true</StringPooling>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <ModuleDefinitionFile>
+ </ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\src\cmsalpha.c" />
+ <ClCompile Include="..\..\..\src\cmscam02.c" />
+ <ClCompile Include="..\..\..\src\cmscgats.c" />
+ <ClCompile Include="..\..\..\src\cmscnvrt.c" />
+ <ClCompile Include="..\..\..\src\cmserr.c" />
+ <ClCompile Include="..\..\..\src\cmsgamma.c" />
+ <ClCompile Include="..\..\..\src\cmsgmt.c" />
+ <ClCompile Include="..\..\..\src\cmshalf.c" />
+ <ClCompile Include="..\..\..\src\cmsintrp.c" />
+ <ClCompile Include="..\..\..\src\cmsio0.c" />
+ <ClCompile Include="..\..\..\src\cmsio1.c" />
+ <ClCompile Include="..\..\..\src\cmslut.c" />
+ <ClCompile Include="..\..\..\src\cmsmd5.c" />
+ <ClCompile Include="..\..\..\src\cmsmtrx.c" />
+ <ClCompile Include="..\..\..\src\cmsnamed.c" />
+ <ClCompile Include="..\..\..\src\cmsopt.c" />
+ <ClCompile Include="..\..\..\src\cmspack.c" />
+ <ClCompile Include="..\..\..\src\cmspcs.c" />
+ <ClCompile Include="..\..\..\src\cmsplugin.c" />
+ <ClCompile Include="..\..\..\src\cmsps2.c" />
+ <ClCompile Include="..\..\..\src\cmssamp.c" />
+ <ClCompile Include="..\..\..\src\cmssm.c" />
+ <ClCompile Include="..\..\..\src\cmstypes.c" />
+ <ClCompile Include="..\..\..\src\cmsvirt.c" />
+ <ClCompile Include="..\..\..\src\cmswtpnt.c" />
+ <ClCompile Include="..\..\..\src\cmsxform.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="..\..\..\src\lcms2mt.def">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\src\lcms2_internal.h" />
+ <ClInclude Include="..\..\..\include\lcms2mt.h" />
+ <ClInclude Include="..\..\..\include\lcms2mt_plugin.h" />
+ <ClInclude Include="..\resource.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="..\lcms2mt.rc" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters b/lcms2mt/Projects/VC2019/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters
new file mode 100644
index 00000000..c9542c76
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\src\cmscam02.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmscgats.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmscnvrt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmserr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsgamma.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsgmt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsintrp.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsio0.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsio1.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmslut.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsmd5.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsmtrx.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsnamed.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsopt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmspack.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmspcs.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsplugin.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsps2.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmssamp.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmssm.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmstypes.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsvirt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmswtpnt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsxform.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmshalf.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsalpha.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\include\lcms2mt.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\include\lcms2mt_plugin.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\src\lcms2_internal.h">
+ <Filter>Source Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\resource.h">
+ <Filter>Resource Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="..\lcms2mt.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="..\..\..\src\lcms2mt.def">
+ <Filter>Source Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/lcms2mt_static/lcms2mt_static.vcxproj b/lcms2mt/Projects/VC2019/lcms2mt_static/lcms2mt_static.vcxproj
new file mode 100644
index 00000000..cc7b9fe6
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/lcms2mt_static/lcms2mt_static.vcxproj
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{71DEDE59-3F1E-486B-A899-4283000F76B5}</ProjectGuid>
+ <RootNamespace>lcms2mt_static</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.21006.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\Lib\MS\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\Lib\MS\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\Lib\MS\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\Lib\MS\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <FunctionLevelLinking>
+ </FunctionLevelLinking>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <FunctionLevelLinking>
+ </FunctionLevelLinking>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <CompileAs>Default</CompileAs>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <OmitFramePointers>true</OmitFramePointers>
+ <EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <ExceptionHandling>false</ExceptionHandling>
+ <StringPooling>true</StringPooling>
+ <FloatingPointModel>Precise</FloatingPointModel>
+ <FloatingPointExceptions>false</FloatingPointExceptions>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <BrowseInformation>false</BrowseInformation>
+ </ClCompile>
+ <Bscmake>
+ <PreserveSbr>true</PreserveSbr>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <OmitFramePointers>true</OmitFramePointers>
+ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <ExceptionHandling>false</ExceptionHandling>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>
+ <StringPooling>true</StringPooling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\src\cmsalpha.c" />
+ <ClCompile Include="..\..\..\src\cmscam02.c" />
+ <ClCompile Include="..\..\..\src\cmscgats.c" />
+ <ClCompile Include="..\..\..\src\cmscnvrt.c" />
+ <ClCompile Include="..\..\..\src\cmserr.c" />
+ <ClCompile Include="..\..\..\src\cmsgamma.c" />
+ <ClCompile Include="..\..\..\src\cmsgmt.c" />
+ <ClCompile Include="..\..\..\src\cmshalf.c" />
+ <ClCompile Include="..\..\..\src\cmsintrp.c" />
+ <ClCompile Include="..\..\..\src\cmsio0.c" />
+ <ClCompile Include="..\..\..\src\cmsio1.c" />
+ <ClCompile Include="..\..\..\src\cmslut.c" />
+ <ClCompile Include="..\..\..\src\cmsmd5.c" />
+ <ClCompile Include="..\..\..\src\cmsmtrx.c" />
+ <ClCompile Include="..\..\..\src\cmsnamed.c" />
+ <ClCompile Include="..\..\..\src\cmsopt.c" />
+ <ClCompile Include="..\..\..\src\cmspack.c" />
+ <ClCompile Include="..\..\..\src\cmspcs.c" />
+ <ClCompile Include="..\..\..\src\cmsplugin.c" />
+ <ClCompile Include="..\..\..\src\cmsps2.c" />
+ <ClCompile Include="..\..\..\src\cmssamp.c" />
+ <ClCompile Include="..\..\..\src\cmssm.c" />
+ <ClCompile Include="..\..\..\src\cmstypes.c" />
+ <ClCompile Include="..\..\..\src\cmsvirt.c" />
+ <ClCompile Include="..\..\..\src\cmswtpnt.c" />
+ <ClCompile Include="..\..\..\src\cmsxform.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\src\lcms2_internal.h" />
+ <ClInclude Include="..\..\..\include\lcms2mt.h" />
+ <ClInclude Include="..\..\..\include\lcms2mt_plugin.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/lcms2mt_static/lcms2mt_static.vcxproj.filters b/lcms2mt/Projects/VC2019/lcms2mt_static/lcms2mt_static.vcxproj.filters
new file mode 100644
index 00000000..91149825
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/lcms2mt_static/lcms2mt_static.vcxproj.filters
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\src\cmscam02.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmscgats.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmscnvrt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmserr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsgamma.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsgmt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsintrp.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsio0.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsio1.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmslut.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsmd5.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsmtrx.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsnamed.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsopt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmspack.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmspcs.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsplugin.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsps2.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmssamp.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmssm.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmstypes.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsvirt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmswtpnt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsxform.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmshalf.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cmsalpha.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\include\lcms2mt.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\include\lcms2mt_plugin.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\src\lcms2_internal.h">
+ <Filter>Source Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/linkicc/linkicc.vcxproj b/lcms2mt/Projects/VC2019/linkicc/linkicc.vcxproj
new file mode 100644
index 00000000..4ec2dd7d
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/linkicc/linkicc.vcxproj
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{FBFBE1DC-DB84-4BA1-9552-B4780F457849}</ProjectGuid>
+ <RootNamespace>linkicc</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.21006.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <BrowseInformation>false</BrowseInformation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <PreserveSbr>true</PreserveSbr>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\utils\linkicc\linkicc.c" />
+ <ClCompile Include="..\..\..\utils\common\vprf.c" />
+ <ClCompile Include="..\..\..\utils\common\xgetopt.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\lcms2mt_static\lcms2mt_static.vcxproj">
+ <Project>{71dede59-3f1e-486b-a899-4283000f76b5}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/linkicc/linkicc.vcxproj.filters b/lcms2mt/Projects/VC2019/linkicc/linkicc.vcxproj.filters
new file mode 100644
index 00000000..95c77cdb
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/linkicc/linkicc.vcxproj.filters
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\utils\common\vprf.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\common\xgetopt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\linkicc\linkicc.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/psicc/psicc.vcxproj b/lcms2mt/Projects/VC2019/psicc/psicc.vcxproj
new file mode 100644
index 00000000..a895d391
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/psicc/psicc.vcxproj
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{EF6A8851-65FE-46F5-B9EF-14F0B671F693}</ProjectGuid>
+ <RootNamespace>psicc</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.21006.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <BrowseInformation>false</BrowseInformation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <PreserveSbr>true</PreserveSbr>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\utils\psicc\psicc.c" />
+ <ClCompile Include="..\..\..\utils\common\vprf.c" />
+ <ClCompile Include="..\..\..\utils\common\xgetopt.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\lcms2mt_static\lcms2mt_static.vcxproj">
+ <Project>{71dede59-3f1e-486b-a899-4283000f76b5}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/psicc/psicc.vcxproj.filters b/lcms2mt/Projects/VC2019/psicc/psicc.vcxproj.filters
new file mode 100644
index 00000000..c42429d8
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/psicc/psicc.vcxproj.filters
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\utils\common\vprf.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\common\xgetopt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\psicc\psicc.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/resource.h b/lcms2mt/Projects/VC2019/resource.h
new file mode 100644
index 00000000..7655978d
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/resource.h
@@ -0,0 +1,16 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by lcms2.rc
+//
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC 1
+#define _APS_NEXT_RESOURCE_VALUE 101
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/lcms2mt/Projects/VC2019/testbed/testbed.vcxproj b/lcms2mt/Projects/VC2019/testbed/testbed.vcxproj
new file mode 100644
index 00000000..6aa71afa
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/testbed/testbed.vcxproj
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{928A3A2B-46EF-4279-959C-513B3652FF0E}</ProjectGuid>
+ <RootNamespace>testbed</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.21006.1</_ProjectFileVersion>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\testbed\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\testbed\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\testbed\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\testbed\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ <Profile>false</Profile>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <Profile>false</Profile>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <OmitFramePointers>true</OmitFramePointers>
+ <EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>
+ <AdditionalIncludeDirectories>../../../include;../../../src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CallingConvention>Cdecl</CallingConvention>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <BrowseInformation>false</BrowseInformation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ <Profile>false</Profile>
+ </Link>
+ <Bscmake>
+ <PreserveSbr>true</PreserveSbr>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <OmitFramePointers>true</OmitFramePointers>
+ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+ <AdditionalIncludeDirectories>../../../include;../../../src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CallingConvention>Cdecl</CallingConvention>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <Profile>false</Profile>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\lcms2mt_static\lcms2mt_static.vcxproj">
+ <Project>{71dede59-3f1e-486b-a899-4283000f76b5}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\testbed\testcms2.c" />
+ <ClCompile Include="..\..\..\testbed\testplugin.c" />
+ <ClCompile Include="..\..\..\testbed\zoo_icc.c" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/testbed/testbed.vcxproj.filters b/lcms2mt/Projects/VC2019/testbed/testbed.vcxproj.filters
new file mode 100644
index 00000000..993ee151
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/testbed/testbed.vcxproj.filters
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\testbed\testcms2.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\testbed\testplugin.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\testbed\zoo_icc.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/tiffdiff/tiffdiff.vcxproj b/lcms2mt/Projects/VC2019/tiffdiff/tiffdiff.vcxproj
new file mode 100644
index 00000000..5126c64c
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/tiffdiff/tiffdiff.vcxproj
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{75B91835-CCD7-48BE-A606-A9C997D5DBEE}</ProjectGuid>
+ <RootNamespace>tiffdiff</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.21006.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">C:\jpeg-8d;c:\tiff-4.0.2\libtiff;$(IncludePath)</IncludePath>
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\jpeg-8d;c:\tiff-4.0.2\libtiff;$(IncludePath)</IncludePath>
+ <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">C:\jpeg-8d;C:\tiff-4.0.2\libtiff;$(LibraryPath)</LibraryPath>
+ <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\jpeg-8d;C:\tiff-4.0.2\libtiff;$(LibraryPath)</LibraryPath>
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">C:\jpeg-8d;c:\tiff-4.0.2\libtiff;$(IncludePath)</IncludePath>
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\jpeg-8d;c:\tiff-4.0.2\libtiff;$(IncludePath)</IncludePath>
+ <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">C:\jpeg-8d;C:\tiff-4.0.2\libtiff;$(LibraryPath)</LibraryPath>
+ <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\jpeg-8d;C:\tiff-4.0.2\libtiff;$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libtiff.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libtiff.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <BrowseInformation>false</BrowseInformation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libtiff.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ <Bscmake>
+ <PreserveSbr>true</PreserveSbr>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libtiff.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\utils\common\vprf.c" />
+ <ClCompile Include="..\..\..\utils\common\xgetopt.c" />
+ <ClCompile Include="..\..\..\utils\tificc\tifdiff.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\lcms2mt_static\lcms2mt_static.vcxproj">
+ <Project>{71dede59-3f1e-486b-a899-4283000f76b5}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/tiffdiff/tiffdiff.vcxproj.filters b/lcms2mt/Projects/VC2019/tiffdiff/tiffdiff.vcxproj.filters
new file mode 100644
index 00000000..b7f9a80d
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/tiffdiff/tiffdiff.vcxproj.filters
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\utils\common\vprf.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\common\xgetopt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\tificc\tifdiff.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/tifficc/tifficc.vcxproj b/lcms2mt/Projects/VC2019/tifficc/tifficc.vcxproj
new file mode 100644
index 00000000..d6af7049
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/tifficc/tifficc.vcxproj
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{2256DE16-ED92-4A6F-9C54-F65BB61E64A2}</ProjectGuid>
+ <RootNamespace>tifficc</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.21006.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IncludePath);C:\tiff-4.0.2\libtiff</IncludePath>
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IncludePath);C:\tiff-4.0.2\libtiff</IncludePath>
+ <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LibraryPath);C:\tiff-4.0.2\libtiff</LibraryPath>
+ <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(LibraryPath);C:\tiff-4.0.2\libtiff</LibraryPath>
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IncludePath);C:\tiff-4.0.2\libtiff</IncludePath>
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IncludePath);C:\tiff-4.0.2\libtiff</IncludePath>
+ <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LibraryPath);C:\tiff-4.0.2\libtiff</LibraryPath>
+ <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(LibraryPath);C:\tiff-4.0.2\libtiff</LibraryPath>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libtiff.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libtiff.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <BrowseInformation>false</BrowseInformation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libtiff.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ <Bscmake>
+ <PreserveSbr>true</PreserveSbr>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libtiff.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\utils\common\vprf.c" />
+ <ClCompile Include="..\..\..\utils\common\xgetopt.c" />
+ <ClCompile Include="..\..\..\utils\tificc\tificc.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\utils\common\utils.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\lcms2mt_static\lcms2mt_static.vcxproj">
+ <Project>{71dede59-3f1e-486b-a899-4283000f76b5}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/tifficc/tifficc.vcxproj.filters b/lcms2mt/Projects/VC2019/tifficc/tifficc.vcxproj.filters
new file mode 100644
index 00000000..2e0e44d1
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/tifficc/tifficc.vcxproj.filters
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\utils\common\vprf.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\common\xgetopt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\tificc\tificc.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\utils\common\utils.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/transicc/transicc.vcxproj b/lcms2mt/Projects/VC2019/transicc/transicc.vcxproj
new file mode 100644
index 00000000..e3e4feeb
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/transicc/transicc.vcxproj
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9EE22D66-C849-474C-9ED5-C3E141DAB160}</ProjectGuid>
+ <RootNamespace>transicc</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.21006.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\bin\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\bin\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)_$(Platform)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <BrowseInformation>false</BrowseInformation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <PreserveSbr>true</PreserveSbr>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>../../../include;../../../utils/common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\utils\transicc\transicc.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\common\vprf.c" />
+ <ClCompile Include="..\..\..\utils\common\xgetopt.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\utils\common\utils.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\lcms2mt_static\lcms2mt_static.vcxproj">
+ <Project>{71dede59-3f1e-486b-a899-4283000f76b5}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/VC2019/transicc/transicc.vcxproj.filters b/lcms2mt/Projects/VC2019/transicc/transicc.vcxproj.filters
new file mode 100644
index 00000000..3d454430
--- /dev/null
+++ b/lcms2mt/Projects/VC2019/transicc/transicc.vcxproj.filters
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\utils\common\vprf.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\common\xgetopt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\utils\transicc\transicc.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\utils\common\utils.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/Projects/cppcheck/lcms2mt.cppcheck b/lcms2mt/Projects/cppcheck/lcms2mt.cppcheck
new file mode 100644
index 00000000..fb6ac068
--- /dev/null
+++ b/lcms2mt/Projects/cppcheck/lcms2mt.cppcheck
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="1">
+ <includedir>
+ <dir name="../../include/"/>
+ </includedir>
+ <paths>
+ <dir name="../../src"/>
+ </paths>
+</project>
diff --git a/lcms2mt/Projects/mac/LittleCMS/LittleCMS.xcodeproj/project.pbxproj b/lcms2mt/Projects/mac/LittleCMS/LittleCMS.xcodeproj/project.pbxproj
index c2e15fe1..df99b953 100755
--- a/lcms2mt/Projects/mac/LittleCMS/LittleCMS.xcodeproj/project.pbxproj
+++ b/lcms2mt/Projects/mac/LittleCMS/LittleCMS.xcodeproj/project.pbxproj
@@ -31,8 +31,8 @@
546B295E10AC5E4A0054D33A /* cmsvirt.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B294610AC5E4A0054D33A /* cmsvirt.c */; };
546B295F10AC5E4A0054D33A /* cmswtpnt.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B294710AC5E4A0054D33A /* cmswtpnt.c */; };
546B296010AC5E4A0054D33A /* cmsxform.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B294810AC5E4A0054D33A /* cmsxform.c */; };
- 546B296310AC5E600054D33A /* lcms2mt.h in Headers */ = {isa = PBXBuildFile; fileRef = 546B296110AC5E600054D33A /* lcms2mt.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 546B296410AC5E600054D33A /* lcms2mt_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 546B296210AC5E600054D33A /* lcms2mt_plugin.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 546B296310AC5E600054D33A /* lcms2.h in Headers */ = {isa = PBXBuildFile; fileRef = 546B296110AC5E600054D33A /* lcms2.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 546B296410AC5E600054D33A /* lcms2_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 546B296210AC5E600054D33A /* lcms2_plugin.h */; settings = {ATTRIBUTES = (Public, ); }; };
546B29AE10AC68410054D33A /* testcms2.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B29AD10AC68410054D33A /* testcms2.c */; };
54DBD06215A202BB00180017 /* cmshalf.c in Sources */ = {isa = PBXBuildFile; fileRef = 54DBD06015A202B200180017 /* cmshalf.c */; };
54E6DC7E18AE052800445185 /* testplugin.c in Sources */ = {isa = PBXBuildFile; fileRef = 54E6DC7D18AE052800445185 /* testplugin.c */; };
@@ -119,8 +119,8 @@
546B294610AC5E4A0054D33A /* cmsvirt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsvirt.c; path = ../../../src/cmsvirt.c; sourceTree = SOURCE_ROOT; };
546B294710AC5E4A0054D33A /* cmswtpnt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmswtpnt.c; path = ../../../src/cmswtpnt.c; sourceTree = SOURCE_ROOT; };
546B294810AC5E4A0054D33A /* cmsxform.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsxform.c; path = ../../../src/cmsxform.c; sourceTree = SOURCE_ROOT; };
- 546B296110AC5E600054D33A /* lcms2mt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lcms2mt.h; path = ../../../include/lcms2mt.h; sourceTree = SOURCE_ROOT; };
- 546B296210AC5E600054D33A /* lcms2mt_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lcms2mt_plugin.h; path = ../../../include/lcms2mt_plugin.h; sourceTree = SOURCE_ROOT; };
+ 546B296110AC5E600054D33A /* lcms2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lcms2.h; path = ../../../include/lcms2.h; sourceTree = SOURCE_ROOT; };
+ 546B296210AC5E600054D33A /* lcms2_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lcms2_plugin.h; path = ../../../include/lcms2_plugin.h; sourceTree = SOURCE_ROOT; };
546B29A310AC677E0054D33A /* testbed */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testbed; sourceTree = BUILT_PRODUCTS_DIR; };
546B29AC10AC682F0054D33A /* lcms2_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lcms2_internal.h; path = ../../../src/lcms2_internal.h; sourceTree = SOURCE_ROOT; };
546B29AD10AC68410054D33A /* testcms2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testcms2.c; path = ../../../testbed/testcms2.c; sourceTree = SOURCE_ROOT; };
@@ -213,8 +213,8 @@
CEBB92E31BF8EF2700B79324 /* cmsalpha.c */,
54DBD06015A202B200180017 /* cmshalf.c */,
546B29AC10AC682F0054D33A /* lcms2_internal.h */,
- 546B296110AC5E600054D33A /* lcms2mt.h */,
- 546B296210AC5E600054D33A /* lcms2mt_plugin.h */,
+ 546B296110AC5E600054D33A /* lcms2.h */,
+ 546B296210AC5E600054D33A /* lcms2_plugin.h */,
546B293110AC5E4A0054D33A /* cmscam02.c */,
546B293210AC5E4A0054D33A /* cmscgats.c */,
546B293310AC5E4A0054D33A /* cmscnvrt.c */,
@@ -252,8 +252,8 @@
buildActionMask = 2147483647;
files = (
8D07F2BE0486CC7A007CD1D0 /* LittleCMS_Prefix.pch in Headers */,
- 546B296310AC5E600054D33A /* lcms2mt.h in Headers */,
- 546B296410AC5E600054D33A /* lcms2mt_plugin.h in Headers */,
+ 546B296310AC5E600054D33A /* lcms2.h in Headers */,
+ 546B296410AC5E600054D33A /* lcms2_plugin.h in Headers */,
CE790F6B1A31C2400083D722 /* lcms2_internal.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
diff --git a/lcms2mt/README.1ST b/lcms2mt/README.1ST
index a0fb1e9a..431b2c9d 100644
--- a/lcms2mt/README.1ST
+++ b/lcms2mt/README.1ST
@@ -1,5 +1,15 @@
-This is lcms2mt, version 2.9. This is a forked, binary incompatible
-version of lcms2.9. For details of the differences from vanilla
-lcms2.9 see doc/WhyThisFork.txt
+This is lcms2mt, version 2.10. This is a forked, binary incompatible
+version of lcms2.10. For details of the differences from vanilla
+lcms2.10 see doc/WhyThisFork.txt
-Please see the documentation in doc folder
+About Little CMS
+Little CMS intends to be an OPEN SOURCE small-footprint color management engine, with special focus on accuracy and performance. It uses the International Color Consortium standard (ICC), which is the modern standard when regarding to color management. The ICC specification is widely used and is referred to in many International and other de-facto standards. It was approved as an International Standard, ISO 15076-1, in 2005.
+
+Conformance
+Little CMS 2.10 is a FULL IMPLEMENTATION of ICC specification 4.3, it fully supports all kind of V2 and V4 profiles, including abstract, devicelink and named color profiles. Check the tutorial for a exhaustive list of features.
+
+
+A bit of story
+Since the initial release, back in 1998, Little CMS has grown to become one of the most popular open-source color management libraries, and has been used in a large number of production projects, in areas as printer firmware, monitors, digital cameras, RIPs, publishing, scientific, and many others. You can find Little CMS in most Linux distributions, and it's released under an open source license.
+
+Please see the complete documentation in doc folder
diff --git a/lcms2mt/aclocal.m4 b/lcms2mt/aclocal.m4
index 76613461..ed6a6af8 100644
--- a/lcms2mt/aclocal.m4
+++ b/lcms2mt/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.15 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -32,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.])
# generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.15'
+[am__api_version='1.16'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
-m4_if([$1], [1.15], [],
+m4_if([$1], [1.16.1], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.15])dnl
+[AM_AUTOMAKE_VERSION([1.16.1])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
# AM_CONDITIONAL -*- Autoconf -*-
-# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -332,13 +332,12 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
# Generate code to set up dependency tracking. -*- Autoconf -*-
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-
# _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
@@ -346,49 +345,41 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
# Older Autoconf quotes --file arguments for eval, but not when files
# are listed without --file. Let's play safe and only enable the eval
# if we detect the quoting.
- case $CONFIG_FILES in
- *\'*) eval set x "$CONFIG_FILES" ;;
- *) set x $CONFIG_FILES ;;
- esac
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ AS_CASE([$CONFIG_FILES],
+ [*\'*], [eval set x "$CONFIG_FILES"],
+ [*], [set x $CONFIG_FILES])
shift
- for mf
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
do
# Strip MF so we end up with the name of the file.
- mf=`echo "$mf" | sed -e 's/:.*$//'`
- # Check whether this is an Automake generated Makefile or not.
- # We used to match only the files named 'Makefile.in', but
- # some people rename them; so instead we look at the file content.
- # Grep'ing the first line is not enough: some people post-process
- # each Makefile.in and add a new line on top of each file to say so.
- # Grep'ing the whole file is not good either: AIX grep has a line
+ am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
# limit of 2048, but all sed's we know have understand at least 4000.
- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
- dirpart=`AS_DIRNAME("$mf")`
- else
- continue
- fi
- # Extract the definition of DEPDIR, am__include, and am__quote
- # from the Makefile without running 'make'.
- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
- test -z "$DEPDIR" && continue
- am__include=`sed -n 's/^am__include = //p' < "$mf"`
- test -z "$am__include" && continue
- am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
- # Find all dependency output files, they are included files with
- # $(DEPDIR) in their names. We invoke sed twice because it is the
- # simplest approach to changing $(DEPDIR) to its actual value in the
- # expansion.
- for file in `sed -n "
- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
- # Make sure the directory exists.
- test -f "$dirpart/$file" && continue
- fdir=`AS_DIRNAME(["$file"])`
- AS_MKDIR_P([$dirpart/$fdir])
- # echo "creating $dirpart/$file"
- echo '# dummy' > "$dirpart/$file"
- done
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`AS_DIRNAME(["$am_mf"])`
+ am_filepart=`AS_BASENAME(["$am_mf"])`
+ AM_RUN_LOG([cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles]) || am_rc=$?
done
+ if test $am_rc -ne 0; then
+ AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. Try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).])
+ fi
+ AS_UNSET([am_dirpart])
+ AS_UNSET([am_filepart])
+ AS_UNSET([am_mf])
+ AS_UNSET([am_rc])
+ rm -f conftest-deps.mk
}
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
@@ -397,18 +388,17 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
# -----------------------------
# This macro should only be invoked once -- use via AC_REQUIRE.
#
-# This code is only required when automatic dependency tracking
-# is enabled. FIXME. This creates each '.P' file that we will
-# need in order to bootstrap the dependency handling code.
+# This code is only required when automatic dependency tracking is enabled.
+# This creates each '.Po' and '.Plo' makefile fragment that we'll need in
+# order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AC_CONFIG_COMMANDS([depfiles],
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
- [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
+ [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
# Do all the work for Automake. -*- Autoconf -*-
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -495,8 +485,8 @@ AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
# For better backward compatibility. To be removed once Automake 1.9.x
# dies out for good. For more background, see:
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
# We need awk for the "check" target (and possibly the TAP driver). The
# system "awk" is bad on some platforms.
@@ -563,7 +553,7 @@ END
Aborting the configuration process, to ensure you take notice of the issue.
You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <http://www.gnu.org/software/coreutils/>.
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
If you want to complete the configuration process using your problematic
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
@@ -605,7 +595,7 @@ for _am_header in $config_headers :; do
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -626,7 +616,7 @@ if test x"${install_sh+set}" != xset; then
fi
AC_SUBST([install_sh])])
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -648,7 +638,7 @@ AC_SUBST([am__leading_dot])])
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -683,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
# Check to see how 'make' treats includes. -*- Autoconf -*-
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -691,49 +681,42 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
# AM_MAKE_INCLUDE()
# -----------------
-# Check to see how make treats includes.
+# Check whether make has an 'include' directive that can support all
+# the idioms we need for our automatic dependency tracking code.
AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
+[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
+cat > confinc.mk << 'END'
am__doit:
- @echo this is the am__doit target
+ @echo this is the am__doit target >confinc.out
.PHONY: am__doit
END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
am__include="#"
am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
- am__include=include
- am__quote=
- _am_result=GNU
- ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- case `$am_make -s -f confmf 2> /dev/null` in #(
- *the\ am__doit\ target*)
- am__include=.include
- am__quote="\""
- _am_result=BSD
- ;;
- esac
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
+ AS_CASE([$?:`cat confinc.out 2>/dev/null`],
+ ['0:this is the am__doit target'],
+ [AS_CASE([$s],
+ [BSD], [am__include='.include' am__quote='"'],
+ [am__include='include' am__quote=''])])
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+AC_MSG_RESULT([${_am_result}])
+AC_SUBST([am__include])])
+AC_SUBST([am__quote])])
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -772,7 +755,7 @@ fi
# Helper functions for option handling. -*- Autoconf -*-
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -801,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -848,7 +831,7 @@ AC_LANG_POP([C])])
# For backward compatibility.
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -867,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG],
# Check to make sure that the build environment is sane. -*- Autoconf -*-
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -948,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE(
rm -f conftest.file
])
-# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2009-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1008,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
])
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1036,7 +1019,7 @@ fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1055,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*-
-# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
diff --git a/lcms2mt/config.guess b/lcms2mt/config.guess
index 82e59e2a..e7464614 100755
--- a/lcms2mt/config.guess
+++ b/lcms2mt/config.guess
@@ -1101,7 +1101,6 @@ EOF
# the processor, so we play safe by assuming i586.
# Note: whatever this is, it MUST be the same as what config.sub
# prints for the "djgpp" host, or else GDB configuration will decide that
- # prints for the "djgpp" host, or else GDB configuration will decide that
# this is a cross-build.
echo i586-pc-msdosdjgpp
exit ;;
diff --git a/lcms2mt/configure b/lcms2mt/configure
index 952d80b8..32ba181b 100644
--- a/lcms2mt/configure
+++ b/lcms2mt/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for lcms2 2.9.
+# Generated by GNU Autoconf 2.69 for lcms2mt 2.10.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -585,10 +585,10 @@ MFLAGS=
MAKEFLAGS=
# Identity of this package.
-PACKAGE_NAME='lcms2'
-PACKAGE_TARNAME='lcms2'
-PACKAGE_VERSION='2.9'
-PACKAGE_STRING='lcms2 2.9'
+PACKAGE_NAME='lcms2mt'
+PACKAGE_TARNAME='lcms2mt'
+PACKAGE_VERSION='2.10'
+PACKAGE_STRING='lcms2mt 2.10'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -693,7 +693,6 @@ am__nodep
AMDEPBACKSLASH
AMDEP_FALSE
AMDEP_TRUE
-am__quote
am__include
DEPDIR
OBJEXT
@@ -779,7 +778,8 @@ PACKAGE_VERSION
PACKAGE_TARNAME
PACKAGE_NAME
PATH_SEPARATOR
-SHELL'
+SHELL
+am__quote'
ac_subst_files=''
ac_user_opts='
enable_option_checking
@@ -1361,7 +1361,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures lcms2 2.9 to adapt to many kinds of systems.
+\`configure' configures lcms2mt 2.10 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1410,7 +1410,7 @@ Fine tuning of the installation directories:
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/lcms2]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/lcms2mt]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
@@ -1432,7 +1432,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of lcms2 2.9:";;
+ short | recursive ) echo "Configuration of lcms2mt 2.10:";;
esac
cat <<\_ACEOF
@@ -1547,7 +1547,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-lcms2 configure 2.9
+lcms2mt configure 2.10
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2033,7 +2033,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by lcms2 $as_me 2.9, which was
+It was created by lcms2mt $as_me 2.10, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2407,7 +2407,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
# then set age to 0.
#
LIBRARY_CURRENT=2
-LIBRARY_REVISION=8
+LIBRARY_REVISION=10
LIBRARY_AGE=0
@@ -2513,7 +2513,7 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-am__api_version='1.15'
+am__api_version='1.16'
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
@@ -2998,8 +2998,8 @@ fi
# Define the identity of the package.
- PACKAGE='lcms2'
- VERSION='2.9'
+ PACKAGE='lcms2mt'
+ VERSION='2.10'
# Some tools Automake needs.
@@ -3020,8 +3020,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
# For better backward compatibility. To be removed once Automake 1.9.x
# dies out for good. For more background, see:
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
mkdir_p='$(MKDIR_P)'
# We need awk for the "check" target (and possibly the TAP driver). The
@@ -3072,7 +3072,7 @@ END
Aborting the configuration process, to ensure you take notice of the issue.
You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <http://www.gnu.org/software/coreutils/>.
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
If you want to complete the configuration process using your problematic
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
@@ -3090,45 +3090,45 @@ DEPDIR="${am__leading_dot}deps"
ac_config_commands="$ac_config_commands depfiles"
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
+cat > confinc.mk << 'END'
am__doit:
- @echo this is the am__doit target
+ @echo this is the am__doit target >confinc.out
.PHONY: am__doit
END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
-$as_echo_n "checking for style of include used by $am_make... " >&6; }
am__include="#"
am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
- am__include=include
- am__quote=
- _am_result=GNU
- ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- case `$am_make -s -f confmf 2> /dev/null` in #(
- *the\ am__doit\ target*)
- am__include=.include
- am__quote="\""
- _am_result=BSD
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
+ (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ case $?:`cat confinc.out 2>/dev/null` in #(
+ '0:this is the am__doit target') :
+ case $s in #(
+ BSD) :
+ am__include='.include' am__quote='"' ;; #(
+ *) :
+ am__include='include' am__quote='' ;;
+esac ;; #(
+ *) :
;;
- esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
+esac
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+$as_echo "${_am_result}" >&6; }
# Check whether --enable-dependency-tracking was given.
if test "${enable_dependency_tracking+set}" = set; then :
@@ -16938,7 +16938,8 @@ else
fi
- ac_fn_c_check_header_mongrel "$LINENO" "jmorecfg.h" "ac_cv_header_jmorecfg_h" "$ac_includes_default"
+ ac_fn_c_check_header_compile "$LINENO" "jmorecfg.h" "ac_cv_header_jmorecfg_h" "#include <jconfig.h>
+"
if test "x$ac_cv_header_jmorecfg_h" = xyes; then :
passed=`expr $passed + 1`
else
@@ -17080,7 +17081,7 @@ fi
# Check for ZLIB
#
have_zlib='no'
-if test ! "$with_zlib" = 'no' || test ! "$with_png" = 'no'
+if test ! "$with_zlib" = 'no' || test ! "$with_tiff" = 'no'
then
LIB_ZLIB=''
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZLIB support " >&5
@@ -17593,7 +17594,7 @@ fi
-# Libraries that the LCMS library depends on
+# Libraries that the LCMS2MT library depends on
LCMS_LIB_DEPLIBS="$LIB_MATH $LIB_THREAD"
LCMS_LIB_DEPLIBS=`echo $LCMS_LIB_DEPLIBS | sed -e 's/ */ /g'`
@@ -17615,7 +17616,7 @@ LIBS=''
#
ac_config_files="$ac_config_files Makefile"
-ac_config_files="$ac_config_files lcms2.pc"
+ac_config_files="$ac_config_files lcms2mt.pc"
ac_config_files="$ac_config_files include/Makefile"
@@ -18220,7 +18221,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by lcms2 $as_me 2.9, which was
+This file was extended by lcms2mt $as_me 2.10, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -18277,7 +18278,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-lcms2 config.status 2.9
+lcms2mt config.status 2.10
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -18385,7 +18386,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
#
# INIT-COMMANDS
#
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
# The HP-UX ksh and POSIX shell print the target directory to stdout
@@ -18775,7 +18776,7 @@ do
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
"libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "lcms2.pc") CONFIG_FILES="$CONFIG_FILES lcms2.pc" ;;
+ "lcms2mt.pc") CONFIG_FILES="$CONFIG_FILES lcms2mt.pc" ;;
"include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
"src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
"utils/tificc/Makefile") CONFIG_FILES="$CONFIG_FILES utils/tificc/Makefile" ;;
@@ -19217,29 +19218,35 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
# Older Autoconf quotes --file arguments for eval, but not when files
# are listed without --file. Let's play safe and only enable the eval
# if we detect the quoting.
- case $CONFIG_FILES in
- *\'*) eval set x "$CONFIG_FILES" ;;
- *) set x $CONFIG_FILES ;;
- esac
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ case $CONFIG_FILES in #(
+ *\'*) :
+ eval set x "$CONFIG_FILES" ;; #(
+ *) :
+ set x $CONFIG_FILES ;; #(
+ *) :
+ ;;
+esac
shift
- for mf
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
do
# Strip MF so we end up with the name of the file.
- mf=`echo "$mf" | sed -e 's/:.*$//'`
- # Check whether this is an Automake generated Makefile or not.
- # We used to match only the files named 'Makefile.in', but
- # some people rename them; so instead we look at the file content.
- # Grep'ing the first line is not enough: some people post-process
- # each Makefile.in and add a new line on top of each file to say so.
- # Grep'ing the whole file is not good either: AIX grep has a line
+ am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
# limit of 2048, but all sed's we know have understand at least 4000.
- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
- dirpart=`$as_dirname -- "$mf" ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$mf" : 'X\(//\)[^/]' \| \
- X"$mf" : 'X\(//\)$' \| \
- X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$mf" |
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`$as_dirname -- "$am_mf" ||
+$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$am_mf" : 'X\(//\)[^/]' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$am_mf" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -19257,53 +19264,48 @@ $as_echo X"$mf" |
q
}
s/.*/./; q'`
- else
- continue
- fi
- # Extract the definition of DEPDIR, am__include, and am__quote
- # from the Makefile without running 'make'.
- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
- test -z "$DEPDIR" && continue
- am__include=`sed -n 's/^am__include = //p' < "$mf"`
- test -z "$am__include" && continue
- am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
- # Find all dependency output files, they are included files with
- # $(DEPDIR) in their names. We invoke sed twice because it is the
- # simplest approach to changing $(DEPDIR) to its actual value in the
- # expansion.
- for file in `sed -n "
- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
- # Make sure the directory exists.
- test -f "$dirpart/$file" && continue
- fdir=`$as_dirname -- "$file" ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$file" : 'X\(//\)[^/]' \| \
- X"$file" : 'X\(//\)$' \| \
- X"$file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
+ am_filepart=`$as_basename -- "$am_mf" ||
+$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$am_mf" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
}
- /^X\(\/\/\)$/{
+ /^X\/\(\/\/\)$/{
s//\1/
q
}
- /^X\(\/\).*/{
+ /^X\/\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
- as_dir=$dirpart/$fdir; as_fn_mkdir_p
- # echo "creating $dirpart/$file"
- echo '# dummy' > "$dirpart/$file"
- done
+ { echo "$as_me:$LINENO: cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles" >&5
+ (cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } || am_rc=$?
done
+ if test $am_rc -ne 0; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. Try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ { am_dirpart=; unset am_dirpart;}
+ { am_filepart=; unset am_filepart;}
+ { am_mf=; unset am_mf;}
+ { am_rc=; unset am_rc;}
+ rm -f conftest-deps.mk
}
;;
"libtool":C)
diff --git a/lcms2mt/configure.ac b/lcms2mt/configure.ac
index b4c2bc62..e347750f 100644
--- a/lcms2mt/configure.ac
+++ b/lcms2mt/configure.ac
@@ -7,7 +7,7 @@ AC_PREREQ(2.60)
#
# Set the package name and version
#
-AC_INIT(lcms2mt,2.9)
+AC_INIT(lcms2mt,2.10)
# Specify directory where m4 macros may be found.
AC_CONFIG_MACRO_DIR([m4])
@@ -34,7 +34,7 @@ AC_CONFIG_MACRO_DIR([m4])
# then set age to 0.
#
LIBRARY_CURRENT=2
-LIBRARY_REVISION=8
+LIBRARY_REVISION=10
LIBRARY_AGE=0
AC_SUBST(LIBRARY_CURRENT)dnl
@@ -218,7 +218,7 @@ then
passed=0;
AC_CHECK_HEADER(jconfig.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
AC_CHECK_HEADER(jerror.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_HEADER(jmorecfg.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
+ AC_CHECK_HEADER(jmorecfg.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`,[#include <jconfig.h>])
AC_CHECK_HEADER(jpeglib.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
AC_CHECK_LIB(jpeg,jpeg_read_header,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
@@ -273,8 +273,8 @@ AC_SUBST(LIB_JPEG)
# Check for ZLIB
#
have_zlib='no'
-dnl PNG requires zlib so enable zlib check if PNG is requested
-if test ! "$with_zlib" = 'no' || test ! "$with_png" = 'no'
+dnl TIFF may require zlib so enable zlib check if TIFF is requested
+if test ! "$with_zlib" = 'no' || test ! "$with_tiff" = 'no'
then
LIB_ZLIB=''
AC_MSG_CHECKING(for ZLIB support )
@@ -350,9 +350,9 @@ AC_SUBST(LIB_TIFF)
# Libraries that the LCMS2MT library depends on
-LCMS2MT_LIB_DEPLIBS="$LIB_MATH $LIB_THREAD"
-LCMS2MT_LIB_DEPLIBS=`echo $LCMS2MT_LIB_DEPLIBS | sed -e 's/ */ /g'`
-AC_SUBST(LCMS2MT_LIB_DEPLIBS)
+LCMS_LIB_DEPLIBS="$LIB_MATH $LIB_THREAD"
+LCMS_LIB_DEPLIBS=`echo $LCMS_LIB_DEPLIBS | sed -e 's/ */ /g'`
+AC_SUBST(LCMS_LIB_DEPLIBS)
# Libraries that the jpegicc program depends on
JPEGICC_DEPLIBS="$LIB_JPEG $LIB_MATH $LIB_THREAD"
diff --git a/lcms2mt/doc/LittleCMS2.10 API.pdf b/lcms2mt/doc/LittleCMS2.10 API.pdf
new file mode 100644
index 00000000..2d9223c4
--- /dev/null
+++ b/lcms2mt/doc/LittleCMS2.10 API.pdf
Binary files differ
diff --git a/lcms2mt/doc/LittleCMS2.10 Plugin API.pdf b/lcms2mt/doc/LittleCMS2.10 Plugin API.pdf
new file mode 100644
index 00000000..51ae6f6f
--- /dev/null
+++ b/lcms2mt/doc/LittleCMS2.10 Plugin API.pdf
Binary files differ
diff --git a/lcms2mt/doc/LittleCMS2.10 tutorial.pdf b/lcms2mt/doc/LittleCMS2.10 tutorial.pdf
new file mode 100644
index 00000000..5351c0e3
--- /dev/null
+++ b/lcms2mt/doc/LittleCMS2.10 tutorial.pdf
Binary files differ
diff --git a/lcms2mt/doc/LittleCMS2.9 API.pdf b/lcms2mt/doc/LittleCMS2.9 API.pdf
deleted file mode 100644
index 16c16f6b..00000000
--- a/lcms2mt/doc/LittleCMS2.9 API.pdf
+++ /dev/null
Binary files differ
diff --git a/lcms2mt/doc/LittleCMS2.9 Plugin API.pdf b/lcms2mt/doc/LittleCMS2.9 Plugin API.pdf
deleted file mode 100644
index 83f30438..00000000
--- a/lcms2mt/doc/LittleCMS2.9 Plugin API.pdf
+++ /dev/null
Binary files differ
diff --git a/lcms2mt/doc/LittleCMS2.9 tutorial.pdf b/lcms2mt/doc/LittleCMS2.9 tutorial.pdf
deleted file mode 100644
index 2fd33351..00000000
--- a/lcms2mt/doc/LittleCMS2.9 tutorial.pdf
+++ /dev/null
Binary files differ
diff --git a/lcms2mt/doc/WhyThisFork.txt b/lcms2mt/doc/WhyThisFork.txt
index e3cbde47..2026abc7 100644
--- a/lcms2mt/doc/WhyThisFork.txt
+++ b/lcms2mt/doc/WhyThisFork.txt
@@ -1,5 +1,5 @@
- LCMS 2.9.MT
- ===========
+ LCMS 2.10.MT
+ ============
Why does this fork exist?
~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/lcms2mt/include/Makefile.in b/lcms2mt/include/Makefile.in
index a69fc7f3..be55841c 100644
--- a/lcms2mt/include/Makefile.in
+++ b/lcms2mt/include/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -341,8 +341,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -433,7 +433,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/lcms2mt/include/lcms2mt.h b/lcms2mt/include/lcms2mt.h
index 6d5ad1aa..5791a5dc 100644
--- a/lcms2mt/include/lcms2mt.h
+++ b/lcms2mt/include/lcms2mt.h
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -23,7 +23,7 @@
//
//---------------------------------------------------------------------------------
//
-// Version 2.9rc3
+// Version 2.10
//
#ifndef _lcms2mt_H
@@ -61,6 +61,9 @@
// Uncomment this for special windows mutex initialization (see lcms2_internal.h)
// #define CMS_RELY_ON_WINDOWS_STATIC_MUTEX_INIT
+// Uncomment this to remove the "register" storage class
+// #define CMS_NO_REGISTER_KEYWORD 1
+
// ********** End of configuration toggles ******************************
// Needed for streams
@@ -78,15 +81,15 @@ extern "C" {
#endif
// Version/release
-// Vanilla LCMS2 uses values from 2000-2090. This is
+// Vanilla LCMS2 uses values from 2000-2100. This is
// used as an unsigned number. We want any attempt to
// use OUR numbers with a mainline LCMS to fail, so
-// we have to go under 2000-2090. Let's subtract
+// we have to go under 2000-2100. Let's subtract
// 2000 from the mainline release.
-#define LCMS_VERSION (2090 - 2000)
+#define LCMS_VERSION (2100 - 2000)
// We expect any LCMS2MT release to fall within the
-// following rance.
+// following range.
#define LCMS2MT_VERSION_MIN (0)
#define LCMS2MT_VERSION_MAX (999)
@@ -158,6 +161,13 @@ typedef double cmsFloat64Number;
#endif
#endif
+// Handle "register" keyword
+#if defined(CMS_NO_REGISTER_KEYWORD) && !defined(CMS_DLL) && !defined(CMS_DLL_BUILD)
+# define CMSREGISTER
+#else
+# define CMSREGISTER register
+#endif
+
// In the case 64 bit numbers are not supported by the compiler
#ifdef CMS_DONT_USE_INT64
typedef cmsUInt32Number cmsUInt64Number[2];
@@ -244,10 +254,15 @@ typedef int cmsBool;
# define CMSEXPORT
# define CMSAPI
# endif
+#else // not Windows
+# ifdef HAVE_FUNC_ATTRIBUTE_VISIBILITY
+# define CMSEXPORT
+# define CMSAPI __attribute__((visibility("default")))
#else
# define CMSEXPORT
# define CMSAPI
#endif
+#endif // CMS_IS_WINDOWS_
#ifdef HasTHREADS
# if HasTHREADS == 1
@@ -1035,7 +1050,7 @@ CMSAPI long int CMSEXPORT cmsfilelength(FILE* f);
typedef struct _cmsContext_struct* cmsContext;
CMSAPI cmsContext CMSEXPORT cmsCreateContext(void* Plugin, void* UserData);
-CMSAPI void CMSEXPORT cmsDeleteContext(cmsContext ContexID);
+CMSAPI void CMSEXPORT cmsDeleteContext(cmsContext ContextID);
CMSAPI cmsContext CMSEXPORT cmsDupContext(cmsContext ContextID, void* NewUserData);
CMSAPI void* CMSEXPORT cmsGetContextUserData(cmsContext ContextID);
@@ -1249,13 +1264,15 @@ CMSAPI cmsStageSignature CMSEXPORT cmsStageType(cmsContext ContextID, const cmsS
CMSAPI void* CMSEXPORT cmsStageData(cmsContext ContextID, const cmsStage* mpe);
// Sampling
-typedef cmsInt32Number (* cmsSAMPLER16) (cmsContext ContextID, register const cmsUInt16Number In[],
- register cmsUInt16Number Out[],
- register void * Cargo);
+typedef cmsInt32Number (* cmsSAMPLER16) (cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number In[],
+ CMSREGISTER cmsUInt16Number Out[],
+ CMSREGISTER void * Cargo);
-typedef cmsInt32Number (* cmsSAMPLERFLOAT)(cmsContext ContextID, register const cmsFloat32Number In[],
- register cmsFloat32Number Out[],
- register void * Cargo);
+typedef cmsInt32Number (* cmsSAMPLERFLOAT)(cmsContext ContextID,
+ CMSREGISTER const cmsFloat32Number In[],
+ CMSREGISTER cmsFloat32Number Out[],
+ CMSREGISTER void * Cargo);
// Use this flag to prevent changes being written to destination
#define SAMPLER_INSPECT 0x01000000
@@ -1396,7 +1413,6 @@ typedef struct {
typedef struct {
cmsUInt32Number n;
- cmsContext ContextIDContextID;
cmsPSEQDESC* seq;
} cmsSEQ;
@@ -1644,8 +1660,6 @@ CMSAPI cmsUInt32Number CMSEXPORT cmsGetSupportedIntents(cmsContext ContextID,
// Copy alpha channels when transforming
#define cmsFLAGS_COPY_ALPHA 0x04000000 // Alpha channels are copied on cmsDoTransform()
-#define cmsFLAGS_FORCE_LINEARINTERP 0x08000000 // Force slower but more accurate interpolation
-
// Fine-tune control over number of gridpoints
#define cmsFLAGS_GRIDPOINTS(n) (((n) & 0xFF) << 16)
diff --git a/lcms2mt/include/lcms2mt_plugin.h b/lcms2mt/include/lcms2mt_plugin.h
index efd05a34..fad17247 100644
--- a/lcms2mt/include/lcms2mt_plugin.h
+++ b/lcms2mt/include/lcms2mt_plugin.h
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -94,6 +94,12 @@ CMSAPI cmsBool CMSEXPORT _cmsMAT3solve(cmsContext ContextID, cmsVEC3*
CMSAPI void CMSEXPORT _cmsMAT3eval(cmsContext ContextID, cmsVEC3* r, const cmsMAT3* a, const cmsVEC3* v);
+// MD5 low level -------------------------------------------------------------------------------------
+
+CMSAPI cmsHANDLE CMSEXPORT cmsMD5alloc(cmsContext ContextID);
+CMSAPI void CMSEXPORT cmsMD5add(cmsHANDLE Handle, const cmsUInt8Number* buf, cmsUInt32Number len);
+CMSAPI void CMSEXPORT cmsMD5finish(cmsContext ContextID, cmsProfileID* ProfileID, cmsHANDLE Handle);
+
// Error logging -------------------------------------------------------------------------------------
CMSAPI void CMSEXPORT cmsSignalError(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *ErrorText, ...);
@@ -254,9 +260,10 @@ struct _cms_interp_struc;
// 16 bits forward interpolation. This function performs precision-limited linear interpolation
// and is supposed to be quite fast. Implementation may be tetrahedral or trilinear, and plug-ins may
// choose to implement any other interpolation algorithm.
-typedef void (* _cmsInterpFn16)(cmsContext ContextID, register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const struct _cms_interp_struc* p);
+typedef void (* _cmsInterpFn16)(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Input[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const struct _cms_interp_struc* p);
// Floating point forward interpolation. Full precision interpolation using floats. This is not a
// time critical function. Implementation may be tetrahedral or trilinear, and plug-ins may
@@ -337,10 +344,11 @@ typedef struct {
struct _cmstransform_struct;
-typedef cmsUInt8Number* (* cmsFormatter16)(cmsContext ContextID, register struct _cmstransform_struct* CMMcargo,
- register cmsUInt16Number Values[],
- register cmsUInt8Number* Buffer,
- register cmsUInt32Number Stride);
+typedef cmsUInt8Number* (* cmsFormatter16)(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride);
typedef cmsUInt8Number* (* cmsFormatterFloat)(cmsContext ContextID, struct _cmstransform_struct* CMMcargo,
cmsFloat32Number Values[],
@@ -537,9 +545,10 @@ typedef struct {
// the optimization search. Or FALSE if it is unable to optimize and want to give a chance
// to the rest of optimizers.
-typedef void (* _cmsOPTeval16Fn)(cmsContext ContextID, register const cmsUInt16Number In[],
- register cmsUInt16Number Out[],
- register const void* Data);
+typedef void (* _cmsOPTeval16Fn)(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number In[],
+ CMSREGISTER cmsUInt16Number Out[],
+ CMSREGISTER const void* Data);
typedef cmsBool (* _cmsOPToptimizeFn)(cmsContext ContextID, cmsPipeline** Lut,
diff --git a/lcms2mt/plugins/README.1ST b/lcms2mt/plugins/README.1ST
new file mode 100644
index 00000000..c8ab2860
--- /dev/null
+++ b/lcms2mt/plugins/README.1ST
@@ -0,0 +1,6 @@
+
+
+ IMPORTANT: Before adding those plug-ins to your commercial project, please check licenses for each plugin.
+
+ LittleCMS core is released under MIT, but plug-ins may be released under other license. fast_float, for example is GPL3
+ \ No newline at end of file
diff --git a/lcms2mt/plugins/fast_float/COPYING.GPL3 b/lcms2mt/plugins/fast_float/COPYING.GPL3
new file mode 100644
index 00000000..20d40b6b
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/COPYING.GPL3
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. 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
+them 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 prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. 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.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey 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;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If 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 convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU 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 that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ 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.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+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.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ 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
+state 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 3 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, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program 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, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU 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 Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>. \ No newline at end of file
diff --git a/lcms2mt/plugins/fast_float/Makefile b/lcms2mt/plugins/fast_float/Makefile
new file mode 100644
index 00000000..c77ff48c
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/Makefile
@@ -0,0 +1,12 @@
+
+# Dummy
+all:
+check:
+install:
+install-exec:
+uninstall:
+clean:
+distclean:
+ echo .
+
+ \ No newline at end of file
diff --git a/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj b/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj
new file mode 100644
index 00000000..4c45cd6a
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\lcms2mt_fast_float.h" />
+ <ClInclude Include="..\..\src\fast_float_internal.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\src\fast_16_tethra.c" />
+ <ClCompile Include="..\..\src\fast_8_curves.c" />
+ <ClCompile Include="..\..\src\fast_8_matsh.c" />
+ <ClCompile Include="..\..\src\fast_8_tethra.c" />
+ <ClCompile Include="..\..\src\fast_float_15bits.c" />
+ <ClCompile Include="..\..\src\fast_float_15mats.c" />
+ <ClCompile Include="..\..\src\fast_float_cmyk.c" />
+ <ClCompile Include="..\..\src\fast_float_curves.c" />
+ <ClCompile Include="..\..\src\fast_float_matsh.c" />
+ <ClCompile Include="..\..\src\fast_float_separate.c" />
+ <ClCompile Include="..\..\src\fast_float_sup.c" />
+ <ClCompile Include="..\..\src\fast_float_tethra.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\..\..\Projects\VC2019\lcms2mt_static\lcms2mt_static.vcxproj">
+ <Project>{71dede59-3f1e-486b-a899-4283000f76b5}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="..\..\COPYING.GPL3" />
+ <None Include="..\..\doc\LittleCMS fast float extensions 1.0.pdf" />
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{AD9FF79B-CF6E-4971-A7CF-DAA47D636676}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>fast</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <IntDir>$(Platform)\fast_float_plugin_$(Configuration)\</IntDir>
+ <OutDir>..\..\..\..\Lib\MS\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <IntDir>$(Platform)\fast_float_plugin_$(Configuration)\</IntDir>
+ <OutDir>..\..\..\..\Lib\MS\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <IntDir>$(Platform)\fast_float_plugin_$(Configuration)\</IntDir>
+ <OutDir>..\..\..\..\Lib\MS\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <IntDir>$(Platform)\fast_float_plugin_$(Configuration)\</IntDir>
+ <OutDir>..\..\..\..\Lib\MS\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level4</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BrowseInformation>false</BrowseInformation>
+ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <OmitFramePointers>true</OmitFramePointers>
+ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <Bscmake>
+ <PreserveSbr>true</PreserveSbr>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level4</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <OmitFramePointers>true</OmitFramePointers>
+ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+ <EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj.filters b/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj.filters
new file mode 100644
index 00000000..f78d01cd
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj.filters
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{7d5b1769-2be4-46f2-9e35-6260eea79d7f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="doc">
+ <UniqueIdentifier>{012df308-35db-4909-b035-b1cd5fd1ee5b}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\lcms2mt_fast_float.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\src\fast_float_internal.h">
+ <Filter>Source Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\src\fast_float_15bits.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\fast_float_curves.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\fast_float_separate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\fast_float_sup.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\fast_float_tethra.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\fast_float_15mats.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\fast_float_matsh.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\fast_float_cmyk.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\fast_8_matsh.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\fast_8_curves.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\fast_8_tethra.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\fast_16_tethra.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="..\..\COPYING.GPL3">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\..\doc\LittleCMS fast float extensions 1.0.pdf">
+ <Filter>doc</Filter>
+ </None>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj.user b/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj.user
new file mode 100644
index 00000000..88a55094
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj.user
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup />
+</Project> \ No newline at end of file
diff --git a/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj b/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj
new file mode 100644
index 00000000..771e42ec
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{7629D670-C419-402B-8A90-747952EE9FC0}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>fast_testbed</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <IntDir>$(Platform)\testbed_$(Configuration)\</IntDir>
+ <OutDir>$(ProjectDir)..\..\testbed\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ <IntDir>$(Platform)\testbed_$(Configuration)\</IntDir>
+ <OutDir>$(ProjectDir)..\..\testbed\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <IntDir>$(Platform)\testbed_$(Configuration)\</IntDir>
+ <OutDir>$(ProjectDir)..\..\testbed\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <IntDir>$(Platform)\testbed_$(Configuration)\</IntDir>
+ <OutDir>$(ProjectDir)..\..\testbed\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..\..\include;..\..\include;..\..\src</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..\..\include;..\..\include;..\..\src</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level4</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..\..\include;..\..\include;..\..\src</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level4</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..\..\include;..\..\include;..\..\src</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\testbed\fast_float_testbed.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\..\..\Projects\VC2019\lcms2mt_static\lcms2mt_static.vcxproj">
+ <Project>{71dede59-3f1e-486b-a899-4283000f76b5}</Project>
+ </ProjectReference>
+ <ProjectReference Include="lcms2mt_fast_float_plugin.vcxproj">
+ <Project>{ad9ff79b-cf6e-4971-a7cf-daa47d636676}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj.filters b/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj.filters
new file mode 100644
index 00000000..4cec6b7c
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\testbed\fast_float_testbed.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj.user b/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj.user
new file mode 100644
index 00000000..88a55094
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj.user
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup />
+</Project> \ No newline at end of file
diff --git a/lcms2mt/plugins/fast_float/doc/LittleCMS fast float extensions 1.0.pdf b/lcms2mt/plugins/fast_float/doc/LittleCMS fast float extensions 1.0.pdf
new file mode 100644
index 00000000..e6e0daa1
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/doc/LittleCMS fast float extensions 1.0.pdf
Binary files differ
diff --git a/lcms2mt/plugins/fast_float/include/Makefile.am b/lcms2mt/plugins/fast_float/include/Makefile.am
new file mode 100644
index 00000000..01d8ed71
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/include/Makefile.am
@@ -0,0 +1,6 @@
+#
+# Makefile for include directory
+
+include_HEADERS = lcms2mt_fast_float.h
+
+EXTRA_DIST = lcms2mt_fast_float.h
diff --git a/lcms2mt/plugins/fast_float/include/lcms2mt_fast_float.h b/lcms2mt/plugins/fast_float/include/lcms2mt_fast_float.h
new file mode 100644
index 00000000..572d82d1
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/include/lcms2mt_fast_float.h
@@ -0,0 +1,139 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+#ifndef _LCMS2MT_FAST_FLOAT_H
+#define _LCMS2MT_FAST_FLOAT_H
+
+#include "lcms2mt_plugin.h"
+
+#ifndef CMS_USE_CPP_API
+# ifdef __cplusplus
+extern "C" {
+# endif
+#endif
+
+#define LCMS2_FAST_FLOAT_VERSION 1200
+
+// The one and only plug-in entry point. To install this plugin in your code
+// you need to place this in some initialization place:
+//
+// cmsPlugin(cmsFastFloatExtensions());
+//
+
+void* cmsFastFloatExtensions(void);
+
+
+// New encodings that the plug-in implements
+
+#define BIT15_SH(a) ((a) << 26)
+#define T_BIT15(a) (((a)>>26)&1)
+#define DITHER_SH(a) ((a) << 27)
+#define T_DITHER(a) (((a)>>27)&1)
+
+#define TYPE_GRAY_15 (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|BIT15_SH(1))
+#define TYPE_GRAY_15_REV (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|FLAVOR_SH(1)|BIT15_SH(1))
+#define TYPE_GRAY_15_SE (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1)|BIT15_SH(1))
+#define TYPE_GRAYA_15 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|BIT15_SH(1))
+#define TYPE_GRAYA_15_SE (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1)|BIT15_SH(1))
+#define TYPE_GRAYA_15_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|PLANAR_SH(1)|BIT15_SH(1))
+
+#define TYPE_RGB_15 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|BIT15_SH(1))
+#define TYPE_RGB_15_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)|BIT15_SH(1))
+#define TYPE_RGB_15_SE (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)|BIT15_SH(1))
+
+#define TYPE_BGR_15 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|BIT15_SH(1))
+#define TYPE_BGR_15_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1)|BIT15_SH(1))
+#define TYPE_BGR_15_SE (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)|BIT15_SH(1))
+
+#define TYPE_RGBA_15 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|BIT15_SH(1))
+#define TYPE_RGBA_15_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)|BIT15_SH(1))
+#define TYPE_RGBA_15_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)|BIT15_SH(1))
+
+#define TYPE_ARGB_15 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1)|BIT15_SH(1))
+
+#define TYPE_ABGR_15 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|BIT15_SH(1))
+#define TYPE_ABGR_15_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1)|BIT15_SH(1))
+#define TYPE_ABGR_15_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)|BIT15_SH(1))
+
+#define TYPE_BGRA_15 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1)|BIT15_SH(1))
+#define TYPE_BGRA_15_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)|BIT15_SH(1))
+
+#define TYPE_CMY_15 (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|BIT15_SH(1))
+#define TYPE_YMC_15 (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|BIT15_SH(1))
+#define TYPE_CMY_15_PLANAR (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)|BIT15_SH(1))
+#define TYPE_CMY_15_SE (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)|BIT15_SH(1))
+
+#define TYPE_CMYK_15 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|BIT15_SH(1))
+#define TYPE_CMYK_15_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1)|BIT15_SH(1))
+#define TYPE_CMYK_15_PLANAR (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|PLANAR_SH(1)|BIT15_SH(1))
+#define TYPE_CMYK_15_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1)|BIT15_SH(1))
+
+#define TYPE_KYMC_15 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)|BIT15_SH(1))
+#define TYPE_KYMC_15_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)|BIT15_SH(1))
+
+#define TYPE_KCMY_15 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|SWAPFIRST_SH(1)|BIT15_SH(1))
+#define TYPE_KCMY_15_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1)|SWAPFIRST_SH(1)|BIT15_SH(1))
+#define TYPE_KCMY_15_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1)|SWAPFIRST_SH(1)|BIT15_SH(1))
+
+#define TYPE_GRAY_8_DITHER (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(1)|DITHER_SH(1))
+#define TYPE_RGB_8_DITHER (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DITHER_SH(1))
+#define TYPE_RGBA_8_DITHER (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|DITHER_SH(1))
+#define TYPE_BGR_8_DITHER (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|DITHER_SH(1))
+#define TYPE_ABGR_8_DITHER (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|EXTRA_SH(1)|DITHER_SH(1))
+#define TYPE_CMYK_8_DITHER (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|DITHER_SH(1))
+#define TYPE_KYMC_8_DITHER (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1)|DITHER_SH(1))
+
+
+#define TYPE_AGRAY_8 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|DOSWAP_SH(1)|BYTES_SH(1))
+#define TYPE_AGRAY_16 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|DOSWAP_SH(1)|BYTES_SH(2))
+#define TYPE_AGRAY_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|DOSWAP_SH(1)|BYTES_SH(4))
+#define TYPE_GRAYA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(4))
+#define TYPE_AGRAY_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|DOSWAP_SH(1)|BYTES_SH(0))
+
+#define TYPE_ACMYK_8 (COLORSPACE_SH(PT_CMYK)|EXTRA_SH(1)|CHANNELS_SH(4)|BYTES_SH(1)|SWAPFIRST_SH(1))
+#define TYPE_KYMCA_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|EXTRA_SH(1)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1))
+#define TYPE_AKYMC_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|EXTRA_SH(1)|BYTES_SH(1)|DOSWAP_SH(1))
+
+#define TYPE_CMYKA_16 (COLORSPACE_SH(PT_CMYK)|EXTRA_SH(1)|CHANNELS_SH(4)|BYTES_SH(2))
+#define TYPE_ACMYK_16 (COLORSPACE_SH(PT_CMYK)|EXTRA_SH(1)|CHANNELS_SH(4)|BYTES_SH(2)|SWAPFIRST_SH(1))
+#define TYPE_KYMCA_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|EXTRA_SH(1)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1))
+#define TYPE_AKYMC_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|EXTRA_SH(1)|BYTES_SH(2)|DOSWAP_SH(1))
+
+
+#define TYPE_AGRAY_8_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(1)|PLANAR_SH(1)|SWAPFIRST_SH(1))
+#define TYPE_AGRAY_16_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|PLANAR_SH(1)|SWAPFIRST_SH(1))
+
+#define TYPE_GRAYA_FLT_PLANAR (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(4)|PLANAR_SH(1))
+#define TYPE_AGRAY_FLT_PLANAR (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(4)|PLANAR_SH(1)|SWAPFIRST_SH(1))
+
+#define TYPE_GRAYA_DBL_PLANAR (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(0)|PLANAR_SH(1))
+#define TYPE_AGRAY_DBL_PLANAR (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(0)|PLANAR_SH(1)|SWAPFIRST_SH(1))
+
+#define TYPE_ARGB_16_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1)|PLANAR_SH(1))
+#define TYPE_BGRA_16_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1)|DOSWAP_SH(1)|PLANAR_SH(1))
+
+#ifndef CMS_USE_CPP_API
+# ifdef __cplusplus
+ }
+# endif
+#endif
+
+#endif
diff --git a/lcms2mt/plugins/fast_float/src/Makefile.am b/lcms2mt/plugins/fast_float/src/Makefile.am
new file mode 100644
index 00000000..a7d1af38
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/Makefile.am
@@ -0,0 +1,27 @@
+#
+# Makefile for building lcms2_fast_float library
+#
+
+# Don't require all the GNU mandated files
+AUTOMAKE_OPTIONS = 1.7 foreign
+
+includedir = ${prefix}/include
+
+# Shared libraries built in this directory
+lib_LTLIBRARIES = liblcms2mt_fast_float.la
+
+LIBRARY_CURRENT = 1
+LIBRARY_REVISION = 1
+LIBRARY_AGE = 0
+
+INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)/../include -I$(builddir)/../include
+
+liblcms2mt_fast_float_la_LDFLAGS = -no-undefined \
+ -version-info $(LIBRARY_CURRENT):$(LIBRARY_REVISION):$(LIBRARY_AGE)
+
+liblcms2mt_fast_float_la_LIBADD = $(LCMS_LIB_DEPLIBS) $(top_builddir)/src/liblcms2mt.la
+
+liblcms2mt_fast_float_la_SOURCES = \
+ fast_float_15bits.c fast_float_15mats.c fast_float_curves.c fast_float_matsh.c fast_float_separate.c \
+ fast_float_sup.c fast_float_tethra.c fast_float_cmyk.c fast_float_internal.h \
+ fast_8_curves.c fast_8_matsh.c fast_8_tethra.c
diff --git a/lcms2mt/plugins/fast_float/src/fast_16_tethra.c b/lcms2mt/plugins/fast_float/src/fast_16_tethra.c
new file mode 100644
index 00000000..a67340d5
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/fast_16_tethra.c
@@ -0,0 +1,370 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+#include "fast_float_internal.h"
+
+// lcms internal
+cmsBool _cmsOptimizePipeline(cmsContext ContextID,
+ cmsPipeline** Lut,
+ cmsUInt32Number Intent,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags);
+
+
+// Optimization for 16 bits, 3 inputs only
+typedef struct {
+
+ const cmsInterpParams* p; // Tetrahedrical interpolation parameters. This is a not-owned pointer.
+
+} Performance16Data;
+
+
+// Precomputes tables for 16-bit on input devicelink.
+static
+Performance16Data* Performance16alloc(cmsContext ContextID, const cmsInterpParams* p)
+{
+ Performance16Data* p16;
+
+ p16 = (Performance16Data*) _cmsMallocZero(ContextID, sizeof(Performance16Data));
+ if (p16 == NULL) return NULL;
+
+ p16 ->p = p;
+
+ return p16;
+}
+
+static
+void Performance16free(cmsContext ContextID, void* ptr)
+{
+ _cmsFree(ContextID, ptr);
+}
+
+/**
+* Because cmsChangeBuffersFormat, we have to allow this code to output data in either 8 or 16 bits.
+* The increments are already computed correctly, but the data may change. So, we use a macro to
+* increase xput
+*/
+#define TO_OUTPUT_16(d,v) do { *(cmsUInt16Number*) (d) = v; } while(0)
+#define TO_OUTPUT_8(d,v) do { *(cmsUInt8Number*) (d) = FROM_16_TO_8(v); } while(0)
+
+#define TO_OUTPUT(d,v) do { if (out16) TO_OUTPUT_16(d,v); else TO_OUTPUT_8(d,v); } while(0)
+
+#define FROM_INPUT(v) (in16 ? (*((const cmsUInt16Number*)(v))) : FROM_8_TO_16(*((const cmsUInt8Number*)(v))))
+
+static
+void PerformanceEval16(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const void* Input,
+ void* Output,
+ cmsUInt32Number PixelsPerLine,
+ cmsUInt32Number LineCount,
+ const cmsStride* Stride)
+{
+
+ cmsUInt16Number r, g, b;
+ int x0, y0, z0;
+ cmsS15Fixed16Number rx, ry, rz;
+ cmsS15Fixed16Number fx, fy, fz;
+ cmsS15Fixed16Number c0, c1, c2, c3, Rest;
+ cmsUInt32Number OutChan, TotalPlusAlpha;
+ cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1;
+ Performance16Data* p16 = (Performance16Data*)_cmsGetTransformUserData(CMMcargo);
+ const cmsInterpParams* p = p16->p;
+ cmsUInt32Number TotalOut = p->nOutputs;
+ const cmsUInt16Number* BaseTable = (const cmsUInt16Number*)p->Table;
+ const cmsUInt16Number* LutTable;
+
+ cmsUInt8Number* out[cmsMAXCHANNELS];
+ cmsUInt16Number res16;
+
+ cmsUInt32Number i, ii;
+
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+
+ const cmsUInt8Number* rin;
+ const cmsUInt8Number* gin;
+ const cmsUInt8Number* bin;
+ const cmsUInt8Number* ain = NULL;
+
+ int in16, out16; // Used by macros!
+
+ cmsUInt32Number nalpha, strideIn, strideOut;
+
+ cmsUInt32Number dwInFormat = cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM)CMMcargo);
+ cmsUInt32Number dwOutFormat = cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM)CMMcargo);
+
+ _cmsComputeComponentIncrements(dwInFormat, Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(dwOutFormat, Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements);
+
+ in16 = (T_BYTES(dwInFormat) == 2);
+ out16 = (T_BYTES(dwOutFormat) == 2);
+
+ strideIn = strideOut = 0;
+ for (i = 0; i < LineCount; i++) {
+
+ rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn;
+ gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn;
+ bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn;
+ if (nalpha)
+ ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn;
+
+ TotalPlusAlpha = TotalOut;
+ if (ain) TotalPlusAlpha++;
+
+ for (OutChan = 0; OutChan < TotalPlusAlpha; OutChan++) {
+ out[OutChan] = (cmsUInt8Number*)Output + DestStartingOrder[OutChan] + strideOut;
+ }
+
+
+ for (ii = 0; ii < PixelsPerLine; ii++) {
+
+ r = FROM_INPUT(rin);
+ g = FROM_INPUT(gin);
+ b = FROM_INPUT(bin);
+
+ rin += SourceIncrements[0];
+ gin += SourceIncrements[1];
+ bin += SourceIncrements[2];
+
+ fx = _cmsToFixedDomain((int)r * p->Domain[0]);
+ fy = _cmsToFixedDomain((int)g * p->Domain[1]);
+ fz = _cmsToFixedDomain((int)b * p->Domain[2]);
+
+ x0 = FIXED_TO_INT(fx);
+ y0 = FIXED_TO_INT(fy);
+ z0 = FIXED_TO_INT(fz);
+
+ rx = FIXED_REST_TO_INT(fx);
+ ry = FIXED_REST_TO_INT(fy);
+ rz = FIXED_REST_TO_INT(fz);
+
+ X0 = p->opta[2] * x0;
+ X1 = (r == 0xFFFFU ? 0 : p->opta[2]);
+
+ Y0 = p->opta[1] * y0;
+ Y1 = (g == 0xFFFFU ? 0 : p->opta[1]);
+
+ Z0 = p->opta[0] * z0;
+ Z1 = (b == 0xFFFFU ? 0 : p->opta[0]);
+
+
+ LutTable = &BaseTable[X0 + Y0 + Z0];
+
+ // Output should be computed as x = ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest))
+ // which expands as: x = (Rest + ((Rest+0x7fff)/0xFFFF) + 0x8000)>>16
+ // This can be replaced by: t = Rest+0x8001, x = (t + (t>>16))>>16
+ // at the cost of being off by one at 7fff and 17ffe.
+
+ if (rx >= ry) {
+ if (ry >= rz) {
+ Y1 += X1;
+ Z1 += Y1;
+ for (OutChan = 0; OutChan < TotalOut; OutChan++) {
+ c1 = LutTable[X1];
+ c2 = LutTable[Y1];
+ c3 = LutTable[Z1];
+ c0 = *LutTable++;
+ c3 -= c2;
+ c2 -= c1;
+ c1 -= c0;
+ Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001;
+ res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16);
+ TO_OUTPUT(out[OutChan], res16);
+ out[OutChan] += DestIncrements[OutChan];
+ }
+ }
+ else if (rz >= rx) {
+ X1 += Z1;
+ Y1 += X1;
+ for (OutChan = 0; OutChan < TotalOut; OutChan++) {
+ c1 = LutTable[X1];
+ c2 = LutTable[Y1];
+ c3 = LutTable[Z1];
+ c0 = *LutTable++;
+ c2 -= c1;
+ c1 -= c3;
+ c3 -= c0;
+ Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001;
+ res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16);
+ TO_OUTPUT(out[OutChan], res16);
+ out[OutChan] += DestIncrements[OutChan];
+ }
+ }
+ else {
+ Z1 += X1;
+ Y1 += Z1;
+ for (OutChan = 0; OutChan < TotalOut; OutChan++) {
+ c1 = LutTable[X1];
+ c2 = LutTable[Y1];
+ c3 = LutTable[Z1];
+ c0 = *LutTable++;
+ c2 -= c3;
+ c3 -= c1;
+ c1 -= c0;
+ Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001;
+ res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16);
+ TO_OUTPUT(out[OutChan], res16);
+ out[OutChan] += DestIncrements[OutChan];
+ }
+ }
+ }
+ else {
+ if (rx >= rz) {
+ X1 += Y1;
+ Z1 += X1;
+ for (OutChan = 0; OutChan < TotalOut; OutChan++) {
+ c1 = LutTable[X1];
+ c2 = LutTable[Y1];
+ c3 = LutTable[Z1];
+ c0 = *LutTable++;
+ c3 -= c1;
+ c1 -= c2;
+ c2 -= c0;
+ Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001;
+ res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16);
+ TO_OUTPUT(out[OutChan], res16);
+ out[OutChan] += DestIncrements[OutChan];
+ }
+ }
+ else if (ry >= rz) {
+ Z1 += Y1;
+ X1 += Z1;
+ for (OutChan = 0; OutChan < TotalOut; OutChan++) {
+ c1 = LutTable[X1];
+ c2 = LutTable[Y1];
+ c3 = LutTable[Z1];
+ c0 = *LutTable++;
+ c1 -= c3;
+ c3 -= c2;
+ c2 -= c0;
+ Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001;
+ res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16);
+ TO_OUTPUT(out[OutChan], res16);
+ out[OutChan] += DestIncrements[OutChan];
+ }
+ }
+ else {
+ Y1 += Z1;
+ X1 += Y1;
+ for (OutChan = 0; OutChan < TotalOut; OutChan++) {
+ c1 = LutTable[X1];
+ c2 = LutTable[Y1];
+ c3 = LutTable[Z1];
+ c0 = *LutTable++;
+ c1 -= c2;
+ c2 -= c3;
+ c3 -= c0;
+ Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001;
+ res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16);
+ TO_OUTPUT(out[OutChan], res16);
+ out[OutChan] += DestIncrements[OutChan];
+ }
+ }
+ }
+
+ if (ain)
+ {
+ res16 = *(const cmsUInt16Number*)ain;
+ TO_OUTPUT(out[OutChan], res16);
+ out[TotalOut] += DestIncrements[TotalOut];
+ }
+
+ }
+
+ strideIn += Stride->BytesPerLineIn;
+ strideOut += Stride->BytesPerLineOut;
+ }
+}
+
+#undef DENS
+
+
+
+// --------------------------------------------------------------------------------------------------------------
+
+cmsBool Optimize16BitRGBTransform(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeDataFn,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags)
+{
+ cmsStage* mpe;
+ Performance16Data* p16;
+ _cmsStageCLutData* data;
+ cmsUInt32Number newFlags;
+ cmsStage* OptimizedCLUTmpe;
+
+
+ // For empty transforms, do nothing
+ if (*Lut == NULL) return FALSE;
+
+ // This is a loosy optimization! does not apply in floating-point cases
+ if (T_FLOAT(*InputFormat) || T_FLOAT(*OutputFormat)) return FALSE;
+
+ // Only on 16-bit
+ if (T_BYTES(*InputFormat) != 2 || T_BYTES(*OutputFormat) != 2) return FALSE;
+
+ // Only real 16 bits
+ if (T_BIT15(*InputFormat) != 0 || T_BIT15(*OutputFormat) != 0) return FALSE;
+
+ // Only on input RGB
+ if (T_COLORSPACE(*InputFormat) != PT_RGB) return FALSE;
+
+ // Named color pipelines cannot be optimized either
+ for (mpe = cmsPipelineGetPtrToFirstStage(ContextID, *Lut);
+ mpe != NULL;
+ mpe = cmsStageNext(ContextID, mpe)) {
+ if (cmsStageType(ContextID, mpe) == cmsSigNamedColorElemType) return FALSE;
+ }
+
+ newFlags = *dwFlags | cmsFLAGS_FORCE_CLUT;
+
+ if (!_cmsOptimizePipeline(ContextID,
+ Lut,
+ INTENT_PERCEPTUAL, // Dont care
+ InputFormat,
+ OutputFormat,
+ &newFlags)) return FALSE;
+
+ OptimizedCLUTmpe = cmsPipelineGetPtrToFirstStage(ContextID, *Lut);
+
+ // Set the evaluator
+ data = (_cmsStageCLutData*)cmsStageData(ContextID, OptimizedCLUTmpe);
+
+ p16 = Performance16alloc(ContextID, data->Params);
+ if (p16 == NULL) return FALSE;
+
+ *TransformFn = (_cmsTransformFn) PerformanceEval16;
+ *UserData = p16;
+ *FreeDataFn = Performance16free;
+ *InputFormat |= 0x02000000;
+ *OutputFormat |= 0x02000000;
+ *dwFlags |= cmsFLAGS_CAN_CHANGE_FORMATTER;
+
+ return TRUE;
+}
diff --git a/lcms2mt/plugins/fast_float/src/fast_8_curves.c b/lcms2mt/plugins/fast_float/src/fast_8_curves.c
new file mode 100644
index 00000000..cb8e5df6
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/fast_8_curves.c
@@ -0,0 +1,409 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+#include "fast_float_internal.h"
+
+// Curves, optimization is valid for 8 bits only
+typedef struct {
+
+ int nCurves;
+ cmsUInt8Number Curves[cmsMAXCHANNELS][256];
+
+} Curves8Data;
+
+
+// Evaluator for RGB 8-bit curves. This are just 1D tables
+static void FastEvaluateRGBCurves8(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const void* Input,
+ void* Output,
+ cmsUInt32Number PixelsPerLine,
+ cmsUInt32Number LineCount,
+ const cmsStride* Stride)
+{
+ cmsUInt32Number i, ii;
+
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+
+ const cmsUInt8Number* rin;
+ const cmsUInt8Number* gin;
+ const cmsUInt8Number* bin;
+ const cmsUInt8Number* ain = NULL;
+
+ cmsUInt8Number* rout;
+ cmsUInt8Number* gout;
+ cmsUInt8Number* bout;
+ cmsUInt8Number* aout = NULL;
+
+ cmsUInt32Number nalpha, strideIn, strideOut;
+
+ Curves8Data* Data = (Curves8Data*)_cmsGetTransformUserData(CMMcargo);
+
+ _cmsComputeComponentIncrements(cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements);
+
+ strideIn = strideOut = 0;
+ for (i = 0; i < LineCount; i++) {
+
+ rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn;
+ gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn;
+ bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn;
+ if (nalpha)
+ ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn;
+
+ rout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut;
+ gout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut;
+ bout = (cmsUInt8Number*)Output + DestStartingOrder[2] + strideOut;
+ if (nalpha)
+ aout = (cmsUInt8Number*)Output + DestStartingOrder[3] + strideOut;
+
+ for (ii = 0; ii < PixelsPerLine; ii++) {
+
+
+ *rout = Data->Curves[0][*rin];
+ *gout = Data->Curves[1][*gin];
+ *bout = Data->Curves[2][*bin];
+
+ // Handle alpha
+ if (ain) {
+ *aout = *ain;
+ }
+
+ rin += SourceIncrements[0];
+ gin += SourceIncrements[1];
+ bin += SourceIncrements[2];
+ if (ain) ain += SourceIncrements[3];
+
+ rout += DestIncrements[0];
+ gout += DestIncrements[1];
+ bout += DestIncrements[2];
+ if (aout) aout += DestIncrements[3];
+ }
+
+ strideIn += Stride->BytesPerLineIn;
+ strideOut += Stride->BytesPerLineOut;
+ }
+}
+
+
+// Do nothing but arrange the format. RGB
+static void FastRGBIdentity8(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const void* Input,
+ void* Output,
+ cmsUInt32Number PixelsPerLine,
+ cmsUInt32Number LineCount,
+ const cmsStride* Stride)
+{
+ cmsUInt32Number i, ii;
+
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+
+ const cmsUInt8Number* rin;
+ const cmsUInt8Number* gin;
+ const cmsUInt8Number* bin;
+ const cmsUInt8Number* ain = NULL;
+
+ cmsUInt8Number* rout;
+ cmsUInt8Number* gout;
+ cmsUInt8Number* bout;
+ cmsUInt8Number* aout = NULL;
+
+ cmsUInt32Number nalpha, strideIn, strideOut;
+
+ _cmsComputeComponentIncrements(cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements);
+
+ strideIn = strideOut = 0;
+ for (i = 0; i < LineCount; i++) {
+
+ rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn;
+ gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn;
+ bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn;
+ if (nalpha)
+ ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn;
+
+ rout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut;
+ gout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut;
+ bout = (cmsUInt8Number*)Output + DestStartingOrder[2] + strideOut;
+ if (nalpha)
+ aout = (cmsUInt8Number*)Output + DestStartingOrder[3] + strideOut;
+
+ for (ii = 0; ii < PixelsPerLine; ii++) {
+
+
+ *rout = *rin;
+ *gout = *gin;
+ *bout = *bin;
+
+ // Handle alpha
+ if (ain) {
+ *aout = *ain;
+ }
+
+ rin += SourceIncrements[0];
+ gin += SourceIncrements[1];
+ bin += SourceIncrements[2];
+ if (ain) ain += SourceIncrements[3];
+
+ rout += DestIncrements[0];
+ gout += DestIncrements[1];
+ bout += DestIncrements[2];
+ if (aout) aout += DestIncrements[3];
+ }
+
+ strideIn += Stride->BytesPerLineIn;
+ strideOut += Stride->BytesPerLineOut;
+ }
+}
+
+
+
+// Evaluate 1 channel only
+static void FastEvaluateGrayCurves8(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const void* Input,
+ void* Output,
+ cmsUInt32Number PixelsPerLine,
+ cmsUInt32Number LineCount,
+ const cmsStride* Stride)
+{
+ cmsUInt32Number i, ii;
+
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+
+ const cmsUInt8Number* gin;
+ const cmsUInt8Number* ain = NULL;
+
+ cmsUInt8Number* gout;
+ cmsUInt8Number* aout = NULL;
+
+ cmsUInt32Number nalpha, strideIn, strideOut;
+
+ Curves8Data* Data = (Curves8Data*)_cmsGetTransformUserData(CMMcargo);
+
+ _cmsComputeComponentIncrements(cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements);
+
+ strideIn = strideOut = 0;
+ for (i = 0; i < LineCount; i++) {
+
+ gin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn;
+ if (nalpha)
+ ain = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn;
+
+ gout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut;
+ if (nalpha)
+ aout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut;
+
+ for (ii = 0; ii < PixelsPerLine; ii++) {
+
+ *gout = Data->Curves[0][*gin];
+
+ // Handle alpha
+ if (ain) {
+ *aout = *ain;
+ }
+
+ gin += SourceIncrements[0];
+
+ if (ain) ain += SourceIncrements[1];
+
+ gout += DestIncrements[0];
+
+ if (aout) aout += DestIncrements[1];
+ }
+
+ strideIn += Stride->BytesPerLineIn;
+ strideOut += Stride->BytesPerLineOut;
+ }
+}
+
+
+static void FastGrayIdentity8(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const void* Input,
+ void* Output,
+ cmsUInt32Number PixelsPerLine,
+ cmsUInt32Number LineCount,
+ const cmsStride* Stride)
+{
+ cmsUInt32Number i, ii;
+
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+
+ const cmsUInt8Number* gin;
+ const cmsUInt8Number* ain = NULL;
+
+ cmsUInt8Number* gout;
+ cmsUInt8Number* aout = NULL;
+
+ cmsUInt32Number nalpha, strideIn, strideOut;
+
+ _cmsComputeComponentIncrements(cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements);
+
+ strideIn = strideOut = 0;
+ for (i = 0; i < LineCount; i++) {
+
+ gin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn;
+ if (nalpha)
+ ain = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn;
+
+ gout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut;
+ if (nalpha)
+ aout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut;
+
+ for (ii = 0; ii < PixelsPerLine; ii++) {
+
+ *gout = *gin;
+
+ // Handle alpha
+ if (ain) {
+ *aout = *ain;
+ }
+
+ gin += SourceIncrements[0];
+
+ if (ain) ain += SourceIncrements[1];
+
+ gout += DestIncrements[0];
+
+ if (aout) aout += DestIncrements[1];
+ }
+
+ strideIn += Stride->BytesPerLineIn;
+ strideOut += Stride->BytesPerLineOut;
+ }
+}
+
+
+
+
+
+// Try to see if the curves are linear
+static
+cmsBool AllCurvesAreLinear(Curves8Data* data)
+{
+ int i, j;
+
+ for (i=0; i < 3; i++) {
+ for (j = 0; j < 256; j++) {
+ if (data ->Curves[i][j] != j) return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+
+static
+Curves8Data* ComputeCompositeCurves(cmsContext ContextID, cmsUInt32Number nChan, cmsPipeline* Src)
+{
+ cmsUInt32Number i, j;
+ cmsFloat32Number InFloat[3], OutFloat[3];
+
+ Curves8Data* Data = (Curves8Data*) _cmsMallocZero(ContextID, sizeof(Curves8Data));
+ if (Data == NULL) return NULL;
+
+ // Create target curves
+ for (i=0; i < 256; i++) {
+
+ for (j=0; j <nChan; j++)
+ InFloat[j] = (cmsFloat32Number) ((cmsFloat64Number) i / 255.0);
+
+ cmsPipelineEvalFloat(ContextID, InFloat, OutFloat, Src);
+
+ for (j=0; j < nChan; j++)
+ Data -> Curves[j][i] = FROM_16_TO_8(_cmsSaturateWord(OutFloat[j] * 65535.0));
+ }
+
+ return Data;
+}
+
+
+// If the target LUT holds only curves, the optimization procedure is to join all those
+// curves together. That only works on curves and does not work on matrices.
+// Any number of channels up to 16
+cmsBool Optimize8ByJoiningCurves(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeUserData,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags)
+{
+
+ cmsPipeline* Src = *Lut;
+ cmsStage* mpe;
+ Curves8Data* Data;
+ cmsUInt32Number nChans;
+
+ // This is a loosy optimization! does not apply in floating-point cases
+ if (T_FLOAT(*InputFormat) || T_FLOAT(*OutputFormat)) return FALSE;
+
+ // Only on 8-bit
+ if (T_BYTES(*InputFormat) != 1 || T_BYTES(*OutputFormat) != 1) return FALSE;
+
+ // Curves need same channels on input and output (despite extra channels may differ)
+ nChans = T_CHANNELS(*InputFormat);
+ if (nChans != T_CHANNELS(*OutputFormat)) return FALSE;
+
+ // gray and RGB
+ if (nChans != 1 && nChans != 3) return FALSE;
+
+ // Only curves in this LUT?
+ for (mpe = cmsPipelineGetPtrToFirstStage(ContextID, Src);
+ mpe != NULL;
+ mpe = cmsStageNext(ContextID, mpe)) {
+
+ if (cmsStageType(ContextID, mpe) != cmsSigCurveSetElemType) return FALSE;
+ }
+
+ Data = ComputeCompositeCurves(ContextID, nChans, Src);
+
+ *dwFlags |= cmsFLAGS_NOCACHE;
+ *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER;
+ *UserData = Data;
+ *FreeUserData = _cmsFree;
+
+ // Maybe the curves are linear at the end
+ if (nChans == 1)
+ *TransformFn = (_cmsTransformFn) (AllCurvesAreLinear(Data) ? FastGrayIdentity8 : FastEvaluateGrayCurves8);
+ else
+ *TransformFn = (_cmsTransformFn) (AllCurvesAreLinear(Data) ? FastRGBIdentity8 : FastEvaluateRGBCurves8);
+
+ return TRUE;
+
+}
diff --git a/lcms2mt/plugins/fast_float/src/fast_8_matsh.c b/lcms2mt/plugins/fast_float/src/fast_8_matsh.c
new file mode 100644
index 00000000..26dc12a1
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/fast_8_matsh.c
@@ -0,0 +1,399 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+// Optimization for matrix-shaper in 8 bits. Numbers are operated in n.14 signed, tables are stored in 1.14 fixed
+
+#include "fast_float_internal.h"
+
+typedef cmsInt32Number cmsS1Fixed14Number; // Note that this may hold more than 16 bits!
+
+#define DOUBLE_TO_1FIXED14(x) ((cmsS1Fixed14Number) floor((x) * 16384.0 + 0.5))
+
+// This is the private data container used by this optimization
+typedef struct {
+
+ // This is for SSE2, MUST be aligned at 16 bit boundary
+
+ cmsFloat32Number fMatrix[4][4];
+ cmsFloat32Number fShaper1[256 * 3];
+
+ void * real_ptr;
+
+ cmsS1Fixed14Number Shaper1R[256]; // from 0..255 to 1.14 (0.0...1.0)
+ cmsS1Fixed14Number Shaper1G[256];
+ cmsS1Fixed14Number Shaper1B[256];
+
+ cmsS1Fixed14Number Mat[3][3]; // n.14 to n.14 (needs a saturation after that)
+ cmsS1Fixed14Number Off[3];
+
+ cmsUInt8Number Shaper2R[0x4001]; // 1.14 to 0..255
+ cmsUInt8Number Shaper2G[0x4001];
+ cmsUInt8Number Shaper2B[0x4001];
+
+} XMatShaper8Data;
+
+
+static
+XMatShaper8Data* malloc_aligned(cmsContext ContextID)
+{
+ cmsUInt8Number* real_ptr = (cmsUInt8Number*) _cmsMallocZero(ContextID, sizeof(XMatShaper8Data) + 32);
+ cmsUInt8Number* aligned = (cmsUInt8Number*) (((uintptr_t)real_ptr + 16) & ~0xf);
+ XMatShaper8Data* p = (XMatShaper8Data*) aligned;
+
+ p ->real_ptr = real_ptr;
+ return p;
+}
+
+static
+void free_aligned(cmsContext ContextID, XMatShaper8Data* a)
+{
+ _cmsFree(ContextID, a->real_ptr);
+}
+
+
+// Free the private data container
+static
+void FreeMatShaper(cmsContext ContextID, void* Data)
+{
+ UNUSED_PARAMETER(ContextID);
+
+ if (Data != NULL) free_aligned(ContextID, (XMatShaper8Data*) Data);
+}
+
+
+// This table converts from 8 bits to 1.14 after applying the curve
+static
+void FillFirstShaper(cmsContext ContextID, cmsS1Fixed14Number* Table, cmsToneCurve* Curve)
+{
+ int i;
+ cmsFloat32Number R, y;
+
+ for (i=0; i < 256; i++) {
+
+ R = (cmsFloat32Number) (i / 255.0);
+ y = cmsEvalToneCurveFloat(ContextID, Curve, R);
+
+ Table[i] = DOUBLE_TO_1FIXED14(y);
+ }
+}
+
+static
+void FillFirstShaperFloat(cmsContext ContextID, cmsFloat32Number* Table, cmsToneCurve* Curve)
+{
+ int i;
+ cmsFloat32Number R;
+
+ for (i=0; i < 256; i++) {
+
+ R = (cmsFloat32Number) (i / 255.0);
+
+ Table[i] = cmsEvalToneCurveFloat(ContextID, Curve, R);
+ }
+}
+
+
+// This table converts form 1.14 (being 0x4000 the last entry) to 8 bits after applying the curve
+static
+void FillSecondShaper(cmsContext ContextID, cmsUInt8Number* Table, cmsToneCurve* Curve)
+{
+ int i;
+ cmsFloat32Number R, Val;
+ cmsUInt16Number w;
+
+ for (i=0; i < 0x4001; i++) {
+
+ R = (cmsFloat32Number) (i / 16384.0);
+ Val = cmsEvalToneCurveFloat(ContextID, Curve, R);
+ w = _cmsSaturateWord(Val * 65535.0 + 0.5);
+
+ Table[i] = FROM_16_TO_8(w);
+
+ }
+}
+
+// Compute the matrix-shaper structure
+static
+XMatShaper8Data* SetMatShaper(cmsContext ContextID, cmsToneCurve* Curve1[3], cmsMAT3* Mat, cmsVEC3* Off, cmsToneCurve* Curve2[3])
+{
+ XMatShaper8Data* p;
+ int i, j;
+
+ // Allocate a big chuck of memory to store precomputed tables
+ p = malloc_aligned(ContextID);
+ if (p == NULL) return FALSE;
+
+ // Precompute tables
+ FillFirstShaper(ContextID, p ->Shaper1R, Curve1[0]);
+ FillFirstShaper(ContextID, p ->Shaper1G, Curve1[1]);
+ FillFirstShaper(ContextID, p ->Shaper1B, Curve1[2]);
+
+ FillSecondShaper(ContextID, p ->Shaper2R, Curve2[0]);
+ FillSecondShaper(ContextID, p ->Shaper2G, Curve2[1]);
+ FillSecondShaper(ContextID, p ->Shaper2B, Curve2[2]);
+
+
+ FillFirstShaperFloat(ContextID, p ->fShaper1, Curve1[0]);
+ FillFirstShaperFloat(ContextID, p ->fShaper1 + 256, Curve1[1]);
+ FillFirstShaperFloat(ContextID, p ->fShaper1 + 256*2, Curve1[2]);
+
+ // Convert matrix to nFixed14. Note that those values may take more than 16 bits as
+ for (i=0; i < 3; i++) {
+ for (j=0; j < 3; j++) {
+ p ->Mat[i][j] = DOUBLE_TO_1FIXED14(Mat->v[i].n[j]);
+ p ->fMatrix[j][i] = (cmsFloat32Number) Mat ->v[i].n[j];
+ }
+ }
+
+
+ for (i=0; i < 3; i++) {
+
+ if (Off == NULL) {
+
+ p ->Off[i] = 0x2000;
+ p ->fMatrix[3][i] = 0.0f;
+ }
+ else {
+ p ->Off[i] = DOUBLE_TO_1FIXED14(Off->n[i]) + 0x2000;
+ p ->fMatrix[3][i] = (cmsFloat32Number) Off->n[i];
+ }
+ }
+
+
+ return p;
+}
+
+// A fast matrix-shaper evaluator for 8 bits. This is a bit ticky since I'm using 1.14 signed fixed point
+// to accomplish some performance. Actually it takes 256x3 16 bits tables and 16385 x 3 tables of 8 bits,
+// in total about 50K, and the performance boost is huge!
+
+static
+void MatShaperXform8(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const void* Input,
+ void* Output,
+ cmsUInt32Number PixelsPerLine,
+ cmsUInt32Number LineCount,
+ const cmsStride* Stride)
+{
+ XMatShaper8Data* p = (XMatShaper8Data*) _cmsGetTransformUserData(CMMcargo);
+
+ register cmsS1Fixed14Number l1, l2, l3;
+ cmsS1Fixed14Number r, g, b;
+ cmsUInt32Number ri, gi, bi;
+ cmsUInt32Number i, ii;
+
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+
+ const cmsUInt8Number* rin;
+ const cmsUInt8Number* gin;
+ const cmsUInt8Number* bin;
+ const cmsUInt8Number* ain = NULL;
+
+ cmsUInt8Number* rout;
+ cmsUInt8Number* gout;
+ cmsUInt8Number* bout;
+ cmsUInt8Number* aout = NULL;
+
+ cmsUInt32Number nalpha, strideIn, strideOut;
+
+ _cmsComputeComponentIncrements(cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements);
+
+ strideIn = strideOut = 0;
+ for (i = 0; i < LineCount; i++) {
+
+ rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn;
+ gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn;
+ bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn;
+ if (nalpha)
+ ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn;
+
+
+ rout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut;
+ gout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut;
+ bout = (cmsUInt8Number*)Output + DestStartingOrder[2] + strideOut;
+ if (nalpha)
+ aout = (cmsUInt8Number*)Output + DestStartingOrder[3] + strideOut;
+
+
+ for (ii = 0; ii < PixelsPerLine; ii++) {
+
+ // Across first shaper, which also converts to 1.14 fixed point. 16 bits guaranteed.
+ r = p->Shaper1R[*rin];
+ g = p->Shaper1G[*gin];
+ b = p->Shaper1B[*bin];
+
+ // Evaluate the matrix in 1.14 fixed point
+ l1 = (p->Mat[0][0] * r + p->Mat[0][1] * g + p->Mat[0][2] * b + p->Off[0]) >> 14;
+ l2 = (p->Mat[1][0] * r + p->Mat[1][1] * g + p->Mat[1][2] * b + p->Off[1]) >> 14;
+ l3 = (p->Mat[2][0] * r + p->Mat[2][1] * g + p->Mat[2][2] * b + p->Off[2]) >> 14;
+
+
+ // Now we have to clip to 0..1.0 range
+ ri = (l1 < 0) ? 0 : ((l1 > 0x4000) ? 0x4000 : l1);
+ gi = (l2 < 0) ? 0 : ((l2 > 0x4000) ? 0x4000 : l2);
+ bi = (l3 < 0) ? 0 : ((l3 > 0x4000) ? 0x4000 : l3);
+
+
+ // And across second shaper,
+ *rout = p->Shaper2R[ri];
+ *gout = p->Shaper2G[gi];
+ *bout = p->Shaper2B[bi];
+
+ // Handle alpha
+ if (ain) {
+ *aout = *ain;
+ }
+
+ rin += SourceIncrements[0];
+ gin += SourceIncrements[1];
+ bin += SourceIncrements[2];
+ if (ain) ain += SourceIncrements[3];
+
+ rout += DestIncrements[0];
+ gout += DestIncrements[1];
+ bout += DestIncrements[2];
+ if (aout) aout += DestIncrements[3];
+ }
+
+ strideIn += Stride->BytesPerLineIn;
+ strideOut += Stride->BytesPerLineOut;
+ }
+}
+
+
+// 8 bits on input allows matrix-shaper boost up a little bit
+cmsBool Optimize8MatrixShaper( cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeUserData,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags)
+{
+ cmsStage* Curve1, *Curve2;
+ cmsStage* Matrix1, *Matrix2;
+ _cmsStageMatrixData* Data1;
+ _cmsStageMatrixData* Data2;
+ cmsMAT3 res;
+ cmsBool IdentityMat = FALSE;
+ cmsPipeline* Dest, *Src;
+ cmsUInt32Number nChans;
+ cmsFloat64Number factor = 1.0;
+
+ // Only works on RGB to RGB and gray to gray
+
+ if ( !( (T_CHANNELS(*InputFormat) == 3 && T_CHANNELS(*OutputFormat) == 3) ||
+ (T_CHANNELS(*InputFormat) == 1 && T_CHANNELS(*OutputFormat) == 1) )) return FALSE;
+
+ // Only works on 8 bit input
+ if (T_BYTES(*InputFormat) != 1 || T_BYTES(*OutputFormat) != 1) return FALSE;
+
+ // Seems suitable, proceed
+ Src = *Lut;
+
+ // Check for shaper-matrix-matrix-shaper structure, that is what this optimizer stands for
+ if (!cmsPipelineCheckAndRetreiveStages(ContextID, Src, 4,
+ cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType,
+ &Curve1, &Matrix1, &Matrix2, &Curve2)) return FALSE;
+
+ nChans = T_CHANNELS(*InputFormat);
+
+ // Get both matrices, which are 3x3
+ Data1 = (_cmsStageMatrixData*) cmsStageData(ContextID, Matrix1);
+ Data2 = (_cmsStageMatrixData*) cmsStageData(ContextID, Matrix2);
+
+ // Input offset should be zero
+ if (Data1 ->Offset != NULL) return FALSE;
+
+ if (cmsStageInputChannels(ContextID, Matrix1) == 1 && cmsStageOutputChannels(ContextID, Matrix2) == 1)
+ {
+ // This is a gray to gray. Just multiply
+ factor = Data1->Double[0]*Data2->Double[0] +
+ Data1->Double[1]*Data2->Double[1] +
+ Data1->Double[2]*Data2->Double[2];
+
+ if (fabs(1 - factor) < (1.0 / 65535.0)) IdentityMat = TRUE;
+ }
+ else
+ {
+ // Multiply both matrices to get the result
+ _cmsMAT3per(ContextID, &res, (cmsMAT3*) Data2 ->Double, (cmsMAT3*) Data1 ->Double);
+
+ // Now the result is in res + Data2 -> Offset. Maybe is a plain identity?
+ IdentityMat = FALSE;
+ if (_cmsMAT3isIdentity(ContextID, &res) && Data2 ->Offset == NULL) {
+
+ // We can get rid of full matrix
+ IdentityMat = TRUE;
+ }
+ }
+
+ // Allocate an empty LUT
+ Dest = cmsPipelineAlloc(ContextID, nChans, nChans);
+ if (!Dest) return FALSE;
+
+ // Assamble the new LUT
+ cmsPipelineInsertStage(ContextID, Dest, cmsAT_BEGIN, cmsStageDup(ContextID, Curve1));
+
+ if (!IdentityMat) {
+
+ if (nChans == 1)
+ cmsPipelineInsertStage(ContextID, Dest, cmsAT_END,
+ cmsStageAllocMatrix(ContextID, 1, 1, (const cmsFloat64Number*) &factor, Data2->Offset));
+ else
+ cmsPipelineInsertStage(ContextID, Dest, cmsAT_END,
+ cmsStageAllocMatrix(ContextID, 3, 3, (const cmsFloat64Number*) &res, Data2 ->Offset));
+ }
+
+
+ cmsPipelineInsertStage(ContextID, Dest, cmsAT_END, cmsStageDup(ContextID, Curve2));
+
+ // If identity on matrix, we can further optimize the curves, so call the join curves routine
+ if (IdentityMat) {
+
+ Optimize8ByJoiningCurves(ContextID, TransformFn, UserData, FreeUserData, &Dest, InputFormat, OutputFormat, dwFlags);
+ }
+ else {
+ _cmsStageToneCurvesData* mpeC1 = (_cmsStageToneCurvesData*) cmsStageData(ContextID, Curve1);
+ _cmsStageToneCurvesData* mpeC2 = (_cmsStageToneCurvesData*) cmsStageData(ContextID, Curve2);
+
+ // In this particular optimization, caché does not help as it takes more time to deal with
+ // the caché that with the pixel handling
+ *dwFlags |= cmsFLAGS_NOCACHE;
+
+
+ // Setup the optimizarion routines
+ *UserData = SetMatShaper(ContextID, mpeC1 ->TheCurves, &res, (cmsVEC3*) Data2 ->Offset, mpeC2->TheCurves);
+ *FreeUserData = FreeMatShaper;
+
+ *TransformFn = (_cmsTransformFn) MatShaperXform8;
+ }
+
+ *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER;
+ cmsPipelineFree(ContextID, Src);
+ *Lut = Dest;
+ return TRUE;
+}
diff --git a/lcms2mt/plugins/fast_float/src/fast_8_tethra.c b/lcms2mt/plugins/fast_float/src/fast_8_tethra.c
new file mode 100644
index 00000000..bde4649d
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/fast_8_tethra.c
@@ -0,0 +1,501 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+#include "fast_float_internal.h"
+
+#define PRELINEARIZATION_POINTS 4096
+
+// Optimization for 8 bits, 3 inputs only
+typedef struct {
+
+ const cmsInterpParams* p; // Tetrahedrical interpolation parameters. This is a not-owned pointer.
+
+ cmsUInt16Number rx[256], ry[256], rz[256];
+ cmsUInt32Number X0[256], Y0[256], Z0[256]; // Precomputed nodes and offsets for 8-bit input data
+
+
+} Performance8Data;
+
+
+// Precomputes tables for 8-bit on input devicelink.
+static
+Performance8Data* Performance8alloc(cmsContext ContextID, const cmsInterpParams* p, cmsToneCurve* G[3])
+{
+ int i;
+ cmsUInt16Number Input[3];
+ cmsS15Fixed16Number v1, v2, v3;
+ Performance8Data* p8;
+
+ p8 = (Performance8Data*) _cmsMallocZero(ContextID, sizeof(Performance8Data));
+ if (p8 == NULL) return NULL;
+
+ // Since this only works for 8 bit input, values comes always as x * 257,
+ // we can safely take msb byte (x << 8 + x)
+ for (i=0; i < 256; i++) {
+
+ if (G != NULL) {
+
+ // Get 16-bit representation
+ Input[0] = cmsEvalToneCurve16(ContextID, G[0], FROM_8_TO_16(i));
+ Input[1] = cmsEvalToneCurve16(ContextID, G[1], FROM_8_TO_16(i));
+ Input[2] = cmsEvalToneCurve16(ContextID, G[2], FROM_8_TO_16(i));
+ }
+ else {
+ Input[0] = FROM_8_TO_16(i);
+ Input[1] = FROM_8_TO_16(i);
+ Input[2] = FROM_8_TO_16(i);
+ }
+
+ // Move to 0..1.0 in fixed domain
+ v1 = _cmsToFixedDomain(Input[0] * p -> Domain[0]);
+ v2 = _cmsToFixedDomain(Input[1] * p -> Domain[1]);
+ v3 = _cmsToFixedDomain(Input[2] * p -> Domain[2]);
+
+ // Store the precalculated table of nodes
+ p8 ->X0[i] = (p->opta[2] * FIXED_TO_INT(v1));
+ p8 ->Y0[i] = (p->opta[1] * FIXED_TO_INT(v2));
+ p8 ->Z0[i] = (p->opta[0] * FIXED_TO_INT(v3));
+
+ // Store the precalculated table of offsets
+ p8 ->rx[i] = (cmsUInt16Number) FIXED_REST_TO_INT(v1);
+ p8 ->ry[i] = (cmsUInt16Number) FIXED_REST_TO_INT(v2);
+ p8 ->rz[i] = (cmsUInt16Number) FIXED_REST_TO_INT(v3);
+ }
+
+
+ p8 ->p = p;
+
+ return p8;
+}
+
+static
+void Performance8free(cmsContext ContextID, void* ptr)
+{
+ _cmsFree(ContextID, ptr);
+}
+
+
+// Sampler implemented by another LUT. This is a clean way to precalculate the devicelink 3D CLUT for
+// almost any transform. We use floating point precision and then convert from floating point to 16 bits.
+static
+int XFormSampler16(cmsContext ContextID, CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo)
+{
+ // Evaluate in 16 bits
+ cmsPipelineEval16(ContextID, In, Out, (cmsPipeline*) Cargo);
+
+ // Always succeed
+ return TRUE;
+}
+
+
+// A optimized interpolation for 8-bit input.
+#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan])
+
+static
+void PerformanceEval8(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const void* Input,
+ void* Output,
+ cmsUInt32Number PixelsPerLine,
+ cmsUInt32Number LineCount,
+ const cmsStride* Stride)
+{
+
+ cmsUInt8Number r, g, b;
+ cmsS15Fixed16Number rx, ry, rz;
+ cmsS15Fixed16Number c0, c1, c2, c3, Rest;
+ cmsUInt32Number OutChan, TotalPlusAlpha;
+ cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1;
+ Performance8Data* p8 = (Performance8Data*)_cmsGetTransformUserData(CMMcargo);
+ const cmsInterpParams* p = p8->p;
+ cmsUInt32Number TotalOut = p->nOutputs;
+ const cmsUInt16Number* LutTable = (const cmsUInt16Number*)p->Table;
+
+ cmsUInt8Number* out[cmsMAXCHANNELS];
+ cmsUInt16Number res16;
+
+ cmsUInt32Number i, ii;
+
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+
+ const cmsUInt8Number* rin;
+ const cmsUInt8Number* gin;
+ const cmsUInt8Number* bin;
+ const cmsUInt8Number* ain = NULL;
+
+ cmsUInt32Number nalpha, strideIn, strideOut;
+
+
+ _cmsComputeComponentIncrements(cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements);
+
+ strideIn = strideOut = 0;
+ for (i = 0; i < LineCount; i++) {
+
+ rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn;
+ gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn;
+ bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn;
+ if (nalpha)
+ ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn;
+
+ TotalPlusAlpha = TotalOut;
+ if (ain) TotalPlusAlpha++;
+
+ for (OutChan = 0; OutChan < TotalPlusAlpha; OutChan++) {
+ out[OutChan] = (cmsUInt8Number*)Output + DestStartingOrder[OutChan] + strideOut;
+ }
+
+
+ for (ii = 0; ii < PixelsPerLine; ii++) {
+
+ r = *rin; g = *gin; b = *bin;
+
+ rin += SourceIncrements[0];
+ gin += SourceIncrements[1];
+ bin += SourceIncrements[2];
+
+ X0 = X1 = p8->X0[r];
+ Y0 = Y1 = p8->Y0[g];
+ Z0 = Z1 = p8->Z0[b];
+
+ rx = p8->rx[r];
+ ry = p8->ry[g];
+ rz = p8->rz[b];
+
+ X1 = X0 + ((rx == 0) ? 0 : p->opta[2]);
+ Y1 = Y0 + ((ry == 0) ? 0 : p->opta[1]);
+ Z1 = Z0 + ((rz == 0) ? 0 : p->opta[0]);
+
+
+ // These are the 6 Tetrahedral
+ for (OutChan = 0; OutChan < TotalOut; OutChan++) {
+
+ c0 = DENS(X0, Y0, Z0);
+
+ if (rx >= ry && ry >= rz)
+ {
+ c1 = DENS(X1, Y0, Z0) - c0;
+ c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0);
+ c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
+ }
+ else
+ if (rx >= rz && rz >= ry)
+ {
+ c1 = DENS(X1, Y0, Z0) - c0;
+ c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
+ c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0);
+ }
+ else
+ if (rz >= rx && rx >= ry)
+ {
+ c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1);
+ c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
+ c3 = DENS(X0, Y0, Z1) - c0;
+ }
+ else
+ if (ry >= rx && rx >= rz)
+ {
+ c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0);
+ c2 = DENS(X0, Y1, Z0) - c0;
+ c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
+ }
+ else
+ if (ry >= rz && rz >= rx)
+ {
+ c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
+ c2 = DENS(X0, Y1, Z0) - c0;
+ c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0);
+ }
+ else
+ if (rz >= ry && ry >= rx)
+ {
+ c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
+ c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1);
+ c3 = DENS(X0, Y0, Z1) - c0;
+ }
+ else {
+ c1 = c2 = c3 = 0;
+ }
+
+
+ Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001;
+ res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16);
+
+ *out[OutChan] = FROM_16_TO_8(res16);
+ out[OutChan] += DestIncrements[OutChan];
+
+ if (ain)
+ *out[TotalOut] = *ain;
+
+ }
+
+
+ }
+
+ strideIn += Stride->BytesPerLineIn;
+ strideOut += Stride->BytesPerLineOut;
+ }
+}
+
+#undef DENS
+
+
+// Curves that contain wide empty areas are not optimizeable
+static
+cmsBool IsDegenerated(cmsContext ContextID, const cmsToneCurve* g)
+{
+ int i, Zeros = 0, Poles = 0;
+ int nEntries = cmsGetToneCurveEstimatedTableEntries(ContextID, g);
+ const cmsUInt16Number* Table16 = cmsGetToneCurveEstimatedTable(ContextID, g);
+
+ for (i=0; i < nEntries; i++) {
+
+ if (Table16[i] == 0x0000) Zeros++;
+ if (Table16[i] == 0xffff) Poles++;
+ }
+
+ if (Zeros == 1 && Poles == 1) return FALSE; // For linear tables
+ if (Zeros > (nEntries / 4)) return TRUE; // Degenerated, mostly zeros
+ if (Poles > (nEntries / 4)) return TRUE; // Degenerated, mostly poles
+
+ return FALSE;
+}
+
+
+
+// Normalize endpoints by slope limiting max and min. This assures endpoints as well.
+// Descending curves are handled as well.
+static
+void SlopeLimiting(cmsUInt16Number* Table16, int nEntries)
+{
+ int BeginVal, EndVal;
+
+ int AtBegin = (int) floor((cmsFloat64Number)nEntries * 0.02 + 0.5); // Cutoff at 2%
+ int AtEnd = nEntries - AtBegin - 1; // And 98%
+ cmsFloat64Number Val, Slope, beta;
+ int i;
+
+
+ if (Table16[0] > Table16[nEntries-1]) {
+ BeginVal = 0xffff; EndVal = 0;
+ }
+ else {
+ BeginVal = 0; EndVal = 0xffff;
+ }
+
+ // Compute slope and offset for begin of curve
+ Val = Table16[AtBegin];
+ Slope = (Val - BeginVal) / AtBegin;
+ beta = Val - Slope * AtBegin;
+
+ for (i=0; i < AtBegin; i++)
+ Table16[i] = _cmsSaturateWord(i * Slope + beta);
+
+ // Compute slope and offset for the end
+ Val = Table16[AtEnd];
+ Slope = (EndVal - Val) / AtBegin; // AtBegin holds the X interval, which is same in both cases
+ beta = Val - Slope * AtEnd;
+
+ for (i = AtEnd; i < (int) nEntries; i++)
+ Table16[i] = _cmsSaturateWord(i * Slope + beta);
+}
+
+
+// --------------------------------------------------------------------------------------------------------------
+
+cmsBool Optimize8BitRGBTransform( cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeDataFn,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags)
+{
+ cmsPipeline* OriginalLut;
+ int nGridPoints;
+ cmsToneCurve *Trans[cmsMAXCHANNELS], *TransReverse[cmsMAXCHANNELS];
+ cmsUInt32Number t, i, j;
+ cmsFloat32Number v, In[cmsMAXCHANNELS], Out[cmsMAXCHANNELS];
+ cmsBool lIsSuitable, lIsLinear;
+ cmsPipeline* OptimizedLUT = NULL, *LutPlusCurves = NULL;
+ cmsStage* OptimizedCLUTmpe;
+ cmsColorSpaceSignature OutputColorSpace;
+ cmsStage* OptimizedPrelinMpe;
+ cmsStage* mpe;
+ Performance8Data* p8;
+ cmsUInt16Number* MyTable[3];
+ _cmsStageCLutData* data;
+
+ // For empty transforms, do nothing
+ if (*Lut == NULL) return FALSE;
+
+ // This is a loosy optimization! does not apply in floating-point cases
+ if (T_FLOAT(*InputFormat) || T_FLOAT(*OutputFormat)) return FALSE;
+
+ // Only on 8-bit
+ if (T_BYTES(*InputFormat) != 1 || T_BYTES(*OutputFormat) != 1) return FALSE;
+
+ // Only on RGB
+ if (T_COLORSPACE(*InputFormat) != PT_RGB) return FALSE;
+
+ OriginalLut = *Lut;
+
+ // Named color pipelines cannot be optimized either
+ for (mpe = cmsPipelineGetPtrToFirstStage(ContextID, OriginalLut);
+ mpe != NULL;
+ mpe = cmsStageNext(ContextID, mpe)) {
+ if (cmsStageType(ContextID, mpe) == cmsSigNamedColorElemType) return FALSE;
+ }
+
+ OutputColorSpace = _cmsICCcolorSpace(ContextID, T_COLORSPACE(*OutputFormat));
+ nGridPoints = _cmsReasonableGridpointsByColorspace(cmsSigRgbData, *dwFlags);
+
+ // Empty gamma containers
+ memset(Trans, 0, sizeof(Trans));
+ memset(TransReverse, 0, sizeof(TransReverse));
+
+ MyTable[0] = (cmsUInt16Number*) _cmsMallocZero(ContextID, sizeof(cmsUInt16Number) * PRELINEARIZATION_POINTS);
+ MyTable[1] = (cmsUInt16Number*) _cmsMallocZero(ContextID, sizeof(cmsUInt16Number) * PRELINEARIZATION_POINTS);
+ MyTable[2] = (cmsUInt16Number*) _cmsMallocZero(ContextID, sizeof(cmsUInt16Number) * PRELINEARIZATION_POINTS);
+
+ if (MyTable[0] == NULL || MyTable[1] == NULL || MyTable[2] == NULL) goto Error;
+
+ // Populate the curves
+
+ for (i=0; i < PRELINEARIZATION_POINTS; i++) {
+
+ v = (cmsFloat32Number) ((cmsFloat64Number) i / (PRELINEARIZATION_POINTS - 1));
+
+ // Feed input with a gray ramp
+ for (j=0; j < 3; j++)
+ In[j] = v;
+
+ // Evaluate the gray value
+ cmsPipelineEvalFloat(ContextID, In, Out, OriginalLut);
+
+ // Store result in curve
+ for (j=0; j < 3; j++)
+ MyTable[j][i] = _cmsSaturateWord(Out[j] * 65535.0);
+ }
+
+ for (t=0; t < 3; t++) {
+
+ SlopeLimiting(MyTable[t], PRELINEARIZATION_POINTS);
+
+ Trans[t] = cmsBuildTabulatedToneCurve16(ContextID, PRELINEARIZATION_POINTS, MyTable[t]);
+ if (Trans[t] == NULL) goto Error;
+
+ _cmsFree(ContextID, MyTable[t]);
+ }
+
+ // Check for validity
+ lIsSuitable = TRUE;
+ lIsLinear = TRUE;
+ for (t=0; (lIsSuitable && (t < 3)); t++) {
+
+ // Exclude if already linear
+ if (!cmsIsToneCurveLinear(ContextID, Trans[t]))
+ lIsLinear = FALSE;
+
+ // Exclude if non-monotonic
+ if (!cmsIsToneCurveMonotonic(ContextID, Trans[t]))
+ lIsSuitable = FALSE;
+
+ if (IsDegenerated(ContextID, Trans[t]))
+ lIsSuitable = FALSE;
+ }
+
+ // If it is not suitable, just quit
+ if (!lIsSuitable) goto Error;
+
+ // Invert curves if possible
+ for (t = 0; t < cmsPipelineInputChannels(ContextID, OriginalLut); t++) {
+ TransReverse[t] = cmsReverseToneCurveEx(ContextID, PRELINEARIZATION_POINTS, Trans[t]);
+ if (TransReverse[t] == NULL) goto Error;
+ }
+
+ // Now inset the reversed curves at the begin of transform
+ LutPlusCurves = cmsPipelineDup(ContextID, OriginalLut);
+ if (LutPlusCurves == NULL) goto Error;
+
+ cmsPipelineInsertStage(ContextID, LutPlusCurves, cmsAT_BEGIN, cmsStageAllocToneCurves(ContextID, 3, TransReverse));
+
+ // Create the result LUT
+ OptimizedLUT = cmsPipelineAlloc(ContextID, 3, cmsPipelineOutputChannels(ContextID, OriginalLut));
+ if (OptimizedLUT == NULL) goto Error;
+
+ OptimizedPrelinMpe = cmsStageAllocToneCurves(ContextID, 3, Trans);
+
+ // Create and insert the curves at the beginning
+ cmsPipelineInsertStage(ContextID, OptimizedLUT, cmsAT_BEGIN, OptimizedPrelinMpe);
+
+ // Allocate the CLUT for result
+ OptimizedCLUTmpe = cmsStageAllocCLut16bit(ContextID, nGridPoints, 3, cmsPipelineOutputChannels(ContextID, OriginalLut), NULL);
+
+ // Add the CLUT to the destination LUT
+ cmsPipelineInsertStage(ContextID, OptimizedLUT, cmsAT_END, OptimizedCLUTmpe);
+
+ // Resample the LUT
+ if (!cmsStageSampleCLut16bit(ContextID, OptimizedCLUTmpe, XFormSampler16, (void*) LutPlusCurves, 0)) goto Error;
+
+ // Set the evaluator
+ data = (_cmsStageCLutData*) cmsStageData(ContextID, OptimizedCLUTmpe);
+
+ p8 = Performance8alloc(ContextID, data ->Params, Trans);
+ if (p8 == NULL) return FALSE;
+
+ // Free resources
+ for (t = 0; t <3; t++) {
+
+ if (Trans[t]) cmsFreeToneCurve(ContextID, Trans[t]);
+ if (TransReverse[t]) cmsFreeToneCurve(ContextID, TransReverse[t]);
+ }
+
+ cmsPipelineFree(ContextID, LutPlusCurves);
+
+ // And return the obtained LUT
+ cmsPipelineFree(ContextID, OriginalLut);
+
+ *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER;
+ *Lut = OptimizedLUT;
+ *TransformFn = (_cmsTransformFn) PerformanceEval8;
+ *UserData = p8;
+ *FreeDataFn = Performance8free;
+
+ return TRUE;
+
+Error:
+
+ for (t = 0; t < 3; t++) {
+
+ if (Trans[t]) cmsFreeToneCurve(ContextID, Trans[t]);
+ if (TransReverse[t]) cmsFreeToneCurve(ContextID, TransReverse[t]);
+ }
+
+ if (LutPlusCurves != NULL) cmsPipelineFree(ContextID, LutPlusCurves);
+ if (OptimizedLUT != NULL) cmsPipelineFree(ContextID, OptimizedLUT);
+
+ return FALSE;
+}
diff --git a/lcms2mt/plugins/fast_float/src/fast_float_15bits.c b/lcms2mt/plugins/fast_float/src/fast_float_15bits.c
new file mode 100644
index 00000000..3dbfe036
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/fast_float_15bits.c
@@ -0,0 +1,603 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+#include "fast_float_internal.h"
+
+
+//---------------------------------------------------------------------------------
+
+// The internal photoshop 16 bit format range is 1.15 fixed point, which goes 0..32768
+// (NOT 32767) that means:
+//
+// 16 bits encoding 15 bit Photoshop encoding
+// ================ =========================
+//
+// 0x0000 0x0000
+// 0xFFFF 0x8000
+//
+// A nice (and fast) way to implement conversions is by using 64 bit values, which are
+// native CPU word size in most today architectures.
+// In CMYK, internal Photoshop format comes inverted, and this inversion happens after
+// the resizing, so values 32769 to 65535 are never used in PhotoShop.
+
+//---------------------------------------------------------------------------------
+
+// This macro converts 16 bits to 15 bits by using a 64 bits value
+cmsINLINE cmsUInt16Number From16To15(cmsUInt16Number x16)
+{
+ cmsUInt64Number r64 = (((cmsUInt64Number)x16 << 15)) / 0xFFFFL;
+ return (cmsUInt16Number)r64;
+}
+
+// This macro converts 15 bits to 16 bits by using a 64 bit value. It is based in fixed 1.15 math
+cmsINLINE cmsUInt16Number From15To16(cmsUInt16Number x15)
+{
+ cmsUInt64Number r64 = ((cmsUInt64Number) x15 * 0xFFFF + 0x4000L) >> 15;
+ return (cmsUInt16Number)r64;
+}
+
+// Specialized 1-channel formatters
+static
+cmsUInt8Number* Unroll15bitsGray(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(CMMcargo);
+ UNUSED_PARAMETER(Stride);
+ UNUSED_PARAMETER(ContextID);
+
+ Values[0] = From15To16(*(cmsUInt16Number*)Buffer);
+
+ return Buffer + 2;
+}
+
+
+static
+cmsUInt8Number* Pack15bitsGray(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(CMMcargo);
+ UNUSED_PARAMETER(Stride);
+
+ *(cmsUInt16Number*)Buffer = From16To15(Values[0]);
+ return Buffer + 2;
+}
+
+// Specialized 3-channels formatters
+static
+cmsUInt8Number* Unroll15bitsRGB(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(CMMcargo);
+ UNUSED_PARAMETER(Stride);
+
+ Values[0] = From15To16(*(cmsUInt16Number*)Buffer);
+ Buffer += 2;
+ Values[1] = From15To16(*(cmsUInt16Number*)Buffer);
+ Buffer += 2;
+ Values[2] = From15To16(*(cmsUInt16Number*)Buffer);
+
+ return Buffer + 2;
+}
+
+
+static
+cmsUInt8Number* Pack15bitsRGB(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(CMMcargo);
+ UNUSED_PARAMETER(Stride);
+
+ *(cmsUInt16Number*)Buffer = From16To15(Values[0]);
+ Buffer += 2;
+ *(cmsUInt16Number*)Buffer = From16To15(Values[1]);
+ Buffer += 2;
+ *(cmsUInt16Number*)Buffer = From16To15(Values[2]);
+
+ return Buffer + 2;
+}
+
+
+static
+cmsUInt8Number* Unroll15bitsRGBA(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(CMMcargo);
+ UNUSED_PARAMETER(Stride);
+
+ Values[0] = From15To16(*(cmsUInt16Number*)Buffer);
+ Buffer += 2;
+ Values[1] = From15To16(*(cmsUInt16Number*)Buffer);
+ Buffer += 2;
+ Values[2] = From15To16(*(cmsUInt16Number*)Buffer);
+
+ return Buffer + 4;
+}
+
+
+static
+cmsUInt8Number* Pack15bitsRGBA(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(CMMcargo);
+ UNUSED_PARAMETER(Stride);
+
+ *(cmsUInt16Number*)Buffer = From16To15(Values[0]);
+ Buffer += 2;
+ *(cmsUInt16Number*)Buffer = From16To15(Values[1]);
+ Buffer += 2;
+ *(cmsUInt16Number*)Buffer = From16To15(Values[2]);
+
+ return Buffer + 4;
+}
+
+
+// Specialized 3 channels reversed formatters
+static
+cmsUInt8Number* Unroll15bitsBGR(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(CMMcargo);
+ UNUSED_PARAMETER(Stride);
+
+ Values[2] = From15To16(*(cmsUInt16Number*)Buffer);
+ Buffer += 2;
+ Values[1] = From15To16(*(cmsUInt16Number*)Buffer);
+ Buffer += 2;
+ Values[0] = From15To16(*(cmsUInt16Number*)Buffer);
+
+ return Buffer + 2;
+}
+
+
+static
+cmsUInt8Number* Pack15bitsBGR(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(CMMcargo);
+ UNUSED_PARAMETER(Stride);
+
+ *(cmsUInt16Number*)Buffer = From16To15(Values[2]);
+ Buffer += 2;
+ *(cmsUInt16Number*)Buffer = From16To15(Values[1]);
+ Buffer += 2;
+ *(cmsUInt16Number*)Buffer = From16To15(Values[0]);
+
+ return Buffer+2;
+}
+
+// Specialized 4 channels CMYK formatters. Note Photoshop stores CMYK reversed
+static
+cmsUInt8Number* Unroll15bitsCMYK(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(CMMcargo);
+ UNUSED_PARAMETER(Stride);
+
+ Values[0] = From15To16(0x8000 - *(cmsUInt16Number*)Buffer);
+ Buffer += 2;
+ Values[1] = From15To16(0x8000 - *(cmsUInt16Number*)Buffer);
+ Buffer += 2;
+ Values[2] = From15To16(0x8000 - *(cmsUInt16Number*)Buffer);
+ Buffer += 2;
+ Values[3] = From15To16(0x8000 - *(cmsUInt16Number*)Buffer);
+
+ return Buffer + 2;
+}
+
+static
+cmsUInt8Number* Pack15bitsCMYK(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(CMMcargo);
+ UNUSED_PARAMETER(Stride);
+
+ *(cmsUInt16Number*)Buffer = 0x8000U - From16To15(Values[0]);
+ Buffer += 2;
+ *(cmsUInt16Number*)Buffer = 0x8000U - From16To15(Values[1]);
+ Buffer += 2;
+ *(cmsUInt16Number*)Buffer = 0x8000U - From16To15(Values[2]);
+ Buffer += 2;
+ *(cmsUInt16Number*)Buffer = 0x8000U - From16To15(Values[3]);
+
+ return Buffer + 2;
+}
+
+
+// This macros does all handling for fallthrough cases
+cmsINLINE cmsUInt16Number UnrollOne(cmsUInt16Number x, cmsBool Reverse, cmsBool SwapEndian)
+{
+ if (SwapEndian)
+ x = (x << 8) | (x >> 8);
+
+ if (Reverse)
+ x = 0xffff - x;
+
+ return From15To16(x);
+}
+
+cmsINLINE cmsUInt16Number PackOne(cmsUInt16Number x, cmsBool Reverse, cmsBool SwapEndian)
+{
+ x = From16To15(x);
+
+ if (Reverse)
+ x = 0xffff - x;
+
+ if (SwapEndian)
+ x = (x << 8) | (x >> 8);
+
+ return x;
+}
+
+// Generic planar support
+static
+cmsUInt8Number* Unroll15bitsPlanar(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ _xform_head* head = (_xform_head*) CMMcargo;
+ int nChan = T_CHANNELS(head->InputFormat);
+ int DoSwap = T_DOSWAP(head->InputFormat);
+ int Reverse = T_FLAVOR(head->InputFormat);
+ int SwapEndian = T_ENDIAN16(head->InputFormat);
+ int i;
+ cmsUInt8Number* Init = accum;
+
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(Stride);
+
+ if (DoSwap) {
+ accum += T_EXTRA(head->InputFormat) * Stride * 2;
+ }
+
+ for (i = 0; i < nChan; i++) {
+
+ int index = DoSwap ? (nChan - i - 1) : i;
+
+ wIn[index] = UnrollOne(*(cmsUInt16Number*)accum, Reverse, SwapEndian);
+
+ accum += Stride * 2;
+ }
+
+ return (Init + 2);
+}
+
+
+static
+cmsUInt8Number* Pack15bitsPlanar(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ _xform_head* head = (_xform_head*)CMMcargo;
+ int nChan = T_CHANNELS(head->OutputFormat);
+ int DoSwap = T_DOSWAP(head->OutputFormat);
+ int Reverse = T_FLAVOR(head->OutputFormat);
+ int SwapEndian = T_ENDIAN16(head->OutputFormat);
+ CMSREGISTER int i;
+ cmsUInt8Number* Init = output;
+
+ UNUSED_PARAMETER(ContextID);
+
+ if (DoSwap) {
+ output += T_EXTRA(head->OutputFormat) * Stride * 2;
+ }
+
+ for (i = 0; i < nChan; i++) {
+
+ int index = DoSwap ? (nChan - i - 1) : i;
+
+ *(cmsUInt16Number*)output = PackOne(wOut[index], Reverse, SwapEndian);
+ output += (Stride * sizeof(cmsUInt16Number));
+ }
+
+ return (Init + sizeof(cmsUInt16Number));
+}
+
+
+
+// Generic falltrough
+static
+cmsUInt8Number* Unroll15bitsChunky(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ _xform_head* head = (_xform_head*) CMMcargo;
+
+ int nChan = T_CHANNELS(head->InputFormat);
+ int DoSwap = T_DOSWAP(head->InputFormat);
+ int Reverse = T_FLAVOR(head->InputFormat);
+ int SwapEndian = T_ENDIAN16(head->InputFormat);
+
+ CMSREGISTER int i;
+
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(Stride);
+
+ if (DoSwap) {
+ Buffer += T_EXTRA(head->OutputFormat) * 2;
+ }
+
+ for (i = 0; i < nChan; i++) {
+
+ int index = DoSwap ? (nChan - i - 1) : i;
+
+ Values[index] = UnrollOne(*(cmsUInt16Number*)Buffer, Reverse, SwapEndian);
+
+ Buffer += 2;
+ }
+
+
+ return Buffer;
+}
+
+
+static
+cmsUInt8Number* Pack15bitsChunky(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ _xform_head* head = (_xform_head*)CMMcargo;
+
+ int nChan = T_CHANNELS(head->OutputFormat);
+ int DoSwap = T_DOSWAP(head->OutputFormat);
+ int Reverse = T_FLAVOR(head->OutputFormat);
+ int SwapEndian = T_ENDIAN16(head->OutputFormat);
+
+ CMSREGISTER int i;
+
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(Stride);
+
+ if (DoSwap) {
+ Buffer += T_EXTRA(head->OutputFormat) * 2;
+ }
+
+ for (i = 0; i < nChan; i++) {
+
+ int index = DoSwap ? (nChan - i - 1) : i;
+
+ *(cmsUInt16Number*)Buffer = PackOne(Values[index], Reverse, SwapEndian);
+
+ Buffer += 2;
+ }
+
+ return Buffer;
+}
+
+
+
+// Generic N-bytes plus dither 16-to-8 conversion.
+static int err[cmsMAXCHANNELS];
+
+static
+cmsUInt8Number* PackNBytesDither(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ _xform_head* info = (_xform_head*)CMMcargo;
+
+ int nChan = T_CHANNELS(info->OutputFormat);
+ CMSREGISTER int i;
+ unsigned int n, pe, pf;
+
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(Stride);
+
+ for (i = 0; i < nChan; i++) {
+
+ n = Values[i] + err[i]; // Value
+
+ pe = (n / 257); // Whole part
+ pf = (n % 257); // Fractional part
+
+ err[i] = pf; // Store it for next pixel
+
+ *Buffer++ = (cmsUInt8Number) pe;
+ }
+
+ return Buffer + T_EXTRA(info->OutputFormat);
+}
+
+
+static
+cmsUInt8Number* PackNBytesSwapDither(cmsContext ContextID,
+ CMSREGISTER struct _cmstransform_struct* CMMcargo,
+ CMSREGISTER cmsUInt16Number Values[],
+ CMSREGISTER cmsUInt8Number* Buffer,
+ CMSREGISTER cmsUInt32Number Stride)
+{
+ _xform_head* info = (_xform_head*)CMMcargo;
+
+ int nChan = T_CHANNELS(info->OutputFormat);
+ CMSREGISTER int i;
+ unsigned int n, pe, pf;
+
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(Stride);
+
+ for (i = nChan - 1; i >= 0; --i) {
+
+ n = Values[i] + err[i]; // Value
+
+ pe = (n / 257); // Whole part
+ pf = (n % 257); // Fractional part
+
+ err[i] = pf; // Store it for next pixel
+
+ *Buffer++ = (cmsUInt8Number)pe;
+ }
+
+
+ return Buffer + T_EXTRA(info->OutputFormat);
+}
+
+
+// The factory for 15 bits. This function returns a pointer to specialized function
+// that would deal with the asked format. It return a pointer to NULL if the format
+// is not supported. This is tha basis of formatter plug-in for 15 bit formats.
+cmsFormatter Formatter_15Bit_Factory(cmsContext ContextID,
+ cmsUInt32Number Type,
+ cmsFormatterDirection Dir,
+ cmsUInt32Number dwFlags)
+{
+ cmsFormatter Result = { NULL };
+
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(dwFlags);
+
+ switch (Type) {
+
+ // Simple Gray
+ case TYPE_GRAY_15:
+ Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsGray : Pack15bitsGray;
+ break;
+
+ // 3 channels
+ case TYPE_CMY_15:
+ case TYPE_RGB_15:
+ Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsRGB : Pack15bitsRGB;
+ break;
+
+ // 3 channels reversed
+ case TYPE_YMC_15:
+ case TYPE_BGR_15:
+ Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsBGR : Pack15bitsBGR;
+ break;
+
+ // 3 Channels plus one alpha
+ case TYPE_RGBA_15:
+ Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsRGBA : Pack15bitsRGBA;
+ break;
+
+ // 4 channels
+ case TYPE_CMYK_15:
+ Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsCMYK : Pack15bitsCMYK;
+ break;
+
+ // Planar versions
+ case TYPE_GRAYA_15_PLANAR:
+ case TYPE_RGB_15_PLANAR:
+ case TYPE_BGR_15_PLANAR:
+ case TYPE_RGBA_15_PLANAR:
+ case TYPE_ABGR_15_PLANAR:
+ case TYPE_CMY_15_PLANAR:
+ case TYPE_CMYK_15_PLANAR:
+ Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsPlanar : Pack15bitsPlanar;
+ break;
+
+ // Falltrough for remaining (corner) cases
+ case TYPE_GRAY_15_REV:
+ case TYPE_GRAY_15_SE:
+ case TYPE_GRAYA_15:
+ case TYPE_GRAYA_15_SE:
+ case TYPE_RGB_15_SE:
+ case TYPE_BGR_15_SE:
+ case TYPE_RGBA_15_SE:
+ case TYPE_ARGB_15:
+ case TYPE_ABGR_15:
+ case TYPE_ABGR_15_SE:
+ case TYPE_BGRA_15:
+ case TYPE_BGRA_15_SE:
+ case TYPE_CMY_15_SE:
+ case TYPE_CMYK_15_REV:
+ case TYPE_CMYK_15_SE:
+ case TYPE_KYMC_15:
+ case TYPE_KYMC_15_SE:
+ case TYPE_KCMY_15:
+ case TYPE_KCMY_15_REV:
+ case TYPE_KCMY_15_SE:
+ Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsChunky : Pack15bitsChunky;
+ break;
+
+ case TYPE_GRAY_8_DITHER:
+ case TYPE_RGB_8_DITHER:
+ case TYPE_RGBA_8_DITHER:
+ case TYPE_CMYK_8_DITHER:
+ if (Dir == cmsFormatterOutput) {
+ Result.Fmt16 = PackNBytesDither;
+ }
+ break;
+
+ case TYPE_ABGR_8_DITHER:
+ case TYPE_BGR_8_DITHER:
+ case TYPE_KYMC_8_DITHER:
+ if (Dir == cmsFormatterOutput) {
+ Result.Fmt16 = PackNBytesSwapDither;
+ }
+ break;
+
+ default:;
+ }
+
+ return Result;
+}
+
+
+
diff --git a/lcms2mt/plugins/fast_float/src/fast_float_15mats.c b/lcms2mt/plugins/fast_float/src/fast_float_15mats.c
new file mode 100644
index 00000000..e2a7da68
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/fast_float_15mats.c
@@ -0,0 +1,347 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+// Optimization for matrix-shaper in 15 bits. Numbers are operated in 1.15 usigned,
+
+#include "fast_float_internal.h"
+
+// An storage capable to keep 1.15 signed and some extra precission.
+// Actually I use 32 bits integer (signed)
+typedef cmsInt32Number cmsS1Fixed15Number;
+
+// Conversion to fixed. Note we don't use floor to get proper sign roundoff
+#define DOUBLE_TO_1FIXED15(x) ((cmsS1Fixed15Number) ((double) (x) * 0x8000 + 0.5))
+
+// This is the private data container used by this optimization
+typedef struct {
+
+ cmsS1Fixed15Number Mat[3][3];
+ cmsS1Fixed15Number Off[3];
+
+ // Precalculated tables for first shaper (375 Kb in total of both shapers)
+ cmsUInt16Number Shaper1R[MAX_NODES_IN_CURVE];
+ cmsUInt16Number Shaper1G[MAX_NODES_IN_CURVE];
+ cmsUInt16Number Shaper1B[MAX_NODES_IN_CURVE];
+
+ // Second shaper
+ cmsUInt16Number Shaper2R[MAX_NODES_IN_CURVE];
+ cmsUInt16Number Shaper2G[MAX_NODES_IN_CURVE];
+ cmsUInt16Number Shaper2B[MAX_NODES_IN_CURVE];
+
+ // A flag for fast operation if identity
+ cmsBool IdentityMat;
+
+ // Poits to the raw, unaligned memory
+ void * real_ptr;
+
+
+} XMatShaperData;
+
+// A special malloc that returns memory aligned to DWORD boundary. Aligned memory access is way faster than unaligned
+// reference to the real block is kept for later free
+static XMatShaperData* malloc_aligned(cmsContext ContextID)
+{
+ cmsUInt8Number* real_ptr = (cmsUInt8Number*)_cmsMallocZero(ContextID, sizeof(XMatShaperData) + 32);
+ cmsUInt8Number* aligned = (cmsUInt8Number*)(((uintptr_t)real_ptr + 16) & ~0xf);
+ XMatShaperData* p = (XMatShaperData*)aligned;
+
+ p->real_ptr = real_ptr;
+ return p;
+}
+
+
+// Free the private data container
+static
+void FreeMatShaper(cmsContext ContextID, void* Data)
+{
+
+ XMatShaperData* p = (XMatShaperData*)Data;
+ if (p != NULL)
+ _cmsFree(ContextID, p->real_ptr);
+}
+
+
+// This table converts from 8 bits to 1.14 after applying the curve
+static
+void FillShaper(cmsContext ContextID, cmsUInt16Number* Table, cmsToneCurve* Curve)
+{
+ int i;
+ cmsFloat32Number R, y;
+
+ for (i = 0; i < MAX_NODES_IN_CURVE; i++) {
+
+ R = (cmsFloat32Number)i / (cmsFloat32Number) (MAX_NODES_IN_CURVE - 1);
+ y = cmsEvalToneCurveFloat(ContextID, Curve, R);
+
+ Table[i] = (cmsUInt16Number) DOUBLE_TO_1FIXED15(y);
+ }
+}
+
+
+// Compute the matrix-shaper structure
+static
+XMatShaperData* SetMatShaper(cmsContext ContextID, cmsToneCurve* Curve1[3], cmsMAT3* Mat, cmsVEC3* Off, cmsToneCurve* Curve2[3], cmsBool IdentityMat)
+{
+ XMatShaperData* p;
+ int i, j;
+
+ // Allocate a big chuck of memory to store precomputed tables
+ p = malloc_aligned(ContextID);
+ if (p == NULL) return FALSE;
+
+ p->IdentityMat = IdentityMat;
+
+ // Precompute tables
+ FillShaper(ContextID, p->Shaper1R, Curve1[0]);
+ FillShaper(ContextID, p->Shaper1G, Curve1[1]);
+ FillShaper(ContextID, p->Shaper1B, Curve1[2]);
+
+ FillShaper(ContextID, p->Shaper2R, Curve2[0]);
+ FillShaper(ContextID, p->Shaper2G, Curve2[1]);
+ FillShaper(ContextID, p->Shaper2B, Curve2[2]);
+
+ // Convert matrix to nFixed14. Note that those values may take more than 16 bits if negative
+ for (i = 0; i < 3; i++) {
+ for (j = 0; j < 3; j++) {
+
+ p->Mat[i][j] = DOUBLE_TO_1FIXED15(Mat->v[i].n[j]);
+ }
+ }
+
+
+ for (i = 0; i < 3; i++) {
+
+ if (Off == NULL) {
+
+ p->Off[i] = 0x4000;
+
+ }
+ else {
+ p->Off[i] = DOUBLE_TO_1FIXED15(Off->n[i]) + 0x4000;
+
+ }
+ }
+
+
+ return p;
+}
+
+// A fast matrix-shaper evaluator for 15 bits. This is a bit ticky since I'm using 1.15 signed fixed point.
+static
+void MatShaperXform(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const void* Input,
+ void* Output,
+ cmsUInt32Number PixelsPerLine,
+ cmsUInt32Number LineCount,
+ const cmsStride* Stride)
+{
+ XMatShaperData* p = (XMatShaperData*)_cmsGetTransformUserData(CMMcargo);
+
+ cmsS1Fixed15Number l1, l2, l3;
+
+ cmsS1Fixed15Number r, g, b;
+ cmsUInt32Number ri, gi, bi;
+ cmsUInt32Number i, ii;
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+
+ const cmsUInt8Number* rin;
+ const cmsUInt8Number* gin;
+ const cmsUInt8Number* bin;
+ const cmsUInt8Number* ain = NULL;
+
+ cmsUInt8Number* rout;
+ cmsUInt8Number* gout;
+ cmsUInt8Number* bout;
+ cmsUInt8Number* aout = NULL;
+
+ cmsUInt32Number nalpha, strideIn, strideOut;
+
+ _cmsComputeComponentIncrements(cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements);
+
+ strideIn = strideOut = 0;
+ for (i = 0; i < LineCount; i++) {
+
+ rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn;
+ gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn;
+ bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn;
+ if (nalpha)
+ ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn;
+
+
+ rout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut;
+ gout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut;
+ bout = (cmsUInt8Number*)Output + DestStartingOrder[2] + strideOut;
+ if (nalpha)
+ aout = (cmsUInt8Number*)Output + DestStartingOrder[3] + strideOut;
+
+
+ for (ii = 0; ii < PixelsPerLine; ii++) {
+
+ // Across first shaper, which also converts to 1.15 fixed point.
+ r = p->Shaper1R[*(cmsUInt16Number*)rin];
+ g = p->Shaper1G[*(cmsUInt16Number*)gin];
+ b = p->Shaper1B[*(cmsUInt16Number*)bin];
+
+ if (p->IdentityMat)
+ {
+ l1 = r; l2 = g; l3 = b;
+ }
+ else
+ {
+ // Evaluate the matrix in 1.14 fixed point
+ l1 = (p->Mat[0][0] * r + p->Mat[0][1] * g + p->Mat[0][2] * b + p->Off[0]) >> 15;
+ l2 = (p->Mat[1][0] * r + p->Mat[1][1] * g + p->Mat[1][2] * b + p->Off[1]) >> 15;
+ l3 = (p->Mat[2][0] * r + p->Mat[2][1] * g + p->Mat[2][2] * b + p->Off[2]) >> 15;
+ }
+
+ // Now we have to clip to 0..1.0 range
+ ri = (l1 < 0) ? 0 : ((l1 > 0x8000) ? 0x8000 : l1);
+ gi = (l2 < 0) ? 0 : ((l2 > 0x8000) ? 0x8000 : l2);
+ bi = (l3 < 0) ? 0 : ((l3 > 0x8000) ? 0x8000 : l3);
+
+
+ // And across second shaper,
+ *(cmsUInt16Number*)rout = p->Shaper2R[ri];
+ *(cmsUInt16Number*)gout = p->Shaper2G[gi];
+ *(cmsUInt16Number*)bout = p->Shaper2B[bi];
+
+
+ // Handle alpha
+ if (ain) {
+ memmove(aout, ain, 2);
+ }
+
+ rin += SourceIncrements[0];
+ gin += SourceIncrements[1];
+ bin += SourceIncrements[2];
+ if (ain) ain += SourceIncrements[3];
+
+ rout += DestIncrements[0];
+ gout += DestIncrements[1];
+ bout += DestIncrements[2];
+ if (aout) aout += DestIncrements[3];
+ }
+
+ strideIn += Stride->BytesPerLineIn;
+ strideOut += Stride->BytesPerLineOut;
+ }
+}
+
+
+
+// 15 bits on input allows matrix-shaper boost up a little bit
+cmsBool OptimizeMatrixShaper15(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeUserData,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags)
+{
+ cmsStage* Curve1, *Curve2;
+ cmsStage* Matrix1, *Matrix2;
+ _cmsStageMatrixData* Data1;
+ _cmsStageMatrixData* Data2;
+ cmsMAT3 res;
+ cmsBool IdentityMat = FALSE;
+ cmsPipeline* Dest, *Src;
+
+ cmsUInt32Number nChans;
+
+ // Only works on RGB to RGB and gray
+
+ if (!(T_CHANNELS(*InputFormat) == 3 && T_CHANNELS(*OutputFormat) == 3)) return FALSE;
+
+ // Only works on 15 bit to 15 bit
+ if (T_BYTES(*InputFormat) != 2 || T_BYTES(*OutputFormat) != 2 ||
+ T_BIT15(*InputFormat) == 0 || T_BIT15(*OutputFormat) == 0) return FALSE;
+
+ // Seems suitable, proceed
+ Src = *Lut;
+
+ // Check for shaper-matrix-matrix-shaper structure, that is what this optimizer stands for
+ if (!cmsPipelineCheckAndRetreiveStages(ContextID, Src, 4,
+ cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType,
+ &Curve1, &Matrix1, &Matrix2, &Curve2)) return FALSE;
+
+ nChans = T_CHANNELS(*InputFormat);
+
+ // Get both matrices, which are 3x3
+ Data1 = (_cmsStageMatrixData*)cmsStageData(ContextID, Matrix1);
+ Data2 = (_cmsStageMatrixData*)cmsStageData(ContextID, Matrix2);
+
+ // Input offset should be zero
+ if (Data1->Offset != NULL) return FALSE;
+
+ // Multiply both matrices to get the result
+ _cmsMAT3per(ContextID, &res, (cmsMAT3*)Data2->Double, (cmsMAT3*)Data1->Double);
+
+ // Now the result is in res + Data2 -> Offset. Maybe is a plain identity?
+ IdentityMat = FALSE;
+ if (_cmsMAT3isIdentity(ContextID, &res) && Data2->Offset == NULL) {
+
+ // We can get rid of full matrix
+ IdentityMat = TRUE;
+ }
+
+
+ // Allocate an empty LUT
+ Dest = cmsPipelineAlloc(ContextID, nChans, nChans);
+ if (!Dest) return FALSE;
+
+ // Assamble the new LUT
+ cmsPipelineInsertStage(ContextID, Dest, cmsAT_BEGIN, cmsStageDup(ContextID, Curve1));
+
+ if (!IdentityMat) {
+
+ cmsPipelineInsertStage(ContextID, Dest, cmsAT_END,
+ cmsStageAllocMatrix(ContextID, 3, 3, (const cmsFloat64Number*)&res, Data2->Offset));
+ }
+
+ cmsPipelineInsertStage(ContextID, Dest, cmsAT_END, cmsStageDup(ContextID, Curve2));
+
+ {
+ _cmsStageToneCurvesData* mpeC1 = (_cmsStageToneCurvesData*)cmsStageData(ContextID, Curve1);
+ _cmsStageToneCurvesData* mpeC2 = (_cmsStageToneCurvesData*)cmsStageData(ContextID, Curve2);
+
+ // In this particular optimization, caché does not help as it takes more time to deal with
+ // the caché that with the pixel handling
+ *dwFlags |= cmsFLAGS_NOCACHE;
+
+ // Setup the optimizarion routines
+ *UserData = SetMatShaper(ContextID, mpeC1->TheCurves, &res, (cmsVEC3*)Data2->Offset, mpeC2->TheCurves, IdentityMat);
+ *FreeUserData = FreeMatShaper;
+
+ *TransformFn = (_cmsTransformFn)MatShaperXform;
+ }
+
+
+ cmsPipelineFree(ContextID, Src);
+ *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER;
+ *Lut = Dest;
+ return TRUE;
+}
diff --git a/lcms2mt/plugins/fast_float/src/fast_float_cmyk.c b/lcms2mt/plugins/fast_float/src/fast_float_cmyk.c
new file mode 100644
index 00000000..1886b966
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/fast_float_cmyk.c
@@ -0,0 +1,379 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+#include "fast_float_internal.h"
+
+// Optimization for floating point tetrahedral interpolation
+typedef struct {
+
+ const cmsInterpParams* p; // Tetrahedrical interpolation parameters. This is a not-owned pointer.
+
+} FloatCMYKData;
+
+
+
+// Precomputes tables on input devicelink.
+static
+FloatCMYKData* FloatCMYKAlloc(cmsContext ContextID, const cmsInterpParams* p)
+{
+ FloatCMYKData* fd;
+
+ fd = (FloatCMYKData*) _cmsMallocZero(ContextID, sizeof(FloatCMYKData));
+ if (fd == NULL) return NULL;
+
+ fd ->p = p;
+ return fd;
+}
+
+
+static
+int XFormSampler(cmsContext ContextID, CMSREGISTER const cmsFloat32Number In[], CMSREGISTER cmsFloat32Number Out[], CMSREGISTER void* Cargo)
+{
+ // Evaluate in 16 bits
+ cmsPipelineEvalFloat(ContextID, In, Out, (cmsPipeline*) Cargo);
+
+ // Always succeed
+ return TRUE;
+}
+
+cmsINLINE cmsFloat32Number LinearInterpInt(cmsFloat32Number a, cmsFloat32Number l, cmsFloat32Number h)
+{
+ return (h - l) * a + l;
+}
+
+// To prevent out of bounds indexing
+cmsINLINE cmsFloat32Number fclamp100(cmsFloat32Number v)
+{
+ return v < 0.0f ? 0.0f : (v > 100.0f ? 100.0f : v);
+}
+
+
+// A optimized interpolation for 8-bit input.
+#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan])
+
+static
+void FloatCMYKCLUTEval(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const cmsFloat32Number* Input,
+ cmsFloat32Number* Output,
+ cmsUInt32Number len,
+ cmsUInt32Number Stride)
+{
+
+ cmsFloat32Number c, m, y, k;
+ cmsFloat32Number px, py, pz, pk;
+ int x0, y0, z0, k0;
+ int X0, Y0, Z0, K0, X1, Y1, Z1, K1;
+ cmsFloat32Number rx, ry, rz, rk;
+ cmsFloat32Number c0, c1 = 0, c2 = 0, c3 = 0;
+
+ cmsUInt32Number OutChan;
+ FloatCMYKData* p8 = (FloatCMYKData*) _cmsGetTransformUserData(CMMcargo);
+
+ const cmsInterpParams* p = p8 ->p;
+ cmsUInt32Number TotalOut = p -> nOutputs;
+ const cmsFloat32Number* LutTable = (const cmsFloat32Number*)p->Table;
+ cmsUInt32Number ii;
+ const cmsUInt8Number* cin;
+ const cmsUInt8Number* min;
+ const cmsUInt8Number* yin;
+ const cmsUInt8Number* kin;
+
+ cmsFloat32Number Tmp1[cmsMAXCHANNELS], Tmp2[cmsMAXCHANNELS];
+
+ cmsUInt8Number* out[cmsMAXCHANNELS];
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+
+ cmsUInt32Number InputFormat = cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM) CMMcargo);
+ cmsUInt32Number OutputFormat = cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM) CMMcargo);
+
+ cmsUInt32Number nchans, nalpha;
+
+ _cmsComputeComponentIncrements(InputFormat, Stride, &nchans, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(OutputFormat, Stride, &nchans, &nalpha, DestStartingOrder, DestIncrements);
+
+ // SeparateCMYK(InputFormat, Stride, SourceStartingOrder, SourceIncrements);
+ // SeparateCMYK(OutputFormat, Stride, DestStartingOrder, DestIncrements);
+
+ cin = (const cmsUInt8Number*)Input + SourceStartingOrder[0];
+ min = (const cmsUInt8Number*)Input + SourceStartingOrder[1];
+ yin = (const cmsUInt8Number*)Input + SourceStartingOrder[2];
+ kin = (const cmsUInt8Number*)Input + SourceStartingOrder[3];
+
+ for (ii=0; ii < TotalOut; ii++)
+ out[ii] = (cmsUInt8Number*)Output + DestStartingOrder[ii];
+
+ for (ii=0; ii < len; ii++) {
+
+ c = fclamp100(*(cmsFloat32Number*)cin) / 100.0f;
+ m = fclamp100(*(cmsFloat32Number*)min) / 100.0f;
+ y = fclamp100(*(cmsFloat32Number*)yin) / 100.0f;
+ k = fclamp100(*(cmsFloat32Number*)kin) / 100.0f;
+
+ cin += SourceIncrements[0];
+ min += SourceIncrements[1];
+ yin += SourceIncrements[2];
+ kin += SourceIncrements[3];
+
+ pk = c * p->Domain[0]; // C
+ px = m * p->Domain[1]; // M
+ py = y * p->Domain[2]; // Y
+ pz = k * p->Domain[3]; // K
+
+
+ k0 = (int)_cmsQuickFloor(pk); rk = (pk - (cmsFloat32Number)k0);
+ x0 = (int)_cmsQuickFloor(px); rx = (px - (cmsFloat32Number)x0);
+ y0 = (int)_cmsQuickFloor(py); ry = (py - (cmsFloat32Number)y0);
+ z0 = (int)_cmsQuickFloor(pz); rz = (pz - (cmsFloat32Number)z0);
+
+
+ K0 = p->opta[3] * k0;
+ K1 = K0 + (c >= 1.0 ? 0 : p->opta[3]);
+
+ X0 = p->opta[2] * x0;
+ X1 = X0 + (m >= 1.0 ? 0 : p->opta[2]);
+
+ Y0 = p->opta[1] * y0;
+ Y1 = Y0 + (y >= 1.0 ? 0 : p->opta[1]);
+
+ Z0 = p->opta[0] * z0;
+ Z1 = Z0 + (k >= 1.0 ? 0 : p->opta[0]);
+
+ for (OutChan = 0; OutChan < TotalOut; OutChan++) {
+
+ c0 = DENS(X0, Y0, Z0);
+
+ if (rx >= ry && ry >= rz) {
+
+ c1 = DENS(X1, Y0, Z0) - c0;
+ c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0);
+ c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
+
+ }
+ else
+ if (rx >= rz && rz >= ry) {
+
+ c1 = DENS(X1, Y0, Z0) - c0;
+ c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
+ c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0);
+
+ }
+ else
+ if (rz >= rx && rx >= ry) {
+
+ c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1);
+ c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
+ c3 = DENS(X0, Y0, Z1) - c0;
+
+ }
+ else
+ if (ry >= rx && rx >= rz) {
+
+ c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0);
+ c2 = DENS(X0, Y1, Z0) - c0;
+ c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
+
+ }
+ else
+ if (ry >= rz && rz >= rx) {
+
+ c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
+ c2 = DENS(X0, Y1, Z0) - c0;
+ c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0);
+
+ }
+ else
+ if (rz >= ry && ry >= rx) {
+
+ c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
+ c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1);
+ c3 = DENS(X0, Y0, Z1) - c0;
+
+ }
+ else {
+ c1 = c2 = c3 = 0;
+ }
+
+
+ Tmp1[OutChan] = c0 + c1 * rx + c2 * ry + c3 * rz;
+
+ }
+
+
+ LutTable = (cmsFloat32Number*)p->Table;
+ LutTable += K1;
+
+ for (OutChan = 0; OutChan < p->nOutputs; OutChan++) {
+
+ c0 = DENS(X0, Y0, Z0);
+
+ if (rx >= ry && ry >= rz) {
+
+ c1 = DENS(X1, Y0, Z0) - c0;
+ c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0);
+ c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
+
+ }
+ else
+ if (rx >= rz && rz >= ry) {
+
+ c1 = DENS(X1, Y0, Z0) - c0;
+ c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
+ c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0);
+
+ }
+ else
+ if (rz >= rx && rx >= ry) {
+
+ c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1);
+ c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
+ c3 = DENS(X0, Y0, Z1) - c0;
+
+ }
+ else
+ if (ry >= rx && rx >= rz) {
+
+ c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0);
+ c2 = DENS(X0, Y1, Z0) - c0;
+ c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
+
+ }
+ else
+ if (ry >= rz && rz >= rx) {
+
+ c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
+ c2 = DENS(X0, Y1, Z0) - c0;
+ c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0);
+
+ }
+ else
+ if (rz >= ry && ry >= rx) {
+
+ c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
+ c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1);
+ c3 = DENS(X0, Y0, Z1) - c0;
+
+ }
+ else {
+ c1 = c2 = c3 = 0;
+ }
+
+ Tmp2[OutChan] = c0 + c1 * rx + c2 * ry + c3 * rz;
+ }
+
+
+ for (OutChan = 0; OutChan < p->nOutputs; OutChan++) {
+
+ *(cmsFloat32Number*)(out[OutChan]) = LinearInterpInt(rk, Tmp1[OutChan], Tmp2[OutChan]);
+ out[OutChan] += DestIncrements[OutChan];
+ }
+
+
+ }
+}
+
+#undef DENS
+
+
+
+// --------------------------------------------------------------------------------------------------------------
+
+cmsBool OptimizeCLUTCMYKTransform(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeDataFn,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags)
+{
+ cmsPipeline* OriginalLut;
+ int nGridPoints;
+ cmsPipeline* OptimizedLUT = NULL;
+ cmsStage* OptimizedCLUTmpe;
+ cmsColorSpaceSignature OutputColorSpace;
+ cmsStage* mpe;
+ FloatCMYKData* p8;
+ _cmsStageCLutData* data;
+
+ // For empty transforms, do nothing
+ if (*Lut == NULL) return FALSE;
+
+ // This is a loosy optimization! does not apply in floating-point cases
+ if (!T_FLOAT(*InputFormat) || !T_FLOAT(*OutputFormat)) return FALSE;
+
+ // Only on 8-bit
+ if (T_BYTES(*InputFormat) != 4 || T_BYTES(*OutputFormat) != 4) return FALSE;
+
+ // Only on CMYK
+ if (T_COLORSPACE(*InputFormat) != PT_CMYK) return FALSE;
+
+ OriginalLut = *Lut;
+
+ // Named color pipelines cannot be optimized either
+ for (mpe = cmsPipelineGetPtrToFirstStage(ContextID, OriginalLut);
+ mpe != NULL;
+ mpe = cmsStageNext(ContextID, mpe)) {
+ if (cmsStageType(ContextID, mpe) == cmsSigNamedColorElemType) return FALSE;
+ }
+
+ OutputColorSpace = _cmsICCcolorSpace(ContextID, T_COLORSPACE(*OutputFormat));
+ nGridPoints = _cmsReasonableGridpointsByColorspace(cmsSigRgbData, *dwFlags);
+
+ // Create the result LUT
+ OptimizedLUT = cmsPipelineAlloc(ContextID, 4, cmsPipelineOutputChannels(ContextID, OriginalLut));
+ if (OptimizedLUT == NULL) goto Error;
+
+
+ // Allocate the CLUT for result
+ OptimizedCLUTmpe = cmsStageAllocCLutFloat(ContextID, nGridPoints, 4, cmsPipelineOutputChannels(ContextID, OriginalLut), NULL);
+
+ // Add the CLUT to the destination LUT
+ cmsPipelineInsertStage(ContextID, OptimizedLUT, cmsAT_BEGIN, OptimizedCLUTmpe);
+
+ // Resample the LUT
+ if (!cmsStageSampleCLutFloat(ContextID, OptimizedCLUTmpe, XFormSampler, (void*)OriginalLut, 0)) goto Error;
+
+ // Set the evaluator, copy parameters
+ data = (_cmsStageCLutData*) cmsStageData(ContextID, OptimizedCLUTmpe);
+
+ p8 = FloatCMYKAlloc(ContextID, data ->Params);
+ if (p8 == NULL) return FALSE;
+
+ // And return the obtained LUT
+ cmsPipelineFree(ContextID, OriginalLut);
+
+ *Lut = OptimizedLUT;
+ *TransformFn = (_cmsTransformFn) FloatCMYKCLUTEval;
+ *UserData = p8;
+ *FreeDataFn = _cmsFree;
+ *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER;
+ return TRUE;
+
+Error:
+
+ if (OptimizedLUT != NULL) cmsPipelineFree(ContextID, OptimizedLUT);
+
+ return FALSE;
+}
diff --git a/lcms2mt/plugins/fast_float/src/fast_float_curves.c b/lcms2mt/plugins/fast_float/src/fast_float_curves.c
new file mode 100644
index 00000000..e6e42fb6
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/fast_float_curves.c
@@ -0,0 +1,384 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+#include "fast_float_internal.h"
+
+// Curves, optimization is valid for floating point curves
+typedef struct {
+
+ cmsFloat32Number CurveR[MAX_NODES_IN_CURVE];
+ cmsFloat32Number CurveG[MAX_NODES_IN_CURVE];
+ cmsFloat32Number CurveB[MAX_NODES_IN_CURVE];
+
+ void* real_ptr;
+
+} CurvesFloatData;
+
+
+
+// A special malloc that returns memory aligned to DWORD boundary. Aligned memory access is way faster than unaligned
+// reference to the real block is kept for later free
+static CurvesFloatData* malloc_aligned(cmsContext ContextID)
+{
+ cmsUInt8Number* real_ptr = (cmsUInt8Number*)_cmsMallocZero(ContextID, sizeof(CurvesFloatData) + 32);
+ cmsUInt8Number* aligned = (cmsUInt8Number*)(((uintptr_t)real_ptr + 16) & ~0xf);
+ CurvesFloatData* p = (CurvesFloatData*)aligned;
+
+ p->real_ptr = real_ptr;
+
+ return p;
+}
+
+// Free the private data container
+static void free_aligned(cmsContext ContextID, void* Data)
+{
+ CurvesFloatData* p = (CurvesFloatData*)Data;
+ if (p != NULL)
+ _cmsFree(ContextID, p->real_ptr);
+}
+
+// Evaluator for float curves. This are just 1D tables
+
+static void FastEvaluateFloatRGBCurves(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const cmsFloat32Number* Input,
+ cmsFloat32Number* Output,
+ cmsUInt32Number len,
+ cmsUInt32Number Stride)
+{
+ cmsUInt32Number ii;
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+
+ const cmsUInt8Number* rin;
+ const cmsUInt8Number* gin;
+ const cmsUInt8Number* bin;
+
+ cmsUInt8Number* rout;
+ cmsUInt8Number* gout;
+ cmsUInt8Number* bout;
+
+ cmsUInt32Number InputFormat = cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM) CMMcargo);
+ cmsUInt32Number OutputFormat = cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM) CMMcargo);
+
+ CurvesFloatData* Data = (CurvesFloatData*) _cmsGetTransformUserData(CMMcargo);
+
+ cmsUInt32Number nchans, nalpha;
+
+ _cmsComputeComponentIncrements(InputFormat, Stride, &nchans, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(OutputFormat, Stride, &nchans, &nalpha, DestStartingOrder, DestIncrements);
+
+ // SeparateRGB(InputFormat, Stride, SourceStartingOrder, SourceIncrements);
+ // SeparateRGB(OutputFormat, Stride, DestStartingOrder, DestIncrements);
+
+ rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0];
+ gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1];
+ bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2];
+
+ rout = (cmsUInt8Number*)Output + DestStartingOrder[0];
+ gout = (cmsUInt8Number*)Output + DestStartingOrder[1];
+ bout = (cmsUInt8Number*)Output + DestStartingOrder[2];
+
+ for (ii = 0; ii < len; ii++) {
+
+ *(cmsFloat32Number*)rout = flerp(Data->CurveR, *(cmsFloat32Number*)rin);
+ *(cmsFloat32Number*)gout = flerp(Data->CurveG, *(cmsFloat32Number*)gin);
+ *(cmsFloat32Number*)bout = flerp(Data->CurveB, *(cmsFloat32Number*)bin);
+
+ rin += SourceIncrements[0];
+ gin += SourceIncrements[1];
+ bin += SourceIncrements[2];
+
+ rout += DestIncrements[0];
+ gout += DestIncrements[1];
+ bout += DestIncrements[2];
+ }
+}
+
+// Do nothing but arrange the RGB format.
+static void FastFloatRGBIdentity(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const cmsFloat32Number* Input,
+ cmsFloat32Number* Output,
+ cmsUInt32Number len,
+ cmsUInt32Number Stride)
+{
+ cmsUInt32Number ii;
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+ const cmsUInt8Number* rin;
+ const cmsUInt8Number* gin;
+ const cmsUInt8Number* bin;
+ cmsUInt8Number* rout;
+ cmsUInt8Number* gout;
+ cmsUInt8Number* bout;
+
+
+ cmsUInt32Number InputFormat = cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM) CMMcargo);
+ cmsUInt32Number OutputFormat = cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM) CMMcargo);
+
+
+ cmsUInt32Number nchans, nalpha;
+
+ _cmsComputeComponentIncrements(InputFormat, Stride, &nchans, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(OutputFormat, Stride, &nchans, &nalpha, DestStartingOrder, DestIncrements);
+
+ // SeparateRGB(InputFormat, Stride, SourceStartingOrder, SourceIncrements);
+ // SeparateRGB(OutputFormat, Stride, DestStartingOrder, DestIncrements);
+
+ rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0];
+ gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1];
+ bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2];
+
+ rout = (cmsUInt8Number*)Output + DestStartingOrder[0];
+ gout = (cmsUInt8Number*)Output + DestStartingOrder[1];
+ bout = (cmsUInt8Number*)Output + DestStartingOrder[2];
+
+ for (ii=0; ii < len; ii++) {
+
+ memmove(rout, rin, 4);
+ memmove(gout, gin, 4);
+ memmove(bout, bin, 4);
+
+ rin += SourceIncrements[0];
+ gin += SourceIncrements[1];
+ bin += SourceIncrements[2];
+
+ rout += DestIncrements[0];
+ gout += DestIncrements[1];
+ bout += DestIncrements[2];
+ }
+}
+
+// Evaluate 1 channel only
+static void FastEvaluateFloatGrayCurves(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const cmsFloat32Number* Input,
+ cmsFloat32Number* Output,
+ cmsUInt32Number len,
+ cmsUInt32Number Stride)
+{
+ cmsUInt32Number ii;
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+ const cmsUInt8Number* kin;
+ cmsUInt8Number* kout;
+
+ cmsUInt32Number InputFormat = cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM) CMMcargo);
+ cmsUInt32Number OutputFormat = cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM) CMMcargo);
+
+ CurvesFloatData* Data = (CurvesFloatData*) _cmsGetTransformUserData(CMMcargo);
+
+ cmsUInt32Number nchans, nalpha;
+
+ _cmsComputeComponentIncrements(InputFormat, Stride, &nchans, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(OutputFormat, Stride, &nchans, &nalpha, DestStartingOrder, DestIncrements);
+
+ // SeparateGray(InputFormat, Stride, &SourceStartingOrder, &SourceIncrement);
+ // SeparateGray(OutputFormat, Stride, &DestStartingOrder, &DestIncrement);
+
+ kin = (const cmsUInt8Number*)Input + SourceStartingOrder[0];
+ kout = (cmsUInt8Number*)Output + DestStartingOrder[0];
+
+ for (ii = 0; ii < len; ii++) {
+
+ *(cmsFloat32Number*)kout = flerp(Data->CurveR, *(cmsFloat32Number*)kin);
+
+ kin += SourceIncrements[0];
+ kout += DestIncrements[0];
+ }
+}
+
+
+static void FastFloatGrayIdentity(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const cmsFloat32Number* Input,
+ cmsFloat32Number* Output,
+ cmsUInt32Number len,
+ cmsUInt32Number Stride)
+{
+ cmsUInt32Number ii;
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+ const cmsUInt8Number* kin;
+ cmsUInt8Number* kout;
+
+ cmsUInt32Number InputFormat = cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM) CMMcargo);
+ cmsUInt32Number OutputFormat = cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM) CMMcargo);
+
+ cmsUInt32Number nchans, nalpha;
+
+ _cmsComputeComponentIncrements(InputFormat, Stride, &nchans, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(OutputFormat, Stride, &nchans, &nalpha, DestStartingOrder, DestIncrements);
+
+ // SeparateGray(InputFormat, Stride, &SourceStartingOrder, &SourceIncrement);
+ // SeparateGray(OutputFormat, Stride, &DestStartingOrder, &DestIncrement);
+
+ kin = (const cmsUInt8Number*) Input + SourceStartingOrder[0];
+ kout = (cmsUInt8Number*)Output + DestStartingOrder[0];
+
+ for (ii=0; ii < len; ii++) {
+
+ memmove(kout, kin, 4);
+
+ kin += SourceIncrements[0];
+ kout += DestIncrements[0];
+ }
+}
+
+
+#define LINEAR_CURVES_EPSILON 0.00001
+
+// Try to see if the curves are linear
+static
+cmsBool AllRGBCurvesAreLinear(CurvesFloatData* data)
+{
+ int j;
+ cmsFloat32Number expected;
+
+ for (j = 0; j < MAX_NODES_IN_CURVE; j++) {
+
+ expected = (cmsFloat32Number)j / (cmsFloat32Number)(MAX_NODES_IN_CURVE - 1);
+
+ if (fabsf(data->CurveR[j] - expected) > LINEAR_CURVES_EPSILON ||
+ fabsf(data->CurveG[j] - expected) > LINEAR_CURVES_EPSILON ||
+ fabsf(data->CurveB[j] - expected) > LINEAR_CURVES_EPSILON) {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+static
+cmsBool KCurveIsLinear(CurvesFloatData* data)
+{
+ int j;
+ cmsFloat32Number expected;
+
+ for (j = 0; j < MAX_NODES_IN_CURVE; j++) {
+ expected = (cmsFloat32Number)j / (cmsFloat32Number)(MAX_NODES_IN_CURVE - 1);
+
+ if (fabs(data->CurveR[j] - expected) > LINEAR_CURVES_EPSILON) return FALSE;
+ }
+
+
+ return TRUE;
+}
+
+
+// Create linearization tables with a reasonable number of entries. Precission is about 32 bits.
+static
+CurvesFloatData* ComputeCompositeCurves(cmsContext ContextID, cmsUInt32Number nChan, cmsPipeline* Src)
+{
+ cmsUInt32Number i, j;
+ cmsFloat32Number InFloat[3], OutFloat[3];
+
+ CurvesFloatData* Data = malloc_aligned(ContextID);
+ if (Data == NULL) return NULL;
+
+ // Create target curves
+ for (i = 0; i < MAX_NODES_IN_CURVE; i++) {
+
+ for (j=0; j <nChan; j++)
+ InFloat[j] = (cmsFloat32Number)i / (cmsFloat32Number)(MAX_NODES_IN_CURVE-1);
+
+ cmsPipelineEvalFloat(ContextID, InFloat, OutFloat, Src);
+
+ if (nChan == 1) {
+
+ Data->CurveR[i] = OutFloat[0];
+ }
+ else {
+ Data->CurveR[i] = OutFloat[0];
+ Data->CurveG[i] = OutFloat[1];
+ Data->CurveB[i] = OutFloat[2];
+ }
+
+ }
+
+ return Data;
+}
+
+
+// If the target LUT holds only curves, the optimization procedure is to join all those
+// curves together. That only works on curves and does not work on matrices.
+cmsBool OptimizeFloatByJoiningCurves(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeUserData,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags)
+{
+
+ cmsPipeline* Src = *Lut;
+ cmsStage* mpe;
+ CurvesFloatData* Data;
+ cmsUInt32Number nChans;
+
+ // Apply only to floating-point cases
+ if (!T_FLOAT(*InputFormat) || !T_FLOAT(*OutputFormat)) return FALSE;
+
+ // Only on 8-bit
+ if (T_BYTES(*InputFormat) != 4 || T_BYTES(*OutputFormat) != 4) return FALSE;
+
+ // Curves need same channels on input and output (despite extra channels may differ)
+ nChans = T_CHANNELS(*InputFormat);
+ if (nChans != T_CHANNELS(*OutputFormat)) return FALSE;
+
+ // gray and RGB
+ if (nChans != 1 && nChans != 3) return FALSE;
+
+ // Only curves in this LUT?
+ for (mpe = cmsPipelineGetPtrToFirstStage(ContextID, Src);
+ mpe != NULL;
+ mpe = cmsStageNext(ContextID, mpe)) {
+
+ if (cmsStageType(ContextID, mpe) != cmsSigCurveSetElemType) return FALSE;
+ }
+
+ Data = ComputeCompositeCurves(ContextID, nChans, Src);
+
+ *dwFlags |= cmsFLAGS_NOCACHE;
+ *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER;
+ *UserData = Data;
+ *FreeUserData = free_aligned;
+
+ // Maybe the curves are linear at the end
+ if (nChans == 1)
+ *TransformFn = (_cmsTransformFn) (KCurveIsLinear(Data) ? FastFloatGrayIdentity : FastEvaluateFloatGrayCurves);
+ else
+ *TransformFn = (_cmsTransformFn) (AllRGBCurvesAreLinear(Data) ? FastFloatRGBIdentity : FastEvaluateFloatRGBCurves);
+
+ return TRUE;
+
+}
+
diff --git a/lcms2mt/plugins/fast_float/src/fast_float_internal.h b/lcms2mt/plugins/fast_float/src/fast_float_internal.h
new file mode 100644
index 00000000..0f153cb8
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/fast_float_internal.h
@@ -0,0 +1,249 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+#ifndef _FAST_INTERNAL_H
+#define _FAST_INTERNAL_H
+
+#include "lcms2mt_fast_float.h"
+#include <stdint.h>
+
+#define REQUIRED_LCMS_VERSION (2100-2000)
+
+// Unused parameter warning supression
+#define UNUSED_PARAMETER(x) ((void)x)
+
+// The specification for "inline" is section 6.7.4 of the C99 standard (ISO/IEC 9899:1999).
+// unfortunately VisualC++ does not conform that
+#if defined(_MSC_VER) || defined(__BORLANDC__)
+# define cmsINLINE __inline
+#else
+# define cmsINLINE static inline
+#endif
+
+// A fast way to convert from/to 16 <-> 8 bits
+#define FROM_8_TO_16(rgb) (cmsUInt16Number) ((((cmsUInt16Number) (rgb)) << 8)|(rgb))
+#define FROM_16_TO_8(rgb) (cmsUInt8Number) ((((rgb) * 65281 + 8388608) >> 24) & 0xFF)
+
+
+// This macro return words stored as big endian
+#define CHANGE_ENDIAN(w) (cmsUInt16Number) ((cmsUInt16Number) ((w)<<8)|((w)>>8))
+
+// This macro changes the polarity of a word
+#define REVERSE_FLAVOR_16(x) ((cmsUInt16Number)(0xffff-(x)))
+
+// Fixed point
+#define FIXED_TO_INT(x) ((x)>>16)
+#define FIXED_REST_TO_INT(x) ((x)&0xFFFFU)
+
+#define cmsFLAGS_CAN_CHANGE_FORMATTER 0x02000000 // Allow change buffer format
+
+// Utility macros to convert from to 0...1.0 in 15.16 fixed domain to 0..0xffff as integer
+cmsINLINE cmsS15Fixed16Number _cmsToFixedDomain(int a) { return a + ((a + 0x7fff) / 0xffff); }
+cmsINLINE int _cmsFromFixedDomain(cmsS15Fixed16Number a) { return a - ((a + 0x7fff) >> 16); }
+
+// This is the upper part of internal transform structure. Only format specifiers are used
+typedef struct {
+
+ cmsUInt32Number InputFormat, OutputFormat; // Keep formats for further reference
+
+} _xform_head;
+
+
+#define MAX_NODES_IN_CURVE 0x8001
+
+
+// To prevent out of bounds indexing
+cmsINLINE cmsFloat32Number fclamp(cmsFloat32Number v)
+{
+ return v < 0.0f ? 0.0f : (v > 1.0f ? 1.0f : v);
+}
+
+// Fast floor conversion logic.
+cmsINLINE int _cmsQuickFloor(cmsFloat64Number val)
+{
+#ifdef CMS_DONT_USE_FAST_FLOOR
+ return (int)floor(val);
+#else
+#define _lcms_double2fixmagic (68719476736.0 * 1.5)
+
+ union {
+ cmsFloat64Number val;
+ int halves[2];
+ } temp;
+
+ temp.val = val + _lcms_double2fixmagic;
+
+#ifdef CMS_USE_BIG_ENDIAN
+ return temp.halves[1] >> 16;
+#else
+ return temp.halves[0] >> 16;
+#endif
+#endif
+}
+
+// Floor to word, taking care of saturation. This is not critical in terms of performance
+cmsINLINE cmsUInt16Number _cmsSaturateWord(cmsFloat64Number d)
+{
+ d += 0.5;
+
+ if (d <= 0) return 0;
+ if (d >= 65535.0) return 0xffff;
+
+ return (cmsUInt16Number)floor(d);
+}
+
+
+cmsINLINE cmsFloat32Number flerp(const cmsFloat32Number LutTable[], cmsFloat32Number v)
+{
+ cmsFloat32Number y1, y0;
+ cmsFloat32Number rest;
+ int cell0, cell1;
+
+ if (v <= 0.0) {
+ return LutTable[0];
+ }
+ else
+ if (v >= 1.0) {
+ return LutTable[MAX_NODES_IN_CURVE - 1];
+ }
+
+ v *= (MAX_NODES_IN_CURVE - 1);
+
+ cell0 = _cmsQuickFloor(v);
+ cell1 = (int)ceilf(v);
+
+ // Rest is 16 LSB bits
+ rest = v - cell0;
+
+ y0 = LutTable[cell0];
+ y1 = LutTable[cell1];
+
+ return y0 + (y1 - y0) * rest;
+}
+
+
+
+
+// Some secret sauce from lcms
+int _cmsReasonableGridpointsByColorspace(cmsColorSpaceSignature Colorspace, cmsUInt32Number dwFlags);
+
+
+
+// Compute the increments to be used by the transform functions
+void _cmsComputeComponentIncrements(cmsUInt32Number Format,
+ cmsUInt32Number BytesPerPlane,
+ cmsUInt32Number* nChannels,
+ cmsUInt32Number* nAlpha,
+ cmsUInt32Number ComponentStartingOrder[],
+ cmsUInt32Number ComponentPointerIncrements[]);
+
+// 15 bits formatters
+cmsFormatter Formatter_15Bit_Factory(cmsContext ContextID,
+ cmsUInt32Number Type,
+ cmsFormatterDirection Dir,
+ cmsUInt32Number dwFlags);
+
+// Optimizers
+
+// 8 bits on input allows matrix-shaper boost up a little bit
+cmsBool Optimize8MatrixShaper(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeUserData,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags);
+
+cmsBool OptimizeMatrixShaper15(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeUserData,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags);
+
+
+cmsBool Optimize8ByJoiningCurves(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeUserData,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags);
+
+cmsBool OptimizeFloatByJoiningCurves(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeUserData,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags);
+
+cmsBool OptimizeFloatMatrixShaper(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeUserData,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags);
+
+cmsBool Optimize8BitRGBTransform(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeDataFn,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags);
+
+cmsBool Optimize16BitRGBTransform(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeDataFn,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags);
+
+cmsBool OptimizeCLUTRGBTransform(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeDataFn,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags);
+
+cmsBool OptimizeCLUTCMYKTransform(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeDataFn,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags);
+
+#endif
diff --git a/lcms2mt/plugins/fast_float/src/fast_float_matsh.c b/lcms2mt/plugins/fast_float/src/fast_float_matsh.c
new file mode 100644
index 00000000..07396e59
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/fast_float_matsh.c
@@ -0,0 +1,323 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+// Optimization for matrix-shaper in float
+
+#include "fast_float_internal.h"
+
+
+// This is the private data container used by this optimization
+typedef struct {
+
+
+ cmsFloat32Number Mat[3][3];
+ cmsFloat32Number Off[3];
+
+ cmsFloat32Number Shaper1R[MAX_NODES_IN_CURVE];
+ cmsFloat32Number Shaper1G[MAX_NODES_IN_CURVE];
+ cmsFloat32Number Shaper1B[MAX_NODES_IN_CURVE];
+
+ cmsFloat32Number Shaper2R[MAX_NODES_IN_CURVE];
+ cmsFloat32Number Shaper2G[MAX_NODES_IN_CURVE];
+ cmsFloat32Number Shaper2B[MAX_NODES_IN_CURVE];
+
+ cmsBool UseOff;
+
+ void * real_ptr;
+
+} VXMatShaperFloatData;
+
+
+static
+VXMatShaperFloatData* malloc_aligned(cmsContext ContextID)
+{
+ cmsUInt8Number* real_ptr = (cmsUInt8Number*) _cmsMallocZero(ContextID, sizeof(VXMatShaperFloatData) + 32);
+ cmsUInt8Number* aligned = (cmsUInt8Number*) (((uintptr_t)real_ptr + 16) & ~0xf);
+ VXMatShaperFloatData* p = (VXMatShaperFloatData*) aligned;
+
+ p ->real_ptr = real_ptr;
+ return p;
+}
+
+
+
+// Free the private data container
+static
+void FreeMatShaper(cmsContext ContextID, void* Data)
+{
+ VXMatShaperFloatData* d = (VXMatShaperFloatData*)Data;
+
+ if (d != NULL)
+ _cmsFree(ContextID, d->real_ptr);
+}
+
+
+static
+void FillShaper(cmsContext ContextID, cmsFloat32Number* Table, cmsToneCurve* Curve)
+{
+ int i;
+ cmsFloat32Number R;
+
+ for (i = 0; i < MAX_NODES_IN_CURVE; i++) {
+
+ R = (cmsFloat32Number) i / (cmsFloat32Number) (MAX_NODES_IN_CURVE - 1);
+
+ Table[i] = cmsEvalToneCurveFloat(ContextID, Curve, R);
+ }
+}
+
+
+// Compute the matrix-shaper structure
+static
+VXMatShaperFloatData* SetMatShaper(cmsContext ContextID, cmsToneCurve* Curve1[3], cmsMAT3* Mat, cmsVEC3* Off, cmsToneCurve* Curve2[3])
+{
+ VXMatShaperFloatData* p;
+ int i, j;
+
+ // Allocate a big chuck of memory to store precomputed tables
+ p = malloc_aligned(ContextID);
+ if (p == NULL) return FALSE;
+
+
+ // Precompute tables
+ FillShaper(ContextID, p->Shaper1R, Curve1[0]);
+ FillShaper(ContextID, p->Shaper1G, Curve1[1]);
+ FillShaper(ContextID, p->Shaper1B, Curve1[2]);
+
+ FillShaper(ContextID, p->Shaper2R, Curve2[0]);
+ FillShaper(ContextID, p->Shaper2G, Curve2[1]);
+ FillShaper(ContextID, p->Shaper2B, Curve2[2]);
+
+
+ for (i=0; i < 3; i++) {
+ for (j=0; j < 3; j++) {
+ p->Mat[i][j] = (cmsFloat32Number) Mat->v[i].n[j];
+ }
+ }
+
+
+ for (i = 0; i < 3; i++) {
+
+ if (Off == NULL) {
+
+ p->UseOff = FALSE;
+ p->Off[i] = 0.0;
+ }
+ else {
+ p->UseOff = TRUE;
+ p->Off[i] = (cmsFloat32Number)Off->n[i];
+
+ }
+ }
+
+
+ return p;
+}
+
+
+
+// A fast matrix-shaper evaluator for floating point
+static
+void MatShaperFloat(cmsContext ContextID, struct _cmstransform_struct *CMMcargo,
+ const cmsFloat32Number* Input,
+ cmsFloat32Number* Output,
+ cmsUInt32Number len,
+ cmsUInt32Number Stride)
+{
+ VXMatShaperFloatData* p = (VXMatShaperFloatData*) _cmsGetTransformUserData(CMMcargo);
+ cmsFloat32Number l1, l2, l3;
+ cmsFloat32Number r, g, b;
+ cmsUInt32Number ii;
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+
+ const cmsUInt8Number* rin;
+ const cmsUInt8Number* gin;
+ const cmsUInt8Number* bin;
+
+ cmsUInt8Number* rout;
+ cmsUInt8Number* gout;
+ cmsUInt8Number* bout;
+
+ cmsUInt32Number nchans, nalpha;
+
+ _cmsComputeComponentIncrements(cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride, &nchans, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM)CMMcargo), Stride, &nchans, &nalpha, DestStartingOrder, DestIncrements);
+
+ rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0];
+ gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1];
+ bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2];
+
+ rout = (cmsUInt8Number*)Output + DestStartingOrder[0];
+ gout = (cmsUInt8Number*)Output + DestStartingOrder[1];
+ bout = (cmsUInt8Number*)Output + DestStartingOrder[2];
+
+ for (ii=0; ii < len; ii++) {
+
+ r = flerp(p->Shaper1R, *(cmsFloat32Number*)rin);
+ g = flerp(p->Shaper1G, *(cmsFloat32Number*)gin);
+ b = flerp(p->Shaper1B, *(cmsFloat32Number*)bin);
+
+ l1 = p->Mat[0][0] * r + p->Mat[0][1] * g + p->Mat[0][2] * b ;
+ l2 = p->Mat[1][0] * r + p->Mat[1][1] * g + p->Mat[1][2] * b ;
+ l3 = p->Mat[2][0] * r + p->Mat[2][1] * g + p->Mat[2][2] * b ;
+
+ if (p->UseOff) {
+
+ l1 += p->Off[0];
+ l2 += p->Off[1];
+ l3 += p->Off[2];
+ }
+
+ *(cmsFloat32Number*)rout = flerp(p->Shaper2R, l1);
+ *(cmsFloat32Number*)gout = flerp(p->Shaper2G, l2);
+ *(cmsFloat32Number*)bout = flerp(p->Shaper2B, l3);
+
+ rin += SourceIncrements[0];
+ gin += SourceIncrements[1];
+ bin += SourceIncrements[2];
+
+ rout += DestIncrements[0];
+ gout += DestIncrements[1];
+ bout += DestIncrements[2];
+ }
+
+}
+
+
+
+cmsBool OptimizeFloatMatrixShaper(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeUserData,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags)
+{
+ cmsStage* Curve1, *Curve2;
+ cmsStage* Matrix1, *Matrix2;
+ _cmsStageMatrixData* Data1;
+ _cmsStageMatrixData* Data2;
+ cmsMAT3 res;
+ cmsBool IdentityMat = FALSE;
+ cmsPipeline* Dest, *Src;
+ cmsUInt32Number nChans;
+ cmsFloat64Number factor = 1.0;
+
+
+ // Apply only to floating-point cases
+ if (!T_FLOAT(*InputFormat) || !T_FLOAT(*OutputFormat)) return FALSE;
+
+ // Only works on RGB to RGB and gray to gray
+ if ( !( (T_CHANNELS(*InputFormat) == 3 && T_CHANNELS(*OutputFormat) == 3)) &&
+ !( (T_CHANNELS(*InputFormat) == 1 && T_CHANNELS(*OutputFormat) == 1))) return FALSE;
+
+ // Only works on float
+ if (T_BYTES(*InputFormat) != 4 || T_BYTES(*OutputFormat) != 4) return FALSE;
+
+ // Seems suitable, proceed
+ Src = *Lut;
+
+ // Check for shaper-matrix-matrix-shaper structure, that is what this optimizer stands for
+ if (!cmsPipelineCheckAndRetreiveStages(ContextID, Src, 4,
+ cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType,
+ &Curve1, &Matrix1, &Matrix2, &Curve2)) return FALSE;
+
+ nChans = T_CHANNELS(*InputFormat);
+
+ // Get both matrices, which are 3x3
+ Data1 = (_cmsStageMatrixData*) cmsStageData(ContextID, Matrix1);
+ Data2 = (_cmsStageMatrixData*) cmsStageData(ContextID, Matrix2);
+
+ // Input offset should be zero
+ if (Data1 ->Offset != NULL) return FALSE;
+
+ if (cmsStageInputChannels(ContextID, Matrix1) == 1 && cmsStageOutputChannels(ContextID, Matrix2) == 1)
+ {
+ // This is a gray to gray. Just multiply
+ factor = Data1->Double[0]*Data2->Double[0] +
+ Data1->Double[1]*Data2->Double[1] +
+ Data1->Double[2]*Data2->Double[2];
+
+ if (fabs(1 - factor) < (1.0 / 65535.0)) IdentityMat = TRUE;
+ }
+ else
+ {
+ // Multiply both matrices to get the result
+ _cmsMAT3per(ContextID, &res, (cmsMAT3*) Data2 ->Double, (cmsMAT3*) Data1 ->Double);
+
+ // Now the result is in res + Data2 -> Offset. Maybe is a plain identity?
+ IdentityMat = FALSE;
+ if (_cmsMAT3isIdentity(ContextID, &res) && Data2 ->Offset == NULL) {
+
+ // We can get rid of full matrix
+ IdentityMat = TRUE;
+ }
+ }
+
+ // Allocate an empty LUT
+ Dest = cmsPipelineAlloc(ContextID, nChans, nChans);
+ if (!Dest) return FALSE;
+
+ // Assamble the new LUT
+ cmsPipelineInsertStage(ContextID, Dest, cmsAT_BEGIN, cmsStageDup(ContextID, Curve1));
+
+ if (!IdentityMat) {
+
+ if (nChans == 1)
+ cmsPipelineInsertStage(ContextID, Dest, cmsAT_END,
+ cmsStageAllocMatrix(ContextID, 1, 1, (const cmsFloat64Number*) &factor, Data2->Offset));
+ else
+ cmsPipelineInsertStage(ContextID, Dest, cmsAT_END,
+ cmsStageAllocMatrix(ContextID, 3, 3, (const cmsFloat64Number*) &res, Data2 ->Offset));
+ }
+
+
+ cmsPipelineInsertStage(ContextID, Dest, cmsAT_END, cmsStageDup(ContextID, Curve2));
+
+ // If identity on matrix, we can further optimize the curves, so call the join curves routine
+ if (IdentityMat) {
+
+ OptimizeFloatByJoiningCurves(ContextID, TransformFn, UserData, FreeUserData, &Dest, InputFormat, OutputFormat, dwFlags);
+ }
+ else {
+ _cmsStageToneCurvesData* mpeC1 = (_cmsStageToneCurvesData*) cmsStageData(ContextID, Curve1);
+ _cmsStageToneCurvesData* mpeC2 = (_cmsStageToneCurvesData*) cmsStageData(ContextID, Curve2);
+
+ // In this particular optimization, caché does not help as it takes more time to deal with
+ // the cachthat with the pixel handling
+ *dwFlags |= cmsFLAGS_NOCACHE;
+
+ // Setup the optimizarion routines
+ *UserData = SetMatShaper(ContextID, mpeC1 ->TheCurves, &res, (cmsVEC3*) Data2 ->Offset, mpeC2->TheCurves);
+ *FreeUserData = FreeMatShaper;
+
+ *TransformFn = (_cmsTransformFn) MatShaperFloat;
+ }
+
+ *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER;
+ cmsPipelineFree(ContextID, Src);
+ *Lut = Dest;
+ return TRUE;
+}
diff --git a/lcms2mt/plugins/fast_float/src/fast_float_separate.c b/lcms2mt/plugins/fast_float/src/fast_float_separate.c
new file mode 100644
index 00000000..c4186a92
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/fast_float_separate.c
@@ -0,0 +1,199 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+#include "fast_float_internal.h"
+
+// Separable input. It just computes the distance from
+// each component to the next one in bytes. It gives components RGB in this order
+//
+// Encoding Starting Increment DoSwap Swapfirst Extra
+// RGB, 012 333 0 0 0
+// RGBA, 012 444 0 0 1
+// ARGB, 123 444 0 1 1
+// BGR, 210 333 1 0 0
+// BGRA, 210 444 1 1 1
+// ABGR 321 444 1 0 1
+//
+//
+// On planar configurations, the distance is the stride added to any non-negative
+//
+// RGB 0, S, 2*S 111
+// RGBA 0, S, 2*S 111 (fourth plane is safely ignored)
+// ARGB S, 2*S, 3*S 111
+// BGR 2*S, S, 0 111
+// BGRA 2*S, S, 0, 111 (fourth plane is safely ignored)
+// ABGR 3*S, 2*S, S 111
+//
+//----------------------------------------------------------------------------------------
+
+
+// Return the size in bytes of a given formatter
+static
+int trueBytesSize(cmsUInt32Number Format)
+{
+ int fmt_bytes = T_BYTES(Format);
+
+ // For double, the T_BYTES field returns zero
+ if (fmt_bytes == 0)
+ return sizeof(double);
+
+ // Otherwise, it is already correct for all formats
+ return fmt_bytes;
+}
+
+// RGBA -> normal
+// ARGB -> swap first
+// ABGR -> doSwap
+// BGRA -> doSwap swapFirst
+
+// This function computes the distance from each component to the next one in bytes.
+static
+void ComputeIncrementsForChunky(cmsUInt32Number Format,
+ cmsUInt32Number BytesPerPlane,
+ cmsUInt32Number* nChannels,
+ cmsUInt32Number* nAlpha,
+ cmsUInt32Number ComponentStartingOrder[],
+ cmsUInt32Number ComponentPointerIncrements[])
+{
+ int extra = T_EXTRA(Format);
+ int channels = T_CHANNELS(Format);
+ int total_chans = channels + extra;
+ int i;
+ int channelSize = trueBytesSize(Format);
+ int pixelSize = channelSize * total_chans;
+
+ UNUSED_PARAMETER(BytesPerPlane);
+
+ // Setup the counts
+ if (nChannels != NULL)
+ *nChannels = channels;
+
+ if (nAlpha != NULL)
+ *nAlpha = extra;
+
+ // Separation is independent of starting point and only depends on channel size
+ for (i = 0; i < total_chans; i++)
+ ComponentPointerIncrements[i] = pixelSize;
+
+ // Handle do swap
+ for (i = 0; i < total_chans; i++)
+ {
+ if (T_DOSWAP(Format)) {
+ ComponentStartingOrder[i] = total_chans - i - 1;
+ }
+ else {
+ ComponentStartingOrder[i] = i;
+ }
+ }
+
+ // Handle swap first (ROL of positions), example CMYK -> KCMY | 0123 -> 3012
+ if (T_SWAPFIRST(Format)) {
+
+ cmsUInt32Number tmp = ComponentStartingOrder[0];
+ for (i = 0; i < total_chans-1; i++)
+ ComponentStartingOrder[i] = ComponentStartingOrder[i + 1];
+
+ ComponentStartingOrder[total_chans - 1] = tmp;
+ }
+
+ // Handle size
+ if (channelSize > 1)
+ for (i = 0; i < total_chans; i++) {
+ ComponentStartingOrder[i] *= channelSize;
+ }
+}
+
+
+
+// On planar configurations, the distance is the stride added to any non-negative
+static
+void ComputeIncrementsForPlanar(cmsUInt32Number Format,
+ cmsUInt32Number BytesPerPlane,
+ cmsUInt32Number* nChannels,
+ cmsUInt32Number* nAlpha,
+ cmsUInt32Number ComponentStartingOrder[],
+ cmsUInt32Number ComponentPointerIncrements[])
+{
+ int extra = T_EXTRA(Format);
+ int channels = T_CHANNELS(Format);
+ int total_chans = channels + extra;
+ int i;
+ int channelSize = trueBytesSize(Format);
+
+ // Setup the counts
+ if (nChannels != NULL)
+ *nChannels = channels;
+
+ if (nAlpha != NULL)
+ *nAlpha = extra;
+
+ // Separation is independent of starting point and only depends on channel size
+ for (i = 0; i < total_chans; i++)
+ ComponentPointerIncrements[i] = channelSize;
+
+ // Handle do swap
+ for (i = 0; i < total_chans; i++)
+ {
+ if (T_DOSWAP(Format)) {
+ ComponentStartingOrder[i] = total_chans - i - 1;
+ }
+ else {
+ ComponentStartingOrder[i] = i;
+ }
+ }
+
+ // Handle swap first (ROL of positions), example CMYK -> KCMY | 0123 -> 3012
+ if (T_SWAPFIRST(Format)) {
+
+ cmsUInt32Number tmp = ComponentStartingOrder[0];
+ for (i = 0; i < total_chans - 1; i++)
+ ComponentStartingOrder[i] = ComponentStartingOrder[i + 1];
+
+ ComponentStartingOrder[total_chans - 1] = tmp;
+ }
+
+ // Handle size
+ for (i = 0; i < total_chans; i++) {
+ ComponentStartingOrder[i] *= BytesPerPlane;
+ }
+}
+
+
+
+// Dispatcher por chunky and planar RGB
+void _cmsComputeComponentIncrements(cmsUInt32Number Format,
+ cmsUInt32Number BytesPerPlane,
+ cmsUInt32Number* nChannels,
+ cmsUInt32Number* nAlpha,
+ cmsUInt32Number ComponentStartingOrder[],
+ cmsUInt32Number ComponentPointerIncrements[])
+{
+ if (T_PLANAR(Format)) {
+
+ ComputeIncrementsForPlanar(Format, BytesPerPlane, nChannels, nAlpha, ComponentStartingOrder, ComponentPointerIncrements);
+ }
+ else {
+ ComputeIncrementsForChunky(Format, BytesPerPlane, nChannels, nAlpha, ComponentStartingOrder, ComponentPointerIncrements);
+ }
+
+}
+
+
diff --git a/lcms2mt/plugins/fast_float/src/fast_float_sup.c b/lcms2mt/plugins/fast_float/src/fast_float_sup.c
new file mode 100644
index 00000000..9a375a4b
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/fast_float_sup.c
@@ -0,0 +1,90 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+
+#include "fast_float_internal.h"
+
+
+// This is the main dispatcher
+static
+cmsBool Floating_Point_Transforms_Dispatcher(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeUserData,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags)
+{
+
+ // Try to optimize as a set of curves plus a matrix plus a set of curves
+ if (OptimizeMatrixShaper15(ContextID, TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE;
+
+ // Try to optimize by joining curves
+ if (Optimize8ByJoiningCurves(ContextID, TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE;
+
+ // Try to optimize as a set of curves plus a matrix plus a set of curves
+ if (Optimize8MatrixShaper(ContextID, TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE;
+
+ // Try to optimize by joining curves
+ if (OptimizeFloatByJoiningCurves(ContextID, TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE;
+
+ // Try to optimize as a set of curves plus a matrix plus a set of curves
+ if (OptimizeFloatMatrixShaper(ContextID, TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE;
+
+ // Try to optimize using prelinearization plus tetrahedral
+ if (Optimize8BitRGBTransform(ContextID, TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE;
+
+ // Try to optimize using prelinearization plus tetrahedral
+ if (Optimize16BitRGBTransform(ContextID, TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE;
+
+ // Try to optimize using prelinearization plus tetrahedral
+ if (OptimizeCLUTRGBTransform(ContextID, TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE;
+
+ // Try to optimize using prelinearization plus tetrahedral
+ if (OptimizeCLUTCMYKTransform(ContextID, TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE;
+
+
+ // Cannot optimize, use lcms normal process
+ return FALSE;
+}
+
+// The Plug-in entry points
+static cmsPluginFormatters PluginFastFloat = {
+ { cmsPluginMagicNumber, REQUIRED_LCMS_VERSION, cmsPluginFormattersSig, NULL },
+
+ Formatter_15Bit_Factory
+};
+
+static cmsPluginTransform PluginList = {
+
+ { cmsPluginMagicNumber, REQUIRED_LCMS_VERSION, cmsPluginTransformSig, (cmsPluginBase *) &PluginFastFloat },
+
+ Floating_Point_Transforms_Dispatcher
+};
+
+// This is the main plug-in installer.
+// Using a function to retrieve the plug-in entry point allows us to execute initialization data.
+void* cmsFastFloatExtensions(void)
+{
+ return (void*)&PluginList;
+}
+
diff --git a/lcms2mt/plugins/fast_float/src/fast_float_tethra.c b/lcms2mt/plugins/fast_float/src/fast_float_tethra.c
new file mode 100644
index 00000000..6bb688f7
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/src/fast_float_tethra.c
@@ -0,0 +1,292 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+#include "fast_float_internal.h"
+
+// Optimization for floating point tetrahedral interpolation
+typedef struct {
+
+ const cmsInterpParams* p; // Tetrahedrical interpolation parameters. This is a not-owned pointer.
+
+} FloatCLUTData;
+
+// Precomputes tables for 8-bit on input devicelink.
+static
+FloatCLUTData* FloatCLUTAlloc(cmsContext ContextID, const cmsInterpParams* p)
+{
+ FloatCLUTData* fd;
+
+ fd = (FloatCLUTData*) _cmsMallocZero(ContextID, sizeof(FloatCLUTData));
+ if (fd == NULL) return NULL;
+
+ fd ->p = p;
+ return fd;
+}
+
+
+// Sampler implemented by another LUT. This is a clean way to precalculate the devicelink 3D CLUT for
+// almost any transform. We use floating point precision and then convert from floating point to 16 bits.
+static
+int XFormSampler(cmsContext ContextID, CMSREGISTER const cmsFloat32Number In[], CMSREGISTER cmsFloat32Number Out[], CMSREGISTER void* Cargo)
+{
+ // Evaluate in 16 bits
+ cmsPipelineEvalFloat(ContextID, In, Out, (cmsPipeline*) Cargo);
+
+ // Always succeed
+ return TRUE;
+}
+
+
+
+// A optimized interpolation for 8-bit input.
+#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan])
+
+static
+void FloatCLUTEval(cmsContext ContextID,
+ struct _cmstransform_struct *CMMcargo,
+ const cmsFloat32Number* Input,
+ cmsFloat32Number* Output,
+ cmsUInt32Number len,
+ cmsUInt32Number Stride)
+{
+
+ cmsFloat32Number r, g, b;
+ cmsFloat32Number px, py, pz;
+ int x0, y0, z0;
+ int X0, Y0, Z0, X1, Y1, Z1;
+ cmsFloat32Number rx, ry, rz;
+ cmsFloat32Number c0, c1 = 0, c2 = 0, c3 = 0;
+
+ cmsUInt32Number OutChan;
+ FloatCLUTData* p8 = (FloatCLUTData*) _cmsGetTransformUserData(CMMcargo);
+
+ const cmsInterpParams* p = p8 ->p;
+ cmsUInt32Number TotalOut = p -> nOutputs;
+ const cmsFloat32Number* LutTable = (const cmsFloat32Number*)p->Table;
+ cmsUInt32Number ii;
+ const cmsUInt8Number* rin;
+ const cmsUInt8Number* gin;
+ const cmsUInt8Number* bin;
+
+ cmsUInt8Number* out[cmsMAXCHANNELS];
+ cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
+ cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
+ cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
+
+ cmsUInt32Number InputFormat = cmsGetTransformInputFormat(ContextID, (cmsHTRANSFORM) CMMcargo);
+ cmsUInt32Number OutputFormat = cmsGetTransformOutputFormat(ContextID, (cmsHTRANSFORM) CMMcargo);
+
+ cmsUInt32Number nchans, nalpha;
+
+ _cmsComputeComponentIncrements(InputFormat, Stride, &nchans, &nalpha, SourceStartingOrder, SourceIncrements);
+ _cmsComputeComponentIncrements(OutputFormat, Stride, &nchans, &nalpha, DestStartingOrder, DestIncrements);
+
+ // SeparateRGB(InputFormat, Stride, SourceStartingOrder, SourceIncrements);
+ // SeparateRGB(OutputFormat, Stride, DestStartingOrder, DestIncrements);
+
+ rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0];
+ gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1];
+ bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2];
+
+ for (ii=0; ii < TotalOut; ii++)
+ out[ii] = (cmsUInt8Number*) Output + DestStartingOrder[ii];
+
+ for (ii=0; ii < len; ii++) {
+
+ r = fclamp(*(cmsFloat32Number*)rin);
+ g = fclamp(*(cmsFloat32Number*)gin);
+ b = fclamp(*(cmsFloat32Number*)bin);
+
+ rin += SourceIncrements[0];
+ gin += SourceIncrements[1];
+ bin += SourceIncrements[2];
+
+ px = r * p->Domain[0];
+ py = g * p->Domain[1];
+ pz = b * p->Domain[2];
+
+
+ x0 = (int)_cmsQuickFloor(px); rx = (px - (cmsFloat32Number)x0);
+ y0 = (int)_cmsQuickFloor(py); ry = (py - (cmsFloat32Number)y0);
+ z0 = (int)_cmsQuickFloor(pz); rz = (pz - (cmsFloat32Number)z0);
+
+ X0 = p->opta[2] * x0;
+ X1 = X0 + (r >= 1.0 ? 0 : p->opta[2]);
+
+ Y0 = p->opta[1] * y0;
+ Y1 = Y0 + (g >= 1.0 ? 0 : p->opta[1]);
+
+ Z0 = p->opta[0] * z0;
+ Z1 = Z0 + (b >= 1.0 ? 0 : p->opta[0]);
+
+ for (OutChan = 0; OutChan < TotalOut; OutChan++) {
+
+ // These are the 6 Tetrahedral
+
+ c0 = DENS(X0, Y0, Z0);
+
+ if (rx >= ry && ry >= rz) {
+
+ c1 = DENS(X1, Y0, Z0) - c0;
+ c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0);
+ c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
+
+ }
+ else
+ if (rx >= rz && rz >= ry) {
+
+ c1 = DENS(X1, Y0, Z0) - c0;
+ c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
+ c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0);
+
+ }
+ else
+ if (rz >= rx && rx >= ry) {
+
+ c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1);
+ c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
+ c3 = DENS(X0, Y0, Z1) - c0;
+
+ }
+ else
+ if (ry >= rx && rx >= rz) {
+
+ c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0);
+ c2 = DENS(X0, Y1, Z0) - c0;
+ c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
+
+ }
+ else
+ if (ry >= rz && rz >= rx) {
+
+ c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
+ c2 = DENS(X0, Y1, Z0) - c0;
+ c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0);
+
+ }
+ else
+ if (rz >= ry && ry >= rx) {
+
+ c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
+ c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1);
+ c3 = DENS(X0, Y0, Z1) - c0;
+
+ }
+ else {
+ c1 = c2 = c3 = 0;
+ }
+
+ *(cmsFloat32Number*) (out[OutChan]) = c0 + c1 * rx + c2 * ry + c3 * rz;
+
+ out[OutChan] += DestIncrements[OutChan];
+
+ }
+
+
+ }
+}
+
+#undef DENS
+
+
+
+// --------------------------------------------------------------------------------------------------------------
+
+cmsBool OptimizeCLUTRGBTransform(cmsContext ContextID,
+ _cmsTransformFn* TransformFn,
+ void** UserData,
+ _cmsFreeUserDataFn* FreeDataFn,
+ cmsPipeline** Lut,
+ cmsUInt32Number* InputFormat,
+ cmsUInt32Number* OutputFormat,
+ cmsUInt32Number* dwFlags)
+{
+ cmsPipeline* OriginalLut;
+ int nGridPoints;
+ cmsPipeline* OptimizedLUT = NULL;
+ cmsStage* OptimizedCLUTmpe;
+ cmsColorSpaceSignature OutputColorSpace;
+ cmsStage* mpe;
+ FloatCLUTData* p8;
+ _cmsStageCLutData* data;
+
+ // For empty transforms, do nothing
+ if (*Lut == NULL) return FALSE;
+
+ // This is a loosy optimization! does not apply in floating-point cases
+ if (!T_FLOAT(*InputFormat) || !T_FLOAT(*OutputFormat)) return FALSE;
+
+ // Only on 8-bit
+ if (T_BYTES(*InputFormat) != 4 || T_BYTES(*OutputFormat) != 4) return FALSE;
+
+ // Only on RGB
+ if (T_COLORSPACE(*InputFormat) != PT_RGB) return FALSE;
+ if (T_COLORSPACE(*OutputFormat) != PT_RGB) return FALSE;
+
+ OriginalLut = *Lut;
+
+ // Named color pipelines cannot be optimized either
+ for (mpe = cmsPipelineGetPtrToFirstStage(ContextID, OriginalLut);
+ mpe != NULL;
+ mpe = cmsStageNext(ContextID, mpe)) {
+ if (cmsStageType(ContextID, mpe) == cmsSigNamedColorElemType) return FALSE;
+ }
+
+ OutputColorSpace = _cmsICCcolorSpace(ContextID, T_COLORSPACE(*OutputFormat));
+ nGridPoints = _cmsReasonableGridpointsByColorspace(cmsSigRgbData, *dwFlags);
+
+ // Create the result LUT
+ OptimizedLUT = cmsPipelineAlloc(ContextID, 3, cmsPipelineOutputChannels(ContextID, OriginalLut));
+ if (OptimizedLUT == NULL) goto Error;
+
+
+ // Allocate the CLUT for result
+ OptimizedCLUTmpe = cmsStageAllocCLutFloat(ContextID, nGridPoints, 3, cmsPipelineOutputChannels(ContextID, OriginalLut), NULL);
+
+ // Add the CLUT to the destination LUT
+ cmsPipelineInsertStage(ContextID, OptimizedLUT, cmsAT_BEGIN, OptimizedCLUTmpe);
+
+ // Resample the LUT
+ if (!cmsStageSampleCLutFloat(ContextID, OptimizedCLUTmpe, XFormSampler, (void*)OriginalLut, 0)) goto Error;
+
+ // Set the evaluator, copy parameters
+ data = (_cmsStageCLutData*) cmsStageData(ContextID, OptimizedCLUTmpe);
+
+ p8 = FloatCLUTAlloc(ContextID, data ->Params);
+ if (p8 == NULL) return FALSE;
+
+ // And return the obtained LUT
+ cmsPipelineFree(ContextID, OriginalLut);
+
+ *Lut = OptimizedLUT;
+ *TransformFn = (_cmsTransformFn) FloatCLUTEval;
+ *UserData = p8;
+ *FreeDataFn = _cmsFree;
+ *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER;
+ return TRUE;
+
+Error:
+
+ if (OptimizedLUT != NULL) cmsPipelineFree(ContextID, OptimizedLUT);
+
+ return FALSE;
+}
diff --git a/lcms2mt/plugins/fast_float/testbed/Makefile.am b/lcms2mt/plugins/fast_float/testbed/Makefile.am
new file mode 100644
index 00000000..9bd2412a
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/testbed/Makefile.am
@@ -0,0 +1,22 @@
+#
+# Makefile for building fast_float_testbed
+#
+
+# Don't require all the GNU mandated files
+AUTOMAKE_OPTIONS = 1.7 foreign
+
+INCLUDES = -I$(builddir)/../include -I$(srcdir)/../include -I$(srcdir)/../src \
+ -I$(top_builddir)/include
+
+check_PROGRAMS = fast_float_testbed
+
+fast_float_testbed_LDADD = $(top_builddir)/src/liblcms2mt.la $(srcdir)/../src/liblcms2mt_fast_float.la
+fast_float_testbed_LDFLAGS = @LDFLAGS@
+fast_float_testbed_SOURCES = fast_float_testbed.c
+
+EXTRA_DIST = test0.icc test1.icc test2.icc test3.icc test5.icc
+
+check:
+ ./fast_float_testbed
+
+
diff --git a/lcms2mt/plugins/fast_float/testbed/fast_float_testbed.c b/lcms2mt/plugins/fast_float/testbed/fast_float_testbed.c
new file mode 100644
index 00000000..650454bc
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/testbed/fast_float_testbed.c
@@ -0,0 +1,1782 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System, fast floating point extensions
+// Copyright (c) 1998-2020 Marti Maria Saguer, 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 3 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, see <http://www.gnu.org/licenses/>.
+//
+//---------------------------------------------------------------------------------
+
+#include "fast_float_internal.h"
+
+#include <stdlib.h>
+#include <memory.h>
+
+
+// Some pixel representations
+typedef struct { cmsUInt8Number r, g, b; } Scanline_rgb8bits;
+typedef struct { cmsUInt8Number r, g, b, a; } Scanline_rgba8bits;
+typedef struct { cmsUInt16Number r, g, b; } Scanline_rgb16bits;
+typedef struct { cmsUInt16Number r, g, b, a; } Scanline_rgba16bits;
+typedef struct { cmsUInt16Number r, g, b; } Scanline_rgb15bits;
+typedef struct { cmsUInt16Number r, g, b, a; } Scanline_rgba15bits;
+typedef struct { cmsUInt16Number r, g, b, a; } Scanline_cmyk15bits;
+typedef struct { cmsFloat32Number r, g, b; } Scanline_rgbFloat;
+typedef struct { cmsFloat32Number r, g, b, a; } Scanline_rgbaFloat;
+
+// 15 bit mode. <=> 8 bits mode
+#define FROM_8_TO_15(x8) (cmsUInt16Number) ((((cmsUInt64Number)x8 << 15)) / 0xFF)
+#define FROM_15_TO_8(x15) (cmsUInt8Number) (((cmsUInt64Number) x15 * 0xFF + 0x4000) >> 15)
+
+
+// Floating point acuracy for tests
+#define EPSILON_FLOAT_TESTS 0.005
+
+
+// The callback function used by cmsSetLogErrorHandler()
+static
+void FatalErrorQuit(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text)
+{
+ UNUSED_PARAMETER(ContextID);
+ UNUSED_PARAMETER(ErrorCode);
+
+ printf("** Fatal error: %s\n", Text);
+ exit(1);
+}
+
+// Rise an error and exit
+static
+void Fail(const char* frm, ...)
+{
+ char ReasonToFailBuffer[1024];
+ va_list args;
+
+ va_start(args, frm);
+ vsprintf(ReasonToFailBuffer, frm, args);
+ FatalErrorQuit(0, 0, ReasonToFailBuffer);
+
+ // unreacheable va_end(args);
+}
+
+
+// Creates a fake profile that only has a curve. Used in several places
+static
+cmsHPROFILE CreateCurves(cmsContext ContextID)
+{
+ cmsToneCurve* Gamma = cmsBuildGamma(ContextID, 1.1);
+ cmsToneCurve* Transfer[3];
+ cmsHPROFILE h;
+
+ Transfer[0] = Transfer[1] = Transfer[2] = Gamma;
+ h = cmsCreateLinearizationDeviceLink(ContextID, cmsSigRgbData, Transfer);
+
+ cmsFreeToneCurve(ContextID, Gamma);
+
+ return h;
+}
+
+
+// Check for a single 15 bit Photoshop-like formatter
+static
+void CheckSingleFormatter15(cmsContext id, cmsUInt32Number Type, const char* Text)
+{
+ cmsUInt16Number Values[cmsMAXCHANNELS];
+ cmsUInt8Number Buffer[1024];
+ cmsFormatter f, b;
+ cmsInt32Number i, j, nChannels, bytes;
+ _xform_head info;
+
+ UNUSED_PARAMETER(id);
+
+ memset(&info, 0, sizeof(info));
+ info.OutputFormat = info.InputFormat = Type;
+
+ // Get functions to go forth and back
+ f = Formatter_15Bit_Factory(id, Type, cmsFormatterInput, CMS_PACK_FLAGS_16BITS);
+ b = Formatter_15Bit_Factory(id, Type, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS);
+
+ if (f.Fmt16 == NULL || b.Fmt16 == NULL) {
+
+ Fail("no formatter for %s", Text);
+ return;
+ }
+
+ nChannels = T_CHANNELS(Type);
+ bytes = T_BYTES(Type);
+
+ for (j = 0; j < 5; j++) {
+
+ for (i = 0; i < nChannels; i++) {
+
+ Values[i] = (cmsUInt16Number)(i + j) << 1;
+ }
+
+ b.Fmt16(id, (struct _cmstransform_struct*) &info, Values, Buffer, 1);
+ memset(Values, 0, sizeof(Values));
+ f.Fmt16(id, (struct _cmstransform_struct*) &info, Values, Buffer, 1);
+
+ for (i = 0; i < nChannels; i++) {
+
+ if (Values[i] != ((i + j) << 1)) {
+
+ Fail("%s failed", Text);
+ return;
+ }
+ }
+ }
+}
+
+#define C(a) CheckSingleFormatter15(0, a, #a)
+
+// Check for all 15 bits formatters
+static
+void CheckFormatters15(void)
+{
+ C(TYPE_GRAY_15);
+ C(TYPE_GRAY_15_REV);
+ C(TYPE_GRAY_15_SE);
+ C(TYPE_GRAYA_15);
+ C(TYPE_GRAYA_15_SE);
+ C(TYPE_GRAYA_15_PLANAR);
+ C(TYPE_RGB_15);
+ C(TYPE_RGB_15_PLANAR);
+ C(TYPE_RGB_15_SE);
+ C(TYPE_BGR_15);
+ C(TYPE_BGR_15_PLANAR);
+ C(TYPE_BGR_15_SE);
+ C(TYPE_RGBA_15);
+ C(TYPE_RGBA_15_PLANAR);
+ C(TYPE_RGBA_15_SE);
+ C(TYPE_ARGB_15);
+ C(TYPE_ABGR_15);
+ C(TYPE_ABGR_15_PLANAR);
+ C(TYPE_ABGR_15_SE);
+ C(TYPE_BGRA_15);
+ C(TYPE_BGRA_15_SE);
+ C(TYPE_YMC_15),
+ C(TYPE_CMY_15);
+ C(TYPE_CMY_15_PLANAR);
+ C(TYPE_CMY_15_SE);
+ C(TYPE_CMYK_15);
+ C(TYPE_CMYK_15_REV);
+ C(TYPE_CMYK_15_PLANAR);
+ C(TYPE_CMYK_15_SE);
+ C(TYPE_KYMC_15);
+ C(TYPE_KYMC_15_SE);
+ C(TYPE_KCMY_15);
+ C(TYPE_KCMY_15_REV);
+ C(TYPE_KCMY_15_SE);
+}
+#undef C
+
+
+static
+cmsInt32Number checkSingleComputeIncrements(cmsUInt32Number Format, cmsUInt32Number planeStride, cmsUInt32Number ExpectedChannels, cmsUInt32Number ExpectedAlpha, ...)
+{
+ cmsUInt32Number nChannels, nAlpha, nTotal, i, rc = 0 ;
+ cmsUInt32Number ComponentStartingOrder[cmsMAXCHANNELS], ComponentPointerIncrements[cmsMAXCHANNELS];
+ va_list args;
+
+
+ va_start(args, ExpectedAlpha);
+
+ _cmsComputeComponentIncrements(Format, planeStride, &nChannels, &nAlpha, ComponentStartingOrder, ComponentPointerIncrements);
+
+ if (nChannels != ExpectedChannels)
+ return 0;
+
+ if (nAlpha != ExpectedAlpha)
+ return 0;
+
+ nTotal = nAlpha + nChannels;
+
+
+
+ for (i = 0; i < nTotal; i++)
+ {
+ cmsUInt32Number so = va_arg(args, cmsUInt32Number);
+ if (so != ComponentStartingOrder[i])
+ goto Error;
+ }
+
+ for (i = 0; i < nTotal; i++)
+ {
+ cmsUInt32Number so = va_arg(args, cmsUInt32Number);
+ if (so != ComponentPointerIncrements[i])
+ goto Error;
+ }
+
+ // Success
+ rc = 1;
+
+Error:
+ va_end(args);
+
+ return rc;
+}
+
+#define CHECK(frm, plane, chans, alpha, ...) if (!checkSingleComputeIncrements(frm, plane, chans, alpha, __VA_ARGS__)) { printf("Format failed!\n"); return 0; }
+
+
+
+// Validate the compute increments function
+cmsInt32Number CheckComputeIncrements(void)
+{
+ CHECK(TYPE_GRAY_8, 0, 1, 0, /**/ 0, /**/ 1);
+ CHECK(TYPE_GRAYA_8, 0, 1, 1, /**/ 0, 1, /**/ 2, 2);
+ CHECK(TYPE_AGRAY_8, 0, 1, 1, /**/ 1, 0, /**/ 2, 2);
+ CHECK(TYPE_GRAY_16, 0, 1, 0, /**/ 0, /**/ 2);
+ CHECK(TYPE_GRAYA_16, 0, 1, 1, /**/ 0, 2, /**/ 4, 4);
+ CHECK(TYPE_AGRAY_16, 0, 1, 1, /**/ 2, 0, /**/ 4, 4);
+
+ CHECK(TYPE_GRAY_FLT, 0, 1, 0, /**/ 0, /**/ 4);
+ CHECK(TYPE_GRAYA_FLT, 0, 1, 1, /**/ 0, 4, /**/ 8, 8);
+ CHECK(TYPE_AGRAY_FLT, 0, 1, 1, /**/ 4, 0, /**/ 8, 8);
+
+ CHECK(TYPE_GRAY_DBL, 0, 1, 0, /**/ 0, /**/ 8);
+ CHECK(TYPE_AGRAY_DBL, 0, 1, 1, /**/ 8, 0, /**/ 16, 16);
+
+ CHECK(TYPE_RGB_8, 0, 3, 0, /**/ 0, 1, 2, /**/ 3, 3, 3);
+ CHECK(TYPE_RGBA_8, 0, 3, 1, /**/ 0, 1, 2, 3, /**/ 4, 4, 4, 4);
+ CHECK(TYPE_ARGB_8, 0, 3, 1, /**/ 1, 2, 3, 0, /**/ 4, 4, 4, 4);
+
+ CHECK(TYPE_RGB_16, 0, 3, 0, /**/ 0, 2, 4, /**/ 6, 6, 6);
+ CHECK(TYPE_RGBA_16, 0, 3, 1, /**/ 0, 2, 4, 6, /**/ 8, 8, 8, 8);
+ CHECK(TYPE_ARGB_16, 0, 3, 1, /**/ 2, 4, 6, 0, /**/ 8, 8, 8, 8);
+
+ CHECK(TYPE_RGB_FLT, 0, 3, 0, /**/ 0, 4, 8, /**/ 12, 12, 12);
+ CHECK(TYPE_RGBA_FLT, 0, 3, 1, /**/ 0, 4, 8, 12, /**/ 16, 16, 16, 16);
+ CHECK(TYPE_ARGB_FLT, 0, 3, 1, /**/ 4, 8, 12, 0, /**/ 16, 16, 16, 16);
+
+ CHECK(TYPE_BGR_8, 0, 3, 0, /**/ 2, 1, 0, /**/ 3, 3, 3);
+ CHECK(TYPE_BGRA_8, 0, 3, 1, /**/ 2, 1, 0, 3, /**/ 4, 4, 4, 4);
+ CHECK(TYPE_ABGR_8, 0, 3, 1, /**/ 3, 2, 1, 0, /**/ 4, 4, 4, 4);
+
+ CHECK(TYPE_BGR_16, 0, 3, 0, /**/ 4, 2, 0, /**/ 6, 6, 6);
+ CHECK(TYPE_BGRA_16, 0, 3, 1, /**/ 4, 2, 0, 6, /**/ 8, 8, 8, 8);
+ CHECK(TYPE_ABGR_16, 0, 3, 1, /**/ 6, 4, 2, 0, /**/ 8, 8, 8, 8);
+
+ CHECK(TYPE_BGR_FLT, 0, 3, 0, /**/ 8, 4, 0, /**/ 12, 12, 12);
+ CHECK(TYPE_BGRA_FLT, 0, 3, 1, /**/ 8, 4, 0, 12, /**/ 16, 16, 16, 16);
+ CHECK(TYPE_ABGR_FLT, 0, 3, 1, /**/ 12, 8, 4, 0, /**/ 16, 16, 16, 16);
+
+
+ CHECK(TYPE_CMYK_8, 0, 4, 0, /**/ 0, 1, 2, 3, /**/ 4, 4, 4, 4);
+ CHECK(TYPE_CMYKA_8, 0, 4, 1, /**/ 0, 1, 2, 3, 4, /**/ 5, 5, 5, 5, 5);
+ CHECK(TYPE_ACMYK_8, 0, 4, 1, /**/ 1, 2, 3, 4, 0, /**/ 5, 5, 5, 5, 5);
+
+ CHECK(TYPE_KYMC_8, 0, 4, 0, /**/ 3, 2, 1, 0, /**/ 4, 4, 4, 4);
+ CHECK(TYPE_KYMCA_8, 0, 4, 1, /**/ 3, 2, 1, 0, 4, /**/ 5, 5, 5, 5, 5);
+ CHECK(TYPE_AKYMC_8, 0, 4, 1, /**/ 4, 3, 2, 1, 0, /**/ 5, 5, 5, 5, 5);
+
+ CHECK(TYPE_KCMY_8, 0, 4, 0, /**/ 1, 2, 3, 0, /**/ 4, 4, 4, 4);
+
+ CHECK(TYPE_CMYK_16, 0, 4, 0, /**/ 0, 2, 4, 6, /**/ 8, 8, 8, 8);
+ CHECK(TYPE_CMYKA_16, 0, 4, 1, /**/ 0, 2, 4, 6, 8, /**/ 10, 10, 10, 10, 10);
+ CHECK(TYPE_ACMYK_16, 0, 4, 1, /**/ 2, 4, 6, 8, 0, /**/ 10, 10, 10, 10, 10);
+
+ CHECK(TYPE_KYMC_16, 0, 4, 0, /**/ 6, 4, 2, 0, /**/ 8, 8, 8, 8);
+ CHECK(TYPE_KYMCA_16, 0, 4, 1, /**/ 6, 4, 2, 0, 8, /**/ 10, 10, 10, 10, 10);
+ CHECK(TYPE_AKYMC_16, 0, 4, 1, /**/ 8, 6, 4, 2, 0, /**/ 10, 10, 10, 10, 10);
+
+ CHECK(TYPE_KCMY_16, 0, 4, 0, /**/ 2, 4, 6, 0, /**/ 8, 8, 8, 8);
+
+ // Planar
+
+ CHECK(TYPE_GRAYA_8_PLANAR, 100, 1, 1, /**/ 0, 100, /**/ 1, 1);
+ CHECK(TYPE_AGRAY_8_PLANAR, 100, 1, 1, /**/ 100, 0, /**/ 1, 1);
+
+ CHECK(TYPE_GRAYA_16_PLANAR, 100, 1, 1, /**/ 0, 100, /**/ 2, 2);
+ CHECK(TYPE_AGRAY_16_PLANAR, 100, 1, 1, /**/ 100, 0, /**/ 2, 2);
+
+ CHECK(TYPE_GRAYA_FLT_PLANAR, 100, 1, 1, /**/ 0, 100, /**/ 4, 4);
+ CHECK(TYPE_AGRAY_FLT_PLANAR, 100, 1, 1, /**/ 100, 0, /**/ 4, 4);
+
+ CHECK(TYPE_GRAYA_DBL_PLANAR, 100, 1, 1, /**/ 0, 100, /**/ 8, 8);
+ CHECK(TYPE_AGRAY_DBL_PLANAR, 100, 1, 1, /**/ 100, 0, /**/ 8, 8);
+
+ CHECK(TYPE_RGB_8_PLANAR, 100, 3, 0, /**/ 0, 100, 200, /**/ 1, 1, 1);
+ CHECK(TYPE_RGBA_8_PLANAR, 100, 3, 1, /**/ 0, 100, 200, 300, /**/ 1, 1, 1, 1);
+ CHECK(TYPE_ARGB_8_PLANAR, 100, 3, 1, /**/ 100, 200, 300, 0, /**/ 1, 1, 1, 1);
+
+ CHECK(TYPE_BGR_8_PLANAR, 100, 3, 0, /**/ 200, 100, 0, /**/ 1, 1, 1);
+ CHECK(TYPE_BGRA_8_PLANAR, 100, 3, 1, /**/ 200, 100, 0, 300, /**/ 1, 1, 1, 1);
+ CHECK(TYPE_ABGR_8_PLANAR, 100, 3, 1, /**/ 300, 200, 100, 0, /**/ 1, 1, 1, 1);
+
+ CHECK(TYPE_RGB_16_PLANAR, 100, 3, 0, /**/ 0, 100, 200, /**/ 2, 2, 2);
+ CHECK(TYPE_RGBA_16_PLANAR, 100, 3, 1, /**/ 0, 100, 200, 300, /**/ 2, 2, 2, 2);
+ CHECK(TYPE_ARGB_16_PLANAR, 100, 3, 1, /**/ 100, 200, 300, 0, /**/ 2, 2, 2, 2);
+
+ CHECK(TYPE_BGR_16_PLANAR, 100, 3, 0, /**/ 200, 100, 0, /**/ 2, 2, 2);
+ CHECK(TYPE_BGRA_16_PLANAR, 100, 3, 1, /**/ 200, 100, 0, 300, /**/ 2, 2, 2, 2);
+ CHECK(TYPE_ABGR_16_PLANAR, 100, 3, 1, /**/ 300, 200, 100, 0, /**/ 2, 2, 2, 2);
+
+ return 1;
+}
+
+
+
+// Check 15 bit mode accuracy
+static
+cmsBool Valid15(cmsUInt16Number a, cmsUInt8Number b)
+{
+ return abs(FROM_15_TO_8(a) - b) <= 2;
+}
+
+// Check the test macros itselves
+static
+void Check15bitMacros(void)
+{
+ int i;
+
+ printf("Checking 15 bit <=> 8 bit macros...");
+
+ for (i = 0; i < 256; i++)
+ {
+ cmsUInt16Number n = FROM_8_TO_15(i);
+ cmsUInt8Number m = FROM_15_TO_8(n);
+
+ if (m != i)
+ Fail("Failed on %d (->%d->%d)", i, n, m);
+ }
+ printf("ok\n");
+}
+
+// Do an in-depth test by checking all RGB cube of 8 bits, going from profilein to profileout.
+// Results should be same except for 2 contone levels allowed for roundoff. Note 15 bits is more
+// precise than 8 bits and this is a source of discrepancies. Cache is disabled
+static
+void TryAllValues15(cmsContext ContextID, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
+{
+ Scanline_rgb8bits* buffer8in;
+ Scanline_rgb15bits* buffer15in;
+ Scanline_rgb8bits* buffer8out;
+ Scanline_rgb15bits* buffer15out;
+ int r, g, b, j;
+ cmsUInt32Number npixels = 256 * 256 * 256; // All RGB cube in 8 bits
+
+ cmsHTRANSFORM xform15 = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_RGB_15, hlcmsProfileOut, TYPE_RGB_15, Intent, cmsFLAGS_NOCACHE);
+ cmsHTRANSFORM xform8 = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_RGB_8, hlcmsProfileOut, TYPE_RGB_8, Intent, cmsFLAGS_NOCACHE); // Transforms already created
+
+ cmsCloseProfile(ContextID, hlcmsProfileIn);
+ cmsCloseProfile(ContextID, hlcmsProfileOut);
+
+ if (xform15 == NULL || xform8 == NULL) {
+
+ Fail("NULL transforms on check for 15 bit conversions");
+ }
+
+ // Since this is just a test, I will not check memory allocation...
+ buffer8in = (Scanline_rgb8bits*)malloc(npixels * sizeof(Scanline_rgb8bits));
+ buffer15in = (Scanline_rgb15bits*)malloc(npixels * sizeof(Scanline_rgb15bits));
+ buffer8out = (Scanline_rgb8bits*)malloc(npixels * sizeof(Scanline_rgb8bits));
+ buffer15out = (Scanline_rgb15bits*)malloc(npixels * sizeof(Scanline_rgb15bits));
+
+ // Fill input values for 8 and 15 bits
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ buffer8in[j].r = (cmsUInt8Number)r;
+ buffer8in[j].g = (cmsUInt8Number)g;
+ buffer8in[j].b = (cmsUInt8Number)b;
+
+ buffer15in[j].r = FROM_8_TO_15(r);
+ buffer15in[j].g = FROM_8_TO_15(g);
+ buffer15in[j].b = FROM_8_TO_15(b);
+
+ j++;
+ }
+
+ cmsDoTransform(ContextID, xform15, buffer15in, buffer15out, npixels);
+ cmsDoTransform(ContextID, xform8, buffer8in, buffer8out, npixels);
+
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ // Check the results
+ if (!Valid15(buffer15out[j].r, buffer8out[j].r) ||
+ !Valid15(buffer15out[j].g, buffer8out[j].g) ||
+ !Valid15(buffer15out[j].b, buffer8out[j].b))
+ Fail("Conversion failed at (%d %d %d) != (%d %d %d)", buffer8out[j].r, buffer8out[j].g, buffer8out[j].b,
+ FROM_15_TO_8(buffer15out[j].r), FROM_15_TO_8(buffer15out[j].g), FROM_15_TO_8(buffer15out[j].b));
+
+ j++;
+ }
+
+ free(buffer8in); free(buffer15in);
+ free(buffer8out); free(buffer15out);
+ cmsDeleteTransform(ContextID, xform15);
+ cmsDeleteTransform(ContextID, xform8);
+}
+
+// Convert some known values
+static
+void Check15bitsConversions(cmsContext ContextID)
+{
+ Check15bitMacros();
+
+ printf("Checking accuracy of 15 bits on CLUT...");
+ TryAllValues15(ContextID, cmsOpenProfileFromFile(ContextID, "test5.icc", "r"), cmsOpenProfileFromFile(ContextID, "test3.icc", "r"), INTENT_PERCEPTUAL);
+ printf("Ok\n");
+
+ printf("Checking accuracy of 15 bits on same profile ...");
+ TryAllValues15(ContextID, cmsOpenProfileFromFile(ContextID, "test0.icc", "r"), cmsOpenProfileFromFile(ContextID, "test0.icc", "r"), INTENT_PERCEPTUAL);
+ printf("Ok\n");
+
+ printf("Checking accuracy of 15 bits on Matrix...");
+ TryAllValues15(ContextID, cmsOpenProfileFromFile(ContextID, "test5.icc", "r"), cmsOpenProfileFromFile(ContextID, "test0.icc", "r"), INTENT_PERCEPTUAL);
+ printf("Ok\n");
+
+ printf("All 15 bits tests passed OK\n\n");
+}
+
+// Next test checks results of optimized 16 bits versus raw 16 bits.
+static
+void TryAllValues16bits(cmsContext Raw, cmsContext Plugin, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
+{
+ Scanline_rgba16bits* bufferIn;
+ Scanline_rgba16bits* bufferRawOut;
+ Scanline_rgba16bits* bufferPluginOut;
+ int r, g, b;
+
+ int j;
+ cmsUInt32Number npixels = 256 * 256 * 256;
+
+ cmsHTRANSFORM xformRaw = cmsCreateTransform(Raw, hlcmsProfileIn, TYPE_RGBA_16, hlcmsProfileOut, TYPE_RGBA_16, Intent, cmsFLAGS_NOCACHE| cmsFLAGS_COPY_ALPHA);
+ cmsHTRANSFORM xformPlugin = cmsCreateTransform(Plugin, hlcmsProfileIn, TYPE_RGBA_16, hlcmsProfileOut, TYPE_RGBA_16, Intent, cmsFLAGS_NOCACHE| cmsFLAGS_COPY_ALPHA);
+
+ cmsCloseProfile(Raw, hlcmsProfileIn);
+ cmsCloseProfile(Raw, hlcmsProfileOut);
+
+ if (xformRaw == NULL || xformPlugin == NULL) {
+
+ Fail("NULL transforms on check float conversions");
+ }
+
+ // Again, no checking on mem alloc because this is just a test
+ bufferIn = (Scanline_rgba16bits*)malloc(npixels * sizeof(Scanline_rgba16bits));
+ bufferRawOut = (Scanline_rgba16bits*)malloc(npixels * sizeof(Scanline_rgba16bits));
+ bufferPluginOut = (Scanline_rgba16bits*)malloc(npixels * sizeof(Scanline_rgba16bits));
+
+ // Same input to both transforms
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ bufferIn[j].r = FROM_8_TO_16(0xf8);
+ bufferIn[j].g = FROM_8_TO_16(0xf8);
+ bufferIn[j].b = FROM_8_TO_16(0xf8);
+ bufferIn[j].a = 0xffff;
+
+ j++;
+ }
+
+ // Different transforms, different output buffers
+ cmsDoTransform(Raw, xformRaw, bufferIn, bufferRawOut, npixels);
+ cmsDoTransform(Plugin, xformPlugin, bufferIn, bufferPluginOut, npixels);
+
+#if 1
+ // Lets compare results
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ if (bufferRawOut[j].r != bufferPluginOut[j].r ||
+ bufferRawOut[j].g != bufferPluginOut[j].g ||
+ bufferRawOut[j].b != bufferPluginOut[j].b ||
+ bufferRawOut[j].a != bufferPluginOut[j].a)
+ Fail(
+ "Conversion failed at [%x %x %x %x] (%x %x %x %x) != (%x %x %x %x)",
+ bufferIn[j].r, bufferIn[j].g, bufferIn[j].b, bufferIn[j].a,
+ bufferRawOut[j].r, bufferRawOut[j].g, bufferRawOut[j].b, bufferRawOut[j].a,
+ bufferPluginOut[j].r, bufferPluginOut[j].g, bufferPluginOut[j].b, bufferPluginOut[j].a);
+
+ j++;
+ }
+#endif
+
+ free(bufferIn); free(bufferRawOut);
+ free(bufferPluginOut);
+
+ cmsDeleteTransform(Raw, xformRaw);
+ cmsDeleteTransform(Plugin, xformPlugin);
+}
+
+static
+void CheckAccuracy16Bits(cmsContext Raw, cmsContext Plugin)
+{
+ // CLUT should be as 16 bits or better
+ printf("Checking accuracy of 16 bits CLUT...");
+ TryAllValues16bits(Raw, Plugin, cmsOpenProfileFromFile(Raw, "test5.icc", "r"), cmsOpenProfileFromFile(Raw, "test3.icc", "r"), INTENT_PERCEPTUAL);
+ printf("All 16 bits tests passed OK\n\n");
+}
+
+// --------------------------------------------------------------------------------------------------
+// A C C U R A C Y C H E C K S
+// --------------------------------------------------------------------------------------------------
+
+
+// Check result accuracy
+static
+cmsBool ValidFloat(cmsFloat32Number a, cmsFloat32Number b)
+{
+ return fabsf(a-b) < EPSILON_FLOAT_TESTS;
+}
+
+// Do an in-depth test by checking all RGB cube of 8 bits, going from profilein to profileout.
+// Values with and without optimization are checked (different contexts, one with the plugin and another without)
+// Results should be same except for EPSILON_FLOAT_TESTS allowed for accuracy/speed tradeoff. Cache is disabled
+static
+void TryAllValuesFloat(cmsContext Raw, cmsContext Plugin, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
+{
+ Scanline_rgbFloat* bufferIn;
+ Scanline_rgbFloat* bufferRawOut;
+ Scanline_rgbFloat* bufferPluginOut;
+ int r, g, b;
+
+ int j;
+ cmsUInt32Number npixels = 256 * 256 * 256;
+
+ cmsHTRANSFORM xformRaw = cmsCreateTransform(Raw, hlcmsProfileIn, TYPE_RGB_FLT, hlcmsProfileOut, TYPE_RGB_FLT, Intent, cmsFLAGS_NOCACHE);
+ cmsHTRANSFORM xformPlugin = cmsCreateTransform(Plugin, hlcmsProfileIn, TYPE_RGB_FLT, hlcmsProfileOut, TYPE_RGB_FLT, Intent, cmsFLAGS_NOCACHE);
+
+ cmsCloseProfile(Raw, hlcmsProfileIn);
+ cmsCloseProfile(Raw, hlcmsProfileOut);
+
+ if (xformRaw == NULL || xformPlugin == NULL) {
+
+ Fail("NULL transforms on check float conversions");
+ }
+
+ // Again, no checking on mem alloc because this is just a test
+ bufferIn = (Scanline_rgbFloat*)malloc(npixels * sizeof(Scanline_rgbFloat));
+ bufferRawOut = (Scanline_rgbFloat*)malloc(npixels * sizeof(Scanline_rgbFloat));
+ bufferPluginOut = (Scanline_rgbFloat*)malloc(npixels * sizeof(Scanline_rgbFloat));
+
+ // Same input to both transforms
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ bufferIn[j].r = (cmsFloat32Number)r / 255.0f;
+ bufferIn[j].g = (cmsFloat32Number)g / 255.0f;
+ bufferIn[j].b = (cmsFloat32Number)b / 255.0f;
+
+ j++;
+ }
+
+ // Different transforms, different output buffers
+ cmsDoTransform(Raw, xformRaw, bufferIn, bufferRawOut, npixels);
+ cmsDoTransform(Plugin, xformPlugin, bufferIn, bufferPluginOut, npixels);
+
+ // Lets compare results
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ if (!ValidFloat(bufferRawOut[j].r, bufferPluginOut[j].r) ||
+ !ValidFloat(bufferRawOut[j].g, bufferPluginOut[j].g) ||
+ !ValidFloat(bufferRawOut[j].b, bufferPluginOut[j].b))
+ Fail("Conversion failed at (%f %f %f) != (%f %f %f)", bufferRawOut[j].r, bufferRawOut[j].g, bufferRawOut[j].b,
+ bufferPluginOut[j].r, bufferPluginOut[j].g, bufferPluginOut[j].b);
+
+ j++;
+ }
+
+ free(bufferIn); free(bufferRawOut);
+ free(bufferPluginOut);
+
+ cmsDeleteTransform(Raw, xformRaw);
+ cmsDeleteTransform(Plugin, xformPlugin);
+}
+
+static
+void TryAllValuesFloatAlpha(cmsContext Raw, cmsContext Plugin, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
+{
+ Scanline_rgbaFloat* bufferIn;
+ Scanline_rgbaFloat* bufferRawOut;
+ Scanline_rgbaFloat* bufferPluginOut;
+ int r, g, b;
+
+ int j;
+ cmsUInt32Number npixels = 256 * 256 * 256;
+
+ cmsHTRANSFORM xformRaw = cmsCreateTransform(Raw, hlcmsProfileIn, TYPE_RGBA_FLT, hlcmsProfileOut, TYPE_RGBA_FLT, Intent, cmsFLAGS_NOCACHE);
+ cmsHTRANSFORM xformPlugin = cmsCreateTransform(Plugin, hlcmsProfileIn, TYPE_RGBA_FLT, hlcmsProfileOut, TYPE_RGBA_FLT, Intent, cmsFLAGS_NOCACHE);
+
+ cmsCloseProfile(Raw, hlcmsProfileIn);
+ cmsCloseProfile(Plugin, hlcmsProfileOut);
+
+ if (xformRaw == NULL || xformPlugin == NULL) {
+
+ Fail("NULL transforms on check float conversions");
+ }
+
+ // Again, no checking on mem alloc because this is just a test
+ bufferIn = (Scanline_rgbaFloat*)malloc(npixels * sizeof(Scanline_rgbaFloat));
+ bufferRawOut = (Scanline_rgbaFloat*)malloc(npixels * sizeof(Scanline_rgbaFloat));
+ bufferPluginOut = (Scanline_rgbaFloat*)malloc(npixels * sizeof(Scanline_rgbaFloat));
+
+ // Same input to both transforms
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ bufferIn[j].r = (cmsFloat32Number)r / 255.0f;
+ bufferIn[j].g = (cmsFloat32Number)g / 255.0f;
+ bufferIn[j].b = (cmsFloat32Number)b / 255.0f;
+ bufferIn[j].a = (cmsFloat32Number) 1.0f;
+
+ j++;
+ }
+
+ // Different transforms, different output buffers
+ cmsDoTransform(Raw, xformRaw, bufferIn, bufferRawOut, npixels);
+ cmsDoTransform(Plugin, xformPlugin, bufferIn, bufferPluginOut, npixels);
+
+#if 1
+ // Lets compare results
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ if (!ValidFloat(bufferRawOut[j].r, bufferPluginOut[j].r) ||
+ !ValidFloat(bufferRawOut[j].g, bufferPluginOut[j].g) ||
+ !ValidFloat(bufferRawOut[j].b, bufferPluginOut[j].b) ||
+ !ValidFloat(bufferRawOut[j].a, bufferPluginOut[j].a))
+ Fail("Conversion failed at (%f %f %f %f) != (%f %f %f %f)", bufferRawOut[j].r, bufferRawOut[j].g, bufferRawOut[j].b, bufferRawOut[j].a,
+ bufferPluginOut[j].r, bufferPluginOut[j].g, bufferPluginOut[j].b, bufferPluginOut[j].a);
+
+ j++;
+ }
+#endif
+
+ free(bufferIn); free(bufferRawOut);
+ free(bufferPluginOut);
+
+ cmsDeleteTransform(Raw, xformRaw);
+ cmsDeleteTransform(Plugin, xformPlugin);
+}
+
+
+
+// Next test checks results of optimized floating point versus 16 bits. That is, converting the float to 16 bits, operating
+// in 16 bits and back to float. Results again should be in range of epsilon
+static
+cmsBool Valid16Float(cmsUInt16Number a, cmsFloat32Number b)
+{
+ return fabs(((cmsFloat32Number)a / (cmsFloat32Number) 0xFFFF) - b) < EPSILON_FLOAT_TESTS;
+}
+
+// Do an in-depth test by checking all RGB cube of 8 bits, going from profilein to profileout. 16 bits temporary is used as reference
+static
+void TryAllValuesFloatVs16(cmsContext Raw, cmsContext Plugin, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
+{
+ Scanline_rgbFloat* bufferIn;
+ Scanline_rgb16bits* bufferIn16;
+
+ Scanline_rgbFloat* bufferFloatOut;
+ Scanline_rgb16bits* buffer16Out;
+ int r, g, b;
+
+ int j;
+ cmsUInt32Number npixels = 256 * 256 * 256;
+
+ cmsHTRANSFORM xformRaw = cmsCreateTransform(Raw, hlcmsProfileIn, TYPE_RGB_16, hlcmsProfileOut, TYPE_RGB_16, Intent, cmsFLAGS_NOCACHE);
+ cmsHTRANSFORM xformPlugin = cmsCreateTransform(Plugin, hlcmsProfileIn, TYPE_RGB_FLT, hlcmsProfileOut, TYPE_RGB_FLT, Intent, cmsFLAGS_NOCACHE);
+
+ cmsCloseProfile(Raw, hlcmsProfileIn);
+ cmsCloseProfile(Raw, hlcmsProfileOut);
+
+ if (xformRaw == NULL || xformPlugin == NULL) {
+
+ Fail("NULL transforms on check float vs 16 conversions");
+ }
+
+ // Again, no checking on mem alloc because this is just a test
+ bufferIn = (Scanline_rgbFloat*)malloc(npixels * sizeof(Scanline_rgbFloat));
+ bufferIn16 = (Scanline_rgb16bits*)malloc(npixels * sizeof(Scanline_rgb16bits));
+ bufferFloatOut = (Scanline_rgbFloat*)malloc(npixels * sizeof(Scanline_rgbFloat));
+ buffer16Out = (Scanline_rgb16bits*)malloc(npixels * sizeof(Scanline_rgb16bits));
+
+
+ // Fill two equivalent input buffers
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ bufferIn[j].r = (cmsFloat32Number)r / 255.0f;
+ bufferIn[j].g = (cmsFloat32Number)g / 255.0f;
+ bufferIn[j].b = (cmsFloat32Number)b / 255.0f;
+
+ bufferIn16[j].r = FROM_8_TO_16(r);
+ bufferIn16[j].g = FROM_8_TO_16(g);
+ bufferIn16[j].b = FROM_8_TO_16(b);
+
+ j++;
+ }
+
+ // Convert
+ cmsDoTransform(Raw, xformRaw, bufferIn16, buffer16Out, npixels);
+ cmsDoTransform(Plugin, xformPlugin, bufferIn, bufferFloatOut, npixels);
+
+
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ // Check for same values
+ if (!Valid16Float(buffer16Out[j].r, bufferFloatOut[j].r) ||
+ !Valid16Float(buffer16Out[j].g, bufferFloatOut[j].g) ||
+ !Valid16Float(buffer16Out[j].b, bufferFloatOut[j].b))
+ Fail("Conversion failed at (%f %f %f) != (%f %f %f)", buffer16Out[j].r / 65535.0, buffer16Out[j].g / 65535.0, buffer16Out[j].b / 65535.0,
+ bufferFloatOut[j].r, bufferFloatOut[j].g, bufferFloatOut[j].b);
+
+ j++;
+ }
+
+ free(bufferIn16); free(buffer16Out);
+ free(bufferIn); free(bufferFloatOut);
+ cmsDeleteTransform(Raw, xformRaw);
+ cmsDeleteTransform(Plugin, xformPlugin);
+}
+
+
+// Check change format feature
+static
+void CheckChangeFormat(cmsContext ContextID)
+{
+ cmsHPROFILE hsRGB, hLab;
+ cmsHTRANSFORM xform, xform2;
+ cmsUInt8Number rgb8[3] = { 10, 120, 40 };
+ cmsUInt16Number rgb16[3] = { 10* 257, 120*257, 40*257 };
+ cmsUInt16Number lab16_1[3], lab16_2[3];
+
+ printf("Checking change format feature...");
+
+ hsRGB = cmsCreate_sRGBProfile(ContextID);
+ hLab = cmsCreateLab4Profile(ContextID, NULL);
+
+ xform = cmsCreateTransform(ContextID, hsRGB, TYPE_RGB_16, hLab, TYPE_Lab_16, INTENT_PERCEPTUAL, 0);
+
+ cmsCloseProfile(ContextID, hsRGB);
+ cmsCloseProfile(ContextID, hLab);
+
+ cmsDoTransform(ContextID, xform, rgb16, lab16_1, 1);
+
+ xform2 = cmsCloneTransformChangingFormats(ContextID, xform, TYPE_RGB_8, TYPE_Lab_16);
+
+ cmsDoTransform(ContextID, xform2, rgb8, lab16_2, 1);
+ cmsDeleteTransform(ContextID, xform);
+ cmsDeleteTransform(ContextID, xform2);
+
+ if (memcmp(lab16_1, lab16_2, sizeof(lab16_1)) != 0)
+ Fail("Change format failed!");
+
+ printf("Ok\n");
+
+}
+
+static
+cmsBool ValidInt(cmsUInt16Number a, cmsUInt16Number b)
+{
+ return abs(a - b) <= 32;
+}
+
+static
+void CheckLab2Roundtrip(cmsContext ContextID)
+{
+ cmsHPROFILE hsRGB, hLab;
+ cmsHTRANSFORM xform, xform2;
+ cmsInt8Number* lab;
+ cmsInt32Number Mb, j;
+ cmsInt32Number r, g, b;
+ Scanline_rgb8bits* In;
+ Scanline_rgb8bits* Out;
+
+ printf("Checking lab2 roundtrip...");
+
+ hsRGB = cmsCreate_sRGBProfile(ContextID);
+ hLab = cmsCreateLab2Profile(ContextID, NULL);
+
+
+ xform = cmsCreateTransform(ContextID, hsRGB, TYPE_RGB_8, hLab, TYPE_Lab_8, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_BLACKPOINTCOMPENSATION);
+ xform2 = cmsCreateTransform(ContextID, hLab, TYPE_Lab_8, hsRGB, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_BLACKPOINTCOMPENSATION);
+
+ cmsCloseProfile(ContextID, hsRGB);
+ cmsCloseProfile(ContextID, hLab);
+
+
+ Mb = 256 * 256 * 256 * sizeof(Scanline_rgb8bits);
+ In = (Scanline_rgb8bits*)malloc(Mb);
+ Out = (Scanline_rgb8bits*)malloc(Mb);
+ lab = (cmsInt8Number*)malloc(256 * 256 * 256 * 3 * sizeof(cmsInt8Number));
+
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++)
+ {
+
+ In[j].r = (cmsUInt8Number)r;
+ In[j].g = (cmsUInt8Number)g;
+ In[j].b = (cmsUInt8Number)b;
+ j++;
+ }
+
+
+ cmsDoTransform(ContextID, xform, In, lab, 256 * 256 * 256);
+ cmsDoTransform(ContextID, xform2, lab, Out, 256 * 256 * 256);
+
+ cmsDeleteTransform(ContextID, xform);
+ cmsDeleteTransform(ContextID, xform2);
+
+
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ // Check for same values
+ if (!ValidInt(In[j].r, Out[j].r) ||
+ !ValidInt(In[j].g, Out[j].g) ||
+ !ValidInt(In[j].b, Out[j].b))
+ Fail("Conversion failed at (%d %d %d) != (%d %d %d)", In[j].r, In[j].g, In[j].b,
+ Out[j].r, Out[j].g, Out[j].b);
+
+ j++;
+ }
+
+
+ free(In);
+ free(Out);
+ free(lab);
+ printf("Ok\n");
+
+}
+
+// Convert some known values
+static
+void CheckConversionFloat(cmsContext Raw, cmsContext Plugin)
+{
+ printf("Crash test...");
+ TryAllValuesFloatAlpha(Raw, Plugin, cmsOpenProfileFromFile(Raw, "test5.icc", "r"), cmsOpenProfileFromFile(Raw, "test0.icc", "r"), INTENT_PERCEPTUAL);
+ printf("Ok\n");
+
+ printf("Crash (II) test...");
+ TryAllValuesFloatAlpha(Raw, Plugin, cmsOpenProfileFromFile(Raw, "test0.icc", "r"), cmsOpenProfileFromFile(Raw, "test0.icc", "r"), INTENT_PERCEPTUAL);
+ printf("Ok\n");
+
+ // Matrix-shaper should be accurate
+ printf("Checking accuracy on Matrix-shaper...");
+ TryAllValuesFloat(Raw, Plugin, cmsOpenProfileFromFile(Raw, "test5.icc", "r"), cmsOpenProfileFromFile(Raw, "test0.icc", "r"), INTENT_PERCEPTUAL);
+ printf("Ok\n");
+
+ // CLUT should be as 16 bits or better
+ printf("Checking accuracy of CLUT...");
+ TryAllValuesFloatVs16(Raw, Plugin, cmsOpenProfileFromFile(Raw, "test5.icc", "r"), cmsOpenProfileFromFile(Raw, "test3.icc", "r"), INTENT_PERCEPTUAL);
+ printf("Ok\n");
+
+ // Same profile should give same values (we test both methods)
+ printf("Checking accuracy on same profile ...");
+ TryAllValuesFloatVs16(Raw, Plugin, cmsOpenProfileFromFile(Raw, "test0.icc", "r"), cmsOpenProfileFromFile(Raw, "test0.icc", "r"), INTENT_PERCEPTUAL);
+ TryAllValuesFloat(Raw, Plugin, cmsOpenProfileFromFile(Raw, "test0.icc", "r"), cmsOpenProfileFromFile(Raw, "test0.icc", "r"), INTENT_PERCEPTUAL);
+ printf("Ok\n");
+}
+
+
+
+// --------------------------------------------------------------------------------------------------
+// P E R F O R M A N C E C H E C K S
+// --------------------------------------------------------------------------------------------------
+
+
+static
+cmsFloat64Number MPixSec(cmsFloat64Number diff)
+{
+ cmsFloat64Number seconds = (cmsFloat64Number)diff / (cmsFloat64Number)CLOCKS_PER_SEC;
+ return (256.0 * 256.0 * 256.0) / (1024.0*1024.0*seconds);
+}
+
+typedef cmsFloat64Number(*perf_fn)(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut);
+
+
+static
+void PerformanceHeader(void)
+{
+ printf(" MPixel/sec. MByte/sec.\n");
+}
+
+static
+cmsFloat64Number Performance(const char* Title, perf_fn fn, cmsContext ct, const char* inICC, const char* outICC, size_t sz, cmsFloat64Number prev)
+{
+ cmsHPROFILE hlcmsProfileIn;
+ cmsHPROFILE hlcmsProfileOut;
+
+ if (inICC == NULL)
+ hlcmsProfileIn = CreateCurves(ct);
+ else
+ hlcmsProfileIn = cmsOpenProfileFromFile(ct, inICC, "r");
+
+ if (outICC == NULL)
+ hlcmsProfileOut = CreateCurves(ct);
+ else
+ hlcmsProfileOut = cmsOpenProfileFromFile(ct, outICC, "r");
+
+
+ cmsFloat64Number n = fn(ct, hlcmsProfileIn, hlcmsProfileOut);
+
+ printf("%-30s: ", Title); fflush(stdout);
+ printf("%-12.2f %-12.2f", n, n * sz);
+
+ if (prev > 0.0) {
+
+ cmsFloat64Number imp = n / prev;
+ if (imp > 1)
+ printf(" (x %-2.1f)", imp);
+ }
+
+ printf("\n"); fflush(stdout);
+ return n;
+}
+
+
+static
+void ComparativeCt(cmsContext ct1, cmsContext ct2, const char* Title, perf_fn fn1, perf_fn fn2, const char* inICC, const char* outICC)
+{
+ cmsHPROFILE hlcmsProfileIn;
+ cmsHPROFILE hlcmsProfileOut;
+
+ if (inICC == NULL)
+ hlcmsProfileIn = CreateCurves(ct1);
+ else
+ hlcmsProfileIn = cmsOpenProfileFromFile(ct1, inICC, "r");
+
+ if (outICC == NULL)
+ hlcmsProfileOut = CreateCurves(ct1);
+ else
+ hlcmsProfileOut = cmsOpenProfileFromFile(ct1, outICC, "r");
+
+
+ cmsFloat64Number n1 = fn1(ct1, hlcmsProfileIn, hlcmsProfileOut);
+
+ if (inICC == NULL)
+ hlcmsProfileIn = CreateCurves(ct2);
+ else
+ hlcmsProfileIn = cmsOpenProfileFromFile(ct2, inICC, "r");
+
+ if (outICC == NULL)
+ hlcmsProfileOut = CreateCurves(ct2);
+ else
+ hlcmsProfileOut = cmsOpenProfileFromFile(ct2, outICC, "r");
+
+ cmsFloat64Number n2 = fn2(ct2, hlcmsProfileIn, hlcmsProfileOut);
+
+
+ printf("%-30s: ", Title); fflush(stdout);
+ printf("%-12.2f %-12.2f\n", n1, n2);
+}
+
+static
+void Comparative(cmsContext Raw, cmsContext Plugin, const char* Title, perf_fn fn1, perf_fn fn2, const char* inICC, const char* outICC)
+{
+ ComparativeCt(Raw, Plugin, Title, fn1, fn2, inICC, outICC);
+}
+
+// The worst case is used, no cache and all rgb combinations
+static
+cmsFloat64Number SpeedTest8bitsRGB(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+{
+ cmsInt32Number r, g, b, j;
+ clock_t atime;
+ cmsFloat64Number diff;
+ cmsHTRANSFORM hlcmsxform;
+ Scanline_rgb8bits *In;
+ cmsUInt32Number Mb;
+
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Fail("Unable to open profiles");
+
+ hlcmsxform = cmsCreateTransform(ct, hlcmsProfileIn, TYPE_RGB_8, hlcmsProfileOut, TYPE_RGB_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(ct, hlcmsProfileIn);
+ cmsCloseProfile(ct, hlcmsProfileOut);
+
+ Mb = 256 * 256 * 256 * sizeof(Scanline_rgb8bits);
+ In = (Scanline_rgb8bits*)malloc(Mb);
+
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ In[j].r = (cmsUInt8Number)r;
+ In[j].g = (cmsUInt8Number)g;
+ In[j].b = (cmsUInt8Number)b;
+
+ j++;
+ }
+
+ atime = clock();
+
+ cmsDoTransform(ct, hlcmsxform, In, In, 256 * 256 * 256);
+
+ diff = clock() - atime;
+ free(In);
+
+ cmsDeleteTransform(ct, hlcmsxform);
+
+ return MPixSec(diff);
+}
+
+static
+cmsFloat64Number SpeedTest8bitsRGBA(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+{
+ cmsInt32Number r, g, b, j;
+ clock_t atime;
+ cmsFloat64Number diff;
+ cmsHTRANSFORM hlcmsxform;
+ Scanline_rgba8bits *In;
+ cmsUInt32Number Mb;
+
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Fail("Unable to open profiles");
+
+ hlcmsxform = cmsCreateTransform(ct, hlcmsProfileIn, TYPE_RGBA_8, hlcmsProfileOut, TYPE_RGBA_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(ct, hlcmsProfileIn);
+ cmsCloseProfile(ct, hlcmsProfileOut);
+
+ Mb = 256 * 256 * 256 * sizeof(Scanline_rgba8bits);
+ In = (Scanline_rgba8bits*)malloc(Mb);
+
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ In[j].r = (cmsUInt8Number)r;
+ In[j].g = (cmsUInt8Number)g;
+ In[j].b = (cmsUInt8Number)b;
+ In[j].a = 0;
+
+ j++;
+ }
+
+ atime = clock();
+
+ cmsDoTransform(ct, hlcmsxform, In, In, 256 * 256 * 256);
+
+ diff = clock() - atime;
+ free(In);
+
+ cmsDeleteTransform(ct, hlcmsxform);
+ return MPixSec(diff);
+
+}
+
+
+// The worst case is used, no cache and all rgb combinations
+static
+cmsFloat64Number SpeedTest15bitsRGB(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+{
+ cmsInt32Number r, g, b, j;
+ clock_t atime;
+ cmsFloat64Number diff;
+ cmsHTRANSFORM hlcmsxform;
+ Scanline_rgb15bits *In;
+ cmsUInt32Number Mb;
+
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Fail("Unable to open profiles");
+
+ hlcmsxform = cmsCreateTransform(ct, hlcmsProfileIn, TYPE_RGB_15, hlcmsProfileOut, TYPE_RGB_15, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(ct, hlcmsProfileIn);
+ cmsCloseProfile(ct, hlcmsProfileOut);
+
+ Mb = 256 * 256 * 256 * sizeof(Scanline_rgb15bits);
+ In = (Scanline_rgb15bits*)malloc(Mb);
+
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ In[j].r = (cmsUInt16Number)r;
+ In[j].g = (cmsUInt16Number)g;
+ In[j].b = (cmsUInt16Number)b;
+
+ j++;
+ }
+
+ atime = clock();
+
+ cmsDoTransform(ct, hlcmsxform, In, In, 256 * 256 * 256);
+
+ diff = clock() - atime;
+ free(In);
+
+ cmsDeleteTransform(ct, hlcmsxform);
+
+ return MPixSec(diff);
+}
+
+static
+cmsFloat64Number SpeedTest15bitsRGBA(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+{
+ cmsInt32Number r, g, b, j;
+ clock_t atime;
+ cmsFloat64Number diff;
+ cmsHTRANSFORM hlcmsxform;
+ Scanline_rgba15bits *In;
+ cmsUInt32Number Mb;
+
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Fail("Unable to open profiles");
+
+ hlcmsxform = cmsCreateTransform(ct, hlcmsProfileIn, TYPE_RGBA_15, hlcmsProfileOut, TYPE_RGBA_15, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(ct, hlcmsProfileIn);
+ cmsCloseProfile(ct, hlcmsProfileOut);
+
+ Mb = 256 * 256 * 256 * sizeof(Scanline_rgba15bits);
+ In = (Scanline_rgba15bits*)malloc(Mb);
+
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ In[j].r = (cmsUInt16Number)r;
+ In[j].g = (cmsUInt16Number)g;
+ In[j].b = (cmsUInt16Number)b;
+ In[j].a = 0;
+
+ j++;
+ }
+
+ atime = clock();
+
+ cmsDoTransform(ct, hlcmsxform, In, In, 256 * 256 * 256);
+
+ diff = clock() - atime;
+ free(In);
+
+ cmsDeleteTransform(ct, hlcmsxform);
+ return MPixSec(diff);
+
+}
+
+static
+cmsFloat64Number SpeedTest15bitsCMYK(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+{
+
+ cmsInt32Number r, g, b, j;
+ clock_t atime;
+ cmsFloat64Number diff;
+ cmsHTRANSFORM hlcmsxform;
+ Scanline_cmyk15bits *In;
+ cmsUInt32Number Mb;
+
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Fail("Unable to open profiles");
+
+ hlcmsxform = cmsCreateTransform(ct, hlcmsProfileIn, TYPE_CMYK_15, hlcmsProfileOut, TYPE_CMYK_15, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(ct, hlcmsProfileIn);
+ cmsCloseProfile(ct, hlcmsProfileOut);
+
+ Mb = 256 * 256 * 256 * sizeof(Scanline_cmyk15bits);
+ In = (Scanline_cmyk15bits*)malloc(Mb);
+
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ In[j].r = (cmsUInt16Number)r;
+ In[j].g = (cmsUInt16Number)g;
+ In[j].b = (cmsUInt16Number)b;
+ In[j].a = (cmsUInt16Number)0;
+
+ j++;
+ }
+
+ atime = clock();
+
+ cmsDoTransform(ct, hlcmsxform, In, In, 256 * 256 * 256);
+
+ diff = clock() - atime;
+ free(In);
+
+ cmsDeleteTransform(ct, hlcmsxform);
+ return MPixSec(diff);
+}
+
+// The worst case is used, no cache and all rgb combinations
+static
+cmsFloat64Number SpeedTest16bitsRGB(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+{
+ cmsInt32Number r, g, b, j;
+ clock_t atime;
+ cmsFloat64Number diff;
+ cmsHTRANSFORM hlcmsxform;
+ Scanline_rgb16bits *In;
+ cmsUInt32Number Mb;
+
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Fail("Unable to open profiles");
+
+ hlcmsxform = cmsCreateTransform(ct, hlcmsProfileIn, TYPE_RGB_16, hlcmsProfileOut, TYPE_RGB_16, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(ct, hlcmsProfileIn);
+ cmsCloseProfile(ct, hlcmsProfileOut);
+
+ Mb = 256 * 256 * 256 * sizeof(Scanline_rgb16bits);
+ In = (Scanline_rgb16bits*)malloc(Mb);
+
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ In[j].r = (cmsUInt16Number)FROM_8_TO_16(r);
+ In[j].g = (cmsUInt16Number)FROM_8_TO_16(g);
+ In[j].b = (cmsUInt16Number)FROM_8_TO_16(b);
+
+ j++;
+ }
+
+ atime = clock();
+
+ cmsDoTransform(ct, hlcmsxform, In, In, 256 * 256 * 256);
+
+ diff = clock() - atime;
+ free(In);
+
+ cmsDeleteTransform(ct, hlcmsxform);
+
+ return MPixSec(diff);
+}
+
+
+static
+void SpeedTest8(cmsContext ct)
+{
+ printf("\n\nP E R F O R M A N C E T E S T S 8 B I T S\n");
+ printf( "==============================================\n\n");
+
+ PerformanceHeader();
+ Performance("8 bits on CLUT profiles ", SpeedTest8bitsRGB, ct, "test5.icc", "test3.icc", sizeof(Scanline_rgb8bits), 0);
+ Performance("8 bits on Matrix-Shaper profiles", SpeedTest8bitsRGB, ct, "test5.icc", "test0.icc", sizeof(Scanline_rgb8bits), 0);
+ Performance("8 bits on same Matrix-Shaper ", SpeedTest8bitsRGB, ct, "test0.icc", "test0.icc", sizeof(Scanline_rgb8bits), 0);
+ Performance("8 bits on curves ", SpeedTest8bitsRGB, ct, NULL, NULL, sizeof(Scanline_rgb8bits), 0);
+ // Performance("8 bits on CMYK CLUT profiles ", SpeedTest8bitsCMYK, ct, "test1.icc", "test2.icc", sizeof(Scanline_rgba15bits), 0);
+}
+
+
+static
+void SpeedTest15(cmsContext ct)
+{
+ printf("\n\nP E R F O R M A N C E T E S T S 1 5 B I T S\n");
+ printf( "================================================\n\n");
+
+ PerformanceHeader();
+ Performance("15 bits on CLUT profiles ", SpeedTest15bitsRGB, ct, "test5.icc", "test3.icc", sizeof(Scanline_rgb15bits), 0);
+ Performance("15 bits on Matrix-Shaper profiles", SpeedTest15bitsRGB, ct, "test5.icc", "test0.icc", sizeof(Scanline_rgb15bits), 0);
+ Performance("15 bits on same Matrix-Shaper ", SpeedTest15bitsRGB, ct, "test0.icc", "test0.icc", sizeof(Scanline_rgb15bits), 0);
+ Performance("15 bits on curves ", SpeedTest15bitsRGB, ct, NULL, NULL, sizeof(Scanline_rgb15bits), 0);
+ Performance("15 bits on CMYK CLUT profiles ", SpeedTest15bitsCMYK, ct, "test1.icc", "test2.icc", sizeof(Scanline_rgba15bits), 0);
+}
+
+static
+void SpeedTest16(cmsContext ct)
+{
+ printf("\n\nP E R F O R M A N C E T E S T S 1 6 B I T S\n");
+ printf("================================================\n\n");
+
+ PerformanceHeader();
+ Performance("16 bits on CLUT profiles ", SpeedTest16bitsRGB, ct, "test5.icc", "test3.icc", sizeof(Scanline_rgb15bits), 0);
+
+}
+
+// The worst case is used, no cache and all rgb combinations
+static
+cmsFloat64Number SpeedTestFloatRGB(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+{
+ cmsInt32Number r, g, b, j;
+ clock_t atime;
+ cmsFloat64Number diff;
+ cmsHTRANSFORM hlcmsxform;
+ Scanline_rgbFloat *In;
+ cmsUInt32Number Mb;
+
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Fail("Unable to open profiles");
+
+ hlcmsxform = cmsCreateTransform(ct, hlcmsProfileIn, TYPE_RGB_FLT, hlcmsProfileOut, TYPE_RGB_FLT, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(ct, hlcmsProfileIn);
+ cmsCloseProfile(ct, hlcmsProfileOut);
+
+ Mb = 256 * 256 * 256 * sizeof(Scanline_rgbFloat);
+ In = (Scanline_rgbFloat*)malloc(Mb);
+
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ In[j].r = (cmsFloat32Number)r / 255.0f;
+ In[j].g = (cmsFloat32Number)g / 255.0f;
+ In[j].b = (cmsFloat32Number)b / 255.0f;
+
+ j++;
+ }
+
+ atime = clock();
+
+ cmsDoTransform(ct, hlcmsxform, In, In, 256 * 256 * 256);
+
+ diff = clock() - atime;
+ free(In);
+
+ cmsDeleteTransform(ct, hlcmsxform);
+ return MPixSec(diff);
+}
+
+
+
+
+static
+void SpeedTestFloat(cmsContext noPlugin, cmsContext plugin)
+{
+ cmsFloat64Number t[10];
+
+ printf("\n\n");
+ printf("P E R F O R M A N C E T E S T S F L O A T (D E F A U L T)\n");
+ printf("==============================================================\n\n");
+ fflush(stdout);
+
+ PerformanceHeader();
+ t[0] = Performance("Floating point on CLUT profiles ", SpeedTestFloatRGB, noPlugin, "test5.icc", "test3.icc", sizeof(Scanline_rgbFloat), 0);
+ t[1] = Performance("Floating point on Matrix-Shaper ", SpeedTestFloatRGB, noPlugin, "test5.icc", "test0.icc", sizeof(Scanline_rgbFloat), 0);
+ t[2] = Performance("Floating point on same MatrixSh ", SpeedTestFloatRGB, noPlugin, "test0.icc", "test0.icc", sizeof(Scanline_rgbFloat), 0);
+ t[3] = Performance("Floating point on curves ", SpeedTestFloatRGB, noPlugin, NULL, NULL, sizeof(Scanline_rgbFloat), 0);
+
+ // Note that context 0 has the plug-in installed
+
+ printf("\n\n");
+ printf("P E R F O R M A N C E T E S T S F L O A T (P L U G I N)\n");
+ printf("===========================================================\n\n");
+ fflush(stdout);
+
+ PerformanceHeader();
+ Performance("Floating point on CLUT profiles ", SpeedTestFloatRGB, plugin, "test5.icc", "test3.icc", sizeof(Scanline_rgbFloat), t[0]);
+ Performance("Floating point on Matrix-Shaper ", SpeedTestFloatRGB, plugin, "test5.icc", "test0.icc", sizeof(Scanline_rgbFloat), t[1]);
+ Performance("Floating point on same MatrixSh ", SpeedTestFloatRGB, plugin, "test0.icc", "test0.icc", sizeof(Scanline_rgbFloat), t[2]);
+ Performance("Floating point on curves ", SpeedTestFloatRGB, plugin, NULL, NULL, sizeof(Scanline_rgbFloat), t[3]);
+}
+
+
+static
+cmsFloat64Number SpeedTestFloatByUsing16BitsRGB(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+{
+ cmsInt32Number r, g, b, j;
+ clock_t atime;
+ cmsFloat64Number diff;
+ cmsHTRANSFORM xform16;
+ Scanline_rgbFloat *In;
+ Scanline_rgb16bits *tmp16;
+ cmsUInt32Number MbFloat, Mb16;
+
+ UNUSED_PARAMETER(ct);
+
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Fail("Unable to open profiles");
+
+ xform16 = cmsCreateTransform(ct, hlcmsProfileIn, TYPE_RGB_16, hlcmsProfileOut, TYPE_RGB_16, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+
+ cmsCloseProfile(ct, hlcmsProfileIn);
+ cmsCloseProfile(ct, hlcmsProfileOut);
+
+ MbFloat = 256 * 256 * 256 * sizeof(Scanline_rgbFloat);
+ Mb16 = 256 * 256 * 256 * sizeof(Scanline_rgb16bits);
+
+ In = (Scanline_rgbFloat*)malloc(MbFloat);
+ tmp16 = (Scanline_rgb16bits*)malloc(Mb16);
+
+
+ j = 0;
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ In[j].r = (cmsFloat32Number)r / 255.0f;
+ In[j].g = (cmsFloat32Number)g / 255.0f;
+ In[j].b = (cmsFloat32Number)b / 255.0f;
+
+ j++;
+ }
+
+
+ atime = clock();
+
+
+ for (j = 0; j < 256 * 256 * 256; j++) {
+
+ tmp16[j].r = (cmsUInt16Number)floor(In[j].r * 65535.0 + 0.5);
+ tmp16[j].g = (cmsUInt16Number)floor(In[j].g * 65535.0 + 0.5);
+ tmp16[j].b = (cmsUInt16Number)floor(In[j].b * 65535.0 + 0.5);
+
+ j++;
+ }
+
+ cmsDoTransform(ct, xform16, tmp16, tmp16, 256 * 256 * 256);
+
+ for (j = 0; j < 256 * 256 * 256; j++) {
+
+ In[j].r = (cmsFloat32Number) (tmp16[j].r / 65535.0 );
+ In[j].g = (cmsFloat32Number) (tmp16[j].g / 65535.0);
+ In[j].b = (cmsFloat32Number) (tmp16[j].b / 65535.0);
+
+ j++;
+ }
+
+ diff = clock() - atime;
+ free(In);
+
+ cmsDeleteTransform(ct, xform16);
+ return MPixSec(diff);
+}
+
+
+
+
+
+static
+void ComparativeFloatVs16bits(cmsContext Raw, cmsContext Plugin)
+{
+ printf("\n\n");
+ printf("C O M P A R A T I V E converting to 16 bit vs. using float plug-in.\n");
+ printf(" values given in MegaPixels per second.\n");
+ printf("====================================================================\n");
+ printf(" 16 bits tmp. Float plugin\n");
+ fflush(stdout);
+
+ Comparative(Raw, Plugin, "Floating point on CLUT profiles ", SpeedTestFloatByUsing16BitsRGB, SpeedTestFloatRGB, "test5.icc", "test3.icc");
+ Comparative(Raw, Plugin, "Floating point on Matrix-Shaper ", SpeedTestFloatByUsing16BitsRGB, SpeedTestFloatRGB, "test5.icc", "test0.icc");
+ Comparative(Raw, Plugin, "Floating point on same MatrixSh ", SpeedTestFloatByUsing16BitsRGB, SpeedTestFloatRGB, "test0.icc", "test0.icc");
+ Comparative(Raw, Plugin, "Floating point on curves ", SpeedTestFloatByUsing16BitsRGB, SpeedTestFloatRGB, NULL, NULL);
+}
+
+
+
+
+
+
+
+typedef struct
+{
+ Scanline_rgba8bits pixels[256][256];
+ cmsUInt8Number padding[4];
+
+} padded_line;
+
+typedef struct
+{
+ padded_line line[256];
+} big_bitmap;
+
+
+static
+cmsFloat64Number SpeedTest8bitDoTransform(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+{
+ cmsInt32Number r, g, b, j;
+ clock_t atime;
+ cmsFloat64Number diff;
+ cmsHTRANSFORM hlcmsxform;
+ big_bitmap* In;
+ big_bitmap* Out;
+ cmsUInt32Number Mb;
+
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Fail("Unable to open profiles");
+
+ hlcmsxform = cmsCreateTransform(ct, hlcmsProfileIn, TYPE_RGBA_8, hlcmsProfileOut, TYPE_RGBA_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(ct, hlcmsProfileIn);
+ cmsCloseProfile(ct, hlcmsProfileOut);
+
+
+ // Our test bitmap is 256 x 256 padded lines
+ Mb = sizeof(big_bitmap);
+
+ In = (big_bitmap*)malloc(Mb);
+ Out = (big_bitmap*)malloc(Mb);
+
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ In->line[r].pixels[g][b].r = (cmsUInt8Number)r;
+ In->line[r].pixels[g][b].g = (cmsUInt8Number)g;
+ In->line[r].pixels[g][b].b = (cmsUInt8Number)b;
+ In->line[r].pixels[g][b].a = 0;
+ }
+
+ atime = clock();
+
+ for (j = 0; j < 256; j++) {
+
+ cmsDoTransform(ct, hlcmsxform, In->line[j].pixels, Out->line[j].pixels, 256 * 256);
+ }
+
+ diff = clock() - atime;
+ free(In); free(Out);
+
+ cmsDeleteTransform(ct, hlcmsxform);
+ return MPixSec(diff);
+
+}
+
+
+static
+cmsFloat64Number SpeedTest8bitLineStride(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+{
+ cmsInt32Number r, g, b;
+ clock_t atime;
+ cmsFloat64Number diff;
+ cmsHTRANSFORM hlcmsxform;
+ big_bitmap* In;
+ big_bitmap* Out;
+ cmsUInt32Number Mb;
+
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Fail("Unable to open profiles");
+
+ hlcmsxform = cmsCreateTransform(ct, hlcmsProfileIn, TYPE_RGBA_8, hlcmsProfileOut, TYPE_RGBA_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(ct, hlcmsProfileIn);
+ cmsCloseProfile(ct, hlcmsProfileOut);
+
+
+ // Our test bitmap is 256 x 256 padded lines
+ Mb = sizeof(big_bitmap);
+
+ In = (big_bitmap*)malloc(Mb);
+ Out = (big_bitmap*)malloc(Mb);
+
+ for (r = 0; r < 256; r++)
+ for (g = 0; g < 256; g++)
+ for (b = 0; b < 256; b++) {
+
+ In->line[r].pixels[g][b].r = (cmsUInt8Number)r;
+ In->line[r].pixels[g][b].g = (cmsUInt8Number)g;
+ In->line[r].pixels[g][b].b = (cmsUInt8Number)b;
+ In->line[r].pixels[g][b].a = 0;
+ }
+
+ atime = clock();
+
+ cmsDoTransformLineStride(ct, hlcmsxform, In, Out, 256*256, 256, sizeof(padded_line), sizeof(padded_line), 0, 0);
+
+ diff = clock() - atime;
+ free(In); free(Out);
+
+ cmsDeleteTransform(ct, hlcmsxform);
+ return MPixSec(diff);
+
+}
+
+static
+void ComparativeLineStride8bits(cmsContext NoPlugin, cmsContext Plugin)
+{
+ printf("\n\n");
+ printf("C O M P A R A T I V E cmsDoTransform() vs. cmsDoTransformLineStride()\n");
+ printf(" values given in MegaPixels per second.\n");
+ printf("====================================================================\n");
+
+ fflush(stdout);
+
+ ComparativeCt(NoPlugin, Plugin, "CLUT profiles ", SpeedTest8bitDoTransform, SpeedTest8bitLineStride, "test5.icc", "test3.icc");
+ ComparativeCt(NoPlugin, Plugin, "CLUT 16 bits ", SpeedTest16bitsRGB, SpeedTest16bitsRGB, "test5.icc", "test3.icc");
+ ComparativeCt(NoPlugin, Plugin, "Matrix-Shaper ", SpeedTest8bitDoTransform, SpeedTest8bitLineStride, "test5.icc", "test0.icc");
+ ComparativeCt(NoPlugin, Plugin, "same MatrixSh ", SpeedTest8bitDoTransform, SpeedTest8bitLineStride, "test0.icc", "test0.icc");
+ ComparativeCt(NoPlugin, Plugin, "curves ", SpeedTest8bitDoTransform, SpeedTest8bitLineStride, NULL, NULL);
+}
+
+
+
+static
+void TestGrayTransformPerformance(cmsContext ct)
+{
+ cmsInt32Number j;
+ clock_t atime;
+ cmsFloat64Number diff;
+ cmsHTRANSFORM hlcmsxform;
+ float *In;
+
+ cmsInt32Number pixels;
+ cmsUInt32Number Mb;
+ cmsToneCurve* gamma18;
+ cmsToneCurve* gamma22;
+
+ cmsHPROFILE hlcmsProfileIn;
+ cmsHPROFILE hlcmsProfileOut;
+
+ gamma18 = cmsBuildGamma(ct, 1.8);
+ gamma22 = cmsBuildGamma(ct, 2.2);
+
+ hlcmsProfileIn = cmsCreateGrayProfile(ct, NULL, gamma18);
+ hlcmsProfileOut = cmsCreateGrayProfile(ct, NULL, gamma22);
+
+
+ cmsFreeToneCurve(ct, gamma18);
+ cmsFreeToneCurve(ct, gamma22);
+
+ hlcmsxform = cmsCreateTransform(ct, hlcmsProfileIn, TYPE_GRAY_FLT | EXTRA_SH(1), hlcmsProfileOut, TYPE_GRAY_FLT|EXTRA_SH(1), INTENT_PERCEPTUAL, 0);
+ cmsCloseProfile(ct, hlcmsProfileIn);
+ cmsCloseProfile(ct, hlcmsProfileOut);
+
+ pixels = 256 * 256 * 256;
+ Mb = pixels* 2*sizeof(float);
+ In = malloc(Mb);
+
+ for (j = 0; j < pixels*2; j++)
+ In[j] = (j % 256) / 255.0f;
+
+ atime = clock();
+
+ cmsDoTransform(ct, hlcmsxform, In, In, pixels);
+
+ diff = clock() - atime;
+ free(In);
+
+ cmsDeleteTransform(ct, hlcmsxform);
+ printf("Gray conversion using two gray profiles\t %-12.2f MPixels/Sec.\n", MPixSec(diff));
+}
+
+static
+void TestGrayTransformPerformance1(cmsContext ct)
+{
+ cmsInt32Number j;
+ clock_t atime;
+ cmsFloat64Number diff;
+ cmsHTRANSFORM hlcmsxform;
+ float *In;
+
+ cmsInt32Number pixels;
+ cmsUInt32Number Mb;
+ cmsToneCurve* gamma18;
+ cmsToneCurve* gamma22;
+
+ cmsHPROFILE hlcmsProfileIn;
+ cmsHPROFILE hlcmsProfileOut;
+
+ gamma18 = cmsBuildGamma(ct, 1.8);
+ gamma22 = cmsBuildGamma(ct, 1./2.2);
+
+ hlcmsProfileIn = cmsCreateLinearizationDeviceLink(ct, cmsSigGrayData, &gamma18);
+ hlcmsProfileOut = cmsCreateLinearizationDeviceLink(ct, cmsSigGrayData, &gamma22);
+
+
+ cmsFreeToneCurve(ct, gamma18);
+ cmsFreeToneCurve(ct, gamma22);
+
+ hlcmsxform = cmsCreateTransform(ct, hlcmsProfileIn, TYPE_GRAY_FLT, hlcmsProfileOut, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0);
+ cmsCloseProfile(ct, hlcmsProfileIn);
+ cmsCloseProfile(ct, hlcmsProfileOut);
+
+ pixels = 256 * 256 * 256;
+ Mb = pixels* sizeof(float);
+ In = malloc(Mb);
+
+ for (j = 0; j < pixels; j++)
+ In[j] = (j % 256) / 255.0f;
+
+ atime = clock();
+
+ cmsDoTransform(ct, hlcmsxform, In, In, pixels);
+
+ diff = clock() - atime;
+ free(In);
+
+ cmsDeleteTransform(ct, hlcmsxform);
+ printf("Gray conversion using two devicelinks\t %-12.2f MPixels/Sec.\n", MPixSec(diff));
+}
+
+
+// The harness test
+int main()
+{
+ cmsContext raw = cmsCreateContext(NULL, NULL);
+ cmsContext plugin = cmsCreateContext(NULL, NULL);
+
+ printf("FastFloating point extensions testbed - 1.2\n");
+ printf("Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved\n");
+
+ printf("\nInstalling error logger ... ");
+ cmsSetLogErrorHandler(raw, FatalErrorQuit);
+ cmsSetLogErrorHandler(plugin, FatalErrorQuit);
+ printf("done.\n");
+
+ printf("Installing plug-in ... ");
+ cmsPlugin(plugin, cmsFastFloatExtensions());
+ printf("done.\n\n");
+
+ CheckLab2Roundtrip(plugin);
+
+ CheckComputeIncrements();
+
+ // 15 bit functionality
+ CheckFormatters15();
+ Check15bitsConversions(plugin);
+
+ // 16 bits functionality
+ CheckAccuracy16Bits(raw, plugin);
+
+ // Change format
+ CheckChangeFormat(plugin);
+
+ // Floating point functionality
+ CheckConversionFloat(raw, plugin);
+ printf("All floating point tests passed OK\n");
+
+ SpeedTest8(plugin);
+ SpeedTest16(plugin);
+ SpeedTest15(plugin);
+ SpeedTestFloat(raw, plugin);
+
+
+ ComparativeFloatVs16bits(raw, plugin);
+ ComparativeLineStride8bits(raw, plugin);
+
+ // Test gray performance
+ printf("\n\n");
+ printf("F L O A T G R A Y conversions performance.\n");
+ printf("====================================================================\n");
+ TestGrayTransformPerformance(plugin);
+ TestGrayTransformPerformance1(plugin);
+
+ printf("\nAll tests passed OK\n");
+
+
+ return 0;
+}
diff --git a/lcms2mt/plugins/fast_float/testbed/test0.icc b/lcms2mt/plugins/fast_float/testbed/test0.icc
new file mode 100644
index 00000000..a79f576b
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/testbed/test0.icc
Binary files differ
diff --git a/lcms2mt/plugins/fast_float/testbed/test1.icc b/lcms2mt/plugins/fast_float/testbed/test1.icc
new file mode 100644
index 00000000..d0245c81
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/testbed/test1.icc
Binary files differ
diff --git a/lcms2mt/plugins/fast_float/testbed/test2.icc b/lcms2mt/plugins/fast_float/testbed/test2.icc
new file mode 100644
index 00000000..73f1b5aa
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/testbed/test2.icc
Binary files differ
diff --git a/lcms2mt/plugins/fast_float/testbed/test3.icc b/lcms2mt/plugins/fast_float/testbed/test3.icc
new file mode 100644
index 00000000..d0e79301
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/testbed/test3.icc
Binary files differ
diff --git a/lcms2mt/plugins/fast_float/testbed/test5.icc b/lcms2mt/plugins/fast_float/testbed/test5.icc
new file mode 100644
index 00000000..34583ab1
--- /dev/null
+++ b/lcms2mt/plugins/fast_float/testbed/test5.icc
Binary files differ
diff --git a/lcms2mt/src/Makefile.am b/lcms2mt/src/Makefile.am
index 227d79d8..47cee978 100644
--- a/lcms2mt/src/Makefile.am
+++ b/lcms2mt/src/Makefile.am
@@ -10,7 +10,7 @@ AUTOMAKE_OPTIONS = 1.7 foreign
includedir = ${prefix}/include
# Shared libraries built in this directory
-lib_LTLIBRARIES = liblcms2.la
+lib_LTLIBRARIES = liblcms2mt.la
LIBRARY_CURRENT = @LIBRARY_CURRENT@
LIBRARY_REVISION = @LIBRARY_REVISION@
@@ -18,12 +18,12 @@ LIBRARY_AGE = @LIBRARY_AGE@
AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
-liblcms2_la_LDFLAGS = -no-undefined \
+liblcms2mt_la_LDFLAGS = -no-undefined \
-version-info $(LIBRARY_CURRENT):$(LIBRARY_REVISION):$(LIBRARY_AGE)
-liblcms2_la_LIBADD = $(LCMS_LIB_DEPLIBS)
+liblcms2mt_la_LIBADD = $(LCMS_LIB_DEPLIBS)
-liblcms2_la_SOURCES = \
+liblcms2mt_la_SOURCES = \
cmscnvrt.c cmserr.c cmsgamma.c cmsgmt.c cmsintrp.c cmsio0.c cmsio1.c cmslut.c \
cmsplugin.c cmssm.c cmsmd5.c cmsmtrx.c cmspack.c cmspcs.c cmswtpnt.c cmsxform.c \
cmssamp.c cmsnamed.c cmscam02.c cmsvirt.c cmstypes.c cmscgats.c cmsps2.c cmsopt.c \
diff --git a/lcms2mt/src/Makefile.in b/lcms2mt/src/Makefile.in
index 1a606e44..f161d9d6 100644
--- a/lcms2mt/src/Makefile.in
+++ b/lcms2mt/src/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -139,21 +139,21 @@ am__uninstall_files_from_dir = { \
am__installdirs = "$(DESTDIR)$(libdir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
am__DEPENDENCIES_1 =
-liblcms2_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_liblcms2_la_OBJECTS = cmscnvrt.lo cmserr.lo cmsgamma.lo cmsgmt.lo \
+liblcms2mt_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_liblcms2mt_la_OBJECTS = cmscnvrt.lo cmserr.lo cmsgamma.lo cmsgmt.lo \
cmsintrp.lo cmsio0.lo cmsio1.lo cmslut.lo cmsplugin.lo \
cmssm.lo cmsmd5.lo cmsmtrx.lo cmspack.lo cmspcs.lo cmswtpnt.lo \
cmsxform.lo cmssamp.lo cmsnamed.lo cmscam02.lo cmsvirt.lo \
cmstypes.lo cmscgats.lo cmsps2.lo cmsopt.lo cmshalf.lo \
cmsalpha.lo
-liblcms2_la_OBJECTS = $(am_liblcms2_la_OBJECTS)
+liblcms2mt_la_OBJECTS = $(am_liblcms2mt_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
-liblcms2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+liblcms2mt_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(liblcms2_la_LDFLAGS) $(LDFLAGS) -o $@
+ $(liblcms2mt_la_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -168,7 +168,21 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/cmsalpha.Plo \
+ ./$(DEPDIR)/cmscam02.Plo ./$(DEPDIR)/cmscgats.Plo \
+ ./$(DEPDIR)/cmscnvrt.Plo ./$(DEPDIR)/cmserr.Plo \
+ ./$(DEPDIR)/cmsgamma.Plo ./$(DEPDIR)/cmsgmt.Plo \
+ ./$(DEPDIR)/cmshalf.Plo ./$(DEPDIR)/cmsintrp.Plo \
+ ./$(DEPDIR)/cmsio0.Plo ./$(DEPDIR)/cmsio1.Plo \
+ ./$(DEPDIR)/cmslut.Plo ./$(DEPDIR)/cmsmd5.Plo \
+ ./$(DEPDIR)/cmsmtrx.Plo ./$(DEPDIR)/cmsnamed.Plo \
+ ./$(DEPDIR)/cmsopt.Plo ./$(DEPDIR)/cmspack.Plo \
+ ./$(DEPDIR)/cmspcs.Plo ./$(DEPDIR)/cmsplugin.Plo \
+ ./$(DEPDIR)/cmsps2.Plo ./$(DEPDIR)/cmssamp.Plo \
+ ./$(DEPDIR)/cmssm.Plo ./$(DEPDIR)/cmstypes.Plo \
+ ./$(DEPDIR)/cmsvirt.Plo ./$(DEPDIR)/cmswtpnt.Plo \
+ ./$(DEPDIR)/cmsxform.Plo
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -188,8 +202,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(liblcms2_la_SOURCES)
-DIST_SOURCES = $(liblcms2_la_SOURCES)
+SOURCES = $(liblcms2mt_la_SOURCES)
+DIST_SOURCES = $(liblcms2mt_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -363,13 +377,13 @@ top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = 1.7 foreign
# Shared libraries built in this directory
-lib_LTLIBRARIES = liblcms2.la
+lib_LTLIBRARIES = liblcms2mt.la
AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
-liblcms2_la_LDFLAGS = -no-undefined \
+liblcms2mt_la_LDFLAGS = -no-undefined \
-version-info $(LIBRARY_CURRENT):$(LIBRARY_REVISION):$(LIBRARY_AGE)
-liblcms2_la_LIBADD = $(LCMS_LIB_DEPLIBS)
-liblcms2_la_SOURCES = \
+liblcms2mt_la_LIBADD = $(LCMS_LIB_DEPLIBS)
+liblcms2mt_la_SOURCES = \
cmscnvrt.c cmserr.c cmsgamma.c cmsgmt.c cmsintrp.c cmsio0.c cmsio1.c cmslut.c \
cmsplugin.c cmssm.c cmsmd5.c cmsmtrx.c cmspack.c cmspcs.c cmswtpnt.c cmsxform.c \
cmssamp.c cmsnamed.c cmscam02.c cmsvirt.c cmstypes.c cmscgats.c cmsps2.c cmsopt.c \
@@ -396,8 +410,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -444,8 +458,8 @@ clean-libLTLIBRARIES:
rm -f $${locs}; \
}
-liblcms2.la: $(liblcms2_la_OBJECTS) $(liblcms2_la_DEPENDENCIES) $(EXTRA_liblcms2_la_DEPENDENCIES)
- $(AM_V_CCLD)$(liblcms2_la_LINK) -rpath $(libdir) $(liblcms2_la_OBJECTS) $(liblcms2_la_LIBADD) $(LIBS)
+liblcms2mt.la: $(liblcms2mt_la_OBJECTS) $(liblcms2mt_la_DEPENDENCIES) $(EXTRA_liblcms2mt_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(liblcms2mt_la_LINK) -rpath $(libdir) $(liblcms2mt_la_OBJECTS) $(liblcms2mt_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -453,32 +467,38 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsalpha.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmscam02.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmscgats.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmscnvrt.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmserr.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsgamma.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsgmt.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmshalf.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsintrp.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsio0.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsio1.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmslut.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsmd5.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsmtrx.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsnamed.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsopt.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmspack.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmspcs.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsplugin.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsps2.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmssamp.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmssm.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmstypes.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsvirt.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmswtpnt.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsxform.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsalpha.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmscam02.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmscgats.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmscnvrt.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmserr.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsgamma.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsgmt.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmshalf.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsintrp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsio0.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsio1.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmslut.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsmd5.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsmtrx.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsnamed.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsopt.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmspack.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmspcs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsplugin.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsps2.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmssamp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmssm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmstypes.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsvirt.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmswtpnt.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsxform.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -562,7 +582,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@@ -635,7 +658,32 @@ clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
mostlyclean-am
distclean: distclean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/cmsalpha.Plo
+ -rm -f ./$(DEPDIR)/cmscam02.Plo
+ -rm -f ./$(DEPDIR)/cmscgats.Plo
+ -rm -f ./$(DEPDIR)/cmscnvrt.Plo
+ -rm -f ./$(DEPDIR)/cmserr.Plo
+ -rm -f ./$(DEPDIR)/cmsgamma.Plo
+ -rm -f ./$(DEPDIR)/cmsgmt.Plo
+ -rm -f ./$(DEPDIR)/cmshalf.Plo
+ -rm -f ./$(DEPDIR)/cmsintrp.Plo
+ -rm -f ./$(DEPDIR)/cmsio0.Plo
+ -rm -f ./$(DEPDIR)/cmsio1.Plo
+ -rm -f ./$(DEPDIR)/cmslut.Plo
+ -rm -f ./$(DEPDIR)/cmsmd5.Plo
+ -rm -f ./$(DEPDIR)/cmsmtrx.Plo
+ -rm -f ./$(DEPDIR)/cmsnamed.Plo
+ -rm -f ./$(DEPDIR)/cmsopt.Plo
+ -rm -f ./$(DEPDIR)/cmspack.Plo
+ -rm -f ./$(DEPDIR)/cmspcs.Plo
+ -rm -f ./$(DEPDIR)/cmsplugin.Plo
+ -rm -f ./$(DEPDIR)/cmsps2.Plo
+ -rm -f ./$(DEPDIR)/cmssamp.Plo
+ -rm -f ./$(DEPDIR)/cmssm.Plo
+ -rm -f ./$(DEPDIR)/cmstypes.Plo
+ -rm -f ./$(DEPDIR)/cmsvirt.Plo
+ -rm -f ./$(DEPDIR)/cmswtpnt.Plo
+ -rm -f ./$(DEPDIR)/cmsxform.Plo
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -681,7 +729,32 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/cmsalpha.Plo
+ -rm -f ./$(DEPDIR)/cmscam02.Plo
+ -rm -f ./$(DEPDIR)/cmscgats.Plo
+ -rm -f ./$(DEPDIR)/cmscnvrt.Plo
+ -rm -f ./$(DEPDIR)/cmserr.Plo
+ -rm -f ./$(DEPDIR)/cmsgamma.Plo
+ -rm -f ./$(DEPDIR)/cmsgmt.Plo
+ -rm -f ./$(DEPDIR)/cmshalf.Plo
+ -rm -f ./$(DEPDIR)/cmsintrp.Plo
+ -rm -f ./$(DEPDIR)/cmsio0.Plo
+ -rm -f ./$(DEPDIR)/cmsio1.Plo
+ -rm -f ./$(DEPDIR)/cmslut.Plo
+ -rm -f ./$(DEPDIR)/cmsmd5.Plo
+ -rm -f ./$(DEPDIR)/cmsmtrx.Plo
+ -rm -f ./$(DEPDIR)/cmsnamed.Plo
+ -rm -f ./$(DEPDIR)/cmsopt.Plo
+ -rm -f ./$(DEPDIR)/cmspack.Plo
+ -rm -f ./$(DEPDIR)/cmspcs.Plo
+ -rm -f ./$(DEPDIR)/cmsplugin.Plo
+ -rm -f ./$(DEPDIR)/cmsps2.Plo
+ -rm -f ./$(DEPDIR)/cmssamp.Plo
+ -rm -f ./$(DEPDIR)/cmssm.Plo
+ -rm -f ./$(DEPDIR)/cmstypes.Plo
+ -rm -f ./$(DEPDIR)/cmsvirt.Plo
+ -rm -f ./$(DEPDIR)/cmswtpnt.Plo
+ -rm -f ./$(DEPDIR)/cmsxform.Plo
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -702,9 +775,9 @@ uninstall-am: uninstall-libLTLIBRARIES
.MAKE: install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
diff --git a/lcms2mt/src/cmsalpha.c b/lcms2mt/src/cmsalpha.c
index e64f9497..697161cc 100644
--- a/lcms2mt/src/cmsalpha.c
+++ b/lcms2mt/src/cmsalpha.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -359,16 +359,18 @@ int FormatterPos(cmsUInt32Number frm)
#endif
if (b == 4 && T_FLOAT(frm))
return 4; // FLT
- if (b == 2 && !T_FLOAT(frm))
- return 1; // 16
+ if (b == 2 && !T_FLOAT(frm)) {
+ if (T_ENDIAN16(frm))
+ return 2; // 16SE
+ else
+ return 1; // 16
+ }
if (b == 1 && !T_FLOAT(frm))
return 0; // 8
- if (b == 2 && T_ENDIAN16(frm))
- return 3;
return -1; // not recognized
}
-// Obtains a alpha-to-alpha funmction formatter
+// Obtains an alpha-to-alpha function formatter
static
cmsFormatterAlphaFn _cmsGetFormatterAlpha(cmsContext id, cmsUInt32Number in, cmsUInt32Number out)
{
diff --git a/lcms2mt/src/cmscam02.c b/lcms2mt/src/cmscam02.c
index d741ee83..76aeb0ea 100644
--- a/lcms2mt/src/cmscam02.c
+++ b/lcms2mt/src/cmscam02.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lcms2mt/src/cmscgats.c b/lcms2mt/src/cmscgats.c
index 50f7fb8f..3657177d 100644
--- a/lcms2mt/src/cmscgats.c
+++ b/lcms2mt/src/cmscgats.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2018 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -681,8 +681,8 @@ cmsFloat64Number ParseFloatNumber(const char *Buffer)
static
void InSymbol(cmsContext ContextID, cmsIT8* it8)
{
- register char *idptr;
- register int k;
+ CMSREGISTER char *idptr;
+ CMSREGISTER int k;
SYMBOL key;
int sng;
@@ -2166,65 +2166,47 @@ void CookPointers(cmsContext ContextID, cmsIT8* it8)
if (cmsstrcasecmp(Fld, "SAMPLE_ID") == 0) {
t -> SampleID = idField;
-
- for (i=0; i < t -> nPatches; i++) {
-
- char *Data = GetData(ContextID, it8, i, idField);
- if (Data) {
- char Buffer[256];
-
- strncpy(Buffer, Data, 255);
- Buffer[255] = 0;
-
- if (strlen(Buffer) <= strlen(Data))
- strcpy(Data, Buffer);
- else
- SetData(ContextID, it8, i, idField, Buffer);
-
- }
- }
-
}
// "LABEL" is an extension. It keeps references to forward tables
- if ((cmsstrcasecmp(Fld, "LABEL") == 0) || Fld[0] == '$' ) {
+ if ((cmsstrcasecmp(Fld, "LABEL") == 0) || Fld[0] == '$') {
- // Search for table references...
- for (i=0; i < t -> nPatches; i++) {
+ // Search for table references...
+ for (i = 0; i < t->nPatches; i++) {
- char *Label = GetData(ContextID, it8, i, idField);
+ char *Label = GetData(ContextID, it8, i, idField);
- if (Label) {
+ if (Label) {
- cmsUInt32Number k;
+ cmsUInt32Number k;
- // This is the label, search for a table containing
- // this property
+ // This is the label, search for a table containing
+ // this property
- for (k=0; k < it8 ->TablesCount; k++) {
+ for (k = 0; k < it8->TablesCount; k++) {
- TABLE* Table = it8 ->Tab + k;
- KEYVALUE* p;
+ TABLE* Table = it8->Tab + k;
+ KEYVALUE* p;
- if (IsAvailableOnList(ContextID, Table->HeaderList, Label, NULL, &p)) {
+ if (IsAvailableOnList(ContextID, Table->HeaderList, Label, NULL, &p)) {
- // Available, keep type and table
- char Buffer[256];
+ // Available, keep type and table
+ char Buffer[256];
- char *Type = p ->Value;
- int nTable = (int) k;
+ char* Type = p->Value;
+ int nTable = (int)k;
- snprintf(Buffer, 255, "%s %d %s", Label, nTable, Type );
+ snprintf(Buffer, 255, "%s %d %s", Label, nTable, Type);
- SetData(ContextID, it8, i, idField, Buffer);
- }
- }
+ SetData(ContextID, it8, i, idField, Buffer);
+ }
+ }
- }
+ }
- }
+ }
}
diff --git a/lcms2mt/src/cmscnvrt.c b/lcms2mt/src/cmscnvrt.c
index f29ab5ba..e3a2ddbc 100644
--- a/lcms2mt/src/cmscnvrt.c
+++ b/lcms2mt/src/cmscnvrt.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -27,19 +27,6 @@
#include "lcms2_internal.h"
-// Link several profiles to obtain a single LUT modelling the whole color transform. Intents, Black point
-// compensation and Adaptation parameters may vary across profiles. BPC and Adaptation refers to the PCS
-// after the profile. I.e, BPC[0] refers to connexion between profile(0) and profile(1)
-cmsPipeline* _cmsLinkProfiles(cmsContext ContextID,
- cmsUInt32Number nProfiles,
- cmsUInt32Number Intents[],
- cmsHPROFILE hProfiles[],
- cmsBool BPC[],
- cmsFloat64Number AdaptationStates[],
- cmsUInt32Number dwFlags);
-
-//---------------------------------------------------------------------------------
-
// This is the default routine for ICC-style intents. A user may decide to override it by using a plugin.
// Supported intents are perceptual, relative colorimetric, saturation and ICC-absolute colorimetric
static
@@ -546,8 +533,6 @@ cmsPipeline* DefaultICCintents(cmsContext ContextID,
Result = cmsPipelineAlloc(ContextID, 0, 0);
if (Result == NULL) return NULL;
- ContextID->dwFlags = dwFlags;
-
CurrentColorSpace = cmsGetColorSpace(ContextID, hProfiles[0]);
for (i=0; i < nProfiles; i++) {
@@ -655,14 +640,10 @@ cmsPipeline* DefaultICCintents(cmsContext ContextID,
}
- ContextID->dwFlags = 0;
-
return Result;
Error:
- ContextID->dwFlags = 0;
-
if (Lut != NULL) cmsPipelineFree(ContextID, Lut);
if (Result != NULL) cmsPipelineFree(ContextID, Result);
return NULL;
@@ -717,7 +698,7 @@ typedef struct {
// Preserve black only if that is the only ink used
static
-int BlackPreservingGrayOnlySampler(cmsContext ContextID, register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo)
+int BlackPreservingGrayOnlySampler(cmsContext ContextID, CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo)
{
GrayOnlyParams* bp = (GrayOnlyParams*) Cargo;
@@ -844,7 +825,7 @@ typedef struct {
// The CLUT will be stored at 16 bits, but calculations are performed at cmsFloat32Number precision
static
-int BlackPreservingSampler(cmsContext ContextID, register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo)
+int BlackPreservingSampler(cmsContext ContextID, CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo)
{
int i;
cmsFloat32Number Inf[4], Outf[4];
@@ -869,14 +850,14 @@ int BlackPreservingSampler(cmsContext ContextID, register const cmsUInt16Number
}
// Try the original transform,
- cmsPipelineEvalFloat(ContextID, Inf, Outf, bp ->cmyk2cmyk);
+ cmsPipelineEvalFloat(ContextID, Inf, Outf, bp ->cmyk2cmyk);
// Store a copy of the floating point result into 16-bit
for (i=0; i < 4; i++)
Out[i] = _cmsQuickSaturateWord(Outf[i] * 65535.0);
// Maybe K is already ok (mostly on K=0)
- if ( fabs(Outf[3] - LabK[3]) < (3.0 / 65535.0) ) {
+ if (fabsf(Outf[3] - LabK[3]) < (3.0 / 65535.0)) {
return TRUE;
}
@@ -901,7 +882,7 @@ int BlackPreservingSampler(cmsContext ContextID, register const cmsUInt16Number
Outf[3] = LabK[3];
// Apply TAC if needed
- SumCMY = Outf[0] + Outf[1] + Outf[2];
+ SumCMY = (cmsFloat64Number) Outf[0] + Outf[1] + Outf[2];
SumCMYK = SumCMY + Outf[3];
if (SumCMYK > bp ->MaxTAC) {
diff --git a/lcms2mt/src/cmserr.c b/lcms2mt/src/cmserr.c
index 3165a805..82e2486c 100644
--- a/lcms2mt/src/cmserr.c
+++ b/lcms2mt/src/cmserr.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -38,7 +38,7 @@ int CMSEXPORT cmsGetEncodedCMMversion(void)
// compare two strings ignoring case
int CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2)
{
- register const unsigned char *us1 = (const unsigned char *)s1,
+ CMSREGISTER const unsigned char *us1 = (const unsigned char *)s1,
*us2 = (const unsigned char *)s2;
while (toupper(*us1) == toupper(*us2++))
diff --git a/lcms2mt/src/cmsgamma.c b/lcms2mt/src/cmsgamma.c
index 09e817ce..ad00b129 100644
--- a/lcms2mt/src/cmsgamma.c
+++ b/lcms2mt/src/cmsgamma.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2013 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -888,7 +888,7 @@ void CMSEXPORT cmsFreeToneCurve(cmsContext ContextID, cmsToneCurve* Curve)
if (Curve -> Evals)
_cmsFree(ContextID, Curve -> Evals);
- if (Curve) _cmsFree(ContextID, Curve);
+ _cmsFree(ContextID, Curve);
}
// Utility function, free 3 gamma tables
diff --git a/lcms2mt/src/cmsgmt.c b/lcms2mt/src/cmsgmt.c
index e969876d..e255ab9d 100644
--- a/lcms2mt/src/cmsgmt.c
+++ b/lcms2mt/src/cmsgmt.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -211,7 +211,7 @@ typedef struct {
static
-int GamutSampler(cmsContext ContextID, register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo)
+int GamutSampler(cmsContext ContextID, CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo)
{
GAMUTCHAIN* t = (GAMUTCHAIN* ) Cargo;
cmsCIELab LabIn1, LabOut1;
@@ -424,7 +424,7 @@ typedef struct {
// This callback just accounts the maximum ink dropped in the given node. It does not populate any
// memory, as the destination table is NULL. Its only purpose it to know the global maximum.
static
-int EstimateTAC(cmsContext ContextID, register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void * Cargo)
+int EstimateTAC(cmsContext ContextID, CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void * Cargo)
{
cmsTACestimator* bp = (cmsTACestimator*) Cargo;
cmsFloat32Number RoundTrip[cmsMAXCHANNELS];
diff --git a/lcms2mt/src/cmshalf.c b/lcms2mt/src/cmshalf.c
index 66c27011..292b6fdf 100644
--- a/lcms2mt/src/cmshalf.c
+++ b/lcms2mt/src/cmshalf.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -31,7 +31,7 @@
// This code is inspired in the paper "Fast Half Float Conversions"
// by Jeroen van der Zijp
-static cmsUInt32Number Mantissa[2048] = {
+static const cmsUInt32Number Mantissa[2048] = {
0x00000000, 0x33800000, 0x34000000, 0x34400000, 0x34800000, 0x34a00000,
0x34c00000, 0x34e00000, 0x35000000, 0x35100000, 0x35200000, 0x35300000,
@@ -391,7 +391,7 @@ static cmsUInt16Number Offset[64] = {
0x0400, 0x0400, 0x0400, 0x0400
};
-static cmsUInt32Number Exponent[64] = {
+static const cmsUInt32Number Exponent[64] = {
0x00000000, 0x00800000, 0x01000000, 0x01800000, 0x02000000, 0x02800000,
0x03000000, 0x03800000, 0x04000000, 0x04800000, 0x05000000, 0x05800000,
0x06000000, 0x06800000, 0x07000000, 0x07800000, 0x08000000, 0x08800000,
@@ -405,7 +405,7 @@ static cmsUInt32Number Exponent[64] = {
0x8e000000, 0x8e800000, 0x8f000000, 0xc7800000
};
-static cmsUInt16Number Base[512] = {
+static const cmsUInt16Number Base[512] = {
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -460,7 +460,7 @@ static cmsUInt16Number Base[512] = {
0xfc00, 0xfc00
};
-static cmsUInt8Number Shift[512] = {
+static const cmsUInt8Number Shift[512] = {
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
diff --git a/lcms2mt/src/cmsintrp.c b/lcms2mt/src/cmsintrp.c
index 555125e3..590328aa 100644
--- a/lcms2mt/src/cmsintrp.c
+++ b/lcms2mt/src/cmsintrp.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -85,10 +85,6 @@ cmsBool _cmsRegisterInterpPlugin(cmsContext ContextID, cmsPluginBase* Data)
cmsBool _cmsSetInterpolationRoutine(cmsContext ContextID, cmsInterpParams* p)
{
_cmsInterpPluginChunkType* ptr = (_cmsInterpPluginChunkType*) _cmsContextGetClientChunk(ContextID, InterpPlugin);
- cmsUInt32Number flags = 0;
-
- if (ContextID->dwFlags & cmsFLAGS_FORCE_LINEARINTERP)
- flags = CMS_LERP_FLAGS_TRILINEAR;
p ->Interpolation.Lerp16 = NULL;
@@ -99,7 +95,7 @@ cmsBool _cmsSetInterpolationRoutine(cmsContext ContextID, cmsInterpParams* p)
// If unsupported by the plug-in, go for the LittleCMS default.
// If happens only if an extern plug-in is being used
if (p ->Interpolation.Lerp16 == NULL)
- p ->Interpolation = DefaultInterpolatorsFactory(p ->nInputs, p ->nOutputs, p ->dwFlags | flags);
+ p ->Interpolation = DefaultInterpolatorsFactory(p ->nInputs, p ->nOutputs, p ->dwFlags);
// Check for valid interpolator (we just check one member of the union)
if (p ->Interpolation.Lerp16 == NULL) {
@@ -194,9 +190,10 @@ cmsINLINE CMS_NO_SANITIZE cmsUInt16Number LinearInterp(cmsS15Fixed16Number a, cm
// Linear interpolation (Fixed-point optimized)
static
-void LinLerp1D(cmsContext ContextID, register const cmsUInt16Number Value[],
- register cmsUInt16Number Output[],
- register const cmsInterpParams* p)
+void LinLerp1D(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Value[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const cmsInterpParams* p)
{
cmsUInt16Number y1, y0;
int cell0, rest;
@@ -269,9 +266,10 @@ void LinLerp1Dfloat(cmsContext ContextID, const cmsFloat32Number Value[],
// Eval gray LUT having only one input channel
static CMS_NO_SANITIZE
-void Eval1Input(cmsContext ContextID, register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const cmsInterpParams* p16)
+void Eval1Input(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Input[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const cmsInterpParams* p16)
{
cmsS15Fixed16Number fk;
cmsS15Fixed16Number k0, k1, rk, K0, K1;
@@ -402,9 +400,10 @@ void BilinearInterpFloat(cmsContext ContextID, const cmsFloat32Number Input[],
// Bilinear interpolation (16 bits) - optimized version
static CMS_NO_SANITIZE
-void BilinearInterp16(cmsContext ContextID, register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const cmsInterpParams* p)
+void BilinearInterp16(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Input[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const cmsInterpParams* p)
{
#define DENS(i,j) (LutTable[(i)+(j)+OutChan])
@@ -413,9 +412,9 @@ void BilinearInterp16(cmsContext ContextID, register const cmsUInt16Number Input
const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table;
int OutChan, TotalOut;
cmsS15Fixed16Number fx, fy;
- register int rx, ry;
+ CMSREGISTER int rx, ry;
int x0, y0;
- register int X0, X1, Y0, Y1;
+ CMSREGISTER int X0, X1, Y0, Y1;
int d00, d01, d10, d11,
dx0, dx1,
dxy;
@@ -535,9 +534,10 @@ void TrilinearInterpFloat(cmsContext ContextID, const cmsFloat32Number Input[],
// Trilinear interpolation (16 bits) - optimized version
static CMS_NO_SANITIZE
-void TrilinearInterp16(cmsContext ContextID, register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const cmsInterpParams* p)
+void TrilinearInterp16(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Input[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const cmsInterpParams* p)
{
#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan])
@@ -546,9 +546,9 @@ void TrilinearInterp16(cmsContext ContextID, register const cmsUInt16Number Inpu
const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table;
int OutChan, TotalOut;
cmsS15Fixed16Number fx, fy, fz;
- register int rx, ry, rz;
+ CMSREGISTER int rx, ry, rz;
int x0, y0, z0;
- register int X0, X1, Y0, Y1, Z0, Z1;
+ CMSREGISTER int X0, X1, Y0, Y1, Z0, Z1;
int d000, d001, d010, d011,
d100, d101, d110, d111,
dx00, dx01, dx10, dx11,
@@ -611,149 +611,6 @@ void TrilinearInterp16(cmsContext ContextID, register const cmsUInt16Number Inpu
# undef DENS
}
-static
-void QuadrilinearInterpFloat(cmsContext ContextID,
- const cmsFloat32Number Input[],
- cmsFloat32Number Output[],
- const cmsInterpParams *p)
-
-{
- cmsFloat32Number rest;
- cmsFloat32Number pk;
- int k0;
- cmsUInt32Number i, n;
- cmsFloat32Number Tmp[MAX_STAGE_CHANNELS];
- cmsInterpParams p1 = *p;
- cmsFloat32Number i0 = fclamp(Input[0]);
-
- pk = i0 * p->Domain[0];
- k0 = _cmsQuickFloor(pk);
- rest = pk - (cmsFloat32Number) k0;
-
- memmove(&p1.Domain[0], &p ->Domain[1], 3*sizeof(cmsUInt32Number));
- p1.Table = ((cmsFloat32Number*) p -> Table) + p -> opta[3] * k0;
-
- TrilinearInterpFloat(ContextID, Input + 1, Output, &p1);
-
- if (i0 == 1.0)
- return;
-
- p1.Table = ((cmsFloat32Number*) p1.Table) + p->opta[3];
- TrilinearInterpFloat(ContextID, Input + 1, Tmp, &p1);
-
- n = p -> nOutputs;
- for (i=0; i < n; i++) {
- cmsFloat32Number y0 = Output[i];
- cmsFloat32Number y1 = Tmp[i];
-
- Output[i] = y0 + (y1 - y0) * rest;
- }
-}
-
-static CMS_NO_SANITIZE
-void QuadrilinearInterp16(cmsContext ContextID,
- register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const cmsInterpParams *p)
-
-{
-#define DENS(i,j,k,l) (LutTable[(i)+(j)+(k)+(l)+OutChan])
-#define LERP(a,l,h) (cmsUInt16Number) (l + ROUND_FIXED_TO_INT(((h-l)*a)))
-
- const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table;
- int OutChan, TotalOut;
- cmsS15Fixed16Number fx, fy, fz, fk;
- register int rx, ry, rz, rk;
- int x0, y0, z0, k0;
- register int X0, X1, Y0, Y1, Z0, Z1, K0, K1;
- int d0000, d0001, d0010, d0011,
- d0100, d0101, d0110, d0111,
- d1000, d1001, d1010, d1011,
- d1100, d1101, d1110, d1111,
- d000, d001, d010, d011,
- d100, d101, d110, d111,
- dx00, dx01, dx10, dx11,
- dxy0, dxy1, dxyz;
- cmsUNUSED_PARAMETER(ContextID);
-
- TotalOut = p -> nOutputs;
-
- fx = _cmsToFixedDomain((int) Input[0] * p -> Domain[0]);
- x0 = FIXED_TO_INT(fx);
- rx = FIXED_REST_TO_INT(fx); // Rest in 0..1.0 domain
-
-
- fy = _cmsToFixedDomain((int) Input[1] * p -> Domain[1]);
- y0 = FIXED_TO_INT(fy);
- ry = FIXED_REST_TO_INT(fy);
-
- fz = _cmsToFixedDomain((int) Input[2] * p -> Domain[2]);
- z0 = FIXED_TO_INT(fz);
- rz = FIXED_REST_TO_INT(fz);
-
- fk = _cmsToFixedDomain((int) Input[3] * p -> Domain[3]);
- k0 = FIXED_TO_INT(fk);
- rk = FIXED_REST_TO_INT(fk);
-
-
- X0 = p -> opta[3] * x0;
- X1 = X0 + (Input[0] == 0xFFFFU ? 0 : p->opta[3]);
-
- Y0 = p -> opta[2] * y0;
- Y1 = Y0 + (Input[1] == 0xFFFFU ? 0 : p->opta[2]);
-
- Z0 = p -> opta[1] * z0;
- Z1 = Z0 + (Input[2] == 0xFFFFU ? 0 : p->opta[1]);
-
- K0 = p -> opta[0] * k0;
- K1 = K0 + (Input[3] == 0xFFFFU ? 0 : p->opta[0]);
-
- for (OutChan = 0; OutChan < TotalOut; OutChan++) {
-
- d0000 = DENS(X0, Y0, Z0, K0);
- d0001 = DENS(X0, Y0, Z0, K1);
- d000 = LERP(rk, d0000, d0001);
- d0010 = DENS(X0, Y0, Z1, K0);
- d0011 = DENS(X0, Y0, Z1, K1);
- d001 = LERP(rk, d0010, d0011);
- d0100 = DENS(X0, Y1, Z0, K0);
- d0101 = DENS(X0, Y1, Z0, K1);
- d010 = LERP(rk, d0100, d0101);
- d0110 = DENS(X0, Y1, Z1, K0);
- d0111 = DENS(X0, Y1, Z1, K1);
- d011 = LERP(rk, d0110, d0111);
-
- d1000 = DENS(X1, Y0, Z0, K0);
- d1001 = DENS(X1, Y0, Z0, K1);
- d100 = LERP(rk, d1000, d1001);
- d1010 = DENS(X1, Y0, Z1, K0);
- d1011 = DENS(X1, Y0, Z1, K1);
- d101 = LERP(rk, d1010, d1011);
- d1100 = DENS(X1, Y1, Z0, K0);
- d1101 = DENS(X1, Y1, Z0, K1);
- d110 = LERP(rk, d1100, d1101);
- d1110 = DENS(X1, Y1, Z1, K0);
- d1111 = DENS(X1, Y1, Z1, K1);
- d111 = LERP(rk, d1110, d1111);
-
- dx00 = LERP(rx, d000, d100);
- dx01 = LERP(rx, d001, d101);
- dx10 = LERP(rx, d010, d110);
- dx11 = LERP(rx, d011, d111);
-
- dxy0 = LERP(ry, dx00, dx10);
- dxy1 = LERP(ry, dx01, dx11);
-
- dxyz = LERP(rz, dxy0, dxy1);
-
- Output[OutChan] = (cmsUInt16Number) dxyz;
- }
-
-
-# undef LERP
-# undef DENS
-}
-
// Tetrahedral interpolation, using Sakamoto algorithm.
#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan])
@@ -860,9 +717,10 @@ void TetrahedralInterpFloat(cmsContext ContextID, const cmsFloat32Number Input[]
static CMS_NO_SANITIZE
-void TetrahedralInterp16(cmsContext ContextID, register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const cmsInterpParams* p)
+void TetrahedralInterp16(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Input[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const cmsInterpParams* p)
{
const cmsUInt16Number* LutTable = (cmsUInt16Number*) p -> Table;
cmsS15Fixed16Number fx, fy, fz;
@@ -993,25 +851,28 @@ void TetrahedralInterp16(cmsContext ContextID, register const cmsUInt16Number In
}
-/* Pentachoronal Interpolation */
+#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan])
static CMS_NO_SANITIZE
-void Eval4Inputs(cmsContext ContextID, register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const cmsInterpParams* p16)
+void Eval4Inputs(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Input[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const cmsInterpParams* p16)
{
- const cmsUInt16Number *LutTable;
- cmsS15Fixed16Number fx, fy, fz, fk;
- cmsS15Fixed16Number rx, ry, rz, rk;
- cmsS15Fixed16Number m1, m2, m3, m4;
- int x0, y0, z0, k0;
- cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1, K0, K1;
- cmsS15Fixed16Number o1, o2, o3, o4;
- cmsS15Fixed16Number c0, c1, c2, c3, c4, Rest;
+ const cmsUInt16Number* LutTable;
+ cmsS15Fixed16Number fk;
+ cmsS15Fixed16Number k0, rk;
+ int K0, K1;
+ cmsS15Fixed16Number fx, fy, fz;
+ cmsS15Fixed16Number rx, ry, rz;
+ int x0, y0, z0;
+ cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1;
+ cmsUInt32Number i;
+ cmsS15Fixed16Number c0, c1, c2, c3, Rest;
cmsUInt32Number OutChan;
- cmsUInt16Number *Out = Output;
- int which;
+ cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
cmsUNUSED_PARAMETER(ContextID);
+
fk = _cmsToFixedDomain((int) Input[0] * p16 -> Domain[0]);
fx = _cmsToFixedDomain((int) Input[1] * p16 -> Domain[1]);
fy = _cmsToFixedDomain((int) Input[2] * p16 -> Domain[2]);
@@ -1028,326 +889,241 @@ void Eval4Inputs(cmsContext ContextID, register const cmsUInt16Number Input[],
rz = FIXED_REST_TO_INT(fz);
K0 = p16 -> opta[3] * k0;
- K1 = (Input[0] == 0xFFFFU ? 0 : p16->opta[3]);
+ K1 = K0 + (Input[0] == 0xFFFFU ? 0 : p16->opta[3]);
X0 = p16 -> opta[2] * x0;
- X1 = (Input[1] == 0xFFFFU ? 0 : p16->opta[2]);
+ X1 = X0 + (Input[1] == 0xFFFFU ? 0 : p16->opta[2]);
Y0 = p16 -> opta[1] * y0;
- Y1 = (Input[2] == 0xFFFFU ? 0 : p16->opta[1]);
+ Y1 = Y0 + (Input[2] == 0xFFFFU ? 0 : p16->opta[1]);
Z0 = p16 -> opta[0] * z0;
- Z1 = (Input[3] == 0xFFFFU ? 0 : p16->opta[0]);
+ Z1 = Z0 + (Input[3] == 0xFFFFU ? 0 : p16->opta[0]);
LutTable = (cmsUInt16Number*) p16 -> Table;
- LutTable += K0 + X0 + Y0 + Z0;
-
- /* We carefully choose the following tests, a) cos these
- * work nicely in SSE (see CAL), and b) because, as well
- * as the standard 24 pentachorons, we get some useful
- * special cases. */
- which = (rx > ry ? 1 : 0) +
- (ry > rz ? 2 : 0) +
- (rz > rk ? 4 : 0) +
- (rk > rx ? 8 : 0) +
- (rz > rx ? 16 : 0) +
- (rk > ry ? 32 : 0);
-
- o4 = X1+Y1+Z1+K1;
- switch(which)
- {
- default: /* Never happens, but stops the compiler complaining of uninitialised vars */
- case 0x00: /* x == y == z == k - special case */
- m1 = rx; goto one_lerp;
- case 0x01: /* x > k == z == y - special case */
- o1 = X1; m1 = rx; m2 = ry; goto two_lerps;
- case 0x18: /* y == z == k > x - special case */
- o1 = Y1+Z1+K1; m1 = ry; m2 = rx; goto two_lerps;
- case 0x04: /* z == y == x > k - special case */
- o1 = X1+Y1+Z1; m1 = ry; m2 = rk; goto two_lerps;
- case 0x28: /* k > z == y == x - special case */
- o1 = K1; m1 = rk; m2 = ry; goto two_lerps;
- case 0x02: /* y >= x >= k >= z */
- o1 = Y1; o2 = X1; o3 = K1; m1 = ry; m2 = rx; m3 = rk; m4 = rz; break;
- case 0x03: /* x > y >= k >= z */
- o1 = X1; o2 = Y1; o3 = K1; m1 = rx; m2 = ry; m3 = rk; m4 = rz; break;
- case 0x05: /* x >= z >= y >= k */
- o1 = X1; o2 = Z1; o3 = Y1; m1 = rx; m2 = rz; m3 = ry; m4 = rk; break;
- case 0x06: /* y >= x >= z > k */
- o1 = Y1; o2 = X1; o3 = Z1; m1 = ry; m2 = rx; m3 = rz; m4 = rk; break;
- case 0x07: /* x > y > z > k */
- o1 = X1; o2 = Y1; o3 = Z1; m1 = rx; m2 = ry; m3 = rz; m4 = rk; break;
- case 0x0a: /* y >= k > x >= z */
- o1 = Y1; o2 = K1; o3 = X1; m1 = ry; m2 = rk; m3 = rx; m4 = rz; break;
- case 0x14: /* z >= y >= x >= k */
- o1 = Z1; o2 = Y1; o3 = X1; m1 = rz; m2 = ry; m3 = rx; m4 = rk; break;
- case 0x15: /* z > x >= y >= k */
- o1 = Z1; o2 = X1; o3 = Y1; m1 = rz; m2 = rx; m3 = ry; m4 = rk; break;
- case 0x16: /* y >= z > x >= k */
- o1 = Y1; o2 = Z1; o3 = X1; m1 = ry; m2 = rz; m3 = rx; m4 = rk; break;
- case 0x1a: /* y >= k >= z > x */
- o1 = Y1; o2 = K1; o3 = Z1; m1 = ry; m2 = rk; m3 = rz; m4 = rx; break;
- case 0x1c: /* z >= y >= k > x */
- o1 = Z1; o2 = Y1; o3 = K1; m1 = rz; m2 = ry; m3 = rk; m4 = rx; break;
- case 0x1e: /* y > z > k > x */
- o1 = Y1; o2 = Z1; o3 = K1; m1 = ry; m2 = rz; m3 = rk; m4 = rx; break;
- case 0x21: /* x >= k >= z >= y */
- o1 = X1; o2 = K1; o3 = Z1; m1 = rx; m2 = rk; m3 = rz; m4 = ry; break;
- case 0x23: /* x >= k > y > z */
- o1 = X1; o2 = K1; o3 = Y1; m1 = rx; m2 = rk; m3 = ry; m4 = rz; break;
- case 0x25: /* x >= z > k > y */
- o1 = X1; o2 = Z1; o3 = K1; m1 = rx; m2 = rz; m3 = rk; m4 = ry; break;
- case 0x29: /* k > x >= z >= y */
- o1 = K1; o2 = X1; o3 = Z1; m1 = rk; m2 = rx; m3 = rz; m4 = ry; break;
- case 0x2a: /* k > y >= x >= z */
- o1 = K1; o2 = Y1; o3 = X1; m1 = rk; m2 = ry; m3 = rx; m4 = rz; break;
- case 0x2b: /* k > x > y > z */
- o1 = K1; o2 = X1; o3 = Y1; m1 = rk; m2 = rx; m3 = ry; m4 = rz; break;
- case 0x35: /* z > x >= k > y */
- o1 = Z1; o2 = X1; o3 = K1; m1 = rz; m2 = rx; m3 = rk; m4 = ry; break;
- case 0x38: /* k >= z >= y >= x */
- o1 = K1; o2 = Z1; o3 = Y1; m1 = rk; m2 = rz; m3 = ry; m4 = rx; break;
- case 0x39: /* k >= z > x > y */
- o1 = K1; o2 = Z1; o3 = X1; m1 = rk; m2 = rz; m3 = rx; m4 = ry; break;
- case 0x3a: /* k > y > z > x */
- o1 = K1; o2 = Y1; o3 = Z1; m1 = rk; m2 = ry; m3 = rz; m4 = rx; break;
- case 0x3c: /* z > k > y >= x */
- o1 = Z1; o2 = K1; o3 = Y1; m1 = rz; m2 = rk; m3 = ry; m4 = rx; break;
- case 0x3d: /* z > k > x > y */
- o1 = Z1; o2 = K1; o3 = X1; m1 = rz; m2 = rk; m3 = rx; m4 = ry; break;
- }
- assert(m1 >= m2 && m2 >= m3 && m3 >= m4);
- o2 += o1;
- o3 += o2;
- for (OutChan=p16 -> nOutputs; OutChan != 0; OutChan--) {
- c1 = LutTable[o1];
- c2 = LutTable[o2];
- c3 = LutTable[o3];
- c4 = LutTable[o4] - c3;
- c0 = *LutTable++;
- c3 -= c2;
- c2 -= c1;
- c1 -= c0;
-
- Rest = c1 * m1 + c2 * m2 + c3 * m3 + c4 * m4;
-
- *Out++ = (cmsUInt16Number)(c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
+ LutTable += K0;
+
+ for (OutChan=0; OutChan < p16 -> nOutputs; OutChan++) {
+
+ c0 = DENS(X0, Y0, Z0);
+
+ if (rx >= ry && ry >= rz) {
+
+ c1 = DENS(X1, Y0, Z0) - c0;
+ c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0);
+ c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
+
+ }
+ else
+ if (rx >= rz && rz >= ry) {
+
+ c1 = DENS(X1, Y0, Z0) - c0;
+ c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
+ c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0);
+
+ }
+ else
+ if (rz >= rx && rx >= ry) {
+
+ c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1);
+ c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
+ c3 = DENS(X0, Y0, Z1) - c0;
+
+ }
+ else
+ if (ry >= rx && rx >= rz) {
+
+ c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0);
+ c2 = DENS(X0, Y1, Z0) - c0;
+ c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
+
+ }
+ else
+ if (ry >= rz && rz >= rx) {
+
+ c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
+ c2 = DENS(X0, Y1, Z0) - c0;
+ c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0);
+
+ }
+ else
+ if (rz >= ry && ry >= rx) {
+
+ c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
+ c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1);
+ c3 = DENS(X0, Y0, Z1) - c0;
+
+ }
+ else {
+ c1 = c2 = c3 = 0;
+ }
+
+ Rest = c1 * rx + c2 * ry + c3 * rz;
+
+ Tmp1[OutChan] = (cmsUInt16Number)(c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
}
- return;
-two_lerps:
- assert(m1 >= m2);
- for (OutChan=p16 -> nOutputs; OutChan != 0; OutChan--) {
- c1 = LutTable[o1];
- c2 = LutTable[o4] - c1;
- c0 = *LutTable++;
- c1 -= c0;
- Rest = c1 * m1 + c2 * m2;
+ LutTable = (cmsUInt16Number*) p16 -> Table;
+ LutTable += K1;
+
+ for (OutChan=0; OutChan < p16 -> nOutputs; OutChan++) {
+
+ c0 = DENS(X0, Y0, Z0);
- *Out++ = (cmsUInt16Number)(c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
+ if (rx >= ry && ry >= rz) {
+
+ c1 = DENS(X1, Y0, Z0) - c0;
+ c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0);
+ c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
+
+ }
+ else
+ if (rx >= rz && rz >= ry) {
+
+ c1 = DENS(X1, Y0, Z0) - c0;
+ c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
+ c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0);
+
+ }
+ else
+ if (rz >= rx && rx >= ry) {
+
+ c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1);
+ c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
+ c3 = DENS(X0, Y0, Z1) - c0;
+
+ }
+ else
+ if (ry >= rx && rx >= rz) {
+
+ c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0);
+ c2 = DENS(X0, Y1, Z0) - c0;
+ c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
+
+ }
+ else
+ if (ry >= rz && rz >= rx) {
+
+ c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
+ c2 = DENS(X0, Y1, Z0) - c0;
+ c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0);
+
+ }
+ else
+ if (rz >= ry && ry >= rx) {
+
+ c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
+ c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1);
+ c3 = DENS(X0, Y0, Z1) - c0;
+
+ }
+ else {
+ c1 = c2 = c3 = 0;
+ }
+
+ Rest = c1 * rx + c2 * ry + c3 * rz;
+
+ Tmp2[OutChan] = (cmsUInt16Number) (c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
}
- return;
-one_lerp:
- for (OutChan=p16 -> nOutputs; OutChan != 0; OutChan--) {
- c1 = LutTable[o4];
- c0 = *LutTable++;
- c1 -= c0;
- Rest = c1 * m1;
- *Out++ = (cmsUInt16Number)(c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
+ for (i=0; i < p16 -> nOutputs; i++) {
+ Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]);
}
- return;
}
+#undef DENS
+
+
+// For more that 3 inputs (i.e., CMYK)
+// evaluate two 3-dimensional interpolations and then linearly interpolate between them.
+
static
void Eval4InputsFloat(cmsContext ContextID, const cmsFloat32Number Input[],
cmsFloat32Number Output[],
const cmsInterpParams* p)
{
- const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table;
- cmsFloat32Number px, py, pz, pk;
- int x0, y0, z0, k0;
- int X0, Y0, Z0, K0, X1, Y1, Z1, K1;
- cmsFloat32Number rx, ry, rz, rk;
- cmsFloat32Number m1, m2, m3, m4;
- cmsFloat32Number c0, c1, c2, c3, c4;
- int o1, o2, o3, o4;
- int OutChan, TotalOut;
- cmsFloat32Number *Out = Output;
- int which;
- cmsUNUSED_PARAMETER(ContextID);
+ const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table;
+ cmsFloat32Number rest;
+ cmsFloat32Number pk;
+ int k0, K0, K1;
+ const cmsFloat32Number* T;
+ cmsUInt32Number i;
+ cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1;
- TotalOut = p -> nOutputs;
+ pk = fclamp(Input[0]) * p->Domain[0];
+ k0 = _cmsQuickFloor(pk);
+ rest = pk - (cmsFloat32Number) k0;
- // We need some clipping here
- pk = fclamp(Input[0]) * p->Domain[0];
- px = fclamp(Input[1]) * p->Domain[1];
- py = fclamp(Input[2]) * p->Domain[2];
- pz = fclamp(Input[3]) * p->Domain[3];
+ K0 = p -> opta[3] * k0;
+ K1 = K0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[3]);
- k0 = (int) floor(pk); rk = (pk - (cmsFloat32Number) k0);
- x0 = (int) floor(px); rx = (px - (cmsFloat32Number) x0); // We need full floor functionality here
- y0 = (int) floor(py); ry = (py - (cmsFloat32Number) y0);
- z0 = (int) floor(pz); rz = (pz - (cmsFloat32Number) z0);
+ p1 = *p;
+ memmove(&p1.Domain[0], &p ->Domain[1], 3*sizeof(cmsUInt32Number));
- K0 = p -> opta[3] * k0;
- K1 = (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[3]);
+ T = LutTable + K0;
+ p1.Table = T;
- X0 = p -> opta[2] * x0;
- X1 = (fclamp(Input[1]) >= 1.0 ? 0 : p->opta[2]);
+ TetrahedralInterpFloat(ContextID, Input + 1, Tmp1, &p1);
- Y0 = p -> opta[1] * y0;
- Y1 = (fclamp(Input[2]) >= 1.0 ? 0 : p->opta[1]);
+ T = LutTable + K1;
+ p1.Table = T;
+ TetrahedralInterpFloat(ContextID, Input + 1, Tmp2, &p1);
- Z0 = p -> opta[0] * z0;
- Z1 = (fclamp(Input[3]) >= 1.0 ? 0 : p->opta[0]);
-
- LutTable = (cmsFloat32Number*) p -> Table;
- LutTable += K0 + X0 + Y0 + Z0;
-
- /* We carefully choose the following tests, a) cos these
- * work nicely in SSE (see CAL), and b) because, as well
- * as the standard 24 pentachorons, we get some useful
- * special cases. */
- which = (rx > ry ? 1 : 0) +
- (ry > rz ? 2 : 0) +
- (rz > rk ? 4 : 0) +
- (rk > rx ? 8 : 0) +
- (rz > rx ? 16 : 0) +
- (rk > ry ? 32 : 0);
-
- o4 = X1+Y1+Z1+K1;
- switch(which)
- {
- default: /* Never happens, but stops the compiler complaining of uninitialised vars */
- case 0x00: /* x == y == z == k - special case */
- m1 = rx; goto one_lerp;
- case 0x01: /* x > k == z == y - special case */
- o1 = X1; m1 = rx; m2 = ry; goto two_lerps;
- case 0x18: /* y == z == k > x - special case */
- o1 = Y1+Z1+K1; m1 = ry; m2 = rx; goto two_lerps;
- case 0x04: /* z == y == x > k - special case */
- o1 = X1+Y1+Z1; m1 = ry; m2 = rk; goto two_lerps;
- case 0x28: /* k > z == y == x - special case */
- o1 = K1; m1 = rk; m2 = ry; goto two_lerps;
- case 0x02: /* y >= x >= k >= z */
- o1 = Y1; o2 = X1; o3 = K1; m1 = ry; m2 = rx; m3 = rk; m4 = rz; break;
- case 0x03: /* x > y >= k >= z */
- o1 = X1; o2 = Y1; o3 = K1; m1 = rx; m2 = ry; m3 = rk; m4 = rz; break;
- case 0x05: /* x >= z >= y >= k */
- o1 = X1; o2 = Z1; o3 = Y1; m1 = rx; m2 = rz; m3 = ry; m4 = rk; break;
- case 0x06: /* y >= x >= z > k */
- o1 = Y1; o2 = X1; o3 = Z1; m1 = ry; m2 = rx; m3 = rz; m4 = rk; break;
- case 0x07: /* x > y > z > k */
- o1 = X1; o2 = Y1; o3 = Z1; m1 = rx; m2 = ry; m3 = rz; m4 = rk; break;
- case 0x0a: /* y >= k > x >= z */
- o1 = Y1; o2 = K1; o3 = X1; m1 = ry; m2 = rk; m3 = rx; m4 = rz; break;
- case 0x14: /* z >= y >= x >= k */
- o1 = Z1; o2 = Y1; o3 = X1; m1 = rz; m2 = ry; m3 = rx; m4 = rk; break;
- case 0x15: /* z > x >= y >= k */
- o1 = Z1; o2 = X1; o3 = Y1; m1 = rz; m2 = rx; m3 = ry; m4 = rk; break;
- case 0x16: /* y >= z > x >= k */
- o1 = Y1; o2 = Z1; o3 = X1; m1 = ry; m2 = rz; m3 = rx; m4 = rk; break;
- case 0x1a: /* y >= k >= z > x */
- o1 = Y1; o2 = K1; o3 = Z1; m1 = ry; m2 = rk; m3 = rz; m4 = rx; break;
- case 0x1c: /* z >= y >= k > x */
- o1 = Z1; o2 = Y1; o3 = K1; m1 = rz; m2 = ry; m3 = rk; m4 = rx; break;
- case 0x1e: /* y > z > k > x */
- o1 = Y1; o2 = Z1; o3 = K1; m1 = ry; m2 = rz; m3 = rk; m4 = rx; break;
- case 0x21: /* x >= k >= z >= y */
- o1 = X1; o2 = K1; o3 = Z1; m1 = rx; m2 = rk; m3 = rz; m4 = ry; break;
- case 0x23: /* x >= k > y > z */
- o1 = X1; o2 = K1; o3 = Y1; m1 = rx; m2 = rk; m3 = ry; m4 = rz; break;
- case 0x25: /* x >= z > k > y */
- o1 = X1; o2 = Z1; o3 = K1; m1 = rx; m2 = rz; m3 = rk; m4 = ry; break;
- case 0x29: /* k > x >= z >= y */
- o1 = K1; o2 = X1; o3 = Z1; m1 = rk; m2 = rx; m3 = rz; m4 = ry; break;
- case 0x2a: /* k > y >= x >= z */
- o1 = K1; o2 = Y1; o3 = X1; m1 = rk; m2 = ry; m3 = rx; m4 = rz; break;
- case 0x2b: /* k > x > y > z */
- o1 = K1; o2 = X1; o3 = Y1; m1 = rk; m2 = rx; m3 = ry; m4 = rz; break;
- case 0x35: /* z > x >= k > y */
- o1 = Z1; o2 = X1; o3 = K1; m1 = rz; m2 = rx; m3 = rk; m4 = ry; break;
- case 0x38: /* k >= z >= y >= x */
- o1 = K1; o2 = Z1; o3 = Y1; m1 = rk; m2 = rz; m3 = ry; m4 = rx; break;
- case 0x39: /* k >= z > x > y */
- o1 = K1; o2 = Z1; o3 = X1; m1 = rk; m2 = rz; m3 = rx; m4 = ry; break;
- case 0x3a: /* k > y > z > x */
- o1 = K1; o2 = Y1; o3 = Z1; m1 = rk; m2 = ry; m3 = rz; m4 = rx; break;
- case 0x3c: /* z > k > y >= x */
- o1 = Z1; o2 = K1; o3 = Y1; m1 = rz; m2 = rk; m3 = ry; m4 = rx; break;
- case 0x3d: /* z > k > x > y */
- o1 = Z1; o2 = K1; o3 = X1; m1 = rz; m2 = rk; m3 = rx; m4 = ry; break;
- }
- assert(m1 >= m2 && m2 >= m3 && m3 >= m4);
- o2 += o1;
- o3 += o2;
- for (OutChan=TotalOut; OutChan != 0; OutChan--) {
- c1 = LutTable[o1];
- c2 = LutTable[o2];
- c3 = LutTable[o3];
- c4 = LutTable[o4] - c3;
- c0 = *LutTable++;
- c3 -= c2;
- c2 -= c1;
- c1 -= c0;
-
- *Out++ = c0 + c1 * m1 + c2 * m2 + c3 * m3 + c4 * m4;
- }
- return;
-
-two_lerps:
- assert(m1 >= m2);
- for (OutChan=TotalOut; OutChan != 0; OutChan--) {
- c1 = LutTable[o1];
- c2 = LutTable[o4] - c1;
- c0 = *LutTable++;
- c1 -= c0;
-
- *Out++ = c0 + c1 * m1 + c2 * m2;
- }
- return;
-
-one_lerp:
- for (OutChan=TotalOut; OutChan != 0; OutChan--) {
- c1 = LutTable[o4];
- c0 = *LutTable++;
- c1 -= c0;
+ for (i=0; i < p -> nOutputs; i++)
+ {
+ cmsFloat32Number y0 = Tmp1[i];
+ cmsFloat32Number y1 = Tmp2[i];
- *Out++ = c0 + c1 * m1;
- }
- return;
+ Output[i] = y0 + (y1 - y0) * rest;
+ }
}
+
static CMS_NO_SANITIZE
-void Eval5Inputs(cmsContext ContextID, register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const cmsInterpParams* p16)
+void Eval5Inputs(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Input[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const cmsInterpParams* p16)
{
- cmsS15Fixed16Number fk;
- cmsUInt32Number i, n;
- cmsUInt16Number Tmp[MAX_STAGE_CHANNELS];
- cmsInterpParams p1 = *p16;
+ const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table;
+ cmsS15Fixed16Number fk;
+ cmsS15Fixed16Number k0, rk;
+ int K0, K1;
+ const cmsUInt16Number* T;
+ cmsUInt32Number i;
+ cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1;
+
+
+ fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
+ k0 = FIXED_TO_INT(fk);
+ rk = FIXED_REST_TO_INT(fk);
+
+ K0 = p16 -> opta[4] * k0;
+ K1 = p16 -> opta[4] * (k0 + (Input[0] != 0xFFFFU ? 1 : 0));
- memmove(&p1.Domain[0], &p16 ->Domain[1], 4*sizeof(cmsUInt32Number));
- fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
- p1.Table = ((cmsUInt16Number*)p16 -> Table) + p16 -> opta[4] * FIXED_TO_INT(fk);
+ p1 = *p16;
+ memmove(&p1.Domain[0], &p16 ->Domain[1], 4*sizeof(cmsUInt32Number));
- Eval4Inputs(ContextID, Input + 1, Output, &p1);
+ T = LutTable + K0;
+ p1.Table = T;
- if (Input[0] == 0xFFFFU)
- return;
+ Eval4Inputs(ContextID, Input + 1, Tmp1, &p1);
- p1.Table = ((cmsUInt16Number*)p1.Table) + p16 -> opta[4];
- Eval4Inputs(ContextID, Input + 1, Tmp, &p1);
+ T = LutTable + K1;
+ p1.Table = T;
+
+ Eval4Inputs(ContextID, Input + 1, Tmp2, &p1);
+
+ for (i=0; i < p16 -> nOutputs; i++) {
+
+ Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]);
+ }
- fk = FIXED_REST_TO_INT(fk);
- n = p16 -> nOutputs;
- for (i=0; i < n; i++)
- Output[i] = LinearInterp(fk, Output[i], Tmp[i]);
}
@@ -1356,66 +1132,86 @@ void Eval5InputsFloat(cmsContext ContextID, const cmsFloat32Number Input[],
cmsFloat32Number Output[],
const cmsInterpParams* p)
{
- cmsFloat32Number rest;
- cmsFloat32Number pk;
- int k0;
- cmsUInt32Number i, n;
- cmsFloat32Number Tmp[MAX_STAGE_CHANNELS];
- cmsInterpParams p1 = *p;
- cmsFloat32Number i0 = fclamp(Input[0]);
+ const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table;
+ cmsFloat32Number rest;
+ cmsFloat32Number pk;
+ int k0, K0, K1;
+ const cmsFloat32Number* T;
+ cmsUInt32Number i;
+ cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1;
- pk = i0 * p->Domain[0];
- k0 = _cmsQuickFloor(pk);
- rest = pk - (cmsFloat32Number) k0;
+ pk = fclamp(Input[0]) * p->Domain[0];
+ k0 = _cmsQuickFloor(pk);
+ rest = pk - (cmsFloat32Number) k0;
- memmove(&p1.Domain[0], &p ->Domain[1], 4*sizeof(cmsUInt32Number));
- p1.Table = ((cmsFloat32Number*) p -> Table) + p -> opta[4] * k0;
+ K0 = p -> opta[4] * k0;
+ K1 = K0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[4]);
- Eval4InputsFloat(ContextID, Input + 1, Output, &p1);
+ p1 = *p;
+ memmove(&p1.Domain[0], &p ->Domain[1], 4*sizeof(cmsUInt32Number));
- if (i0 == 1.0)
- return;
+ T = LutTable + K0;
+ p1.Table = T;
- p1.Table = ((cmsFloat32Number*) p1.Table) + p->opta[4];
- Eval4InputsFloat(ContextID, Input + 1, Tmp, &p1);
+ Eval4InputsFloat(ContextID, Input + 1, Tmp1, &p1);
- n = p -> nOutputs;
- for (i=0; i < n; i++) {
- cmsFloat32Number y0 = Output[i];
- cmsFloat32Number y1 = Tmp[i];
+ T = LutTable + K1;
+ p1.Table = T;
- Output[i] = y0 + (y1 - y0) * rest;
- }
+ Eval4InputsFloat(ContextID, Input + 1, Tmp2, &p1);
+
+ for (i=0; i < p -> nOutputs; i++) {
+
+ cmsFloat32Number y0 = Tmp1[i];
+ cmsFloat32Number y1 = Tmp2[i];
+
+ Output[i] = y0 + (y1 - y0) * rest;
+ }
}
static CMS_NO_SANITIZE
-void Eval6Inputs(cmsContext ContextID, register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const cmsInterpParams* p16)
+void Eval6Inputs(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Input[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const cmsInterpParams* p16)
{
- cmsS15Fixed16Number fk;
- cmsUInt32Number i, n;
- cmsUInt16Number Tmp[MAX_STAGE_CHANNELS];
- cmsInterpParams p1 = *p16;
+ const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table;
+ cmsS15Fixed16Number fk;
+ cmsS15Fixed16Number k0, rk;
+ int K0, K1;
+ const cmsUInt16Number* T;
+ cmsUInt32Number i;
+ cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1;
+
+ fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
+ k0 = FIXED_TO_INT(fk);
+ rk = FIXED_REST_TO_INT(fk);
- memmove(&p1.Domain[0], &p16 ->Domain[1], 5*sizeof(cmsUInt32Number));
- fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
- p1.Table = ((cmsUInt16Number*)p16 -> Table) + p16 -> opta[5] * FIXED_TO_INT(fk);
+ K0 = p16 -> opta[5] * k0;
+ K1 = p16 -> opta[5] * (k0 + (Input[0] != 0xFFFFU ? 1 : 0));
- Eval5Inputs(ContextID, Input + 1, Output, &p1);
+ p1 = *p16;
+ memmove(&p1.Domain[0], &p16 ->Domain[1], 5*sizeof(cmsUInt32Number));
- if (Input[0] == 0xFFFFU)
- return;
+ T = LutTable + K0;
+ p1.Table = T;
- p1.Table = ((cmsUInt16Number*)p1.Table) + p16 -> opta[5];
- Eval5Inputs(ContextID, Input + 1, Tmp, &p1);
+ Eval5Inputs(ContextID, Input + 1, Tmp1, &p1);
+
+ T = LutTable + K1;
+ p1.Table = T;
+
+ Eval5Inputs(ContextID, Input + 1, Tmp2, &p1);
+
+ for (i=0; i < p16 -> nOutputs; i++) {
+
+ Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]);
+ }
- fk = FIXED_REST_TO_INT(fk);
- n = p16 -> nOutputs;
- for (i=0; i < n; i++)
- Output[i] = LinearInterp(fk, Output[i], Tmp[i]);
}
@@ -1424,65 +1220,84 @@ void Eval6InputsFloat(cmsContext ContextID, const cmsFloat32Number Input[],
cmsFloat32Number Output[],
const cmsInterpParams* p)
{
- cmsFloat32Number rest;
- cmsFloat32Number pk;
- int k0;
- cmsUInt32Number i, n;
- cmsFloat32Number Tmp[MAX_STAGE_CHANNELS];
- cmsInterpParams p1 = *p;
- cmsFloat32Number i0 = fclamp(Input[0]);
+ const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table;
+ cmsFloat32Number rest;
+ cmsFloat32Number pk;
+ int k0, K0, K1;
+ const cmsFloat32Number* T;
+ cmsUInt32Number i;
+ cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1;
- pk = i0 * p->Domain[0];
- k0 = _cmsQuickFloor(pk);
- rest = pk - (cmsFloat32Number) k0;
+ pk = fclamp(Input[0]) * p->Domain[0];
+ k0 = _cmsQuickFloor(pk);
+ rest = pk - (cmsFloat32Number) k0;
- memmove(&p1.Domain[0], &p ->Domain[1], 5*sizeof(cmsUInt32Number));
- p1.Table = ((cmsFloat32Number*) p -> Table) + p -> opta[5] * k0;
+ K0 = p -> opta[5] * k0;
+ K1 = K0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[5]);
- Eval5InputsFloat(ContextID, Input + 1, Output, &p1);
+ p1 = *p;
+ memmove(&p1.Domain[0], &p ->Domain[1], 5*sizeof(cmsUInt32Number));
- if (i0 == 1.0)
- return;
+ T = LutTable + K0;
+ p1.Table = T;
- p1.Table = ((cmsFloat32Number*) p1.Table) + p->opta[5];
- Eval5InputsFloat(ContextID, Input + 1, Tmp, &p1);
+ Eval5InputsFloat(ContextID, Input + 1, Tmp1, &p1);
- n = p -> nOutputs;
- for (i=0; i < n; i++) {
- cmsFloat32Number y0 = Output[i];
- cmsFloat32Number y1 = Tmp[i];
+ T = LutTable + K1;
+ p1.Table = T;
- Output[i] = y0 + (y1 - y0) * rest;
- }
+ Eval5InputsFloat(ContextID, Input + 1, Tmp2, &p1);
+
+ for (i=0; i < p -> nOutputs; i++) {
+
+ cmsFloat32Number y0 = Tmp1[i];
+ cmsFloat32Number y1 = Tmp2[i];
+
+ Output[i] = y0 + (y1 - y0) * rest;
+ }
}
static CMS_NO_SANITIZE
-void Eval7Inputs(cmsContext ContextID, register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const cmsInterpParams* p16)
+void Eval7Inputs(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Input[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const cmsInterpParams* p16)
{
- cmsS15Fixed16Number fk;
- cmsUInt32Number i, n;
- cmsUInt16Number Tmp[MAX_STAGE_CHANNELS];
- cmsInterpParams p1 = *p16;
+ const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table;
+ cmsS15Fixed16Number fk;
+ cmsS15Fixed16Number k0, rk;
+ int K0, K1;
+ const cmsUInt16Number* T;
+ cmsUInt32Number i;
+ cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1;
+
+
+ fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
+ k0 = FIXED_TO_INT(fk);
+ rk = FIXED_REST_TO_INT(fk);
+
+ K0 = p16 -> opta[6] * k0;
+ K1 = p16 -> opta[6] * (k0 + (Input[0] != 0xFFFFU ? 1 : 0));
- memmove(&p1.Domain[0], &p16 ->Domain[1], 6*sizeof(cmsUInt32Number));
- fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
- p1.Table = ((cmsUInt16Number*)p16 -> Table) + p16 -> opta[6] * FIXED_TO_INT(fk);
+ p1 = *p16;
+ memmove(&p1.Domain[0], &p16 ->Domain[1], 6*sizeof(cmsUInt32Number));
- Eval6Inputs(ContextID, Input + 1, Output, &p1);
+ T = LutTable + K0;
+ p1.Table = T;
- if (Input[0] == 0xFFFFU)
- return;
+ Eval6Inputs(ContextID, Input + 1, Tmp1, &p1);
- p1.Table = ((cmsUInt16Number*)p1.Table) + p16 -> opta[6];
- Eval6Inputs(ContextID, Input + 1, Tmp, &p1);
+ T = LutTable + K1;
+ p1.Table = T;
- fk = FIXED_REST_TO_INT(fk);
- n = p16 -> nOutputs;
- for (i=0; i < n; i++)
- Output[i] = LinearInterp(fk, Output[i], Tmp[i]);
+ Eval6Inputs(ContextID, Input + 1, Tmp2, &p1);
+
+ for (i=0; i < p16 -> nOutputs; i++) {
+ Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]);
+ }
}
@@ -1491,64 +1306,83 @@ void Eval7InputsFloat(cmsContext ContextID, const cmsFloat32Number Input[],
cmsFloat32Number Output[],
const cmsInterpParams* p)
{
- cmsFloat32Number rest;
- cmsFloat32Number pk;
- int k0;
- cmsUInt32Number i, n;
- cmsFloat32Number Tmp[MAX_STAGE_CHANNELS];
- cmsInterpParams p1 = *p;
- cmsFloat32Number i0 = fclamp(Input[0]);
+ const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table;
+ cmsFloat32Number rest;
+ cmsFloat32Number pk;
+ int k0, K0, K1;
+ const cmsFloat32Number* T;
+ cmsUInt32Number i;
+ cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1;
- pk = i0 * p->Domain[0];
- k0 = _cmsQuickFloor(pk);
- rest = pk - (cmsFloat32Number) k0;
+ pk = fclamp(Input[0]) * p->Domain[0];
+ k0 = _cmsQuickFloor(pk);
+ rest = pk - (cmsFloat32Number) k0;
- memmove(&p1.Domain[0], &p ->Domain[1], 6*sizeof(cmsUInt32Number));
- p1.Table = ((cmsFloat32Number*) p -> Table) + p -> opta[6] * k0;
+ K0 = p -> opta[6] * k0;
+ K1 = K0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[6]);
- Eval6InputsFloat(ContextID, Input + 1, Output, &p1);
+ p1 = *p;
+ memmove(&p1.Domain[0], &p ->Domain[1], 6*sizeof(cmsUInt32Number));
- if (i0 == 1.0)
- return;
+ T = LutTable + K0;
+ p1.Table = T;
- p1.Table = ((cmsFloat32Number*) p1.Table) + p->opta[6];
- Eval6InputsFloat(ContextID, Input + 1, Tmp, &p1);
+ Eval6InputsFloat(ContextID, Input + 1, Tmp1, &p1);
- n = p -> nOutputs;
- for (i=0; i < n; i++) {
- cmsFloat32Number y0 = Output[i];
- cmsFloat32Number y1 = Tmp[i];
+ T = LutTable + K1;
+ p1.Table = T;
- Output[i] = y0 + (y1 - y0) * rest;
- }
+ Eval6InputsFloat(ContextID, Input + 1, Tmp2, &p1);
+
+
+ for (i=0; i < p -> nOutputs; i++) {
+
+ cmsFloat32Number y0 = Tmp1[i];
+ cmsFloat32Number y1 = Tmp2[i];
+
+ Output[i] = y0 + (y1 - y0) * rest;
+
+ }
}
static CMS_NO_SANITIZE
-void Eval8Inputs(cmsContext ContextID, register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const cmsInterpParams* p16)
+void Eval8Inputs(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Input[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const cmsInterpParams* p16)
{
- cmsS15Fixed16Number fk;
- cmsUInt32Number i, n;
- cmsUInt16Number Tmp[MAX_STAGE_CHANNELS];
- cmsInterpParams p1 = *p16;
+ const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table;
+ cmsS15Fixed16Number fk;
+ cmsS15Fixed16Number k0, rk;
+ int K0, K1;
+ const cmsUInt16Number* T;
+ cmsUInt32Number i;
+ cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1;
+
+ fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
+ k0 = FIXED_TO_INT(fk);
+ rk = FIXED_REST_TO_INT(fk);
+
+ K0 = p16 -> opta[7] * k0;
+ K1 = p16 -> opta[7] * (k0 + (Input[0] != 0xFFFFU ? 1 : 0));
- memmove(&p1.Domain[0], &p16 ->Domain[1], 7*sizeof(cmsUInt32Number));
- fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
- p1.Table = ((cmsUInt16Number*)p16 -> Table) + p16 -> opta[7] * FIXED_TO_INT(fk);
+ p1 = *p16;
+ memmove(&p1.Domain[0], &p16 ->Domain[1], 7*sizeof(cmsUInt32Number));
- Eval7Inputs(ContextID, Input + 1, Output, &p1);
+ T = LutTable + K0;
+ p1.Table = T;
- if (Input[0] == 0xFFFFU)
- return;
+ Eval7Inputs(ContextID, Input + 1, Tmp1, &p1);
- p1.Table = ((cmsUInt16Number*)p1.Table) + p16 -> opta[7];
- Eval7Inputs(ContextID, Input + 1, Tmp, &p1);
+ T = LutTable + K1;
+ p1.Table = T;
+ Eval7Inputs(ContextID, Input + 1, Tmp2, &p1);
- fk = FIXED_REST_TO_INT(fk);
- n = p16 -> nOutputs;
- for (i=0; i < n; i++)
- Output[i] = LinearInterp(fk, Output[i], Tmp[i]);
+ for (i=0; i < p16 -> nOutputs; i++) {
+ Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]);
+ }
}
@@ -1558,36 +1392,43 @@ void Eval8InputsFloat(cmsContext ContextID, const cmsFloat32Number Input[],
cmsFloat32Number Output[],
const cmsInterpParams* p)
{
- cmsFloat32Number rest;
- cmsFloat32Number pk;
- int k0;
- cmsUInt32Number i, n;
- cmsFloat32Number Tmp[MAX_STAGE_CHANNELS];
- cmsInterpParams p1 = *p;
- cmsFloat32Number i0 = fclamp(Input[0]);
+ const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table;
+ cmsFloat32Number rest;
+ cmsFloat32Number pk;
+ int k0, K0, K1;
+ const cmsFloat32Number* T;
+ cmsUInt32Number i;
+ cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1;
- pk = i0 * p->Domain[0];
- k0 = _cmsQuickFloor(pk);
- rest = pk - (cmsFloat32Number) k0;
+ pk = fclamp(Input[0]) * p->Domain[0];
+ k0 = _cmsQuickFloor(pk);
+ rest = pk - (cmsFloat32Number) k0;
- memmove(&p1.Domain[0], &p ->Domain[1], 7*sizeof(cmsUInt32Number));
- p1.Table = ((cmsFloat32Number*) p -> Table) + p -> opta[7] * k0;
+ K0 = p -> opta[7] * k0;
+ K1 = K0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[7]);
- Eval7InputsFloat(ContextID, Input + 1, Output, &p1);
+ p1 = *p;
+ memmove(&p1.Domain[0], &p ->Domain[1], 7*sizeof(cmsUInt32Number));
- if (i0 == 1.0)
- return;
+ T = LutTable + K0;
+ p1.Table = T;
- p1.Table = ((cmsFloat32Number*) p1.Table) + p->opta[7];
- Eval7InputsFloat(ContextID, Input + 1, Tmp, &p1);
+ Eval7InputsFloat(ContextID, Input + 1, Tmp1, &p1);
- n = p -> nOutputs;
- for (i=0; i < n; i++) {
- cmsFloat32Number y0 = Output[i];
- cmsFloat32Number y1 = Tmp[i];
+ T = LutTable + K1;
+ p1.Table = T;
- Output[i] = y0 + (y1 - y0) * rest;
- }
+ Eval7InputsFloat(ContextID, Input + 1, Tmp2, &p1);
+
+
+ for (i=0; i < p -> nOutputs; i++) {
+
+ cmsFloat32Number y0 = Tmp1[i];
+ cmsFloat32Number y1 = Tmp2[i];
+
+ Output[i] = y0 + (y1 - y0) * rest;
+ }
}
// The default factory
@@ -1655,17 +1496,10 @@ cmsInterpFunction DefaultInterpolatorsFactory(cmsUInt32Number nInputChannels, cm
case 4: // CMYK lut
- if (IsTrilinear) {
- if (IsFloat)
- Interpolation.LerpFloat = QuadrilinearInterpFloat;
- else
- Interpolation.Lerp16 = QuadrilinearInterp16;
- } else {
- if (IsFloat)
- Interpolation.LerpFloat = Eval4InputsFloat;
- else
- Interpolation.Lerp16 = Eval4Inputs;
- }
+ if (IsFloat)
+ Interpolation.LerpFloat = Eval4InputsFloat;
+ else
+ Interpolation.Lerp16 = Eval4Inputs;
break;
case 5: // 5 Inks
diff --git a/lcms2mt/src/cmsio0.c b/lcms2mt/src/cmsio0.c
index 03b35e49..0dd6ca12 100644
--- a/lcms2mt/src/cmsio0.c
+++ b/lcms2mt/src/cmsio0.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lcms2mt/src/cmsio1.c b/lcms2mt/src/cmsio1.c
index 627f8598..5c3d3fa2 100644
--- a/lcms2mt/src/cmsio1.c
+++ b/lcms2mt/src/cmsio1.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -308,7 +308,6 @@ cmsPipeline* CMSEXPORT _cmsReadInputLUT(cmsContext ContextID, cmsHPROFILE hProfi
cmsTagTypeSignature OriginalType;
cmsTagSignature tag16;
cmsTagSignature tagFloat;
- int k;
// On named color, take the appropriate tag
if (cmsGetDeviceClass(ContextID, hProfile) == cmsSigNamedColorClass) {
@@ -346,17 +345,9 @@ cmsPipeline* CMSEXPORT _cmsReadInputLUT(cmsContext ContextID, cmsHPROFILE hProfi
return _cmsReadFloatInputTag(ContextID, hProfile, tagFloat);
}
- /* There are profiles out there (not legal) that may only have a
- colorimetric or saturation tag and no perceptual tag. If we
- can't find the specified intent be a bit robust and not give
- up until we can't find any table, starting with perceptual */
+ // Revert to perceptual if no tag is found
if (!cmsIsTag(ContextID, hProfile, tag16)) {
- for (k = 0; k < 3; k++) {
- if (cmsIsTag(ContextID, hProfile, Device2PCS16[k])) {
- tag16 = Device2PCS16[k];
- break;
- }
- }
+ tag16 = Device2PCS16[0];
}
if (cmsIsTag(ContextID, hProfile, tag16)) { // Is there any LUT-Based table?
diff --git a/lcms2mt/src/cmslut.c b/lcms2mt/src/cmslut.c
index ae4d57d8..241b6ae8 100644
--- a/lcms2mt/src/cmslut.c
+++ b/lcms2mt/src/cmslut.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -696,7 +696,7 @@ cmsStage* CMSEXPORT cmsStageAllocCLutFloatGranular(cmsContext ContextID, const c
static
-int IdentitySampler(cmsContext ContextID, register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void * Cargo)
+int IdentitySampler(cmsContext ContextID, CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void * Cargo)
{
int nChan = *(int*) Cargo;
int i;
@@ -1320,7 +1320,7 @@ cmsBool BlessLUT(cmsContext ContextID, cmsPipeline* lut)
// Default to evaluate the LUT on 16 bit-basis. Precision is retained.
static
-void _LUTeval16(cmsContext ContextID, register const cmsUInt16Number In[], register cmsUInt16Number Out[], register const void* D)
+void _LUTeval16(cmsContext ContextID, CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER const void* D)
{
cmsPipeline* lut = (cmsPipeline*) D;
cmsStage *mpe;
@@ -1346,7 +1346,7 @@ void _LUTeval16(cmsContext ContextID, register const cmsUInt16Number In[], regis
// Does evaluate the LUT on cmsFloat32Number-basis.
static
-void _LUTevalFloat(cmsContext ContextID, register const cmsFloat32Number In[], register cmsFloat32Number Out[], const void* D)
+void _LUTevalFloat(cmsContext ContextID, CMSREGISTER const cmsFloat32Number In[], CMSREGISTER cmsFloat32Number Out[], const void* D)
{
cmsPipeline* lut = (cmsPipeline*) D;
cmsStage *mpe;
@@ -1841,5 +1841,3 @@ cmsBool CMSEXPORT cmsPipelineEvalReverseFloat(cmsContext ContextID,
return TRUE;
}
-
-
diff --git a/lcms2mt/src/cmsmd5.c b/lcms2mt/src/cmsmd5.c
index d3017ab3..61043040 100644
--- a/lcms2mt/src/cmsmd5.c
+++ b/lcms2mt/src/cmsmd5.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -64,10 +64,9 @@ typedef struct {
static
-void MD5_Transform(cmsUInt32Number buf[4], cmsUInt32Number in[16])
-
+void cmsMD5_Transform(cmsUInt32Number buf[4], cmsUInt32Number in[16])
{
- register cmsUInt32Number a, b, c, d;
+ CMSREGISTER cmsUInt32Number a, b, c, d;
a = buf[0];
b = buf[1];
@@ -150,8 +149,8 @@ void MD5_Transform(cmsUInt32Number buf[4], cmsUInt32Number in[16])
// Create a MD5 object
-static
-cmsHANDLE MD5alloc(cmsContext ContextID)
+
+cmsHANDLE CMSEXPORT cmsMD5alloc(cmsContext ContextID)
{
_cmsMD5* ctx = (_cmsMD5*) _cmsMallocZero(ContextID, sizeof(_cmsMD5));
if (ctx == NULL) return NULL;
@@ -167,9 +166,7 @@ cmsHANDLE MD5alloc(cmsContext ContextID)
return (cmsHANDLE) ctx;
}
-
-static
-void MD5add(cmsHANDLE Handle, cmsUInt8Number* buf, cmsUInt32Number len)
+void CMSEXPORT cmsMD5add(cmsHANDLE Handle, const cmsUInt8Number* buf, cmsUInt32Number len)
{
_cmsMD5* ctx = (_cmsMD5*) Handle;
cmsUInt32Number t;
@@ -195,7 +192,7 @@ void MD5add(cmsHANDLE Handle, cmsUInt8Number* buf, cmsUInt32Number len)
memmove(p, buf, t);
byteReverse(ctx->in, 16);
- MD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in);
+ cmsMD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in);
buf += t;
len -= t;
}
@@ -203,7 +200,7 @@ void MD5add(cmsHANDLE Handle, cmsUInt8Number* buf, cmsUInt32Number len)
while (len >= 64) {
memmove(ctx->in, buf, 64);
byteReverse(ctx->in, 16);
- MD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in);
+ cmsMD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in);
buf += 64;
len -= 64;
}
@@ -212,8 +209,7 @@ void MD5add(cmsHANDLE Handle, cmsUInt8Number* buf, cmsUInt32Number len)
}
// Destroy the object and return the checksum
-static
-void MD5finish(cmsContext ContextID, cmsProfileID* ProfileID, cmsHANDLE Handle)
+void CMSEXPORT cmsMD5finish(cmsContext ContextID, cmsProfileID* ProfileID, cmsHANDLE Handle)
{
_cmsMD5* ctx = (_cmsMD5*) Handle;
cmsUInt32Number count;
@@ -230,7 +226,7 @@ void MD5finish(cmsContext ContextID, cmsProfileID* ProfileID, cmsHANDLE Handle)
memset(p, 0, count);
byteReverse(ctx->in, 16);
- MD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in);
+ cmsMD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in);
memset(ctx->in, 0, 56);
} else {
@@ -241,7 +237,7 @@ void MD5finish(cmsContext ContextID, cmsProfileID* ProfileID, cmsHANDLE Handle)
((cmsUInt32Number *) ctx->in)[14] = ctx->bits[0];
((cmsUInt32Number *) ctx->in)[15] = ctx->bits[1];
- MD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in);
+ cmsMD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in);
byteReverse((cmsUInt8Number *) ctx->buf, 4);
memmove(ProfileID ->ID8, ctx->buf, 16);
@@ -284,11 +280,11 @@ cmsBool CMSEXPORT cmsMD5computeID(cmsContext ContextID, cmsHPROFILE hProfile)
if (!cmsSaveProfileToMem(ContextID, hProfile, Mem, &BytesNeeded)) goto Error;
// Create MD5 object
- MD5 = MD5alloc(ContextID);
+ MD5 = cmsMD5alloc(ContextID);
if (MD5 == NULL) goto Error;
// Add all bytes
- MD5add(MD5, Mem, BytesNeeded);
+ cmsMD5add(MD5, Mem, BytesNeeded);
// Temp storage is no longer needed
_cmsFree(ContextID, Mem);
@@ -297,7 +293,7 @@ cmsBool CMSEXPORT cmsMD5computeID(cmsContext ContextID, cmsHPROFILE hProfile)
memmove(Icc, &Keep, sizeof(_cmsICCPROFILE));
// And store the ID
- MD5finish(ContextID, &Icc ->ProfileID, MD5);
+ cmsMD5finish(ContextID, &Icc ->ProfileID, MD5);
return TRUE;
Error:
@@ -308,4 +304,3 @@ Error:
memmove(Icc, &Keep, sizeof(_cmsICCPROFILE));
return FALSE;
}
-
diff --git a/lcms2mt/src/cmsmtrx.c b/lcms2mt/src/cmsmtrx.c
index b6766947..490ec586 100644
--- a/lcms2mt/src/cmsmtrx.c
+++ b/lcms2mt/src/cmsmtrx.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lcms2mt/src/cmsnamed.c b/lcms2mt/src/cmsnamed.c
index aac045b2..cd751b47 100644
--- a/lcms2mt/src/cmsnamed.c
+++ b/lcms2mt/src/cmsnamed.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -541,7 +541,7 @@ cmsNAMEDCOLORLIST* CMSEXPORT cmsAllocNamedColorList(cmsContext ContextID, cmsUIn
while (v -> Allocated < n) {
if (!GrowNamedColorList(ContextID, v)) {
- _cmsFree(ContextID, (void*) v);
+ cmsFreeNamedColorList(ContextID, v);
return NULL;
}
}
@@ -574,7 +574,11 @@ cmsNAMEDCOLORLIST* CMSEXPORT cmsDupNamedColorList(cmsContext ContextID, const cm
// For really large tables we need this
while (NewNC ->Allocated < v ->Allocated){
- if (!GrowNamedColorList(ContextID, NewNC)) return NULL;
+ if (!GrowNamedColorList(ContextID, NewNC))
+ {
+ cmsFreeNamedColorList(ContextID, NewNC);
+ return NULL;
+ }
}
memmove(NewNC ->Prefix, v ->Prefix, sizeof(v ->Prefix));
diff --git a/lcms2mt/src/cmsopt.c b/lcms2mt/src/cmsopt.c
index fedb5043..7fb5e029 100644
--- a/lcms2mt/src/cmsopt.c
+++ b/lcms2mt/src/cmsopt.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -285,9 +285,10 @@ cmsBool PreOptimize(cmsContext ContextID, cmsPipeline* Lut)
}
static
-void Eval16nop1D(cmsContext ContextID, register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const struct _cms_interp_struc* p)
+void Eval16nop1D(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Input[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const struct _cms_interp_struc* p)
{
cmsUNUSED_PARAMETER(ContextID);
Output[0] = Input[0];
@@ -296,9 +297,10 @@ void Eval16nop1D(cmsContext ContextID, register const cmsUInt16Number Input[],
}
static
-void PrelinEval16(cmsContext ContextID, register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const void* D)
+void PrelinEval16(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Input[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const void* D)
{
Prelin16Data* p16 = (Prelin16Data*) D;
cmsUInt16Number StageABC[MAX_INPUT_DIMENSIONS];
@@ -404,7 +406,7 @@ Prelin16Data* PrelinOpt16alloc(cmsContext ContextID,
// Sampler implemented by another LUT. This is a clean way to precalculate the devicelink 3D CLUT for
// almost any transform. We use floating point precision and then convert from floating point to 16 bits.
static
-cmsInt32Number XFormSampler16(cmsContext ContextID, register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo)
+cmsInt32Number XFormSampler16(cmsContext ContextID, CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo)
{
cmsPipeline* Lut = (cmsPipeline*) Cargo;
cmsFloat32Number InFloat[cmsMAXCHANNELS], OutFloat[cmsMAXCHANNELS];
@@ -695,10 +697,8 @@ cmsBool OptimizeByResampling(cmsContext ContextID, cmsPipeline** Lut, cmsUInt32N
}
}
- ContextID->dwFlags = *dwFlags;
// Allocate the CLUT
CLUT = cmsStageAllocCLut16bit(ContextID, nGridPoints, Src ->InputChannels, Src->OutputChannels, NULL);
- ContextID->dwFlags = 0;
if (CLUT == NULL) goto Error;
// Add the CLUT to the destination LUT
@@ -909,17 +909,18 @@ void* Prelin8dup(cmsContext ContextID, const void* ptr)
// A optimized interpolation for 8-bit input.
#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan])
static CMS_NO_SANITIZE
-void PrelinEval8(cmsContext ContextID, register const cmsUInt16Number Input[],
- register cmsUInt16Number Output[],
- register const void* D)
+void PrelinEval8(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number Input[],
+ CMSREGISTER cmsUInt16Number Output[],
+ CMSREGISTER const void* D)
{
cmsUInt8Number r, g, b;
cmsS15Fixed16Number rx, ry, rz;
cmsS15Fixed16Number c0, c1, c2, c3, Rest;
int OutChan;
- register cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1;
+ CMSREGISTER cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1;
Prelin8Data* p8 = (Prelin8Data*) D;
- register const cmsInterpParams* p = p8 ->p;
+ CMSREGISTER const cmsInterpParams* p = p8 ->p;
int TotalOut = (int) p -> nOutputs;
const cmsUInt16Number* LutTable = (const cmsUInt16Number*) p->Table;
cmsUNUSED_PARAMETER(ContextID);
@@ -1084,6 +1085,7 @@ cmsBool OptimizeByComputingLinearization(cmsContext ContextID, cmsPipeline** Lut
{
cmsStage* last = cmsPipelineGetPtrToLastStage(ContextID, OriginalLut);
+ if (last == NULL) goto Error;
if (cmsStageType(ContextID, last) == cmsSigCurveSetElemType) {
_cmsStageToneCurvesData* Data = (_cmsStageToneCurvesData*)cmsStageData(ContextID, last);
@@ -1330,9 +1332,10 @@ Curves16Data* CurvesAlloc(cmsContext ContextID, cmsUInt32Number nCurves, cmsUInt
}
static
-void FastEvaluateCurves8(cmsContext ContextID, register const cmsUInt16Number In[],
- register cmsUInt16Number Out[],
- register const void* D)
+void FastEvaluateCurves8(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number In[],
+ CMSREGISTER cmsUInt16Number Out[],
+ CMSREGISTER const void* D)
{
Curves16Data* Data = (Curves16Data*) D;
int x;
@@ -1348,9 +1351,10 @@ void FastEvaluateCurves8(cmsContext ContextID, register const cmsUInt16Number In
static
-void FastEvaluateCurves16(cmsContext ContextID, register const cmsUInt16Number In[],
- register cmsUInt16Number Out[],
- register const void* D)
+void FastEvaluateCurves16(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number In[],
+ CMSREGISTER cmsUInt16Number Out[],
+ CMSREGISTER const void* D)
{
Curves16Data* Data = (Curves16Data*) D;
cmsUInt32Number i;
@@ -1363,9 +1367,10 @@ void FastEvaluateCurves16(cmsContext ContextID, register const cmsUInt16Number I
static
-void FastIdentity16(cmsContext ContextID, register const cmsUInt16Number In[],
- register cmsUInt16Number Out[],
- register const void* D)
+void FastIdentity16(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number In[],
+ CMSREGISTER cmsUInt16Number Out[],
+ CMSREGISTER const void* D)
{
cmsPipeline* Lut = (cmsPipeline*) D;
cmsUInt32Number i;
@@ -1524,9 +1529,10 @@ void* DupMatShaper(cmsContext ContextID, const void* Data)
// to accomplish some performance. Actually it takes 256x3 16 bits tables and 16385 x 3 tables of 8 bits,
// in total about 50K, and the performance boost is huge!
static
-void MatShaperEval16(cmsContext ContextID, register const cmsUInt16Number In[],
- register cmsUInt16Number Out[],
- register const void* D)
+void MatShaperEval16(cmsContext ContextID,
+ CMSREGISTER const cmsUInt16Number In[],
+ CMSREGISTER cmsUInt16Number Out[],
+ CMSREGISTER const void* D)
{
MatShaper8Data* p = (MatShaper8Data*) D;
cmsS1Fixed14Number l1, l2, l3, r, g, b;
diff --git a/lcms2mt/src/cmspack.c b/lcms2mt/src/cmspack.c
index c9ded389..150c081d 100644
--- a/lcms2mt/src/cmspack.c
+++ b/lcms2mt/src/cmspack.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -92,10 +92,11 @@ typedef struct {
// Does almost everything but is slow
static
-cmsUInt8Number* UnrollChunkyBytes(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollChunkyBytes(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat);
cmsUInt32Number DoSwap = T_DOSWAP(info ->InputFormat);
@@ -139,10 +140,11 @@ cmsUInt8Number* UnrollChunkyBytes(cmsContext ContextID, register _cmsTRANSFORM*
// Extra channels are just ignored because come in the next planes
static
-cmsUInt8Number* UnrollPlanarBytes(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollPlanarBytes(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat);
cmsUInt32Number DoSwap = T_DOSWAP(info ->InputFormat);
@@ -169,10 +171,11 @@ cmsUInt8Number* UnrollPlanarBytes(cmsContext ContextID, register _cmsTRANSFORM*
// Special cases, provided for performance
static
-cmsUInt8Number* Unroll4Bytes(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll4Bytes(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = FROM_8_TO_16(*accum); accum++; // C
wIn[1] = FROM_8_TO_16(*accum); accum++; // M
@@ -186,10 +189,11 @@ cmsUInt8Number* Unroll4Bytes(cmsContext ContextID, register _cmsTRANSFORM* info,
}
static
-cmsUInt8Number* Unroll4BytesReverse(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll4BytesReverse(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = FROM_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // C
wIn[1] = FROM_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // M
@@ -203,10 +207,11 @@ cmsUInt8Number* Unroll4BytesReverse(cmsContext ContextID, register _cmsTRANSFORM
}
static
-cmsUInt8Number* Unroll4BytesSwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll4BytesSwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[3] = FROM_8_TO_16(*accum); accum++; // K
wIn[0] = FROM_8_TO_16(*accum); accum++; // C
@@ -221,10 +226,11 @@ cmsUInt8Number* Unroll4BytesSwapFirst(cmsContext ContextID, register _cmsTRANSFO
// KYMC
static
-cmsUInt8Number* Unroll4BytesSwap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll4BytesSwap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[3] = FROM_8_TO_16(*accum); accum++; // K
wIn[2] = FROM_8_TO_16(*accum); accum++; // Y
@@ -238,10 +244,11 @@ cmsUInt8Number* Unroll4BytesSwap(cmsContext ContextID, register _cmsTRANSFORM* i
}
static
-cmsUInt8Number* Unroll4BytesSwapSwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll4BytesSwapSwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[2] = FROM_8_TO_16(*accum); accum++; // K
wIn[1] = FROM_8_TO_16(*accum); accum++; // Y
@@ -255,10 +262,11 @@ cmsUInt8Number* Unroll4BytesSwapSwapFirst(cmsContext ContextID, register _cmsTRA
}
static
-cmsUInt8Number* Unroll3Bytes(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll3Bytes(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = FROM_8_TO_16(*accum); accum++; // R
wIn[1] = FROM_8_TO_16(*accum); accum++; // G
@@ -271,10 +279,11 @@ cmsUInt8Number* Unroll3Bytes(cmsContext ContextID, register _cmsTRANSFORM* info,
}
static
-cmsUInt8Number* Unroll3BytesSkip1Swap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll3BytesSkip1Swap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
accum++; // A
wIn[2] = FROM_8_TO_16(*accum); accum++; // B
@@ -288,10 +297,11 @@ cmsUInt8Number* Unroll3BytesSkip1Swap(cmsContext ContextID, register _cmsTRANSFO
}
static
-cmsUInt8Number* Unroll3BytesSkip1SwapSwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll3BytesSkip1SwapSwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[2] = FROM_8_TO_16(*accum); accum++; // B
wIn[1] = FROM_8_TO_16(*accum); accum++; // G
@@ -305,10 +315,11 @@ cmsUInt8Number* Unroll3BytesSkip1SwapSwapFirst(cmsContext ContextID, register _c
}
static
-cmsUInt8Number* Unroll3BytesSkip1SwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll3BytesSkip1SwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
accum++; // A
wIn[0] = FROM_8_TO_16(*accum); accum++; // R
@@ -324,10 +335,11 @@ cmsUInt8Number* Unroll3BytesSkip1SwapFirst(cmsContext ContextID, register _cmsTR
// BRG
static
-cmsUInt8Number* Unroll3BytesSwap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll3BytesSwap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[2] = FROM_8_TO_16(*accum); accum++; // B
wIn[1] = FROM_8_TO_16(*accum); accum++; // G
@@ -340,10 +352,11 @@ cmsUInt8Number* Unroll3BytesSwap(cmsContext ContextID, register _cmsTRANSFORM* i
}
static
-cmsUInt8Number* UnrollLabV2_8(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollLabV2_8(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // L
wIn[1] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // a
@@ -356,10 +369,11 @@ cmsUInt8Number* UnrollLabV2_8(cmsContext ContextID, register _cmsTRANSFORM* info
}
static
-cmsUInt8Number* UnrollALabV2_8(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollALabV2_8(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
accum++; // A
wIn[0] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // L
@@ -373,10 +387,11 @@ cmsUInt8Number* UnrollALabV2_8(cmsContext ContextID, register _cmsTRANSFORM* inf
}
static
-cmsUInt8Number* UnrollLabV2_16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollLabV2_16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = FomLabV2ToLabV4(*(cmsUInt16Number*) accum); accum += 2; // L
wIn[1] = FomLabV2ToLabV4(*(cmsUInt16Number*) accum); accum += 2; // a
@@ -390,10 +405,11 @@ cmsUInt8Number* UnrollLabV2_16(cmsContext ContextID, register _cmsTRANSFORM* inf
// for duplex
static
-cmsUInt8Number* Unroll2Bytes(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll2Bytes(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = FROM_8_TO_16(*accum); accum++; // ch1
wIn[1] = FROM_8_TO_16(*accum); accum++; // ch2
@@ -409,10 +425,11 @@ cmsUInt8Number* Unroll2Bytes(cmsContext ContextID, register _cmsTRANSFORM* info,
// Monochrome duplicates L into RGB for null-transforms
static
-cmsUInt8Number* Unroll1Byte(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll1Byte(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = wIn[1] = wIn[2] = FROM_8_TO_16(*accum); accum++; // L
@@ -424,10 +441,11 @@ cmsUInt8Number* Unroll1Byte(cmsContext ContextID, register _cmsTRANSFORM* info,
static
-cmsUInt8Number* Unroll1ByteSkip1(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll1ByteSkip1(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = wIn[1] = wIn[2] = FROM_8_TO_16(*accum); accum++; // L
accum += 1;
@@ -439,10 +457,11 @@ cmsUInt8Number* Unroll1ByteSkip1(cmsContext ContextID, register _cmsTRANSFORM* i
}
static
-cmsUInt8Number* Unroll1ByteSkip2(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll1ByteSkip2(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = wIn[1] = wIn[2] = FROM_8_TO_16(*accum); accum++; // L
accum += 2;
@@ -454,10 +473,11 @@ cmsUInt8Number* Unroll1ByteSkip2(cmsContext ContextID, register _cmsTRANSFORM* i
}
static
-cmsUInt8Number* Unroll1ByteReversed(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll1ByteReversed(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = wIn[1] = wIn[2] = REVERSE_FLAVOR_16(FROM_8_TO_16(*accum)); accum++; // L
@@ -469,10 +489,11 @@ cmsUInt8Number* Unroll1ByteReversed(cmsContext ContextID, register _cmsTRANSFORM
static
-cmsUInt8Number* UnrollAnyWords(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollAnyWords(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat);
cmsUInt32Number SwapEndian = T_ENDIAN16(info -> InputFormat);
@@ -518,10 +539,11 @@ cmsUInt8Number* UnrollAnyWords(cmsContext ContextID, register _cmsTRANSFORM* inf
}
static
-cmsUInt8Number* UnrollPlanarWords(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollPlanarWords(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat);
cmsUInt32Number DoSwap= T_DOSWAP(info ->InputFormat);
@@ -552,10 +574,11 @@ cmsUInt8Number* UnrollPlanarWords(cmsContext ContextID, register _cmsTRANSFORM*
static
-cmsUInt8Number* Unroll4Words(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll4Words(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C
wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M
@@ -569,10 +592,11 @@ cmsUInt8Number* Unroll4Words(cmsContext ContextID, register _cmsTRANSFORM* info,
}
static
-cmsUInt8Number* Unroll4WordsReverse(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll4WordsReverse(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; // C
wIn[1] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; // M
@@ -586,10 +610,11 @@ cmsUInt8Number* Unroll4WordsReverse(cmsContext ContextID, register _cmsTRANSFORM
}
static
-cmsUInt8Number* Unroll4WordsSwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll4WordsSwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[3] = *(cmsUInt16Number*) accum; accum+= 2; // K
wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C
@@ -604,10 +629,11 @@ cmsUInt8Number* Unroll4WordsSwapFirst(cmsContext ContextID, register _cmsTRANSFO
// KYMC
static
-cmsUInt8Number* Unroll4WordsSwap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll4WordsSwap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[3] = *(cmsUInt16Number*) accum; accum+= 2; // K
wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // Y
@@ -621,10 +647,11 @@ cmsUInt8Number* Unroll4WordsSwap(cmsContext ContextID, register _cmsTRANSFORM* i
}
static
-cmsUInt8Number* Unroll4WordsSwapSwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll4WordsSwapSwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // K
wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // Y
@@ -638,10 +665,11 @@ cmsUInt8Number* Unroll4WordsSwapSwapFirst(cmsContext ContextID, register _cmsTRA
}
static
-cmsUInt8Number* Unroll3Words(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll3Words(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C R
wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M G
@@ -654,10 +682,11 @@ cmsUInt8Number* Unroll3Words(cmsContext ContextID, register _cmsTRANSFORM* info,
}
static
-cmsUInt8Number* Unroll3WordsSwap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll3WordsSwap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // C R
wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M G
@@ -670,10 +699,11 @@ cmsUInt8Number* Unroll3WordsSwap(cmsContext ContextID, register _cmsTRANSFORM* i
}
static
-cmsUInt8Number* Unroll3WordsSkip1Swap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll3WordsSkip1Swap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
accum += 2; // A
wIn[2] = *(cmsUInt16Number*) accum; accum += 2; // R
@@ -687,10 +717,11 @@ cmsUInt8Number* Unroll3WordsSkip1Swap(cmsContext ContextID, register _cmsTRANSFO
}
static
-cmsUInt8Number* Unroll3WordsSkip1SwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll3WordsSkip1SwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
accum += 2; // A
wIn[0] = *(cmsUInt16Number*) accum; accum += 2; // R
@@ -704,10 +735,11 @@ cmsUInt8Number* Unroll3WordsSkip1SwapFirst(cmsContext ContextID, register _cmsTR
}
static
-cmsUInt8Number* Unroll1Word(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll1Word(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = wIn[1] = wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // L
@@ -718,10 +750,11 @@ cmsUInt8Number* Unroll1Word(cmsContext ContextID, register _cmsTRANSFORM* info,
}
static
-cmsUInt8Number* Unroll1WordReversed(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll1WordReversed(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = wIn[1] = wIn[2] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2;
@@ -732,10 +765,11 @@ cmsUInt8Number* Unroll1WordReversed(cmsContext ContextID, register _cmsTRANSFORM
}
static
-cmsUInt8Number* Unroll1WordSkip3(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll1WordSkip3(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = wIn[1] = wIn[2] = *(cmsUInt16Number*) accum;
@@ -748,10 +782,11 @@ cmsUInt8Number* Unroll1WordSkip3(cmsContext ContextID, register _cmsTRANSFORM* i
}
static
-cmsUInt8Number* Unroll2Words(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Unroll2Words(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
wIn[0] = *(cmsUInt16Number*) accum; accum += 2; // ch1
wIn[1] = *(cmsUInt16Number*) accum; accum += 2; // ch2
@@ -765,10 +800,11 @@ cmsUInt8Number* Unroll2Words(cmsContext ContextID, register _cmsTRANSFORM* info,
// This is a conversion of Lab double to 16 bits
static
-cmsUInt8Number* UnrollLabDoubleTo16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollLabDoubleTo16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
if (T_PLANAR(info -> InputFormat)) {
@@ -799,10 +835,11 @@ cmsUInt8Number* UnrollLabDoubleTo16(cmsContext ContextID, register _cmsTRANSFORM
// This is a conversion of Lab float to 16 bits
static
-cmsUInt8Number* UnrollLabFloatTo16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollLabFloatTo16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsCIELab Lab;
@@ -837,10 +874,11 @@ cmsUInt8Number* UnrollLabFloatTo16(cmsContext ContextID, register _cmsTRANSFORM*
// This is a conversion of XYZ double to 16 bits
static
-cmsUInt8Number* UnrollXYZDoubleTo16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollXYZDoubleTo16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
if (T_PLANAR(info -> InputFormat)) {
@@ -873,10 +911,11 @@ cmsUInt8Number* UnrollXYZDoubleTo16(cmsContext ContextID, register _cmsTRANSFORM
// This is a conversion of XYZ float to 16 bits
static
-cmsUInt8Number* UnrollXYZFloatTo16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollXYZFloatTo16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
if (T_PLANAR(info -> InputFormat)) {
@@ -953,10 +992,11 @@ cmsUInt32Number PixelSize(cmsUInt32Number Format)
// Inks does come in percentage, remaining cases are between 0..1.0, again to 16 bits
static
-cmsUInt8Number* UnrollDoubleTo16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollDoubleTo16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat);
@@ -1011,10 +1051,11 @@ cmsUInt8Number* UnrollDoubleTo16(cmsContext ContextID, register _cmsTRANSFORM* i
static
-cmsUInt8Number* UnrollFloatTo16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollFloatTo16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat);
@@ -1070,10 +1111,11 @@ cmsUInt8Number* UnrollFloatTo16(cmsContext ContextID, register _cmsTRANSFORM* in
// For 1 channel, we need to duplicate data (it comes in 0..1.0 range)
static
-cmsUInt8Number* UnrollDouble1Chan(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollDouble1Chan(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsFloat64Number* Inks = (cmsFloat64Number*) accum;
@@ -1323,10 +1365,11 @@ cmsUInt8Number* UnrollXYZFloatToFloat(cmsContext ContextID, _cmsTRANSFORM* info,
// Generic chunky for byte
static
-cmsUInt8Number* PackAnyBytes(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackAnyBytes(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat);
cmsUInt32Number DoSwap = T_DOSWAP(info ->OutputFormat);
@@ -1375,10 +1418,11 @@ cmsUInt8Number* PackAnyBytes(cmsContext ContextID, register _cmsTRANSFORM* info,
static
-cmsUInt8Number* PackAnyWords(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackAnyWords(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat);
cmsUInt32Number SwapEndian = T_ENDIAN16(info -> OutputFormat);
@@ -1432,10 +1476,11 @@ cmsUInt8Number* PackAnyWords(cmsContext ContextID, register _cmsTRANSFORM* info,
static
-cmsUInt8Number* PackPlanarBytes(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackPlanarBytes(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat);
cmsUInt32Number DoSwap = T_DOSWAP(info ->OutputFormat);
@@ -1466,10 +1511,11 @@ cmsUInt8Number* PackPlanarBytes(cmsContext ContextID, register _cmsTRANSFORM* in
static
-cmsUInt8Number* PackPlanarWords(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackPlanarWords(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat);
cmsUInt32Number DoSwap = T_DOSWAP(info ->OutputFormat);
@@ -1505,10 +1551,11 @@ cmsUInt8Number* PackPlanarWords(cmsContext ContextID, register _cmsTRANSFORM* in
// CMYKcm (unrolled for speed)
static
-cmsUInt8Number* Pack6Bytes(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack6Bytes(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(wOut[0]);
*output++ = FROM_16_TO_8(wOut[1]);
@@ -1526,10 +1573,11 @@ cmsUInt8Number* Pack6Bytes(cmsContext ContextID, register _cmsTRANSFORM* info,
// KCMYcm
static
-cmsUInt8Number* Pack6BytesSwap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack6BytesSwap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(wOut[5]);
*output++ = FROM_16_TO_8(wOut[4]);
@@ -1546,10 +1594,11 @@ cmsUInt8Number* Pack6BytesSwap(cmsContext ContextID, register _cmsTRANSFORM* inf
// CMYKcm
static
-cmsUInt8Number* Pack6Words(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack6Words(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = wOut[0];
output+= 2;
@@ -1572,10 +1621,11 @@ cmsUInt8Number* Pack6Words(cmsContext ContextID, register _cmsTRANSFORM* info,
// KCMYcm
static
-cmsUInt8Number* Pack6WordsSwap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack6WordsSwap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = wOut[5];
output+= 2;
@@ -1598,10 +1648,11 @@ cmsUInt8Number* Pack6WordsSwap(cmsContext ContextID, register _cmsTRANSFORM* inf
static
-cmsUInt8Number* Pack4Bytes(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack4Bytes(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(wOut[0]);
*output++ = FROM_16_TO_8(wOut[1]);
@@ -1615,10 +1666,11 @@ cmsUInt8Number* Pack4Bytes(cmsContext ContextID, register _cmsTRANSFORM* info,
}
static
-cmsUInt8Number* Pack4BytesReverse(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack4BytesReverse(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = REVERSE_FLAVOR_8(FROM_16_TO_8(wOut[0]));
*output++ = REVERSE_FLAVOR_8(FROM_16_TO_8(wOut[1]));
@@ -1633,10 +1685,11 @@ cmsUInt8Number* Pack4BytesReverse(cmsContext ContextID, register _cmsTRANSFORM*
static
-cmsUInt8Number* Pack4BytesSwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack4BytesSwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(wOut[3]);
*output++ = FROM_16_TO_8(wOut[0]);
@@ -1651,10 +1704,11 @@ cmsUInt8Number* Pack4BytesSwapFirst(cmsContext ContextID, register _cmsTRANSFORM
// ABGR
static
-cmsUInt8Number* Pack4BytesSwap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack4BytesSwap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(wOut[3]);
*output++ = FROM_16_TO_8(wOut[2]);
@@ -1668,10 +1722,11 @@ cmsUInt8Number* Pack4BytesSwap(cmsContext ContextID, register _cmsTRANSFORM* inf
}
static
-cmsUInt8Number* Pack4BytesSwapSwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack4BytesSwapSwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(wOut[2]);
*output++ = FROM_16_TO_8(wOut[1]);
@@ -1685,10 +1740,11 @@ cmsUInt8Number* Pack4BytesSwapSwapFirst(cmsContext ContextID, register _cmsTRANS
}
static
-cmsUInt8Number* Pack4Words(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack4Words(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = wOut[0];
output+= 2;
@@ -1706,10 +1762,11 @@ cmsUInt8Number* Pack4Words(cmsContext ContextID, register _cmsTRANSFORM* info,
}
static
-cmsUInt8Number* Pack4WordsReverse(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack4WordsReverse(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[0]);
output+= 2;
@@ -1728,10 +1785,11 @@ cmsUInt8Number* Pack4WordsReverse(cmsContext ContextID, register _cmsTRANSFORM*
// ABGR
static
-cmsUInt8Number* Pack4WordsSwap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack4WordsSwap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = wOut[3];
output+= 2;
@@ -1750,10 +1808,11 @@ cmsUInt8Number* Pack4WordsSwap(cmsContext ContextID, register _cmsTRANSFORM* inf
// CMYK
static
-cmsUInt8Number* Pack4WordsBigEndian(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack4WordsBigEndian(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[0]);
output+= 2;
@@ -1772,10 +1831,11 @@ cmsUInt8Number* Pack4WordsBigEndian(cmsContext ContextID, register _cmsTRANSFORM
static
-cmsUInt8Number* PackLabV2_8(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackLabV2_8(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[0]));
*output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[1]));
@@ -1788,10 +1848,11 @@ cmsUInt8Number* PackLabV2_8(cmsContext ContextID, register _cmsTRANSFORM* info,
}
static
-cmsUInt8Number* PackALabV2_8(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackALabV2_8(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
output++;
*output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[0]));
@@ -1805,10 +1866,11 @@ cmsUInt8Number* PackALabV2_8(cmsContext ContextID, register _cmsTRANSFORM* info,
}
static
-cmsUInt8Number* PackLabV2_16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackLabV2_16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = FomLabV4ToLabV2(wOut[0]);
output += 2;
@@ -1824,10 +1886,11 @@ cmsUInt8Number* PackLabV2_16(cmsContext ContextID, register _cmsTRANSFORM* info,
}
static
-cmsUInt8Number* Pack3Bytes(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3Bytes(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(wOut[0]);
*output++ = FROM_16_TO_8(wOut[1]);
@@ -1840,10 +1903,11 @@ cmsUInt8Number* Pack3Bytes(cmsContext ContextID, register _cmsTRANSFORM* info,
}
static
-cmsUInt8Number* Pack3BytesOptimized(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3BytesOptimized(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = (wOut[0] & 0xFFU);
*output++ = (wOut[1] & 0xFFU);
@@ -1856,10 +1920,11 @@ cmsUInt8Number* Pack3BytesOptimized(cmsContext ContextID, register _cmsTRANSFORM
}
static
-cmsUInt8Number* Pack3BytesSwap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3BytesSwap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(wOut[2]);
*output++ = FROM_16_TO_8(wOut[1]);
@@ -1872,10 +1937,11 @@ cmsUInt8Number* Pack3BytesSwap(cmsContext ContextID, register _cmsTRANSFORM* inf
}
static
-cmsUInt8Number* Pack3BytesSwapOptimized(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3BytesSwapOptimized(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = (wOut[2] & 0xFFU);
*output++ = (wOut[1] & 0xFFU);
@@ -1889,10 +1955,11 @@ cmsUInt8Number* Pack3BytesSwapOptimized(cmsContext ContextID, register _cmsTRANS
static
-cmsUInt8Number* Pack3Words(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3Words(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = wOut[0];
output+= 2;
@@ -1908,10 +1975,11 @@ cmsUInt8Number* Pack3Words(cmsContext ContextID, register _cmsTRANSFORM* info,
}
static
-cmsUInt8Number* Pack3WordsSwap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3WordsSwap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = wOut[2];
output+= 2;
@@ -1927,10 +1995,11 @@ cmsUInt8Number* Pack3WordsSwap(cmsContext ContextID, register _cmsTRANSFORM* inf
}
static
-cmsUInt8Number* Pack3WordsBigEndian(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3WordsBigEndian(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[0]);
output+= 2;
@@ -1946,10 +2015,11 @@ cmsUInt8Number* Pack3WordsBigEndian(cmsContext ContextID, register _cmsTRANSFORM
}
static
-cmsUInt8Number* Pack3BytesAndSkip1(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3BytesAndSkip1(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(wOut[0]);
*output++ = FROM_16_TO_8(wOut[1]);
@@ -1963,10 +2033,11 @@ cmsUInt8Number* Pack3BytesAndSkip1(cmsContext ContextID, register _cmsTRANSFORM*
}
static
-cmsUInt8Number* Pack3BytesAndSkip1Optimized(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3BytesAndSkip1Optimized(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = (wOut[0] & 0xFFU);
*output++ = (wOut[1] & 0xFFU);
@@ -1981,10 +2052,11 @@ cmsUInt8Number* Pack3BytesAndSkip1Optimized(cmsContext ContextID, register _cmsT
static
-cmsUInt8Number* Pack3BytesAndSkip1SwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3BytesAndSkip1SwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
output++;
*output++ = FROM_16_TO_8(wOut[0]);
@@ -1998,10 +2070,11 @@ cmsUInt8Number* Pack3BytesAndSkip1SwapFirst(cmsContext ContextID, register _cmsT
}
static
-cmsUInt8Number* Pack3BytesAndSkip1SwapFirstOptimized(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3BytesAndSkip1SwapFirstOptimized(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
output++;
*output++ = (wOut[0] & 0xFFU);
@@ -2015,10 +2088,11 @@ cmsUInt8Number* Pack3BytesAndSkip1SwapFirstOptimized(cmsContext ContextID, regis
}
static
-cmsUInt8Number* Pack3BytesAndSkip1Swap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3BytesAndSkip1Swap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
output++;
*output++ = FROM_16_TO_8(wOut[2]);
@@ -2032,10 +2106,11 @@ cmsUInt8Number* Pack3BytesAndSkip1Swap(cmsContext ContextID, register _cmsTRANSF
}
static
-cmsUInt8Number* Pack3BytesAndSkip1SwapOptimized(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3BytesAndSkip1SwapOptimized(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
output++;
*output++ = (wOut[2] & 0xFFU);
@@ -2050,10 +2125,11 @@ cmsUInt8Number* Pack3BytesAndSkip1SwapOptimized(cmsContext ContextID, register _
static
-cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(wOut[2]);
*output++ = FROM_16_TO_8(wOut[1]);
@@ -2067,10 +2143,11 @@ cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirst(cmsContext ContextID, register _
}
static
-cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirstOptimized(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirstOptimized(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = (wOut[2] & 0xFFU);
*output++ = (wOut[1] & 0xFFU);
@@ -2084,10 +2161,11 @@ cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirstOptimized(cmsContext ContextID, r
}
static
-cmsUInt8Number* Pack3WordsAndSkip1(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3WordsAndSkip1(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = wOut[0];
output+= 2;
@@ -2104,10 +2182,11 @@ cmsUInt8Number* Pack3WordsAndSkip1(cmsContext ContextID, register _cmsTRANSFORM*
}
static
-cmsUInt8Number* Pack3WordsAndSkip1Swap(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3WordsAndSkip1Swap(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
output+= 2;
*(cmsUInt16Number*) output = wOut[2];
@@ -2125,10 +2204,11 @@ cmsUInt8Number* Pack3WordsAndSkip1Swap(cmsContext ContextID, register _cmsTRANSF
static
-cmsUInt8Number* Pack3WordsAndSkip1SwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3WordsAndSkip1SwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
output+= 2;
*(cmsUInt16Number*) output = wOut[0];
@@ -2146,10 +2226,11 @@ cmsUInt8Number* Pack3WordsAndSkip1SwapFirst(cmsContext ContextID, register _cmsT
static
-cmsUInt8Number* Pack3WordsAndSkip1SwapSwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack3WordsAndSkip1SwapSwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = wOut[2];
output+= 2;
@@ -2168,10 +2249,11 @@ cmsUInt8Number* Pack3WordsAndSkip1SwapSwapFirst(cmsContext ContextID, register _
static
-cmsUInt8Number* Pack1Byte(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack1Byte(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(wOut[0]);
@@ -2183,10 +2265,11 @@ cmsUInt8Number* Pack1Byte(cmsContext ContextID, register _cmsTRANSFORM* info,
static
-cmsUInt8Number* Pack1ByteReversed(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack1ByteReversed(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(REVERSE_FLAVOR_16(wOut[0]));
@@ -2198,10 +2281,11 @@ cmsUInt8Number* Pack1ByteReversed(cmsContext ContextID, register _cmsTRANSFORM*
static
-cmsUInt8Number* Pack1ByteSkip1(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack1ByteSkip1(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*output++ = FROM_16_TO_8(wOut[0]);
output++;
@@ -2214,10 +2298,11 @@ cmsUInt8Number* Pack1ByteSkip1(cmsContext ContextID, register _cmsTRANSFORM* inf
static
-cmsUInt8Number* Pack1ByteSkip1SwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack1ByteSkip1SwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
output++;
*output++ = FROM_16_TO_8(wOut[0]);
@@ -2229,10 +2314,11 @@ cmsUInt8Number* Pack1ByteSkip1SwapFirst(cmsContext ContextID, register _cmsTRANS
}
static
-cmsUInt8Number* Pack1Word(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack1Word(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = wOut[0];
output+= 2;
@@ -2245,10 +2331,11 @@ cmsUInt8Number* Pack1Word(cmsContext ContextID, register _cmsTRANSFORM* info,
static
-cmsUInt8Number* Pack1WordReversed(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack1WordReversed(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[0]);
output+= 2;
@@ -2260,10 +2347,11 @@ cmsUInt8Number* Pack1WordReversed(cmsContext ContextID, register _cmsTRANSFORM*
}
static
-cmsUInt8Number* Pack1WordBigEndian(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack1WordBigEndian(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[0]);
output+= 2;
@@ -2276,10 +2364,11 @@ cmsUInt8Number* Pack1WordBigEndian(cmsContext ContextID, register _cmsTRANSFORM*
static
-cmsUInt8Number* Pack1WordSkip1(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack1WordSkip1(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
*(cmsUInt16Number*) output = wOut[0];
output+= 4;
@@ -2291,10 +2380,11 @@ cmsUInt8Number* Pack1WordSkip1(cmsContext ContextID, register _cmsTRANSFORM* inf
}
static
-cmsUInt8Number* Pack1WordSkip1SwapFirst(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* Pack1WordSkip1SwapFirst(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
output += 2;
*(cmsUInt16Number*) output = wOut[0];
@@ -2309,10 +2399,11 @@ cmsUInt8Number* Pack1WordSkip1SwapFirst(cmsContext ContextID, register _cmsTRANS
// Unencoded Float values -- don't try optimize speed
static
-cmsUInt8Number* PackLabDoubleFrom16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackLabDoubleFrom16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
if (T_PLANAR(info -> OutputFormat)) {
@@ -2336,10 +2427,11 @@ cmsUInt8Number* PackLabDoubleFrom16(cmsContext ContextID, register _cmsTRANSFORM
static
-cmsUInt8Number* PackLabFloatFrom16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackLabFloatFrom16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsCIELab Lab;
cmsLabEncoded2Float(ContextID, &Lab, wOut);
@@ -2367,10 +2459,11 @@ cmsUInt8Number* PackLabFloatFrom16(cmsContext ContextID, register _cmsTRANSFORM*
}
static
-cmsUInt8Number* PackXYZDoubleFrom16(cmsContext ContextID, register _cmsTRANSFORM* Info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackXYZDoubleFrom16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* Info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
if (T_PLANAR(Info -> OutputFormat)) {
@@ -2396,10 +2489,11 @@ cmsUInt8Number* PackXYZDoubleFrom16(cmsContext ContextID, register _cmsTRANSFORM
}
static
-cmsUInt8Number* PackXYZFloatFrom16(cmsContext ContextID, register _cmsTRANSFORM* Info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackXYZFloatFrom16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* Info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
if (T_PLANAR(Info -> OutputFormat)) {
@@ -2431,10 +2525,11 @@ cmsUInt8Number* PackXYZFloatFrom16(cmsContext ContextID, register _cmsTRANSFORM*
}
static
-cmsUInt8Number* PackDoubleFrom16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackDoubleFrom16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat);
cmsUInt32Number DoSwap = T_DOSWAP(info ->OutputFormat);
@@ -2484,10 +2579,11 @@ cmsUInt8Number* PackDoubleFrom16(cmsContext ContextID, register _cmsTRANSFORM* i
static
-cmsUInt8Number* PackFloatFrom16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackFloatFrom16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info->OutputFormat);
cmsUInt32Number DoSwap = T_DOSWAP(info->OutputFormat);
@@ -2773,10 +2869,11 @@ cmsUInt8Number* PackXYZDoubleFromFloat(cmsContext ContextID, _cmsTRANSFORM* Info
// Decodes an stream of half floats to wIn[] described by input format
static
-cmsUInt8Number* UnrollHalfTo16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wIn[],
- register cmsUInt8Number* accum,
- register cmsUInt32Number Stride)
+cmsUInt8Number* UnrollHalfTo16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wIn[],
+ CMSREGISTER cmsUInt8Number* accum,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat);
@@ -2879,10 +2976,11 @@ cmsUInt8Number* UnrollHalfToFloat(cmsContext ContextID, _cmsTRANSFORM* info,
static
-cmsUInt8Number* PackHalfFrom16(cmsContext ContextID, register _cmsTRANSFORM* info,
- register cmsUInt16Number wOut[],
- register cmsUInt8Number* output,
- register cmsUInt32Number Stride)
+cmsUInt8Number* PackHalfFrom16(cmsContext ContextID,
+ CMSREGISTER _cmsTRANSFORM* info,
+ CMSREGISTER cmsUInt16Number wOut[],
+ CMSREGISTER cmsUInt8Number* output,
+ CMSREGISTER cmsUInt32Number Stride)
{
cmsUInt32Number nChan = T_CHANNELS(info->OutputFormat);
cmsUInt32Number DoSwap = T_DOSWAP(info->OutputFormat);
diff --git a/lcms2mt/src/cmspcs.c b/lcms2mt/src/cmspcs.c
index 97b552d9..743d479f 100644
--- a/lcms2mt/src/cmspcs.c
+++ b/lcms2mt/src/cmspcs.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lcms2mt/src/cmsplugin.c b/lcms2mt/src/cmsplugin.c
index abc18ced..206368c4 100644
--- a/lcms2mt/src/cmsplugin.c
+++ b/lcms2mt/src/cmsplugin.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -772,6 +772,7 @@ cmsContext CMSEXPORT cmsCreateContext(void* Plugin, void* UserData)
// See the comments regarding locking in lcms2_internal.h
// for an explanation of why we need the following code.
+#ifndef CMS_NO_PTHREADS
#ifdef CMS_IS_WINDOWS_
#ifndef CMS_RELY_ON_WINDOWS_STATIC_MUTEX_INIT
{
@@ -793,6 +794,7 @@ cmsContext CMSEXPORT cmsCreateContext(void* Plugin, void* UserData)
}
#endif
#endif
+#endif
_cmsInstallAllocFunctions(_cmsFindMemoryPlugin(Plugin), &fakeContext.DefaultMemoryManager);
diff --git a/lcms2mt/src/cmsps2.c b/lcms2mt/src/cmsps2.c
index 179a0467..62558bfc 100644
--- a/lcms2mt/src/cmsps2.c
+++ b/lcms2mt/src/cmsps2.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -295,21 +295,7 @@ cmsUInt8Number Word2Byte(cmsUInt16Number w)
}
-// Convert to byte (using ICC2 notation)
-/*
-static
-cmsUInt8Number L2Byte(cmsUInt16Number w)
-{
- int ww = w + 0x0080;
-
- if (ww > 0xFFFF) return 0xFF;
-
- return (cmsUInt8Number) ((cmsUInt16Number) (ww >> 8) & 0xFF);
-}
-*/
-
// Write a cooked byte
-
static
void WriteByte(cmsContext ContextID, cmsIOHANDLER* m, cmsUInt8Number b)
{
@@ -326,7 +312,8 @@ void WriteByte(cmsContext ContextID, cmsIOHANDLER* m, cmsUInt8Number b)
// ----------------------------------------------------------------- PostScript generation
-// Removes offending Carriage returns
+// Removes offending carriage returns
+
static
char* RemoveCR(const char* txt)
{
@@ -424,21 +411,6 @@ void EmitIntent(cmsContext ContextID, cmsIOHANDLER* m, cmsUInt32Number Rendering
// = Yn*( L* / 116) / 7.787 if (L*) < 6 / 29
//
-/*
-static
-void EmitL2Y(cmsIOHANDLER* m)
-{
- _cmsIOPrintf(ContextID, m,
- "{ "
- "100 mul 16 add 116 div " // (L * 100 + 16) / 116
- "dup 6 29 div ge " // >= 6 / 29 ?
- "{ dup dup mul mul } " // yes, ^3 and done
- "{ 4 29 div sub 108 841 div mul } " // no, slope limiting
- "ifelse } bind ");
-}
-*/
-
-
// Lab -> XYZ, see the discussion above
static
@@ -459,12 +431,28 @@ void EmitLab2XYZ(cmsContext ContextID, cmsIOHANDLER* m)
_cmsIOPrintf(ContextID, m, "]\n");
}
+static
+void EmitSafeGuardBegin(cmsContext ContextID, cmsIOHANDLER* m, const char* name)
+{
+ _cmsIOPrintf(ContextID, m, "%%LCMS2: Save previous definition of %s on the operand stack\n", name);
+ _cmsIOPrintf(ContextID, m, "currentdict /%s known { /%s load } { null } ifelse\n", name, name);
+}
+static
+void EmitSafeGuardEnd(cmsContext ContextID, cmsIOHANDLER* m, const char* name, int depth)
+{
+ _cmsIOPrintf(ContextID, m, "%%LCMS2: Restore previous definition of %s\n", name);
+ if (depth > 1) {
+ // cycle topmost items on the stack to bring the previous definition to the front
+ _cmsIOPrintf(ContextID, m, "%d -1 roll ", depth);
+ }
+ _cmsIOPrintf(ContextID, m, "dup null eq { pop currentdict /%s undef } { /%s exch def } ifelse\n", name, name);
+}
// Outputs a table of words. It does use 16 bits
static
-void Emit1Gamma(cmsContext ContextID, cmsIOHANDLER* m, cmsToneCurve* Table)
+void Emit1Gamma(cmsContext ContextID, cmsIOHANDLER* m, cmsToneCurve* Table, const char* name)
{
cmsUInt32Number i;
cmsFloat64Number gamma;
@@ -479,28 +467,33 @@ void Emit1Gamma(cmsContext ContextID, cmsIOHANDLER* m, cmsToneCurve* Table)
// Check if is really an exponential. If so, emit "exp"
gamma = cmsEstimateGamma(ContextID, Table, 0.001);
if (gamma > 0) {
- _cmsIOPrintf(ContextID, m, "{ %g exp } bind ", gamma);
+ _cmsIOPrintf(ContextID, m, "/%s { %g exp } bind def\n", name, gamma);
return;
}
- _cmsIOPrintf(ContextID, m, "{ ");
-
- // Bounds check
- EmitRangeCheck(ContextID, m);
-
- // Emit intepolation code
-
- // PostScript code Stack
- // =============== ========================
- // v
- _cmsIOPrintf(ContextID, m, " [");
+ EmitSafeGuardBegin(ContextID, m, "lcms2gammatable");
+ _cmsIOPrintf(ContextID, m, "/lcms2gammatable [");
for (i=0; i < Table->nEntries; i++) {
+ if (i % 10 == 0)
+ _cmsIOPrintf(ContextID, m, "\n ");
_cmsIOPrintf(ContextID, m, "%d ", Table->Table16[i]);
}
- _cmsIOPrintf(ContextID, m, "] "); // v tab
+ _cmsIOPrintf(ContextID, m, "] def\n");
+
+
+ // Emit interpolation code
+
+ // PostScript code Stack
+ // =============== ========================
+ // v
+ _cmsIOPrintf(ContextID, m, "/%s {\n ", name);
+
+ // Bounds check
+ EmitRangeCheck(ContextID, m);
+ _cmsIOPrintf(ContextID, m, "\n //lcms2gammatable "); // v tab
_cmsIOPrintf(ContextID, m, "dup "); // v tab tab
_cmsIOPrintf(ContextID, m, "length 1 sub "); // v tab dom
_cmsIOPrintf(ContextID, m, "3 -1 roll "); // tab dom v
@@ -512,7 +505,7 @@ void Emit1Gamma(cmsContext ContextID, cmsIOHANDLER* m, cmsToneCurve* Table)
_cmsIOPrintf(ContextID, m, "ceiling cvi "); // tab val2 cell0 cell1
_cmsIOPrintf(ContextID, m, "3 index "); // tab val2 cell0 cell1 tab
_cmsIOPrintf(ContextID, m, "exch "); // tab val2 cell0 tab cell1
- _cmsIOPrintf(ContextID, m, "get "); // tab val2 cell0 y1
+ _cmsIOPrintf(ContextID, m, "get\n "); // tab val2 cell0 y1
_cmsIOPrintf(ContextID, m, "4 -1 roll "); // val2 cell0 y1 tab
_cmsIOPrintf(ContextID, m, "3 -1 roll "); // val2 y1 tab cell0
_cmsIOPrintf(ContextID, m, "get "); // val2 y1 y0
@@ -525,9 +518,11 @@ void Emit1Gamma(cmsContext ContextID, cmsIOHANDLER* m, cmsToneCurve* Table)
_cmsIOPrintf(ContextID, m, "sub "); // y0 (y1-y0) rest
_cmsIOPrintf(ContextID, m, "mul "); // y0 t1
_cmsIOPrintf(ContextID, m, "add "); // y
- _cmsIOPrintf(ContextID, m, "65535 div "); // result
+ _cmsIOPrintf(ContextID, m, "65535 div\n"); // result
+
+ _cmsIOPrintf(ContextID, m, "} bind def\n");
- _cmsIOPrintf(ContextID, m, " } bind ");
+ EmitSafeGuardEnd(ContextID, m, "lcms2gammatable", 1);
}
@@ -543,9 +538,10 @@ cmsBool GammaTableEquals(cmsUInt16Number* g1, cmsUInt16Number* g2, cmsUInt32Numb
// Does write a set of gamma curves
static
-void EmitNGamma(cmsContext ContextID, cmsIOHANDLER* m, cmsUInt32Number n, cmsToneCurve* g[])
+void EmitNGamma(cmsContext ContextID, cmsIOHANDLER* m, cmsUInt32Number n, cmsToneCurve* g[], const char* nameprefix)
{
cmsUInt32Number i;
+ static char buffer[2048];
for( i=0; i < n; i++ )
{
@@ -553,19 +549,18 @@ void EmitNGamma(cmsContext ContextID, cmsIOHANDLER* m, cmsUInt32Number n, cmsTon
if (i > 0 && GammaTableEquals(g[i-1]->Table16, g[i]->Table16, g[i]->nEntries)) {
- _cmsIOPrintf(ContextID, m, "dup ");
+ _cmsIOPrintf(ContextID, m, "/%s%d /%s%d load def\n", nameprefix, i, nameprefix, i-1);
}
else {
- Emit1Gamma(ContextID, m, g[i]);
+ snprintf(buffer, sizeof(buffer), "%s%d", nameprefix, i);
+ buffer[sizeof(buffer)-1] = '\0';
+ Emit1Gamma(ContextID, m, g[i], buffer);
}
}
}
-
-
-
// Following code dumps a LUT onto memory stream
@@ -582,7 +577,7 @@ void EmitNGamma(cmsContext ContextID, cmsIOHANDLER* m, cmsUInt32Number n, cmsTon
// component. -1 is used to mark beginning of whole block.
static
-int OutputValueSampler(cmsContext ContextID, register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo)
+int OutputValueSampler(cmsContext ContextID, CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo)
{
cmsPsSamplerCargo* sc = (cmsPsSamplerCargo*) Cargo;
cmsUInt32Number i;
@@ -662,11 +657,11 @@ int OutputValueSampler(cmsContext ContextID, register const cmsUInt16Number In[]
static
void WriteCLUT(cmsContext ContextID, cmsIOHANDLER* m, cmsStage* mpe, const char* PreMaj,
- const char* PostMaj,
- const char* PreMin,
- const char* PostMin,
- int FixWhite,
- cmsColorSpaceSignature ColorSpace)
+ const char* PostMaj,
+ const char* PreMin,
+ const char* PostMin,
+ int FixWhite,
+ cmsColorSpaceSignature ColorSpace)
{
cmsUInt32Number i;
cmsPsSamplerCargo sc;
@@ -708,11 +703,11 @@ int EmitCIEBasedA(cmsContext ContextID, cmsIOHANDLER* m, cmsToneCurve* Curve, cm
_cmsIOPrintf(ContextID, m, "[ /CIEBasedA\n");
_cmsIOPrintf(ContextID, m, " <<\n");
- _cmsIOPrintf(ContextID, m, "/DecodeA ");
-
- Emit1Gamma(ContextID, m, Curve);
+ EmitSafeGuardBegin(ContextID, m, "lcms2gammaproc");
+ Emit1Gamma(ContextID, m, Curve, "lcms2gammaproc");
- _cmsIOPrintf(ContextID, m, " \n");
+ _cmsIOPrintf(ContextID, m, "/DecodeA /lcms2gammaproc load\n");
+ EmitSafeGuardEnd(ContextID, m, "lcms2gammaproc", 3);
_cmsIOPrintf(ContextID, m, "/MatrixA [ 0.9642 1.0000 0.8249 ]\n");
_cmsIOPrintf(ContextID, m, "/RangeLMN [ 0.0 0.9642 0.0 1.0000 0.0 0.8249 ]\n");
@@ -736,11 +731,19 @@ int EmitCIEBasedABC(cmsContext ContextID, cmsIOHANDLER* m, cmsFloat64Number* Mat
_cmsIOPrintf(ContextID, m, "[ /CIEBasedABC\n");
_cmsIOPrintf(ContextID, m, "<<\n");
- _cmsIOPrintf(ContextID, m, "/DecodeABC [ ");
-
- EmitNGamma(ContextID, m, 3, CurveSet);
+ EmitSafeGuardBegin(ContextID, m, "lcms2gammaproc0");
+ EmitSafeGuardBegin(ContextID, m, "lcms2gammaproc1");
+ EmitSafeGuardBegin(ContextID, m, "lcms2gammaproc2");
+ EmitNGamma(ContextID, m, 3, CurveSet, "lcms2gammaproc");
+ _cmsIOPrintf(ContextID, m, "/DecodeABC [\n");
+ _cmsIOPrintf(ContextID, m, " /lcms2gammaproc0 load\n");
+ _cmsIOPrintf(ContextID, m, " /lcms2gammaproc1 load\n");
+ _cmsIOPrintf(ContextID, m, " /lcms2gammaproc2 load\n");
_cmsIOPrintf(ContextID, m, "]\n");
+ EmitSafeGuardEnd(ContextID, m, "lcms2gammaproc2", 3);
+ EmitSafeGuardEnd(ContextID, m, "lcms2gammaproc1", 3);
+ EmitSafeGuardEnd(ContextID, m, "lcms2gammaproc0", 3);
_cmsIOPrintf(ContextID, m, "/MatrixABC [ " );
@@ -772,28 +775,31 @@ int EmitCIEBasedDEF(cmsContext ContextID, cmsIOHANDLER* m, cmsPipeline* Pipeline
{
const char* PreMaj;
const char* PostMaj;
- const char* PreMin, *PostMin;
+ const char* PreMin, * PostMin;
cmsStage* mpe;
+ int i, numchans;
+ static char buffer[2048];
- mpe = Pipeline ->Elements;
+ mpe = Pipeline->Elements;
switch (cmsStageInputChannels(ContextID, mpe)) {
case 3:
+ _cmsIOPrintf(ContextID, m, "[ /CIEBasedDEF\n");
+ PreMaj = "<";
+ PostMaj = ">\n";
+ PreMin = PostMin = "";
+ break;
- _cmsIOPrintf(ContextID, m, "[ /CIEBasedDEF\n");
- PreMaj ="<";
- PostMaj= ">\n";
- PreMin = PostMin = "";
- break;
case 4:
- _cmsIOPrintf(ContextID, m, "[ /CIEBasedDEFG\n");
- PreMaj = "[";
- PostMaj = "]\n";
- PreMin = "<";
- PostMin = ">\n";
- break;
+ _cmsIOPrintf(ContextID, m, "[ /CIEBasedDEFG\n");
+ PreMaj = "[";
+ PostMaj = "]\n";
+ PreMin = "<";
+ PostMin = ">\n";
+ break;
+
default:
- return 0;
+ return 0;
}
@@ -801,18 +807,34 @@ int EmitCIEBasedDEF(cmsContext ContextID, cmsIOHANDLER* m, cmsPipeline* Pipeline
if (cmsStageType(ContextID, mpe) == cmsSigCurveSetElemType) {
- _cmsIOPrintf(ContextID, m, "/DecodeDEF [ ");
- EmitNGamma(ContextID, m, cmsStageOutputChannels(ContextID, mpe), _cmsStageGetPtrToCurveSet(mpe));
+ numchans = cmsStageOutputChannels(ContextID, mpe);
+ for (i = 0; i < numchans; ++i) {
+ snprintf(buffer, sizeof(buffer), "lcms2gammaproc%d", i);
+ buffer[sizeof(buffer) - 1] = '\0';
+ EmitSafeGuardBegin(ContextID, m, buffer);
+ }
+ EmitNGamma(ContextID, m, cmsStageOutputChannels(ContextID, mpe), _cmsStageGetPtrToCurveSet(mpe), "lcms2gammaproc");
+ _cmsIOPrintf(ContextID, m, "/DecodeDEF [\n");
+ for (i = 0; i < numchans; ++i) {
+ snprintf(buffer, sizeof(buffer), " /lcms2gammaproc%d load\n", i);
+ buffer[sizeof(buffer) - 1] = '\0';
+ _cmsIOPrintf(ContextID, m, buffer);
+ }
_cmsIOPrintf(ContextID, m, "]\n");
+ for (i = numchans - 1; i >= 0; --i) {
+ snprintf(buffer, sizeof(buffer), "lcms2gammaproc%d", i);
+ buffer[sizeof(buffer) - 1] = '\0';
+ EmitSafeGuardEnd(ContextID, m, buffer, 3);
+ }
- mpe = mpe ->Next;
+ mpe = mpe->Next;
}
if (cmsStageType(ContextID, mpe) == cmsSigCLutElemType) {
- _cmsIOPrintf(ContextID, m, "/Table ");
- WriteCLUT(ContextID, m, mpe, PreMaj, PostMaj, PreMin, PostMin, FALSE, (cmsColorSpaceSignature) 0);
- _cmsIOPrintf(ContextID, m, "]\n");
+ _cmsIOPrintf(ContextID, m, "/Table ");
+ WriteCLUT(ContextID, m, mpe, PreMaj, PostMaj, PreMin, PostMin, FALSE, (cmsColorSpaceSignature)0);
+ _cmsIOPrintf(ContextID, m, "]\n");
}
EmitLab2XYZ(ContextID, m);
@@ -923,7 +945,7 @@ int WriteInputLUT(cmsContext ContextID, cmsIOHANDLER* m, cmsHPROFILE hProfile, c
default:
- cmsSignalError(ContextID, cmsERROR_COLORSPACE_CHECK, "Only 3, 4 channels supported for CSA. This profile has %d channels.", nChannels);
+ cmsSignalError(ContextID, cmsERROR_COLORSPACE_CHECK, "Only 3, 4 channels are supported for CSA. This profile has %d channels.", nChannels);
return 0;
}
@@ -1239,8 +1261,6 @@ void EmitPQRStage(cmsContext ContextID, cmsIOHANDLER* m, cmsHPROFILE hProfile, i
"exch pop exch pop exch pop exch pop } bind\n]\n");
}
-
-
}
@@ -1414,7 +1434,7 @@ int WriteNamedColorCRD(cmsContext ContextID, cmsIOHANDLER* m, cmsHPROFILE hNamed
cmsUInt32Number i, nColors, nColorant;
cmsUInt32Number OutputFormat;
char ColorName[cmsMAX_PATH];
- char Colorant[128];
+ char Colorant[512];
cmsNAMEDCOLORLIST* NamedColorList;
diff --git a/lcms2mt/src/cmssamp.c b/lcms2mt/src/cmssamp.c
index b6fbdbe8..c563fac6 100644
--- a/lcms2mt/src/cmssamp.c
+++ b/lcms2mt/src/cmssamp.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lcms2mt/src/cmssm.c b/lcms2mt/src/cmssm.c
index 2c77587a..387bf823 100644
--- a/lcms2mt/src/cmssm.c
+++ b/lcms2mt/src/cmssm.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lcms2mt/src/cmstypes.c b/lcms2mt/src/cmstypes.c
index 9b21c39c..85256ef7 100644
--- a/lcms2mt/src/cmstypes.c
+++ b/lcms2mt/src/cmstypes.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -1893,7 +1893,7 @@ Error:
static
cmsBool Type_LUT8_Write(cmsContext ContextID, struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems)
{
- cmsUInt32Number j, nTabSize;
+ cmsUInt32Number j, nTabSize, i, n;
cmsUInt8Number val;
cmsPipeline* NewLUT = (cmsPipeline*) Ptr;
cmsStage* mpe;
@@ -1943,22 +1943,19 @@ cmsBool Type_LUT8_Write(cmsContext ContextID, struct _cms_typehandler_struct* s
if (!_cmsWriteUInt8Number(ContextID, io, (cmsUInt8Number) clutPoints)) return FALSE;
if (!_cmsWriteUInt8Number(ContextID, io, 0)) return FALSE; // Padding
+ n = NewLUT->InputChannels * NewLUT->OutputChannels;
if (MatMPE != NULL) {
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[0])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[1])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[2])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[3])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[4])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[5])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[6])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[7])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[8])) return FALSE;
-
+ for (i = 0; i < n; i++)
+ {
+ if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE->Double[i])) return FALSE;
+ }
}
else {
+ if (n != 9) return FALSE;
+
if (!_cmsWrite15Fixed16Number(ContextID, io, 1)) return FALSE;
if (!_cmsWrite15Fixed16Number(ContextID, io, 0)) return FALSE;
if (!_cmsWrite15Fixed16Number(ContextID, io, 0)) return FALSE;
@@ -2183,7 +2180,7 @@ Error:
static
cmsBool Type_LUT16_Write(cmsContext ContextID, struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems)
{
- cmsUInt32Number nTabSize;
+ cmsUInt32Number nTabSize, n;
cmsPipeline* NewLUT = (cmsPipeline*) Ptr;
cmsStage* mpe;
_cmsStageToneCurvesData* PreMPE = NULL, *PostMPE = NULL;
@@ -2235,21 +2232,20 @@ cmsBool Type_LUT16_Write(cmsContext ContextID, struct _cms_typehandler_struct*
if (!_cmsWriteUInt8Number(ContextID, io, (cmsUInt8Number) clutPoints)) return FALSE;
if (!_cmsWriteUInt8Number(ContextID, io, 0)) return FALSE; // Padding
+ n = NewLUT->InputChannels * NewLUT->OutputChannels;
if (MatMPE != NULL) {
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[0])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[1])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[2])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[3])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[4])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[5])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[6])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[7])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE -> Double[8])) return FALSE;
+ for (i = 0; i < n; i++)
+ {
+ if (!_cmsWrite15Fixed16Number(ContextID, io, MatMPE->Double[i])) return FALSE;
+ }
+
}
else {
+ if (n != 9) return FALSE;
+
if (!_cmsWrite15Fixed16Number(ContextID, io, 1)) return FALSE;
if (!_cmsWrite15Fixed16Number(ContextID, io, 0)) return FALSE;
if (!_cmsWrite15Fixed16Number(ContextID, io, 0)) return FALSE;
@@ -2593,31 +2589,31 @@ Error:
static
cmsBool WriteMatrix(cmsContext ContextID, struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsStage* mpe)
{
- _cmsStageMatrixData* m = (_cmsStageMatrixData*) mpe -> Data;
-
- // Write the Matrix
- if (!_cmsWrite15Fixed16Number(ContextID, io, m -> Double[0])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, m -> Double[1])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, m -> Double[2])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, m -> Double[3])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, m -> Double[4])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, m -> Double[5])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, m -> Double[6])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, m -> Double[7])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, m -> Double[8])) return FALSE;
-
- if (m ->Offset != NULL) {
+ cmsUInt32Number i, n;
- if (!_cmsWrite15Fixed16Number(ContextID, io, m -> Offset[0])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, m -> Offset[1])) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, m -> Offset[2])) return FALSE;
- }
- else {
- if (!_cmsWrite15Fixed16Number(ContextID, io, 0)) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, 0)) return FALSE;
- if (!_cmsWrite15Fixed16Number(ContextID, io, 0)) return FALSE;
+ _cmsStageMatrixData* m = (_cmsStageMatrixData*) mpe -> Data;
- }
+ n = mpe->InputChannels * mpe->OutputChannels;
+
+ // Write the Matrix
+ for (i = 0; i < n; i++)
+ {
+ if (!_cmsWrite15Fixed16Number(ContextID, io, m->Double[i])) return FALSE;
+ }
+
+ if (m->Offset != NULL) {
+
+ for (i = 0; i < mpe->OutputChannels; i++)
+ {
+ if (!_cmsWrite15Fixed16Number(ContextID, io, m->Offset[i])) return FALSE;
+ }
+ }
+ else {
+ for (i = 0; i < mpe->OutputChannels; i++)
+ {
+ if (!_cmsWrite15Fixed16Number(ContextID, io, 0)) return FALSE;
+ }
+ }
return TRUE;
diff --git a/lcms2mt/src/cmsvirt.c b/lcms2mt/src/cmsvirt.c
index fbb3756f..6c0890f5 100644
--- a/lcms2mt/src/cmsvirt.c
+++ b/lcms2mt/src/cmsvirt.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -341,7 +341,7 @@ Error:
// K: Does not change
static
-int InkLimitingSampler(cmsContext ContextID, register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo)
+int InkLimitingSampler(cmsContext ContextID, CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo)
{
cmsFloat64Number InkLimit = *(cmsFloat64Number *) Cargo;
cmsFloat64Number SumCMY, SumCMYK, Ratio;
@@ -642,7 +642,7 @@ typedef struct {
static
-int bchswSampler(cmsContext ContextID, register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo)
+int bchswSampler(cmsContext ContextID, CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo)
{
cmsCIELab LabIn, LabOut;
cmsCIELCh LChIn, LChOut;
@@ -1058,9 +1058,10 @@ cmsHPROFILE CMSEXPORT cmsTransform2DeviceLink(cmsContext ContextID, cmsHTRANSFOR
goto Error;
}
- // On the output side too
+ // On the output side too. Note that due to V2/V4 PCS encoding on lab we cannot fix white misalignments
if ((xform ->core->ExitColorSpace) == cmsSigLabData && (Version < 4.0)) {
+ dwFlags |= cmsFLAGS_NOWHITEONWHITEFIXUP;
if (!cmsPipelineInsertStage(ContextID, LUT, cmsAT_END, _cmsStageAllocLabV4ToV2(ContextID)))
goto Error;
}
diff --git a/lcms2mt/src/cmswtpnt.c b/lcms2mt/src/cmswtpnt.c
index e6d7c308..aaa57a32 100644
--- a/lcms2mt/src/cmswtpnt.c
+++ b/lcms2mt/src/cmswtpnt.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lcms2mt/src/cmsxform.c b/lcms2mt/src/cmsxform.c
index 52f4815a..416b1e6d 100644
--- a/lcms2mt/src/cmsxform.c
+++ b/lcms2mt/src/cmsxform.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -166,6 +166,23 @@ void CMSEXPORT cmsDeleteTransform(cmsContext ContextID, cmsHTRANSFORM hTransform
_cmsFree(ContextID, (void *)core);
}
+
+static
+cmsUInt32Number PixelSize(cmsUInt32Number Format)
+{
+ cmsUInt32Number fmt_bytes = T_BYTES(Format);
+
+ // For double, the T_BYTES field is zero
+ if (fmt_bytes == 0)
+ return sizeof(cmsUInt64Number);
+
+ // Otherwise, it is already correct for all formats
+ return fmt_bytes;
+}
+
+
+
+
// Apply transform.
void CMSEXPORT cmsDoTransform(cmsContext ContextID, cmsHTRANSFORM Transform,
const void* InputBuffer,
@@ -178,8 +195,8 @@ void CMSEXPORT cmsDoTransform(cmsContext ContextID, cmsHTRANSFORM Transform,
stride.BytesPerLineIn = 0; // Not used
stride.BytesPerLineOut = 0;
- stride.BytesPerPlaneIn = Size;
- stride.BytesPerPlaneOut = Size;
+ stride.BytesPerPlaneIn = Size * PixelSize(p->InputFormat);
+ stride.BytesPerPlaneOut = Size * PixelSize(p->OutputFormat);
p -> xform(ContextID, p, InputBuffer, OutputBuffer, Size, 1, &stride);
}
@@ -949,7 +966,7 @@ cmsBool _cmsRegisterTransformPlugin(cmsContext ContextID, cmsPluginBase* Data)
if (fl == NULL) return FALSE;
// Check for full xform plug-ins previous to 2.8, we would need an adapter in that case
- if (Plugin->base.ExpectedVersion < 80) {
+ if (Plugin->base.ExpectedVersion < 2080-2000) {
fl->OldXform = TRUE;
}
@@ -1059,7 +1076,7 @@ _cmsFindFormatter(_cmsTRANSFORM* p, cmsUInt32Number InputFormat, cmsUInt32Number
return;
case CHANNELS_SH(3) | BYTES_SH(1) | ((CHANNELS_SH(1) | BYTES_SH(1))<<6):
p ->xform = CachedXFORM3to1;
- return;
+ return;
case CHANNELS_SH(3) | BYTES_SH(2) | ((CHANNELS_SH(1) | BYTES_SH(2))<<6):
p ->xform = CachedXFORM3x2to1x2;
return;
@@ -1136,13 +1153,8 @@ _cmsTRANSFORM* AllocEmptyTransform(cmsContext ContextID, cmsPipeline* lut,
p->core->Lut = lut;
// Let's see if any plug-in want to do the transform by itself
- if (core->Lut != NULL) {
-
- // First, optimise the pipeline. This may cause us to recognise that the Luts are
- // identity.
- _cmsOptimizePipeline(ContextID, &core->Lut, Intent, InputFormat, OutputFormat, dwFlags);
+ if (core->Lut != NULL && !(*dwFlags & cmsFLAGS_NOOPTIMIZE)) {
- if (_cmsLutIsIdentity(core->Lut) == FALSE) {
for (Plugin = ctx->TransformCollection;
Plugin != NULL;
Plugin = Plugin->Next) {
@@ -1175,8 +1187,9 @@ _cmsTRANSFORM* AllocEmptyTransform(cmsContext ContextID, cmsPipeline* lut,
return p;
}
}
- }
+ // Not suitable for the transform plug-in, let's check the pipeline plug-in
+ _cmsOptimizePipeline(ContextID, &core->Lut, Intent, InputFormat, OutputFormat, dwFlags);
}
// Check whatever this is a true floating point transform
@@ -1594,9 +1607,6 @@ cmsHTRANSFORM cmsCloneTransformChangingFormats(cmsContext ContextID,
const _cmsTRANSFORM *oldXform = (const _cmsTRANSFORM *)hTransform;
_cmsTRANSFORM *xform;
cmsFormatter16 FromInput, ToOutput;
- _cmsTransformPluginChunkType* ctx = (_cmsTransformPluginChunkType*)_cmsContextGetClientChunk(ContextID, TransformPlugin);
- _cmsTransformCollection* Plugin;
- _cmsTRANSFORMCORE *core;
_cmsAssert(oldXform != NULL && oldXform->core != NULL);
@@ -1625,20 +1635,6 @@ cmsHTRANSFORM cmsCloneTransformChangingFormats(cmsContext ContextID,
xform ->OutputFormat = OutputFormat;
xform ->FromInput = FromInput;
xform ->ToOutput = ToOutput;
-
- /* Transformation plug-in support needed here but only if lcms has determined
- that this lut is not the identity transform */
- if (oldXform->core->Lut != NULL && _cmsLutIsIdentity(oldXform->core->Lut) == FALSE) {
- for (Plugin = ctx->TransformCollection; Plugin != NULL; Plugin = Plugin->Next) {
- core = xform->core;
- if (Plugin->Factory(ContextID, &xform->xform, &core->UserData,
- &core->FreeUserData, &core->Lut, &InputFormat, &OutputFormat, NULL)) {
- (void)_cmsAdjustReferenceCount(&xform->core->refs, 1);
- return xform;
- }
- }
- }
-
_cmsFindFormatter(xform, InputFormat, OutputFormat, xform->core->dwOriginalFlags);
(void)_cmsAdjustReferenceCount(&xform->core->refs, 1);
diff --git a/lcms2mt/src/lcms2_internal.h b/lcms2mt/src/lcms2_internal.h
index 89625592..12993282 100644
--- a/lcms2mt/src/lcms2_internal.h
+++ b/lcms2mt/src/lcms2_internal.h
@@ -1,7 +1,7 @@
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -47,7 +47,7 @@
#endif
// BorlandC 5.5, VC2003 are broken on that
-#if defined(__BORLANDC__) || defined(_MSC_VER) && (_MSC_VER < 1400) // 1400 == VC++ 8.0
+#if defined(__BORLANDC__) || (defined(_MSC_VER) && (_MSC_VER < 1400)) // 1400 == VC++ 8.0
#define sinf(x) (float)sin((float)x)
#define sqrtf(x) (float)sqrt((float)x)
#endif
@@ -88,11 +88,11 @@
# define cmsINLINE static inline
#endif
-// Allow signed overflow, we know this is harmless in this particular context
+// Allow signed overflow, we know this is harmless in this particular context
#if defined(__clang__)
# define CMS_NO_SANITIZE __attribute__((no_sanitize("signed-integer-overflow")))
#else
-# define CMS_NO_SANITIZE
+# define CMS_NO_SANITIZE
#endif
// Other replacement functions
@@ -517,8 +517,6 @@ struct _cmsContext_struct {
// If NULL, then it reverts to global Context0
_cmsMemPluginChunkType DefaultMemoryManager; // The allocators used for creating the context itself. Cannot be overridden
-
- cmsUInt32Number dwFlags; // Horrid, but safe hack
};
// Returns a pointer to a valid context structure, including the global one if id is zero.
@@ -940,6 +938,9 @@ cmsBool _cmsReadCHAD(cmsContext ContextID, cmsMAT3* Dest, cmsHPROFILE
// Profile linker --------------------------------------------------------------------------------------------------
+// Link several profiles to obtain a single LUT modelling the whole color transform. Intents, Black point
+// compensation and Adaptation parameters may vary across profiles. BPC and Adaptation refers to the PCS
+// after the profile. I.e, BPC[0] refers to connexion between profile(0) and profile(1)
cmsPipeline* _cmsLinkProfiles(cmsContext ContextID,
cmsUInt32Number nProfiles,
cmsUInt32Number TheIntents[],
diff --git a/lcms2mt/src/lcms2mt.def b/lcms2mt/src/lcms2mt.def
index f329f596..0703fed8 100644
--- a/lcms2mt/src/lcms2mt.def
+++ b/lcms2mt/src/lcms2mt.def
@@ -55,6 +55,7 @@ cmsDetectTAC = cmsDetectTAC
cmsDesaturateLab = cmsDesaturateLab
cmsDoTransform = cmsDoTransform
cmsDoTransformStride = cmsDoTransformStride
+cmsDoTransformLineStride = cmsDoTransformLineStride
_cmsDoubleTo15Fixed16 = _cmsDoubleTo15Fixed16
_cmsDoubleTo8Fixed8 = _cmsDoubleTo8Fixed8
_cmsDupMem = _cmsDupMem
@@ -221,6 +222,8 @@ cmsOpenIOhandlerFromMem = cmsOpenIOhandlerFromMem
cmsOpenIOhandlerFromNULL = cmsOpenIOhandlerFromNULL
cmsOpenIOhandlerFromStream = cmsOpenIOhandlerFromStream
cmsOpenProfileFromFile = cmsOpenProfileFromFile
+cmsOpenProfileFromIOhandler = cmsOpenProfileFromIOhandler
+cmsOpenProfileFromIOhandler2 = cmsOpenProfileFromIOhandler2
cmsOpenProfileFromMem = cmsOpenProfileFromMem
cmsOpenProfileFromStream = cmsOpenProfileFromStream
cmsPlugin = cmsPlugin
@@ -306,6 +309,12 @@ cmsCreateContext = cmsCreateContext
cmsDupContext = cmsDupContext
cmsDeleteContext = cmsDeleteContext
cmsGetContextUserData = cmsGetContextUserData
+cmsUnregisterPlugins = cmsUnregisterPlugins
+cmsSetAlarmCodes = cmsSetAlarmCodes
+cmsGetAlarmCodes = cmsGetAlarmCodes
+cmsSetAdaptationState = cmsSetAdaptationState
+cmsSetLogErrorHandler = cmsSetLogErrorHandler
+cmsGetSupportedIntents = cmsGetSupportedIntents
cmsMLUtranslationsCount = cmsMLUtranslationsCount
cmsMLUtranslationsCodes = cmsMLUtranslationsCodes
_cmsCreateMutex = _cmsCreateMutex
@@ -314,3 +323,24 @@ _cmsLockMutex = _cmsLockMutex
_cmsUnlockMutex = _cmsUnlockMutex
cmsGetProfileIOhandler = cmsGetProfileIOhandler
cmsGetEncodedCMMversion = cmsGetEncodedCMMversion
+_cmsFloat2Half = _cmsFloat2Half
+_cmsHalf2Float = _cmsHalf2Float
+_cmsFreeInterpParams = _cmsFreeInterpParams
+_cmsGetFormatter = _cmsGetFormatter
+_cmsGetTransformFormatters16 = _cmsGetTransformFormatters16
+_cmsGetTransformFormattersFloat = _cmsGetTransformFormattersFloat
+_cmsQuantizeVal = _cmsQuantizeVal
+_cmsReadDevicelinkLUT = _cmsReadDevicelinkLUT
+_cmsReadInputLUT = _cmsReadInputLUT
+_cmsReadOutputLUT = _cmsReadOutputLUT
+_cmsStageAllocIdentityCLut = _cmsStageAllocIdentityCLut
+_cmsStageAllocIdentityCurves = _cmsStageAllocIdentityCurves
+_cmsStageAllocLab2XYZ = _cmsStageAllocLab2XYZ
+_cmsStageAllocLabV2ToV4 = _cmsStageAllocLabV2ToV4
+_cmsStageAllocLabV4ToV2 = _cmsStageAllocLabV4ToV2
+_cmsStageAllocNamedColor = _cmsStageAllocNamedColor
+_cmsStageAllocXYZ2Lab = _cmsStageAllocXYZ2Lab
+cmsMD5add = cmsMD5add
+cmsMD5alloc = cmsMD5alloc
+cmsMD5finish = cmsMD5finish
+_cmsComputeInterpParams = _cmsComputeInterpParams
diff --git a/lcms2mt/testbed/Makefile.am b/lcms2mt/testbed/Makefile.am
index 50e34398..8fd93f93 100644
--- a/lcms2mt/testbed/Makefile.am
+++ b/lcms2mt/testbed/Makefile.am
@@ -14,7 +14,7 @@ check_PROGRAMS = testcms
# The testsuite binary is statically linked. This is necessary as it uses some
# of the internal functions that are not necessarily exported by the shared
# library.
-testcms_LDADD = $(top_builddir)/src/liblcms2.la
+testcms_LDADD = $(top_builddir)/src/liblcms2mt.la
testcms_LDFLAGS = -static @LDFLAGS@
testcms_SOURCES = testcms2.c testplugin.c zoo_icc.c testcms2.h
diff --git a/lcms2mt/testbed/Makefile.in b/lcms2mt/testbed/Makefile.in
index efc8c2b8..d8f9416d 100644
--- a/lcms2mt/testbed/Makefile.in
+++ b/lcms2mt/testbed/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -112,7 +112,7 @@ CONFIG_CLEAN_VPATH_FILES =
am_testcms_OBJECTS = testcms2.$(OBJEXT) testplugin.$(OBJEXT) \
zoo_icc.$(OBJEXT)
testcms_OBJECTS = $(am_testcms_OBJECTS)
-testcms_DEPENDENCIES = $(top_builddir)/src/liblcms2.la
+testcms_DEPENDENCIES = $(top_builddir)/src/liblcms2mt.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -134,7 +134,9 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/testcms2.Po \
+ ./$(DEPDIR)/testplugin.Po ./$(DEPDIR)/zoo_icc.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -332,7 +334,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/
# The testsuite binary is statically linked. This is necessary as it uses some
# of the internal functions that are not necessarily exported by the shared
# library.
-testcms_LDADD = $(top_builddir)/src/liblcms2.la
+testcms_LDADD = $(top_builddir)/src/liblcms2mt.la
testcms_LDFLAGS = -static @LDFLAGS@
testcms_SOURCES = testcms2.c testplugin.c zoo_icc.c testcms2.h
EXTRA_DIST = test1.icc bad.icc toosmall.icc test2.icc \
@@ -360,8 +362,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -392,9 +394,15 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testcms2.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testplugin.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoo_icc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testcms2.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testplugin.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoo_icc.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -478,7 +486,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@@ -549,7 +560,9 @@ clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
mostlyclean-am
distclean: distclean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/testcms2.Po
+ -rm -f ./$(DEPDIR)/testplugin.Po
+ -rm -f ./$(DEPDIR)/zoo_icc.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -595,7 +608,9 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/testcms2.Po
+ -rm -f ./$(DEPDIR)/testplugin.Po
+ -rm -f ./$(DEPDIR)/zoo_icc.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -616,7 +631,7 @@ uninstall-am:
.MAKE: check-am install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
diff --git a/lcms2mt/testbed/new.icc b/lcms2mt/testbed/new.icc
index 53b3505c..bd90c3dc 100644
--- a/lcms2mt/testbed/new.icc
+++ b/lcms2mt/testbed/new.icc
Binary files differ
diff --git a/lcms2mt/testbed/testcms2.c b/lcms2mt/testbed/testcms2.c
index 025c79ab..f633f565 100644
--- a/lcms2mt/testbed/testcms2.c
+++ b/lcms2mt/testbed/testcms2.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -27,14 +27,8 @@
#include "testcms2.h"
-// On Visual Studio, use debug CRT
-#ifdef _MSC_VER
-# include "crtdbg.h"
-# include <io.h>
-#endif
-
// A single check. Returns 1 if success, 0 if failed
-typedef cmsInt32Number (*TestFn)(void);
+typedef cmsInt32Number (*TestFn)(cmsContext);
// A parametric Tone curve test function
typedef cmsFloat32Number (* dblfnptr)(cmsFloat32Number x, const cmsFloat64Number Params[]);
@@ -101,7 +95,7 @@ cmsContext DbgThread(void)
{
static cmsUInt32Number n = 1;
- return (cmsContext) (void*)(n++ % 0xff0);
+ return (cmsContext) (void*) ((cmsUInt8Number*) NULL + (n++ % 0xff0));
}
// The allocate routine
@@ -220,7 +214,7 @@ void TestMemoryLeaks(cmsBool ok)
}
// Here we go with the plug-in declaration
-static cmsPluginMemHandler DebugMemHandler = {{ cmsPluginMagicNumber, 2060, cmsPluginMemHandlerSig, NULL },
+static cmsPluginMemHandler DebugMemHandler = {{ cmsPluginMagicNumber, 2060-2000, cmsPluginMemHandlerSig, NULL },
DebugMalloc, DebugFree, DebugRealloc, NULL, NULL, NULL };
// Returns a pointer to the memhandler plugin
@@ -296,8 +290,10 @@ void SubTest(const char* frm, ...)
// The check framework
static
-void Check(const char* Title, TestFn Fn)
+void Check(cmsContext ContextID, const char* Title, TestFn Fn)
{
+ cmsContext ctx = DbgThread();
+
printf("Checking %s ...", Title);
fflush(stdout);
@@ -307,7 +303,7 @@ void Check(const char* Title, TestFn Fn)
SimultaneousErrors = 0;
TotalTests++;
- if (Fn() && !TrappedError) {
+ if (Fn(ctx) && !TrappedError) {
// It is a good place to check memory
TestMemoryLeaks(TRUE);
@@ -330,30 +326,30 @@ void Check(const char* Title, TestFn Fn)
}
// Dump a tone curve, for easy diagnostic
-void DumpToneCurve(cmsToneCurve* gamma, const char* FileName)
+void DumpToneCurve(cmsContext ContextID, cmsToneCurve* gamma, const char* FileName)
{
cmsHANDLE hIT8;
cmsUInt32Number i;
- hIT8 = cmsIT8Alloc(DbgThread());
+ hIT8 = cmsIT8Alloc(ContextID);
- cmsIT8SetPropertyDbl(DbgThread(), hIT8, "NUMBER_OF_FIELDS", 2);
- cmsIT8SetPropertyDbl(DbgThread(), hIT8, "NUMBER_OF_SETS", gamma ->nEntries);
+ cmsIT8SetPropertyDbl(ContextID, hIT8, "NUMBER_OF_FIELDS", 2);
+ cmsIT8SetPropertyDbl(ContextID, hIT8, "NUMBER_OF_SETS", gamma ->nEntries);
- cmsIT8SetDataFormat(DbgThread(), hIT8, 0, "SAMPLE_ID");
- cmsIT8SetDataFormat(DbgThread(), hIT8, 1, "VALUE");
+ cmsIT8SetDataFormat(ContextID, hIT8, 0, "SAMPLE_ID");
+ cmsIT8SetDataFormat(ContextID, hIT8, 1, "VALUE");
for (i=0; i < gamma ->nEntries; i++) {
char Val[30];
sprintf(Val, "%u", i);
- cmsIT8SetDataRowCol(DbgThread(), hIT8, i, 0, Val);
+ cmsIT8SetDataRowCol(ContextID, hIT8, i, 0, Val);
sprintf(Val, "0x%x", gamma ->Table16[i]);
- cmsIT8SetDataRowCol(DbgThread(), hIT8, i, 1, Val);
+ cmsIT8SetDataRowCol(ContextID, hIT8, i, 1, Val);
}
- cmsIT8SaveToFile(DbgThread(), hIT8, FileName);
- cmsIT8Free(DbgThread(), hIT8);
+ cmsIT8SaveToFile(ContextID, hIT8, FileName);
+ cmsIT8Free(ContextID, hIT8);
}
// -------------------------------------------------------------------------------------------------
@@ -363,7 +359,7 @@ void DumpToneCurve(cmsToneCurve* gamma, const char* FileName)
// The space used is a clone of a well-known commercial
// color space which I will name "Above RGB"
static
-cmsHPROFILE Create_AboveRGB(void)
+cmsHPROFILE Create_AboveRGB(cmsContext ctx)
{
cmsToneCurve* Curve[3];
cmsHPROFILE hProfile;
@@ -372,65 +368,65 @@ cmsHPROFILE Create_AboveRGB(void)
{0.21, 0.71, 1 },
{0.15, 0.06, 1 }};
- Curve[0] = Curve[1] = Curve[2] = cmsBuildGamma(DbgThread(), 2.19921875);
+ Curve[0] = Curve[1] = Curve[2] = cmsBuildGamma(ctx, 2.19921875);
- cmsWhitePointFromTemp(DbgThread(), &D65, 6504);
- hProfile = cmsCreateRGBProfile(DbgThread(), &D65, &Primaries, Curve);
- cmsFreeToneCurve(DbgThread(), Curve[0]);
+ cmsWhitePointFromTemp(ctx, &D65, 6504);
+ hProfile = cmsCreateRGBProfile(ctx, &D65, &Primaries, Curve);
+ cmsFreeToneCurve(ctx, Curve[0]);
return hProfile;
}
// A gamma-2.2 gray space
static
-cmsHPROFILE Create_Gray22(void)
+cmsHPROFILE Create_Gray22(cmsContext ctx)
{
cmsHPROFILE hProfile;
- cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 2.2);
+ cmsToneCurve* Curve = cmsBuildGamma(ctx, 2.2);
if (Curve == NULL) return NULL;
- hProfile = cmsCreateGrayProfile(DbgThread(), cmsD50_xyY(DbgThread()), Curve);
- cmsFreeToneCurve(DbgThread(), Curve);
+ hProfile = cmsCreateGrayProfile(ctx, cmsD50_xyY(ctx), Curve);
+ cmsFreeToneCurve(ctx, Curve);
return hProfile;
}
// A gamma-3.0 gray space
static
-cmsHPROFILE Create_Gray30(void)
+cmsHPROFILE Create_Gray30(cmsContext ctx)
{
cmsHPROFILE hProfile;
- cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 3.0);
+ cmsToneCurve* Curve = cmsBuildGamma(ctx, 3.0);
if (Curve == NULL) return NULL;
- hProfile = cmsCreateGrayProfile(DbgThread(), cmsD50_xyY(DbgThread()), Curve);
- cmsFreeToneCurve(DbgThread(), Curve);
+ hProfile = cmsCreateGrayProfile(ctx, cmsD50_xyY(ctx), Curve);
+ cmsFreeToneCurve(ctx, Curve);
return hProfile;
}
static
-cmsHPROFILE Create_GrayLab(void)
+cmsHPROFILE Create_GrayLab(cmsContext ctx)
{
cmsHPROFILE hProfile;
- cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 1.0);
+ cmsToneCurve* Curve = cmsBuildGamma(ctx, 1.0);
if (Curve == NULL) return NULL;
- hProfile = cmsCreateGrayProfile(DbgThread(), cmsD50_xyY(DbgThread()), Curve);
- cmsFreeToneCurve(DbgThread(), Curve);
+ hProfile = cmsCreateGrayProfile(ctx, cmsD50_xyY(ctx), Curve);
+ cmsFreeToneCurve(ctx, Curve);
- cmsSetPCS(DbgThread(), hProfile, cmsSigLabData);
+ cmsSetPCS(ctx, hProfile, cmsSigLabData);
return hProfile;
}
// A CMYK devicelink that adds gamma 3.0 to each channel
static
-cmsHPROFILE Create_CMYK_DeviceLink(void)
+cmsHPROFILE Create_CMYK_DeviceLink(cmsContext ctx)
{
cmsHPROFILE hProfile;
cmsToneCurve* Tab[4];
- cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 3.0);
+ cmsToneCurve* Curve = cmsBuildGamma(ctx, 3.0);
if (Curve == NULL) return NULL;
Tab[0] = Curve;
@@ -438,10 +434,10 @@ cmsHPROFILE Create_CMYK_DeviceLink(void)
Tab[2] = Curve;
Tab[3] = Curve;
- hProfile = cmsCreateLinearizationDeviceLink(DbgThread(), cmsSigCmykData, Tab);
+ hProfile = cmsCreateLinearizationDeviceLink(ctx, cmsSigCmykData, Tab);
if (hProfile == NULL) return NULL;
- cmsFreeToneCurve(DbgThread(), Curve);
+ cmsFreeToneCurve(ctx, Curve);
return hProfile;
}
@@ -473,7 +469,7 @@ cmsInt32Number ForwardSampler(cmsContext ContextID, register const cmsUInt16Numb
cmsFloat64Number rgb[3], cmyk[4];
cmsFloat64Number c, m, y, k;
- cmsDoTransform(DbgThread(), p ->hLab2sRGB, In, rgb, 1);
+ cmsDoTransform(ContextID, p ->hLab2sRGB, In, rgb, 1);
c = 1 - rgb[0];
m = 1 - rgb[1];
@@ -490,7 +486,7 @@ cmsInt32Number ForwardSampler(cmsContext ContextID, register const cmsUInt16Numb
cmyk[2] = y;
cmyk[3] = k;
- cmsDoTransform(DbgThread(), p ->hIlimit, cmyk, Out, 1);
+ cmsDoTransform(ContextID, p ->hIlimit, cmyk, Out, 1);
return 1;
}
@@ -525,27 +521,24 @@ cmsInt32Number ReverseSampler(cmsContext ContextID, register const cmsUInt16Numb
rgb[2] = Clip((1 - y) * (1 - k));
}
- cmsDoTransform(DbgThread(), p ->sRGB2Lab, rgb, Out, 1);
+ cmsDoTransform(ContextID, p ->sRGB2Lab, rgb, Out, 1);
return 1;
}
static
-cmsHPROFILE CreateFakeCMYK(cmsFloat64Number InkLimit, cmsBool lUseAboveRGB)
+cmsHPROFILE CreateFakeCMYK(cmsContext ContextID, cmsFloat64Number InkLimit, cmsBool lUseAboveRGB)
{
cmsHPROFILE hICC;
cmsPipeline* AToB0, *BToA0;
cmsStage* CLUT;
- cmsContext ContextID;
FakeCMYKParams p;
cmsHPROFILE hLab, hsRGB, hLimit;
cmsUInt32Number cmykfrm;
- ContextID = DbgThread();
-
if (lUseAboveRGB)
- hsRGB = Create_AboveRGB();
+ hsRGB = Create_AboveRGB(ContextID);
else
hsRGB = cmsCreate_sRGBProfile(ContextID);
@@ -610,18 +603,18 @@ cmsHPROFILE CreateFakeCMYK(cmsFloat64Number InkLimit, cmsBool lUseAboveRGB)
// Does create several profiles for latter use------------------------------------------------------------------------------------------------
static
-cmsInt32Number OneVirtual(cmsHPROFILE h, const char* SubTestTxt, const char* FileName)
+cmsInt32Number OneVirtual(cmsContext ctx, cmsHPROFILE h, const char* SubTestTxt, const char* FileName)
{
SubTest(SubTestTxt);
if (h == NULL) return 0;
- if (!cmsSaveProfileToFile(DbgThread(), h, FileName)) return 0;
- cmsCloseProfile(DbgThread(), h);
+ if (!cmsSaveProfileToFile(ctx, h, FileName)) return 0;
+ cmsCloseProfile(ctx, h);
- h = cmsOpenProfileFromFile(DbgThread(), FileName, "r");
+ h = cmsOpenProfileFromFile(ctx, FileName, "r");
if (h == NULL) return 0;
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ctx, h);
return 1;
}
@@ -630,77 +623,77 @@ cmsInt32Number OneVirtual(cmsHPROFILE h, const char* SubTestTxt, const char* Fil
// This test checks the ability of lcms2 to save its built-ins as valid profiles.
// It does not check the functionality of such profiles
static
-cmsInt32Number CreateTestProfiles(void)
+cmsInt32Number CreateTestProfiles(cmsContext ctx)
{
cmsHPROFILE h;
- h = cmsCreate_sRGBProfile(DbgThread());
- if (!OneVirtual(h, "sRGB profile", "sRGBlcms2.icc")) return 0;
+ h = cmsCreate_sRGBProfile(ctx);
+ if (!OneVirtual(ctx, h, "sRGB profile", "sRGBlcms2.icc")) return 0;
// ----
- h = Create_AboveRGB();
- if (!OneVirtual(h, "aRGB profile", "aRGBlcms2.icc")) return 0;
+ h = Create_AboveRGB(ctx);
+ if (!OneVirtual(ctx, h, "aRGB profile", "aRGBlcms2.icc")) return 0;
// ----
- h = Create_Gray22();
- if (!OneVirtual(h, "Gray profile", "graylcms2.icc")) return 0;
+ h = Create_Gray22(ctx);
+ if (!OneVirtual(ctx, h, "Gray profile", "graylcms2.icc")) return 0;
// ----
- h = Create_Gray30();
- if (!OneVirtual(h, "Gray 3.0 profile", "gray3lcms2.icc")) return 0;
+ h = Create_Gray30(ctx);
+ if (!OneVirtual(ctx, h, "Gray 3.0 profile", "gray3lcms2.icc")) return 0;
// ----
- h = Create_GrayLab();
- if (!OneVirtual(h, "Gray Lab profile", "glablcms2.icc")) return 0;
+ h = Create_GrayLab(ctx);
+ if (!OneVirtual(ctx, h, "Gray Lab profile", "glablcms2.icc")) return 0;
// ----
- h = Create_CMYK_DeviceLink();
- if (!OneVirtual(h, "Linearization profile", "linlcms2.icc")) return 0;
+ h = Create_CMYK_DeviceLink(ctx);
+ if (!OneVirtual(ctx, h, "Linearization profile", "linlcms2.icc")) return 0;
// -------
- h = cmsCreateInkLimitingDeviceLink(DbgThread(), cmsSigCmykData, 150);
+ h = cmsCreateInkLimitingDeviceLink(ctx, cmsSigCmykData, 150);
if (h == NULL) return 0;
- if (!OneVirtual(h, "Ink-limiting profile", "limitlcms2.icc")) return 0;
+ if (!OneVirtual(ctx, h, "Ink-limiting profile", "limitlcms2.icc")) return 0;
// ------
- h = cmsCreateLab2Profile(DbgThread(), NULL);
- if (!OneVirtual(h, "Lab 2 identity profile", "labv2lcms2.icc")) return 0;
+ h = cmsCreateLab2Profile(ctx, NULL);
+ if (!OneVirtual(ctx, h, "Lab 2 identity profile", "labv2lcms2.icc")) return 0;
// ----
- h = cmsCreateLab4Profile(DbgThread(), NULL);
- if (!OneVirtual(h, "Lab 4 identity profile", "labv4lcms2.icc")) return 0;
+ h = cmsCreateLab4Profile(ctx, NULL);
+ if (!OneVirtual(ctx, h, "Lab 4 identity profile", "labv4lcms2.icc")) return 0;
// ----
- h = cmsCreateXYZProfile(DbgThread());
- if (!OneVirtual(h, "XYZ identity profile", "xyzlcms2.icc")) return 0;
+ h = cmsCreateXYZProfile(ctx);
+ if (!OneVirtual(ctx, h, "XYZ identity profile", "xyzlcms2.icc")) return 0;
// ----
- h = cmsCreateNULLProfile(DbgThread());
- if (!OneVirtual(h, "NULL profile", "nullcms2.icc")) return 0;
+ h = cmsCreateNULLProfile(ctx);
+ if (!OneVirtual(ctx, h, "NULL profile", "nullcms2.icc")) return 0;
// ---
- h = cmsCreateBCHSWabstractProfile(DbgThread(), 17, 0, 0, 0, 0, 5000, 6000);
- if (!OneVirtual(h, "BCHS profile", "bchslcms2.icc")) return 0;
+ h = cmsCreateBCHSWabstractProfile(ctx, 17, 0, 0, 0, 0, 5000, 6000);
+ if (!OneVirtual(ctx, h, "BCHS profile", "bchslcms2.icc")) return 0;
// ---
- h = CreateFakeCMYK(300, FALSE);
- if (!OneVirtual(h, "Fake CMYK profile", "lcms2cmyk.icc")) return 0;
+ h = CreateFakeCMYK(ctx, 300, FALSE);
+ if (!OneVirtual(ctx, h, "Fake CMYK profile", "lcms2cmyk.icc")) return 0;
// ---
- h = cmsCreateBCHSWabstractProfile(DbgThread(), 17, 0, 1.2, 0, 3, 5000, 5000);
- if (!OneVirtual(h, "Brightness", "brightness.icc")) return 0;
+ h = cmsCreateBCHSWabstractProfile(ctx, 17, 0, 1.2, 0, 3, 5000, 5000);
+ if (!OneVirtual(ctx, h, "Brightness", "brightness.icc")) return 0;
return 1;
}
@@ -729,7 +722,7 @@ void RemoveTestProfiles(void)
// Check the size of basic types. If this test fails, nothing is going to work anyway
static
-cmsInt32Number CheckBaseTypes(void)
+cmsInt32Number CheckBaseTypes(cmsContext ContextID)
{
// Ignore warnings about conditional expression
#ifdef _MSC_VER
@@ -759,7 +752,7 @@ cmsInt32Number CheckBaseTypes(void)
// Are we little or big endian? From Harbison&Steele.
static
-cmsInt32Number CheckEndianness(void)
+cmsInt32Number CheckEndianness(cmsContext ContextID)
{
cmsInt32Number BigEndian, IsOk;
union {
@@ -787,7 +780,7 @@ cmsInt32Number CheckEndianness(void)
// Check quick floor
static
-cmsInt32Number CheckQuickFloor(void)
+cmsInt32Number CheckQuickFloor(cmsContext ContextID)
{
if ((_cmsQuickFloor(1.234) != 1) ||
(_cmsQuickFloor(32767.234) != 32767) ||
@@ -805,7 +798,7 @@ cmsInt32Number CheckQuickFloor(void)
// Quick floor restricted to word
static
-cmsInt32Number CheckQuickFloorWord(void)
+cmsInt32Number CheckQuickFloorWord(cmsContext ContextID)
{
cmsUInt32Number i;
@@ -890,51 +883,51 @@ cmsBool IsGoodWordPrec(const char *title, cmsUInt16Number in, cmsUInt16Number o
// Fixed point ----------------------------------------------------------------------------------------------
static
-cmsInt32Number TestSingleFixed15_16(cmsFloat64Number d)
+cmsInt32Number TestSingleFixed15_16(cmsContext ContextID, cmsFloat64Number d)
{
- cmsS15Fixed16Number f = _cmsDoubleTo15Fixed16(DbgThread(), d);
- cmsFloat64Number RoundTrip = _cms15Fixed16toDouble(DbgThread(), f);
+ cmsS15Fixed16Number f = _cmsDoubleTo15Fixed16(ContextID, d);
+ cmsFloat64Number RoundTrip = _cms15Fixed16toDouble(ContextID, f);
cmsFloat64Number Error = fabs(d - RoundTrip);
return ( Error <= FIXED_PRECISION_15_16);
}
static
-cmsInt32Number CheckFixedPoint15_16(void)
+cmsInt32Number CheckFixedPoint15_16(cmsContext ContextID)
{
- if (!TestSingleFixed15_16(1.0)) return 0;
- if (!TestSingleFixed15_16(2.0)) return 0;
- if (!TestSingleFixed15_16(1.23456)) return 0;
- if (!TestSingleFixed15_16(0.99999)) return 0;
- if (!TestSingleFixed15_16(0.1234567890123456789099999)) return 0;
- if (!TestSingleFixed15_16(-1.0)) return 0;
- if (!TestSingleFixed15_16(-2.0)) return 0;
- if (!TestSingleFixed15_16(-1.23456)) return 0;
- if (!TestSingleFixed15_16(-1.1234567890123456789099999)) return 0;
- if (!TestSingleFixed15_16(+32767.1234567890123456789099999)) return 0;
- if (!TestSingleFixed15_16(-32767.1234567890123456789099999)) return 0;
+ if (!TestSingleFixed15_16(ContextID, 1.0)) return 0;
+ if (!TestSingleFixed15_16(ContextID, 2.0)) return 0;
+ if (!TestSingleFixed15_16(ContextID, 1.23456)) return 0;
+ if (!TestSingleFixed15_16(ContextID, 0.99999)) return 0;
+ if (!TestSingleFixed15_16(ContextID, 0.1234567890123456789099999)) return 0;
+ if (!TestSingleFixed15_16(ContextID, -1.0)) return 0;
+ if (!TestSingleFixed15_16(ContextID, -2.0)) return 0;
+ if (!TestSingleFixed15_16(ContextID, -1.23456)) return 0;
+ if (!TestSingleFixed15_16(ContextID, -1.1234567890123456789099999)) return 0;
+ if (!TestSingleFixed15_16(ContextID, +32767.1234567890123456789099999)) return 0;
+ if (!TestSingleFixed15_16(ContextID, -32767.1234567890123456789099999)) return 0;
return 1;
}
static
-cmsInt32Number TestSingleFixed8_8(cmsFloat64Number d)
+cmsInt32Number TestSingleFixed8_8(cmsContext ContextID, cmsFloat64Number d)
{
- cmsS15Fixed16Number f = _cmsDoubleTo8Fixed8(DbgThread(), d);
- cmsFloat64Number RoundTrip = _cms8Fixed8toDouble(DbgThread(), (cmsUInt16Number) f);
+ cmsS15Fixed16Number f = _cmsDoubleTo8Fixed8(ContextID, d);
+ cmsFloat64Number RoundTrip = _cms8Fixed8toDouble(ContextID, (cmsUInt16Number) f);
cmsFloat64Number Error = fabs(d - RoundTrip);
return ( Error <= FIXED_PRECISION_8_8);
}
static
-cmsInt32Number CheckFixedPoint8_8(void)
+cmsInt32Number CheckFixedPoint8_8(cmsContext ContextID)
{
- if (!TestSingleFixed8_8(1.0)) return 0;
- if (!TestSingleFixed8_8(2.0)) return 0;
- if (!TestSingleFixed8_8(1.23456)) return 0;
- if (!TestSingleFixed8_8(0.99999)) return 0;
- if (!TestSingleFixed8_8(0.1234567890123456789099999)) return 0;
- if (!TestSingleFixed8_8(+255.1234567890123456789099999)) return 0;
+ if (!TestSingleFixed8_8(ContextID, 1.0)) return 0;
+ if (!TestSingleFixed8_8(ContextID, 2.0)) return 0;
+ if (!TestSingleFixed8_8(ContextID, 1.23456)) return 0;
+ if (!TestSingleFixed8_8(ContextID, 0.99999)) return 0;
+ if (!TestSingleFixed8_8(ContextID, 0.1234567890123456789099999)) return 0;
+ if (!TestSingleFixed8_8(ContextID, +255.1234567890123456789099999)) return 0;
return 1;
}
@@ -942,19 +935,19 @@ cmsInt32Number CheckFixedPoint8_8(void)
// D50 constant --------------------------------------------------------------------------------------------
static
-cmsInt32Number CheckD50Roundtrip(void)
+cmsInt32Number CheckD50Roundtrip(cmsContext ContextID)
{
cmsFloat64Number cmsD50X_2 = 0.96420288;
cmsFloat64Number cmsD50Y_2 = 1.0;
cmsFloat64Number cmsD50Z_2 = 0.82490540;
- cmsS15Fixed16Number xe = _cmsDoubleTo15Fixed16(DbgThread(), cmsD50X);
- cmsS15Fixed16Number ye = _cmsDoubleTo15Fixed16(DbgThread(), cmsD50Y);
- cmsS15Fixed16Number ze = _cmsDoubleTo15Fixed16(DbgThread(), cmsD50Z);
+ cmsS15Fixed16Number xe = _cmsDoubleTo15Fixed16(ContextID, cmsD50X);
+ cmsS15Fixed16Number ye = _cmsDoubleTo15Fixed16(ContextID, cmsD50Y);
+ cmsS15Fixed16Number ze = _cmsDoubleTo15Fixed16(ContextID, cmsD50Z);
- cmsFloat64Number x = _cms15Fixed16toDouble(DbgThread(), xe);
- cmsFloat64Number y = _cms15Fixed16toDouble(DbgThread(), ye);
- cmsFloat64Number z = _cms15Fixed16toDouble(DbgThread(), ze);
+ cmsFloat64Number x = _cms15Fixed16toDouble(ContextID, xe);
+ cmsFloat64Number y = _cms15Fixed16toDouble(ContextID, ye);
+ cmsFloat64Number z = _cms15Fixed16toDouble(ContextID, ze);
double dx = fabs(cmsD50X - x);
double dy = fabs(cmsD50Y - y);
@@ -968,13 +961,13 @@ cmsInt32Number CheckD50Roundtrip(void)
return 0;
}
- xe = _cmsDoubleTo15Fixed16(DbgThread(), cmsD50X_2);
- ye = _cmsDoubleTo15Fixed16(DbgThread(), cmsD50Y_2);
- ze = _cmsDoubleTo15Fixed16(DbgThread(), cmsD50Z_2);
+ xe = _cmsDoubleTo15Fixed16(ContextID, cmsD50X_2);
+ ye = _cmsDoubleTo15Fixed16(ContextID, cmsD50Y_2);
+ ze = _cmsDoubleTo15Fixed16(ContextID, cmsD50Z_2);
- x = _cms15Fixed16toDouble(DbgThread(), xe);
- y = _cms15Fixed16toDouble(DbgThread(), ye);
- z = _cms15Fixed16toDouble(DbgThread(), ze);
+ x = _cms15Fixed16toDouble(ContextID, xe);
+ y = _cms15Fixed16toDouble(ContextID, ye);
+ z = _cms15Fixed16toDouble(ContextID, ze);
dx = fabs(cmsD50X_2 - x);
dy = fabs(cmsD50Y_2 - y);
@@ -1019,7 +1012,7 @@ void BuildTable(cmsInt32Number n, cmsUInt16Number Tab[], cmsBool Descending)
// max_err = max allowed error
static
-cmsInt32Number Check1D(cmsInt32Number nNodesToCheck, cmsBool Down, cmsInt32Number max_err)
+cmsInt32Number Check1D(cmsContext ContextID, cmsInt32Number nNodesToCheck, cmsBool Down, cmsInt32Number max_err)
{
cmsUInt32Number i;
cmsUInt16Number in, out;
@@ -1029,7 +1022,7 @@ cmsInt32Number Check1D(cmsInt32Number nNodesToCheck, cmsBool Down, cmsInt32Numb
Tab = (cmsUInt16Number*) malloc(sizeof(cmsUInt16Number)* nNodesToCheck);
if (Tab == NULL) return 0;
- p = _cmsComputeInterpParams(DbgThread(), nNodesToCheck, 1, 1, Tab, CMS_LERP_FLAGS_16BITS);
+ p = _cmsComputeInterpParams(ContextID, nNodesToCheck, 1, 1, Tab, CMS_LERP_FLAGS_16BITS);
if (p == NULL) return 0;
BuildTable(nNodesToCheck, Tab, Down);
@@ -1039,85 +1032,85 @@ cmsInt32Number Check1D(cmsInt32Number nNodesToCheck, cmsBool Down, cmsInt32Numb
in = (cmsUInt16Number) i;
out = 0;
- p ->Interpolation.Lerp16(DbgThread(), &in, &out, p);
+ p ->Interpolation.Lerp16(ContextID, &in, &out, p);
if (Down) out = 0xffff - out;
if (abs(out - in) > max_err) {
Fail("(%dp): Must be %x, But is %x : ", nNodesToCheck, in, out);
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
free(Tab);
return 0;
}
}
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
free(Tab);
return 1;
}
static
-cmsInt32Number Check1DLERP2(void)
+cmsInt32Number Check1DLERP2(cmsContext ContextID)
{
- return Check1D(2, FALSE, 0);
+ return Check1D(ContextID, 2, FALSE, 0);
}
static
-cmsInt32Number Check1DLERP3(void)
+cmsInt32Number Check1DLERP3(cmsContext ContextID)
{
- return Check1D(3, FALSE, 1);
+ return Check1D(ContextID, 3, FALSE, 1);
}
static
-cmsInt32Number Check1DLERP4(void)
+cmsInt32Number Check1DLERP4(cmsContext ContextID)
{
- return Check1D(4, FALSE, 0);
+ return Check1D(ContextID, 4, FALSE, 0);
}
static
-cmsInt32Number Check1DLERP6(void)
+cmsInt32Number Check1DLERP6(cmsContext ContextID)
{
- return Check1D(6, FALSE, 0);
+ return Check1D(ContextID, 6, FALSE, 0);
}
static
-cmsInt32Number Check1DLERP18(void)
+cmsInt32Number Check1DLERP18(cmsContext ContextID)
{
- return Check1D(18, FALSE, 0);
+ return Check1D(ContextID, 18, FALSE, 0);
}
static
-cmsInt32Number Check1DLERP2Down(void)
+cmsInt32Number Check1DLERP2Down(cmsContext ContextID)
{
- return Check1D(2, TRUE, 0);
+ return Check1D(ContextID, 2, TRUE, 0);
}
static
-cmsInt32Number Check1DLERP3Down(void)
+cmsInt32Number Check1DLERP3Down(cmsContext ContextID)
{
- return Check1D(3, TRUE, 1);
+ return Check1D(ContextID, 3, TRUE, 1);
}
static
-cmsInt32Number Check1DLERP6Down(void)
+cmsInt32Number Check1DLERP6Down(cmsContext ContextID)
{
- return Check1D(6, TRUE, 0);
+ return Check1D(ContextID, 6, TRUE, 0);
}
static
-cmsInt32Number Check1DLERP18Down(void)
+cmsInt32Number Check1DLERP18Down(cmsContext ContextID)
{
- return Check1D(18, TRUE, 0);
+ return Check1D(ContextID, 18, TRUE, 0);
}
static
-cmsInt32Number ExhaustiveCheck1DLERP(void)
+cmsInt32Number ExhaustiveCheck1DLERP(cmsContext ContextID)
{
cmsUInt32Number j;
@@ -1126,7 +1119,7 @@ cmsInt32Number ExhaustiveCheck1DLERP(void)
if ((j % 10) == 0) printf("%u \r", j);
- if (!Check1D(j, FALSE, 1)) return 0;
+ if (!Check1D(ContextID, j, FALSE, 1)) return 0;
}
printf("\rResult is ");
@@ -1134,7 +1127,7 @@ cmsInt32Number ExhaustiveCheck1DLERP(void)
}
static
-cmsInt32Number ExhaustiveCheck1DLERPDown(void)
+cmsInt32Number ExhaustiveCheck1DLERPDown(cmsContext ContextID)
{
cmsUInt32Number j;
@@ -1143,7 +1136,7 @@ cmsInt32Number ExhaustiveCheck1DLERPDown(void)
if ((j % 10) == 0) printf("%u \r", j);
- if (!Check1D(j, TRUE, 1)) return 0;
+ if (!Check1D(ContextID, j, TRUE, 1)) return 0;
}
@@ -1156,7 +1149,7 @@ cmsInt32Number ExhaustiveCheck1DLERPDown(void)
// 3D interpolation -------------------------------------------------------------------------------------------------
static
-cmsInt32Number Check3DinterpolationFloatTetrahedral(void)
+cmsInt32Number Check3DinterpolationFloatTetrahedral(cmsContext ContextID)
{
cmsInterpParams* p;
cmsInt32Number i;
@@ -1177,7 +1170,7 @@ cmsInt32Number Check3DinterpolationFloatTetrahedral(void)
};
- p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT);
+ p = _cmsComputeInterpParams(ContextID, 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT);
MaxErr = 0.0;
@@ -1185,7 +1178,7 @@ cmsInt32Number Check3DinterpolationFloatTetrahedral(void)
In[0] = In[1] = In[2] = (cmsFloat32Number) ( (cmsFloat32Number) i / 65535.0F);
- p ->Interpolation.LerpFloat(DbgThread(), In, Out, p);
+ p ->Interpolation.LerpFloat(ContextID, In, Out, p);
if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error;
if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error;
@@ -1193,16 +1186,16 @@ cmsInt32Number Check3DinterpolationFloatTetrahedral(void)
}
if (MaxErr > 0) printf("|Err|<%lf ", MaxErr);
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 1;
Error:
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 0;
}
static
-cmsInt32Number Check3DinterpolationFloatTrilinear(void)
+cmsInt32Number Check3DinterpolationFloatTrilinear(cmsContext ContextID)
{
cmsInterpParams* p;
cmsInt32Number i;
@@ -1223,14 +1216,14 @@ cmsInt32Number Check3DinterpolationFloatTrilinear(void)
};
- p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR);
+ p = _cmsComputeInterpParams(ContextID, 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR);
MaxErr = 0.0;
for (i=0; i < 0xffff; i++) {
In[0] = In[1] = In[2] = (cmsFloat32Number) ( (cmsFloat32Number) i / 65535.0F);
- p ->Interpolation.LerpFloat(DbgThread(), In, Out, p);
+ p ->Interpolation.LerpFloat(ContextID, In, Out, p);
if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error;
if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error;
@@ -1238,17 +1231,17 @@ cmsInt32Number Check3DinterpolationFloatTrilinear(void)
}
if (MaxErr > 0) printf("|Err|<%lf ", MaxErr);
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 1;
Error:
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 0;
}
static
-cmsInt32Number Check3DinterpolationTetrahedral16(void)
+cmsInt32Number Check3DinterpolationTetrahedral16(cmsContext ContextID)
{
cmsInterpParams* p;
cmsInt32Number i;
@@ -1268,14 +1261,14 @@ cmsInt32Number Check3DinterpolationTetrahedral16(void)
0xffff, 0xffff, 0xffff
};
- p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS);
+ p = _cmsComputeInterpParams(ContextID, 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS);
MaxErr = 0.0;
for (i=0; i < 0xffff; i++) {
In[0] = In[1] = In[2] = (cmsUInt16Number) i;
- p ->Interpolation.Lerp16(DbgThread(), In, Out, p);
+ p ->Interpolation.Lerp16(ContextID, In, Out, p);
if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error;
if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error;
@@ -1283,16 +1276,16 @@ cmsInt32Number Check3DinterpolationTetrahedral16(void)
}
if (MaxErr > 0) printf("|Err|<%lf ", MaxErr);
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 1;
Error:
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 0;
}
static
-cmsInt32Number Check3DinterpolationTrilinear16(void)
+cmsInt32Number Check3DinterpolationTrilinear16(cmsContext ContextID)
{
cmsInterpParams* p;
cmsInt32Number i;
@@ -1312,14 +1305,14 @@ cmsInt32Number Check3DinterpolationTrilinear16(void)
0xffff, 0xffff, 0xffff
};
- p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR);
+ p = _cmsComputeInterpParams(ContextID, 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR);
MaxErr = 0.0;
for (i=0; i < 0xffff; i++) {
In[0] = In[1] = In[2] = (cmsUInt16Number) i;
- p ->Interpolation.Lerp16(DbgThread(), In, Out, p);
+ p ->Interpolation.Lerp16(ContextID, In, Out, p);
if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error;
if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error;
@@ -1327,17 +1320,17 @@ cmsInt32Number Check3DinterpolationTrilinear16(void)
}
if (MaxErr > 0) printf("|Err|<%lf ", MaxErr);
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 1;
Error:
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 0;
}
static
-cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(void)
+cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(cmsContext ContextID)
{
cmsInterpParams* p;
cmsInt32Number r, g, b;
@@ -1358,7 +1351,7 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(void)
};
- p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT);
+ p = _cmsComputeInterpParams(ContextID, 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT);
MaxErr = 0.0;
for (r=0; r < 0xff; r++)
@@ -1371,7 +1364,7 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(void)
In[2] = (cmsFloat32Number) b / 255.0F;
- p ->Interpolation.LerpFloat(DbgThread(), In, Out, p);
+ p ->Interpolation.LerpFloat(ContextID, In, Out, p);
if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error;
if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error;
@@ -1379,16 +1372,16 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(void)
}
if (MaxErr > 0) printf("|Err|<%lf ", MaxErr);
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 1;
Error:
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 0;
}
static
-cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(void)
+cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(cmsContext ContextID)
{
cmsInterpParams* p;
cmsInt32Number r, g, b;
@@ -1409,7 +1402,7 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(void)
};
- p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR);
+ p = _cmsComputeInterpParams(ContextID, 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR);
MaxErr = 0.0;
for (r=0; r < 0xff; r++)
@@ -1422,7 +1415,7 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(void)
In[2] = (cmsFloat32Number) b / 255.0F;
- p ->Interpolation.LerpFloat(DbgThread(), In, Out, p);
+ p ->Interpolation.LerpFloat(ContextID, In, Out, p);
if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error;
if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error;
@@ -1430,17 +1423,17 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(void)
}
if (MaxErr > 0) printf("|Err|<%lf ", MaxErr);
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 1;
Error:
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 0;
}
static
-cmsInt32Number ExhaustiveCheck3DinterpolationTetrahedral16(void)
+cmsInt32Number ExhaustiveCheck3DinterpolationTetrahedral16(cmsContext ContextID)
{
cmsInterpParams* p;
cmsInt32Number r, g, b;
@@ -1460,7 +1453,7 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTetrahedral16(void)
0xffff, 0xffff, 0xffff
};
- p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS);
+ p = _cmsComputeInterpParams(ContextID, 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS);
for (r=0; r < 0xff; r++)
for (g=0; g < 0xff; g++)
@@ -1471,23 +1464,23 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTetrahedral16(void)
In[2] = (cmsUInt16Number) b ;
- p ->Interpolation.Lerp16(DbgThread(), In, Out, p);
+ p ->Interpolation.Lerp16(ContextID, In, Out, p);
if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error;
if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error;
if (!IsGoodWord("Channel 3", Out[2], In[2])) goto Error;
}
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 1;
Error:
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 0;
}
static
-cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(void)
+cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(cmsContext ContextID)
{
cmsInterpParams* p;
cmsInt32Number r, g, b;
@@ -1507,7 +1500,7 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(void)
0xffff, 0xffff, 0xffff
};
- p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR);
+ p = _cmsComputeInterpParams(ContextID, 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR);
for (r=0; r < 0xff; r++)
for (g=0; g < 0xff; g++)
@@ -1518,7 +1511,7 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(void)
In[2] = (cmsUInt16Number)b ;
- p ->Interpolation.Lerp16(DbgThread(), In, Out, p);
+ p ->Interpolation.Lerp16(ContextID, In, Out, p);
if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error;
if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error;
@@ -1526,17 +1519,17 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(void)
}
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 1;
Error:
- _cmsFreeInterpParams(DbgThread(), p);
+ _cmsFreeInterpParams(ContextID, p);
return 0;
}
// Check reverse interpolation on LUTS. This is right now exclusively used by K preservation algorithm
static
-cmsInt32Number CheckReverseInterpolation3x3(void)
+cmsInt32Number CheckReverseInterpolation3x3(cmsContext ContextID)
{
cmsPipeline* Lut;
cmsStage* clut;
@@ -1560,14 +1553,14 @@ cmsInt32Number CheckReverseInterpolation3x3(void)
- Lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ Lut = cmsPipelineAlloc(ContextID, 3, 3);
- clut = cmsStageAllocCLut16bit(DbgThread(), 2, 3, 3, Table);
- cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_BEGIN, clut);
+ clut = cmsStageAllocCLut16bit(ContextID, 2, 3, 3, Table);
+ cmsPipelineInsertStage(ContextID, Lut, cmsAT_BEGIN, clut);
Target[0] = 0; Target[1] = 0; Target[2] = 0;
Hint[0] = 0; Hint[1] = 0; Hint[2] = 0;
- cmsPipelineEvalReverseFloat(DbgThread(), Target, Result, NULL, Lut);
+ cmsPipelineEvalReverseFloat(ContextID, Target, Result, NULL, Lut);
if (Result[0] != 0 || Result[1] != 0 || Result[2] != 0){
Fail("Reverse interpolation didn't find zero");
@@ -1581,7 +1574,7 @@ cmsInt32Number CheckReverseInterpolation3x3(void)
cmsFloat32Number in = i / 100.0F;
Target[0] = in; Target[1] = 0; Target[2] = 0;
- cmsPipelineEvalReverseFloat(DbgThread(), Target, Result, Hint, Lut);
+ cmsPipelineEvalReverseFloat(ContextID, Target, Result, Hint, Lut);
err = fabsf(in - Result[0]);
if (err > max) max = err;
@@ -1589,17 +1582,17 @@ cmsInt32Number CheckReverseInterpolation3x3(void)
memcpy(Hint, Result, sizeof(Hint));
}
- cmsPipelineFree(DbgThread(), Lut);
+ cmsPipelineFree(ContextID, Lut);
return (max <= FLOAT_PRECISSION);
Error:
- cmsPipelineFree(DbgThread(), Lut);
+ cmsPipelineFree(ContextID, Lut);
return 0;
}
static
-cmsInt32Number CheckReverseInterpolation4x3(void)
+cmsInt32Number CheckReverseInterpolation4x3(cmsContext ContextID)
{
cmsPipeline* Lut;
cmsStage* clut;
@@ -1636,10 +1629,10 @@ cmsInt32Number CheckReverseInterpolation4x3(void)
};
- Lut = cmsPipelineAlloc(DbgThread(), 4, 3);
+ Lut = cmsPipelineAlloc(ContextID, 4, 3);
- clut = cmsStageAllocCLut16bit(DbgThread(), 2, 4, 3, Table);
- cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_BEGIN, clut);
+ clut = cmsStageAllocCLut16bit(ContextID, 2, 4, 3, Table);
+ cmsPipelineInsertStage(ContextID, Lut, cmsAT_BEGIN, clut);
// Check if the LUT is behaving as expected
SubTest("4->3 feasibility");
@@ -1650,7 +1643,7 @@ cmsInt32Number CheckReverseInterpolation4x3(void)
Target[2] = 0;
Target[3] = 12;
- cmsPipelineEvalFloat(DbgThread(), Target, Result, Lut);
+ cmsPipelineEvalFloat(ContextID, Target, Result, Lut);
if (!IsGoodFixed15_16("0", Target[0], Result[0])) goto Error;
if (!IsGoodFixed15_16("1", Target[1], Result[1])) goto Error;
@@ -1668,7 +1661,7 @@ cmsInt32Number CheckReverseInterpolation4x3(void)
// This is our hint (which is a big lie in this case)
Hint[0] = 0.1F; Hint[1] = 0.1F; Hint[2] = 0.1F;
- cmsPipelineEvalReverseFloat(DbgThread(), Target, Result, Hint, Lut);
+ cmsPipelineEvalReverseFloat(ContextID, Target, Result, Hint, Lut);
if (Result[0] != 0 || Result[1] != 0 || Result[2] != 0 || Result[3] != 0){
@@ -1683,7 +1676,7 @@ cmsInt32Number CheckReverseInterpolation4x3(void)
cmsFloat32Number in = i / 100.0F;
Target[0] = in; Target[1] = 0; Target[2] = 0;
- cmsPipelineEvalReverseFloat(DbgThread(), Target, Result, Hint, Lut);
+ cmsPipelineEvalReverseFloat(ContextID, Target, Result, Hint, Lut);
err = fabsf(in - Result[0]);
if (err > max) max = err;
@@ -1691,11 +1684,11 @@ cmsInt32Number CheckReverseInterpolation4x3(void)
memcpy(Hint, Result, sizeof(Hint));
}
- cmsPipelineFree(DbgThread(), Lut);
+ cmsPipelineFree(ContextID, Lut);
return (max <= FLOAT_PRECISSION);
Error:
- cmsPipelineFree(DbgThread(), Lut);
+ cmsPipelineFree(ContextID, Lut);
return 0;
}
@@ -1824,17 +1817,17 @@ cmsInt32Number Sampler8D(cmsContext ContextID, register const cmsUInt16Number In
}
static
-cmsBool CheckOne3D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3)
+cmsBool CheckOne3D(cmsContext ContextID, cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3)
{
cmsUInt16Number In[3], Out1[3], Out2[3];
In[0] = a1; In[1] = a2; In[2] = a3;
// This is the interpolated value
- cmsPipelineEval16(DbgThread(), In, Out1, lut);
+ cmsPipelineEval16(ContextID, In, Out1, lut);
// This is the real value
- Sampler3D(DbgThread(), In, Out2, NULL);
+ Sampler3D(ContextID, In, Out2, NULL);
// Let's see the difference
@@ -1846,17 +1839,17 @@ cmsBool CheckOne3D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cms
}
static
-cmsBool CheckOne4D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4)
+cmsBool CheckOne4D(cmsContext ContextID, cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4)
{
cmsUInt16Number In[4], Out1[3], Out2[3];
In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4;
// This is the interpolated value
- cmsPipelineEval16(DbgThread(), In, Out1, lut);
+ cmsPipelineEval16(ContextID, In, Out1, lut);
// This is the real value
- Sampler4D(DbgThread(), In, Out2, NULL);
+ Sampler4D(ContextID, In, Out2, NULL);
// Let's see the difference
@@ -1868,7 +1861,7 @@ cmsBool CheckOne4D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cms
}
static
-cmsBool CheckOne5D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
+cmsBool CheckOne5D(cmsContext ContextID, cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5)
{
cmsUInt16Number In[5], Out1[3], Out2[3];
@@ -1876,10 +1869,10 @@ cmsBool CheckOne5D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5;
// This is the interpolated value
- cmsPipelineEval16(DbgThread(), In, Out1, lut);
+ cmsPipelineEval16(ContextID, In, Out1, lut);
// This is the real value
- Sampler5D(DbgThread(), In, Out2, NULL);
+ Sampler5D(ContextID, In, Out2, NULL);
// Let's see the difference
@@ -1891,7 +1884,7 @@ cmsBool CheckOne5D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
}
static
-cmsBool CheckOne6D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
+cmsBool CheckOne6D(cmsContext ContextID, cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
cmsUInt16Number a3, cmsUInt16Number a4,
cmsUInt16Number a5, cmsUInt16Number a6)
{
@@ -1900,10 +1893,10 @@ cmsBool CheckOne6D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; In[5] = a6;
// This is the interpolated value
- cmsPipelineEval16(DbgThread(), In, Out1, lut);
+ cmsPipelineEval16(ContextID, In, Out1, lut);
// This is the real value
- Sampler6D(DbgThread(), In, Out2, NULL);
+ Sampler6D(ContextID, In, Out2, NULL);
// Let's see the difference
@@ -1916,7 +1909,7 @@ cmsBool CheckOne6D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
static
-cmsBool CheckOne7D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
+cmsBool CheckOne7D(cmsContext ContextID, cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
cmsUInt16Number a3, cmsUInt16Number a4,
cmsUInt16Number a5, cmsUInt16Number a6,
cmsUInt16Number a7)
@@ -1926,10 +1919,10 @@ cmsBool CheckOne7D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; In[5] = a6; In[6] = a7;
// This is the interpolated value
- cmsPipelineEval16(DbgThread(), In, Out1, lut);
+ cmsPipelineEval16(ContextID, In, Out1, lut);
// This is the real value
- Sampler7D(DbgThread(), In, Out2, NULL);
+ Sampler7D(ContextID, In, Out2, NULL);
// Let's see the difference
@@ -1942,7 +1935,7 @@ cmsBool CheckOne7D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
static
-cmsBool CheckOne8D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
+cmsBool CheckOne8D(cmsContext ContextID, cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
cmsUInt16Number a3, cmsUInt16Number a4,
cmsUInt16Number a5, cmsUInt16Number a6,
cmsUInt16Number a7, cmsUInt16Number a8)
@@ -1952,10 +1945,10 @@ cmsBool CheckOne8D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; In[5] = a6; In[6] = a7; In[7] = a8;
// This is the interpolated value
- cmsPipelineEval16(DbgThread(), In, Out1, lut);
+ cmsPipelineEval16(ContextID, In, Out1, lut);
// This is the real value
- Sampler8D(DbgThread(), In, Out2, NULL);
+ Sampler8D(ContextID, In, Out2, NULL);
// Let's see the difference
@@ -1968,87 +1961,87 @@ cmsBool CheckOne8D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2,
static
-cmsInt32Number Check3Dinterp(void)
+cmsInt32Number Check3Dinterp(cmsContext ContextID)
{
cmsPipeline* lut;
cmsStage* mpe;
- lut = cmsPipelineAlloc(DbgThread(), 3, 3);
- mpe = cmsStageAllocCLut16bit(DbgThread(), 9, 3, 3, NULL);
- cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler3D, NULL, 0);
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe);
+ lut = cmsPipelineAlloc(ContextID, 3, 3);
+ mpe = cmsStageAllocCLut16bit(ContextID, 9, 3, 3, NULL);
+ cmsStageSampleCLut16bit(ContextID, mpe, Sampler3D, NULL, 0);
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe);
// Check accuracy
- if (!CheckOne3D(lut, 0, 0, 0)) return 0;
- if (!CheckOne3D(lut, 0xffff, 0xffff, 0xffff)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0, 0, 0)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0xffff, 0xffff, 0xffff)) return 0;
- if (!CheckOne3D(lut, 0x8080, 0x8080, 0x8080)) return 0;
- if (!CheckOne3D(lut, 0x0000, 0xFE00, 0x80FF)) return 0;
- if (!CheckOne3D(lut, 0x1111, 0x2222, 0x3333)) return 0;
- if (!CheckOne3D(lut, 0x0000, 0x0012, 0x0013)) return 0;
- if (!CheckOne3D(lut, 0x3141, 0x1415, 0x1592)) return 0;
- if (!CheckOne3D(lut, 0xFF00, 0xFF01, 0xFF12)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0x8080, 0x8080, 0x8080)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0x0000, 0xFE00, 0x80FF)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0x1111, 0x2222, 0x3333)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0x0000, 0x0012, 0x0013)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0x3141, 0x1415, 0x1592)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12)) return 0;
- cmsPipelineFree(DbgThread(), lut);
+ cmsPipelineFree(ContextID, lut);
return 1;
}
static
-cmsInt32Number Check3DinterpGranular(void)
+cmsInt32Number Check3DinterpGranular(cmsContext ContextID)
{
cmsPipeline* lut;
cmsStage* mpe;
cmsUInt32Number Dimensions[] = { 7, 8, 9 };
- lut = cmsPipelineAlloc(DbgThread(), 3, 3);
- mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 3, 3, NULL);
- cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler3D, NULL, 0);
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe);
+ lut = cmsPipelineAlloc(ContextID, 3, 3);
+ mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 3, 3, NULL);
+ cmsStageSampleCLut16bit(ContextID, mpe, Sampler3D, NULL, 0);
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe);
// Check accuracy
- if (!CheckOne3D(lut, 0, 0, 0)) return 0;
- if (!CheckOne3D(lut, 0xffff, 0xffff, 0xffff)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0, 0, 0)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0xffff, 0xffff, 0xffff)) return 0;
- if (!CheckOne3D(lut, 0x8080, 0x8080, 0x8080)) return 0;
- if (!CheckOne3D(lut, 0x0000, 0xFE00, 0x80FF)) return 0;
- if (!CheckOne3D(lut, 0x1111, 0x2222, 0x3333)) return 0;
- if (!CheckOne3D(lut, 0x0000, 0x0012, 0x0013)) return 0;
- if (!CheckOne3D(lut, 0x3141, 0x1415, 0x1592)) return 0;
- if (!CheckOne3D(lut, 0xFF00, 0xFF01, 0xFF12)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0x8080, 0x8080, 0x8080)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0x0000, 0xFE00, 0x80FF)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0x1111, 0x2222, 0x3333)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0x0000, 0x0012, 0x0013)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0x3141, 0x1415, 0x1592)) return 0;
+ if (!CheckOne3D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12)) return 0;
- cmsPipelineFree(DbgThread(), lut);
+ cmsPipelineFree(ContextID, lut);
return 1;
}
static
-cmsInt32Number Check4Dinterp(void)
+cmsInt32Number Check4Dinterp(cmsContext ContextID)
{
cmsPipeline* lut;
cmsStage* mpe;
- lut = cmsPipelineAlloc(DbgThread(), 4, 3);
- mpe = cmsStageAllocCLut16bit(DbgThread(), 9, 4, 3, NULL);
- cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler4D, NULL, 0);
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe);
+ lut = cmsPipelineAlloc(ContextID, 4, 3);
+ mpe = cmsStageAllocCLut16bit(ContextID, 9, 4, 3, NULL);
+ cmsStageSampleCLut16bit(ContextID, mpe, Sampler4D, NULL, 0);
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe);
// Check accuracy
- if (!CheckOne4D(lut, 0, 0, 0, 0)) return 0;
- if (!CheckOne4D(lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0, 0, 0, 0)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0;
- if (!CheckOne4D(lut, 0x8080, 0x8080, 0x8080, 0x8080)) return 0;
- if (!CheckOne4D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888)) return 0;
- if (!CheckOne4D(lut, 0x1111, 0x2222, 0x3333, 0x4444)) return 0;
- if (!CheckOne4D(lut, 0x0000, 0x0012, 0x0013, 0x0014)) return 0;
- if (!CheckOne4D(lut, 0x3141, 0x1415, 0x1592, 0x9261)) return 0;
- if (!CheckOne4D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0x8080, 0x8080, 0x8080, 0x8080)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0x0000, 0xFE00, 0x80FF, 0x8888)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0x1111, 0x2222, 0x3333, 0x4444)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0x0000, 0x0012, 0x0013, 0x0014)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0x3141, 0x1415, 0x1592, 0x9261)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13)) return 0;
- cmsPipelineFree(DbgThread(), lut);
+ cmsPipelineFree(ContextID, lut);
return 1;
}
@@ -2056,148 +2049,148 @@ cmsInt32Number Check4Dinterp(void)
static
-cmsInt32Number Check4DinterpGranular(void)
+cmsInt32Number Check4DinterpGranular(cmsContext ContextID)
{
cmsPipeline* lut;
cmsStage* mpe;
cmsUInt32Number Dimensions[] = { 9, 8, 7, 6 };
- lut = cmsPipelineAlloc(DbgThread(), 4, 3);
- mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 4, 3, NULL);
- cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler4D, NULL, 0);
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe);
+ lut = cmsPipelineAlloc(ContextID, 4, 3);
+ mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 4, 3, NULL);
+ cmsStageSampleCLut16bit(ContextID, mpe, Sampler4D, NULL, 0);
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe);
// Check accuracy
- if (!CheckOne4D(lut, 0, 0, 0, 0)) return 0;
- if (!CheckOne4D(lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0, 0, 0, 0)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0;
- if (!CheckOne4D(lut, 0x8080, 0x8080, 0x8080, 0x8080)) return 0;
- if (!CheckOne4D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888)) return 0;
- if (!CheckOne4D(lut, 0x1111, 0x2222, 0x3333, 0x4444)) return 0;
- if (!CheckOne4D(lut, 0x0000, 0x0012, 0x0013, 0x0014)) return 0;
- if (!CheckOne4D(lut, 0x3141, 0x1415, 0x1592, 0x9261)) return 0;
- if (!CheckOne4D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0x8080, 0x8080, 0x8080, 0x8080)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0x0000, 0xFE00, 0x80FF, 0x8888)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0x1111, 0x2222, 0x3333, 0x4444)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0x0000, 0x0012, 0x0013, 0x0014)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0x3141, 0x1415, 0x1592, 0x9261)) return 0;
+ if (!CheckOne4D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13)) return 0;
- cmsPipelineFree(DbgThread(), lut);
+ cmsPipelineFree(ContextID, lut);
return 1;
}
static
-cmsInt32Number Check5DinterpGranular(void)
+cmsInt32Number Check5DinterpGranular(cmsContext ContextID)
{
cmsPipeline* lut;
cmsStage* mpe;
cmsUInt32Number Dimensions[] = { 3, 2, 2, 2, 2 };
- lut = cmsPipelineAlloc(DbgThread(), 5, 3);
- mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 5, 3, NULL);
- cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler5D, NULL, 0);
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe);
+ lut = cmsPipelineAlloc(ContextID, 5, 3);
+ mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 5, 3, NULL);
+ cmsStageSampleCLut16bit(ContextID, mpe, Sampler5D, NULL, 0);
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe);
// Check accuracy
- if (!CheckOne5D(lut, 0, 0, 0, 0, 0)) return 0;
- if (!CheckOne5D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0;
+ if (!CheckOne5D(ContextID, lut, 0, 0, 0, 0, 0)) return 0;
+ if (!CheckOne5D(ContextID, lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0;
- if (!CheckOne5D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234)) return 0;
- if (!CheckOne5D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078)) return 0;
- if (!CheckOne5D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455)) return 0;
- if (!CheckOne5D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333)) return 0;
- if (!CheckOne5D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567)) return 0;
- if (!CheckOne5D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344)) return 0;
+ if (!CheckOne5D(ContextID, lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234)) return 0;
+ if (!CheckOne5D(ContextID, lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078)) return 0;
+ if (!CheckOne5D(ContextID, lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455)) return 0;
+ if (!CheckOne5D(ContextID, lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333)) return 0;
+ if (!CheckOne5D(ContextID, lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567)) return 0;
+ if (!CheckOne5D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344)) return 0;
- cmsPipelineFree(DbgThread(), lut);
+ cmsPipelineFree(ContextID, lut);
return 1;
}
static
-cmsInt32Number Check6DinterpGranular(void)
+cmsInt32Number Check6DinterpGranular(cmsContext ContextID)
{
cmsPipeline* lut;
cmsStage* mpe;
cmsUInt32Number Dimensions[] = { 4, 3, 3, 2, 2, 2 };
- lut = cmsPipelineAlloc(DbgThread(), 6, 3);
- mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 6, 3, NULL);
- cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler6D, NULL, 0);
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe);
+ lut = cmsPipelineAlloc(ContextID, 6, 3);
+ mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 6, 3, NULL);
+ cmsStageSampleCLut16bit(ContextID, mpe, Sampler6D, NULL, 0);
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe);
// Check accuracy
- if (!CheckOne6D(lut, 0, 0, 0, 0, 0, 0)) return 0;
- if (!CheckOne6D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0;
+ if (!CheckOne6D(ContextID, lut, 0, 0, 0, 0, 0, 0)) return 0;
+ if (!CheckOne6D(ContextID, lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0;
- if (!CheckOne6D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122)) return 0;
- if (!CheckOne6D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233)) return 0;
- if (!CheckOne6D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344)) return 0;
- if (!CheckOne6D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455)) return 0;
- if (!CheckOne6D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566)) return 0;
- if (!CheckOne6D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677)) return 0;
+ if (!CheckOne6D(ContextID, lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122)) return 0;
+ if (!CheckOne6D(ContextID, lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233)) return 0;
+ if (!CheckOne6D(ContextID, lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344)) return 0;
+ if (!CheckOne6D(ContextID, lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455)) return 0;
+ if (!CheckOne6D(ContextID, lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566)) return 0;
+ if (!CheckOne6D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677)) return 0;
- cmsPipelineFree(DbgThread(), lut);
+ cmsPipelineFree(ContextID, lut);
return 1;
}
static
-cmsInt32Number Check7DinterpGranular(void)
+cmsInt32Number Check7DinterpGranular(cmsContext ContextID)
{
cmsPipeline* lut;
cmsStage* mpe;
cmsUInt32Number Dimensions[] = { 4, 3, 3, 2, 2, 2, 2 };
- lut = cmsPipelineAlloc(DbgThread(), 7, 3);
- mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 7, 3, NULL);
- cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler7D, NULL, 0);
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe);
+ lut = cmsPipelineAlloc(ContextID, 7, 3);
+ mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 7, 3, NULL);
+ cmsStageSampleCLut16bit(ContextID, mpe, Sampler7D, NULL, 0);
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe);
// Check accuracy
- if (!CheckOne7D(lut, 0, 0, 0, 0, 0, 0, 0)) return 0;
- if (!CheckOne7D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0;
+ if (!CheckOne7D(ContextID, lut, 0, 0, 0, 0, 0, 0, 0)) return 0;
+ if (!CheckOne7D(ContextID, lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0;
- if (!CheckOne7D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122, 0x0056)) return 0;
- if (!CheckOne7D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233, 0x0088)) return 0;
- if (!CheckOne7D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344, 0x1987)) return 0;
- if (!CheckOne7D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455, 0x9988)) return 0;
- if (!CheckOne7D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566, 0xfe56)) return 0;
- if (!CheckOne7D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677, 0xbabe)) return 0;
+ if (!CheckOne7D(ContextID, lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122, 0x0056)) return 0;
+ if (!CheckOne7D(ContextID, lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233, 0x0088)) return 0;
+ if (!CheckOne7D(ContextID, lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344, 0x1987)) return 0;
+ if (!CheckOne7D(ContextID, lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455, 0x9988)) return 0;
+ if (!CheckOne7D(ContextID, lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566, 0xfe56)) return 0;
+ if (!CheckOne7D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677, 0xbabe)) return 0;
- cmsPipelineFree(DbgThread(), lut);
+ cmsPipelineFree(ContextID, lut);
return 1;
}
static
-cmsInt32Number Check8DinterpGranular(void)
+cmsInt32Number Check8DinterpGranular(cmsContext ContextID)
{
cmsPipeline* lut;
cmsStage* mpe;
cmsUInt32Number Dimensions[] = { 4, 3, 3, 2, 2, 2, 2, 2 };
- lut = cmsPipelineAlloc(DbgThread(), 8, 3);
- mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 8, 3, NULL);
- cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler8D, NULL, 0);
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe);
+ lut = cmsPipelineAlloc(ContextID, 8, 3);
+ mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 8, 3, NULL);
+ cmsStageSampleCLut16bit(ContextID, mpe, Sampler8D, NULL, 0);
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe);
// Check accuracy
- if (!CheckOne8D(lut, 0, 0, 0, 0, 0, 0, 0, 0)) return 0;
- if (!CheckOne8D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0;
+ if (!CheckOne8D(ContextID, lut, 0, 0, 0, 0, 0, 0, 0, 0)) return 0;
+ if (!CheckOne8D(ContextID, lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0;
- if (!CheckOne8D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122, 0x0056, 0x0011)) return 0;
- if (!CheckOne8D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233, 0x0088, 0x2020)) return 0;
- if (!CheckOne8D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344, 0x1987, 0x4532)) return 0;
- if (!CheckOne8D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455, 0x9988, 0x1200)) return 0;
- if (!CheckOne8D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566, 0xfe56, 0x6666)) return 0;
- if (!CheckOne8D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677, 0xbabe, 0xface)) return 0;
+ if (!CheckOne8D(ContextID, lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122, 0x0056, 0x0011)) return 0;
+ if (!CheckOne8D(ContextID, lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233, 0x0088, 0x2020)) return 0;
+ if (!CheckOne8D(ContextID, lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344, 0x1987, 0x4532)) return 0;
+ if (!CheckOne8D(ContextID, lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455, 0x9988, 0x1200)) return 0;
+ if (!CheckOne8D(ContextID, lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566, 0xfe56, 0x6666)) return 0;
+ if (!CheckOne8D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677, 0xbabe, 0xface)) return 0;
- cmsPipelineFree(DbgThread(), lut);
+ cmsPipelineFree(ContextID, lut);
return 1;
}
@@ -2206,7 +2199,7 @@ cmsInt32Number Check8DinterpGranular(void)
// Lab to LCh and back should be performed at 1E-12 accuracy at least
static
-cmsInt32Number CheckLab2LCh(void)
+cmsInt32Number CheckLab2LCh(cmsContext ContextID)
{
cmsInt32Number l, a, b;
cmsFloat64Number dist, Max = 0;
@@ -2223,10 +2216,10 @@ cmsInt32Number CheckLab2LCh(void)
Lab.a = a;
Lab.b = b;
- cmsLab2LCh(DbgThread(), &LCh, &Lab);
- cmsLCh2Lab(DbgThread(), &Lab2, &LCh);
+ cmsLab2LCh(ContextID, &LCh, &Lab);
+ cmsLCh2Lab(ContextID, &Lab2, &LCh);
- dist = cmsDeltaE(DbgThread(), &Lab, &Lab2);
+ dist = cmsDeltaE(ContextID, &Lab, &Lab2);
if (dist > Max) Max = dist;
}
}
@@ -2237,7 +2230,7 @@ cmsInt32Number CheckLab2LCh(void)
// Lab to LCh and back should be performed at 1E-12 accuracy at least
static
-cmsInt32Number CheckLab2XYZ(void)
+cmsInt32Number CheckLab2XYZ(cmsContext ContextID)
{
cmsInt32Number l, a, b;
cmsFloat64Number dist, Max = 0;
@@ -2254,10 +2247,10 @@ cmsInt32Number CheckLab2XYZ(void)
Lab.a = a;
Lab.b = b;
- cmsLab2XYZ(DbgThread(), NULL, &XYZ, &Lab);
- cmsXYZ2Lab(DbgThread(), NULL, &Lab2, &XYZ);
+ cmsLab2XYZ(ContextID, NULL, &XYZ, &Lab);
+ cmsXYZ2Lab(ContextID, NULL, &Lab2, &XYZ);
- dist = cmsDeltaE(DbgThread(), &Lab, &Lab2);
+ dist = cmsDeltaE(ContextID, &Lab, &Lab2);
if (dist > Max) Max = dist;
}
@@ -2269,7 +2262,7 @@ cmsInt32Number CheckLab2XYZ(void)
// Lab to xyY and back should be performed at 1E-12 accuracy at least
static
-cmsInt32Number CheckLab2xyY(void)
+cmsInt32Number CheckLab2xyY(cmsContext ContextID)
{
cmsInt32Number l, a, b;
cmsFloat64Number dist, Max = 0;
@@ -2287,12 +2280,12 @@ cmsInt32Number CheckLab2xyY(void)
Lab.a = a;
Lab.b = b;
- cmsLab2XYZ(DbgThread(), NULL, &XYZ, &Lab);
- cmsXYZ2xyY(DbgThread(), &xyY, &XYZ);
- cmsxyY2XYZ(DbgThread(), &XYZ, &xyY);
- cmsXYZ2Lab(DbgThread(), NULL, &Lab2, &XYZ);
+ cmsLab2XYZ(ContextID, NULL, &XYZ, &Lab);
+ cmsXYZ2xyY(ContextID, &xyY, &XYZ);
+ cmsxyY2XYZ(ContextID, &XYZ, &xyY);
+ cmsXYZ2Lab(ContextID, NULL, &Lab2, &XYZ);
- dist = cmsDeltaE(DbgThread(), &Lab, &Lab2);
+ dist = cmsDeltaE(ContextID, &Lab, &Lab2);
if (dist > Max) Max = dist;
}
@@ -2304,7 +2297,7 @@ cmsInt32Number CheckLab2xyY(void)
static
-cmsInt32Number CheckLabV2encoding(void)
+cmsInt32Number CheckLabV2encoding(cmsContext ContextID)
{
cmsInt32Number n2, i, j;
cmsUInt16Number Inw[3], aw[3];
@@ -2316,8 +2309,8 @@ cmsInt32Number CheckLabV2encoding(void)
Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j;
- cmsLabEncoded2FloatV2(DbgThread(), &Lab, Inw);
- cmsFloat2LabEncodedV2(DbgThread(), aw, &Lab);
+ cmsLabEncoded2FloatV2(ContextID, &Lab, Inw);
+ cmsFloat2LabEncodedV2(ContextID, aw, &Lab);
for (i=0; i < 3; i++) {
@@ -2332,7 +2325,7 @@ cmsInt32Number CheckLabV2encoding(void)
}
static
-cmsInt32Number CheckLabV4encoding(void)
+cmsInt32Number CheckLabV4encoding(cmsContext ContextID)
{
cmsInt32Number n2, i, j;
cmsUInt16Number Inw[3], aw[3];
@@ -2344,8 +2337,8 @@ cmsInt32Number CheckLabV4encoding(void)
Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j;
- cmsLabEncoded2Float(DbgThread(), &Lab, Inw);
- cmsFloat2LabEncoded(DbgThread(), aw, &Lab);
+ cmsLabEncoded2Float(ContextID, &Lab, Inw);
+ cmsFloat2LabEncoded(ContextID, aw, &Lab);
for (i=0; i < 3; i++) {
@@ -2363,7 +2356,7 @@ cmsInt32Number CheckLabV4encoding(void)
// BlackBody -----------------------------------------------------------------------------------------------------
static
-cmsInt32Number CheckTemp2CHRM(void)
+cmsInt32Number CheckTemp2CHRM(cmsContext ContextID)
{
cmsInt32Number j;
cmsFloat64Number d, v, Max = 0;
@@ -2371,8 +2364,8 @@ cmsInt32Number CheckTemp2CHRM(void)
for (j=4000; j < 25000; j++) {
- cmsWhitePointFromTemp(DbgThread(), &White, j);
- if (!cmsTempFromWhitePoint(DbgThread(), &v, &White)) return 0;
+ cmsWhitePointFromTemp(ContextID, &White, j);
+ if (!cmsTempFromWhitePoint(ContextID, &v, &White)) return 0;
d = fabs(v - j);
if (d > Max) Max = d;
@@ -2387,9 +2380,9 @@ cmsInt32Number CheckTemp2CHRM(void)
// Tone curves -----------------------------------------------------------------------------------------------------
static
-cmsInt32Number CheckGammaEstimation(cmsToneCurve* c, cmsFloat64Number g)
+cmsInt32Number CheckGammaEstimation(cmsContext ContextID, cmsToneCurve* c, cmsFloat64Number g)
{
- cmsFloat64Number est = cmsEstimateGamma(DbgThread(), c, 0.001);
+ cmsFloat64Number est = cmsEstimateGamma(ContextID, c, 0.001);
SubTest("Gamma estimation");
if (fabs(est - g) > 0.001) return 0;
@@ -2397,59 +2390,59 @@ cmsInt32Number CheckGammaEstimation(cmsToneCurve* c, cmsFloat64Number g)
}
static
-cmsInt32Number CheckGammaCreation16(void)
+cmsInt32Number CheckGammaCreation16(cmsContext ContextID)
{
- cmsToneCurve* LinGamma = cmsBuildGamma(DbgThread(), 1.0);
+ cmsToneCurve* LinGamma = cmsBuildGamma(ContextID, 1.0);
cmsInt32Number i;
cmsUInt16Number in, out;
for (i=0; i < 0xffff; i++) {
in = (cmsUInt16Number) i;
- out = cmsEvalToneCurve16(DbgThread(), LinGamma, in);
+ out = cmsEvalToneCurve16(ContextID, LinGamma, in);
if (in != out) {
Fail("(lin gamma): Must be %x, But is %x : ", in, out);
- cmsFreeToneCurve(DbgThread(), LinGamma);
+ cmsFreeToneCurve(ContextID, LinGamma);
return 0;
}
}
- if (!CheckGammaEstimation(LinGamma, 1.0)) return 0;
+ if (!CheckGammaEstimation(ContextID, LinGamma, 1.0)) return 0;
- cmsFreeToneCurve(DbgThread(), LinGamma);
+ cmsFreeToneCurve(ContextID, LinGamma);
return 1;
}
static
-cmsInt32Number CheckGammaCreationFlt(void)
+cmsInt32Number CheckGammaCreationFlt(cmsContext ContextID)
{
- cmsToneCurve* LinGamma = cmsBuildGamma(DbgThread(), 1.0);
+ cmsToneCurve* LinGamma = cmsBuildGamma(ContextID, 1.0);
cmsInt32Number i;
cmsFloat32Number in, out;
for (i=0; i < 0xffff; i++) {
in = (cmsFloat32Number) (i / 65535.0);
- out = cmsEvalToneCurveFloat(DbgThread(), LinGamma, in);
+ out = cmsEvalToneCurveFloat(ContextID, LinGamma, in);
if (fabs(in - out) > (1/65535.0)) {
Fail("(lin gamma): Must be %f, But is %f : ", in, out);
- cmsFreeToneCurve(DbgThread(), LinGamma);
+ cmsFreeToneCurve(ContextID, LinGamma);
return 0;
}
}
- if (!CheckGammaEstimation(LinGamma, 1.0)) return 0;
- cmsFreeToneCurve(DbgThread(), LinGamma);
+ if (!CheckGammaEstimation(ContextID, LinGamma, 1.0)) return 0;
+ cmsFreeToneCurve(ContextID, LinGamma);
return 1;
}
// Curve curves using a single power function
// Error is given in 0..ffff counts
static
-cmsInt32Number CheckGammaFloat(cmsFloat64Number g)
+cmsInt32Number CheckGammaFloat(cmsContext ContextID, cmsFloat64Number g)
{
- cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), g);
+ cmsToneCurve* Curve = cmsBuildGamma(ContextID, g);
cmsInt32Number i;
cmsFloat32Number in, out;
cmsFloat64Number val, Err;
@@ -2458,7 +2451,7 @@ cmsInt32Number CheckGammaFloat(cmsFloat64Number g)
for (i=0; i < 0xffff; i++) {
in = (cmsFloat32Number) (i / 65535.0);
- out = cmsEvalToneCurveFloat(DbgThread(), Curve, in);
+ out = cmsEvalToneCurveFloat(ContextID, Curve, in);
val = pow((cmsFloat64Number) in, g);
Err = fabs( val - out);
@@ -2467,31 +2460,31 @@ cmsInt32Number CheckGammaFloat(cmsFloat64Number g)
if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0);
- if (!CheckGammaEstimation(Curve, g)) return 0;
+ if (!CheckGammaEstimation(ContextID, Curve, g)) return 0;
- cmsFreeToneCurve(DbgThread(), Curve);
+ cmsFreeToneCurve(ContextID, Curve);
return 1;
}
-static cmsInt32Number CheckGamma18(void)
+static cmsInt32Number CheckGamma18(cmsContext ContextID)
{
- return CheckGammaFloat(1.8);
+ return CheckGammaFloat(ContextID, 1.8);
}
-static cmsInt32Number CheckGamma22(void)
+static cmsInt32Number CheckGamma22(cmsContext ContextID)
{
- return CheckGammaFloat(2.2);
+ return CheckGammaFloat(ContextID, 2.2);
}
-static cmsInt32Number CheckGamma30(void)
+static cmsInt32Number CheckGamma30(cmsContext ContextID)
{
- return CheckGammaFloat(3.0);
+ return CheckGammaFloat(ContextID, 3.0);
}
// Check table-based gamma functions
static
-cmsInt32Number CheckGammaFloatTable(cmsFloat64Number g)
+cmsInt32Number CheckGammaFloatTable(cmsContext ContextID, cmsFloat64Number g)
{
cmsFloat32Number Values[1025];
cmsToneCurve* Curve;
@@ -2505,13 +2498,13 @@ cmsInt32Number CheckGammaFloatTable(cmsFloat64Number g)
Values[i] = powf(in, (float) g);
}
- Curve = cmsBuildTabulatedToneCurveFloat(DbgThread(), 1025, Values);
+ Curve = cmsBuildTabulatedToneCurveFloat(ContextID, 1025, Values);
MaxErr = 0.0;
for (i=0; i <= 0xffff; i++) {
in = (cmsFloat32Number) (i / 65535.0);
- out = cmsEvalToneCurveFloat(DbgThread(), Curve, in);
+ out = cmsEvalToneCurveFloat(ContextID, Curve, in);
val = pow(in, g);
Err = fabs(val - out);
@@ -2520,31 +2513,31 @@ cmsInt32Number CheckGammaFloatTable(cmsFloat64Number g)
if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0);
- if (!CheckGammaEstimation(Curve, g)) return 0;
+ if (!CheckGammaEstimation(ContextID, Curve, g)) return 0;
- cmsFreeToneCurve(DbgThread(), Curve);
+ cmsFreeToneCurve(ContextID, Curve);
return 1;
}
-static cmsInt32Number CheckGamma18Table(void)
+static cmsInt32Number CheckGamma18Table(cmsContext ContextID)
{
- return CheckGammaFloatTable(1.8);
+ return CheckGammaFloatTable(ContextID, 1.8);
}
-static cmsInt32Number CheckGamma22Table(void)
+static cmsInt32Number CheckGamma22Table(cmsContext ContextID)
{
- return CheckGammaFloatTable(2.2);
+ return CheckGammaFloatTable(ContextID, 2.2);
}
-static cmsInt32Number CheckGamma30Table(void)
+static cmsInt32Number CheckGamma30Table(cmsContext ContextID)
{
- return CheckGammaFloatTable(3.0);
+ return CheckGammaFloatTable(ContextID, 3.0);
}
// Create a curve from a table (which is a pure gamma function) and check it against the pow function.
static
-cmsInt32Number CheckGammaWordTable(cmsFloat64Number g)
+cmsInt32Number CheckGammaWordTable(cmsContext ContextID, cmsFloat64Number g)
{
cmsUInt16Number Values[1025];
cmsToneCurve* Curve;
@@ -2558,13 +2551,13 @@ cmsInt32Number CheckGammaWordTable(cmsFloat64Number g)
Values[i] = (cmsUInt16Number) floor(pow(in, g) * 65535.0 + 0.5);
}
- Curve = cmsBuildTabulatedToneCurve16(DbgThread(), 1025, Values);
+ Curve = cmsBuildTabulatedToneCurve16(ContextID, 1025, Values);
MaxErr = 0.0;
for (i=0; i <= 0xffff; i++) {
in = (cmsFloat32Number) (i / 65535.0);
- out = cmsEvalToneCurveFloat(DbgThread(), Curve, in);
+ out = cmsEvalToneCurveFloat(ContextID, Curve, in);
val = pow(in, g);
Err = fabs(val - out);
@@ -2573,45 +2566,45 @@ cmsInt32Number CheckGammaWordTable(cmsFloat64Number g)
if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0);
- if (!CheckGammaEstimation(Curve, g)) return 0;
+ if (!CheckGammaEstimation(ContextID, Curve, g)) return 0;
- cmsFreeToneCurve(DbgThread(), Curve);
+ cmsFreeToneCurve(ContextID, Curve);
return 1;
}
-static cmsInt32Number CheckGamma18TableWord(void)
+static cmsInt32Number CheckGamma18TableWord(cmsContext ContextID)
{
- return CheckGammaWordTable(1.8);
+ return CheckGammaWordTable(ContextID, 1.8);
}
-static cmsInt32Number CheckGamma22TableWord(void)
+static cmsInt32Number CheckGamma22TableWord(cmsContext ContextID)
{
- return CheckGammaWordTable(2.2);
+ return CheckGammaWordTable(ContextID, 2.2);
}
-static cmsInt32Number CheckGamma30TableWord(void)
+static cmsInt32Number CheckGamma30TableWord(cmsContext ContextID)
{
- return CheckGammaWordTable(3.0);
+ return CheckGammaWordTable(ContextID, 3.0);
}
// Curve joining test. Joining two high-gamma of 3.0 curves should
// give something like linear
static
-cmsInt32Number CheckJointCurves(void)
+cmsInt32Number CheckJointCurves(cmsContext ContextID)
{
cmsToneCurve *Forward, *Reverse, *Result;
cmsBool rc;
- Forward = cmsBuildGamma(DbgThread(), 3.0);
- Reverse = cmsBuildGamma(DbgThread(), 3.0);
+ Forward = cmsBuildGamma(ContextID, 3.0);
+ Reverse = cmsBuildGamma(ContextID, 3.0);
- Result = cmsJoinToneCurve(DbgThread(), Forward, Reverse, 256);
+ Result = cmsJoinToneCurve(ContextID, Forward, Reverse, 256);
- cmsFreeToneCurve(DbgThread(), Forward); cmsFreeToneCurve(DbgThread(), Reverse);
+ cmsFreeToneCurve(ContextID, Forward); cmsFreeToneCurve(ContextID, Reverse);
- rc = cmsIsToneCurveLinear(DbgThread(), Result);
- cmsFreeToneCurve(DbgThread(), Result);
+ rc = cmsIsToneCurveLinear(ContextID, Result);
+ cmsFreeToneCurve(ContextID, Result);
if (!rc)
Fail("Joining same curve twice does not result in a linear ramp");
@@ -2622,10 +2615,10 @@ cmsInt32Number CheckJointCurves(void)
// Create a gamma curve by cheating the table
static
-cmsToneCurve* GammaTableLinear(cmsInt32Number nEntries, cmsBool Dir)
+cmsToneCurve* GammaTableLinear(cmsContext ContextID, cmsInt32Number nEntries, cmsBool Dir)
{
cmsInt32Number i;
- cmsToneCurve* g = cmsBuildTabulatedToneCurve16(DbgThread(), nEntries, NULL);
+ cmsToneCurve* g = cmsBuildTabulatedToneCurve16(ContextID, nEntries, NULL);
for (i=0; i < nEntries; i++) {
@@ -2642,12 +2635,12 @@ cmsToneCurve* GammaTableLinear(cmsInt32Number nEntries, cmsBool Dir)
static
-cmsInt32Number CheckJointCurvesDescending(void)
+cmsInt32Number CheckJointCurvesDescending(cmsContext ContextID)
{
cmsToneCurve *Forward, *Reverse, *Result;
cmsInt32Number i, rc;
- Forward = cmsBuildGamma(DbgThread(), 2.2);
+ Forward = cmsBuildGamma(ContextID, 2.2);
// Fake the curve to be table-based
@@ -2655,32 +2648,32 @@ cmsInt32Number CheckJointCurvesDescending(void)
Forward ->Table16[i] = 0xffff - Forward->Table16[i];
Forward ->Segments[0].Type = 0;
- Reverse = cmsReverseToneCurve(DbgThread(), Forward);
+ Reverse = cmsReverseToneCurve(ContextID, Forward);
- Result = cmsJoinToneCurve(DbgThread(), Reverse, Reverse, 256);
+ Result = cmsJoinToneCurve(ContextID, Reverse, Reverse, 256);
- cmsFreeToneCurve(DbgThread(), Forward);
- cmsFreeToneCurve(DbgThread(), Reverse);
+ cmsFreeToneCurve(ContextID, Forward);
+ cmsFreeToneCurve(ContextID, Reverse);
- rc = cmsIsToneCurveLinear(DbgThread(), Result);
- cmsFreeToneCurve(DbgThread(), Result);
+ rc = cmsIsToneCurveLinear(ContextID, Result);
+ cmsFreeToneCurve(ContextID, Result);
return rc;
}
static
-cmsInt32Number CheckFToneCurvePoint(cmsToneCurve* c, cmsUInt16Number Point, cmsInt32Number Value)
+cmsInt32Number CheckFToneCurvePoint(cmsContext ContextID, cmsToneCurve* c, cmsUInt16Number Point, cmsInt32Number Value)
{
cmsInt32Number Result;
- Result = cmsEvalToneCurve16(DbgThread(), c, Point);
+ Result = cmsEvalToneCurve16(ContextID, c, Point);
return (abs(Value - Result) < 2);
}
static
-cmsInt32Number CheckReverseDegenerated(void)
+cmsInt32Number CheckReverseDegenerated(cmsContext ContextID)
{
cmsToneCurve* p, *g;
cmsUInt16Number Tab[16];
@@ -2702,21 +2695,21 @@ cmsInt32Number CheckReverseDegenerated(void)
Tab[14]= 0xffff;
Tab[15]= 0xffff;
- p = cmsBuildTabulatedToneCurve16(DbgThread(), 16, Tab);
- g = cmsReverseToneCurve(DbgThread(), p);
+ p = cmsBuildTabulatedToneCurve16(ContextID, 16, Tab);
+ g = cmsReverseToneCurve(ContextID, p);
// Now let's check some points
- if (!CheckFToneCurvePoint(g, 0x5555, 0x5555)) return 0;
- if (!CheckFToneCurvePoint(g, 0x7777, 0x7777)) return 0;
+ if (!CheckFToneCurvePoint(ContextID, g, 0x5555, 0x5555)) return 0;
+ if (!CheckFToneCurvePoint(ContextID, g, 0x7777, 0x7777)) return 0;
// First point for zero
- if (!CheckFToneCurvePoint(g, 0x0000, 0x4444)) return 0;
+ if (!CheckFToneCurvePoint(ContextID, g, 0x0000, 0x4444)) return 0;
// Last point
- if (!CheckFToneCurvePoint(g, 0xFFFF, 0xFFFF)) return 0;
+ if (!CheckFToneCurvePoint(ContextID, g, 0xFFFF, 0xFFFF)) return 0;
- cmsFreeToneCurve(DbgThread(), p);
- cmsFreeToneCurve(DbgThread(), g);
+ cmsFreeToneCurve(ContextID, p);
+ cmsFreeToneCurve(ContextID, g);
return 1;
}
@@ -2724,7 +2717,7 @@ cmsInt32Number CheckReverseDegenerated(void)
// Build a parametric sRGB-like curve
static
-cmsToneCurve* Build_sRGBGamma(void)
+cmsToneCurve* Build_sRGBGamma(cmsContext ContextID)
{
cmsFloat64Number Parameters[5];
@@ -2734,14 +2727,14 @@ cmsToneCurve* Build_sRGBGamma(void)
Parameters[3] = 1. / 12.92;
Parameters[4] = 0.04045; // d
- return cmsBuildParametricToneCurve(DbgThread(), 4, Parameters);
+ return cmsBuildParametricToneCurve(ContextID, 4, Parameters);
}
// Join two gamma tables in floating point format. Result should be a straight line
static
-cmsToneCurve* CombineGammaFloat(cmsToneCurve* g1, cmsToneCurve* g2)
+cmsToneCurve* CombineGammaFloat(cmsContext ContextID, cmsToneCurve* g1, cmsToneCurve* g2)
{
cmsUInt16Number Tab[256];
cmsFloat32Number f;
@@ -2750,17 +2743,17 @@ cmsToneCurve* CombineGammaFloat(cmsToneCurve* g1, cmsToneCurve* g2)
for (i=0; i < 256; i++) {
f = (cmsFloat32Number) i / 255.0F;
- f = cmsEvalToneCurveFloat(DbgThread(), g2, cmsEvalToneCurveFloat(DbgThread(), g1, f));
+ f = cmsEvalToneCurveFloat(ContextID, g2, cmsEvalToneCurveFloat(ContextID, g1, f));
Tab[i] = (cmsUInt16Number) floor(f * 65535.0 + 0.5);
}
- return cmsBuildTabulatedToneCurve16(DbgThread(), 256, Tab);
+ return cmsBuildTabulatedToneCurve16(ContextID, 256, Tab);
}
// Same of anterior, but using quantized tables
static
-cmsToneCurve* CombineGamma16(cmsToneCurve* g1, cmsToneCurve* g2)
+cmsToneCurve* CombineGamma16(cmsContext ContextID, cmsToneCurve* g1, cmsToneCurve* g2)
{
cmsUInt16Number Tab[256];
@@ -2771,42 +2764,42 @@ cmsToneCurve* CombineGamma16(cmsToneCurve* g1, cmsToneCurve* g2)
cmsUInt16Number wValIn;
wValIn = _cmsQuantizeVal(i, 256);
- Tab[i] = cmsEvalToneCurve16(DbgThread(), g2, cmsEvalToneCurve16(DbgThread(), g1, wValIn));
+ Tab[i] = cmsEvalToneCurve16(ContextID, g2, cmsEvalToneCurve16(ContextID, g1, wValIn));
}
- return cmsBuildTabulatedToneCurve16(DbgThread(), 256, Tab);
+ return cmsBuildTabulatedToneCurve16(ContextID, 256, Tab);
}
static
-cmsInt32Number CheckJointFloatCurves_sRGB(void)
+cmsInt32Number CheckJointFloatCurves_sRGB(cmsContext ContextID)
{
cmsToneCurve *Forward, *Reverse, *Result;
cmsBool rc;
- Forward = Build_sRGBGamma();
- Reverse = cmsReverseToneCurve(DbgThread(), Forward);
- Result = CombineGammaFloat(Forward, Reverse);
- cmsFreeToneCurve(DbgThread(), Forward); cmsFreeToneCurve(DbgThread(), Reverse);
+ Forward = Build_sRGBGamma(ContextID);
+ Reverse = cmsReverseToneCurve(ContextID, Forward);
+ Result = CombineGammaFloat(ContextID, Forward, Reverse);
+ cmsFreeToneCurve(ContextID, Forward); cmsFreeToneCurve(ContextID, Reverse);
- rc = cmsIsToneCurveLinear(DbgThread(), Result);
- cmsFreeToneCurve(DbgThread(), Result);
+ rc = cmsIsToneCurveLinear(ContextID, Result);
+ cmsFreeToneCurve(ContextID, Result);
return rc;
}
static
-cmsInt32Number CheckJoint16Curves_sRGB(void)
+cmsInt32Number CheckJoint16Curves_sRGB(cmsContext ContextID)
{
cmsToneCurve *Forward, *Reverse, *Result;
cmsBool rc;
- Forward = Build_sRGBGamma();
- Reverse = cmsReverseToneCurve(DbgThread(), Forward);
- Result = CombineGamma16(Forward, Reverse);
- cmsFreeToneCurve(DbgThread(), Forward); cmsFreeToneCurve(DbgThread(), Reverse);
+ Forward = Build_sRGBGamma(ContextID);
+ Reverse = cmsReverseToneCurve(ContextID, Forward);
+ Result = CombineGamma16(ContextID, Forward, Reverse);
+ cmsFreeToneCurve(ContextID, Forward); cmsFreeToneCurve(ContextID, Reverse);
- rc = cmsIsToneCurveLinear(DbgThread(), Result);
- cmsFreeToneCurve(DbgThread(), Result);
+ rc = cmsIsToneCurveLinear(ContextID, Result);
+ cmsFreeToneCurve(ContextID, Result);
return rc;
}
@@ -2814,21 +2807,21 @@ cmsInt32Number CheckJoint16Curves_sRGB(void)
// sigmoidal curve f(x) = (1-x^g) ^(1/g)
static
-cmsInt32Number CheckJointCurvesSShaped(void)
+cmsInt32Number CheckJointCurvesSShaped(cmsContext ContextID)
{
cmsFloat64Number p = 3.2;
cmsToneCurve *Forward, *Reverse, *Result;
cmsInt32Number rc;
- Forward = cmsBuildParametricToneCurve(DbgThread(), 108, &p);
- Reverse = cmsReverseToneCurve(DbgThread(), Forward);
- Result = cmsJoinToneCurve(DbgThread(), Forward, Forward, 4096);
+ Forward = cmsBuildParametricToneCurve(ContextID, 108, &p);
+ Reverse = cmsReverseToneCurve(ContextID, Forward);
+ Result = cmsJoinToneCurve(ContextID, Forward, Forward, 4096);
- cmsFreeToneCurve(DbgThread(), Forward);
- cmsFreeToneCurve(DbgThread(), Reverse);
+ cmsFreeToneCurve(ContextID, Forward);
+ cmsFreeToneCurve(ContextID, Reverse);
- rc = cmsIsToneCurveLinear(DbgThread(), Result);
- cmsFreeToneCurve(DbgThread(), Result);
+ rc = cmsIsToneCurveLinear(ContextID, Result);
+ cmsFreeToneCurve(ContextID, Result);
return rc;
}
@@ -2972,15 +2965,15 @@ cmsFloat32Number sigmoidal(cmsFloat32Number x, const cmsFloat64Number Params[])
static
-cmsBool CheckSingleParametric(const char* Name, dblfnptr fn, cmsInt32Number Type, const cmsFloat64Number Params[])
+cmsBool CheckSingleParametric(cmsContext ContextID, const char* Name, dblfnptr fn, cmsInt32Number Type, const cmsFloat64Number Params[])
{
cmsInt32Number i;
cmsToneCurve* tc;
cmsToneCurve* tc_1;
char InverseText[256];
- tc = cmsBuildParametricToneCurve(DbgThread(), Type, Params);
- tc_1 = cmsBuildParametricToneCurve(DbgThread(), -Type, Params);
+ tc = cmsBuildParametricToneCurve(ContextID, Type, Params);
+ tc_1 = cmsBuildParametricToneCurve(ContextID, -Type, Params);
for (i=0; i <= 1000; i++) {
@@ -2988,8 +2981,8 @@ cmsBool CheckSingleParametric(const char* Name, dblfnptr fn, cmsInt32Number Type
cmsFloat32Number y_fn, y_param, x_param, y_param2;
y_fn = fn(x, Params);
- y_param = cmsEvalToneCurveFloat(DbgThread(), tc, x);
- x_param = cmsEvalToneCurveFloat(DbgThread(), tc_1, y_param);
+ y_param = cmsEvalToneCurveFloat(ContextID, tc, x);
+ x_param = cmsEvalToneCurveFloat(ContextID, tc_1, y_param);
y_param2 = fn(x_param, Params);
@@ -3001,19 +2994,19 @@ cmsBool CheckSingleParametric(const char* Name, dblfnptr fn, cmsInt32Number Type
goto Error;
}
- cmsFreeToneCurve(DbgThread(), tc);
- cmsFreeToneCurve(DbgThread(), tc_1);
+ cmsFreeToneCurve(ContextID, tc);
+ cmsFreeToneCurve(ContextID, tc_1);
return TRUE;
Error:
- cmsFreeToneCurve(DbgThread(), tc);
- cmsFreeToneCurve(DbgThread(), tc_1);
+ cmsFreeToneCurve(ContextID, tc);
+ cmsFreeToneCurve(ContextID, tc_1);
return FALSE;
}
// Check against some known values
static
-cmsInt32Number CheckParametricToneCurves(void)
+cmsInt32Number CheckParametricToneCurves(cmsContext ContextID)
{
cmsFloat64Number Params[10];
@@ -3021,7 +3014,7 @@ cmsInt32Number CheckParametricToneCurves(void)
Params[0] = 2.2;
- if (!CheckSingleParametric("Gamma", Gamma, 1, Params)) return 0;
+ if (!CheckSingleParametric(ContextID, "Gamma", Gamma, 1, Params)) return 0;
// 2) CIE 122-1966
// Y = (aX + b)^Gamma | X >= -b/a
@@ -3031,7 +3024,7 @@ cmsInt32Number CheckParametricToneCurves(void)
Params[1] = 1.5;
Params[2] = -0.5;
- if (!CheckSingleParametric("CIE122-1966", CIE122, 2, Params)) return 0;
+ if (!CheckSingleParametric(ContextID, "CIE122-1966", CIE122, 2, Params)) return 0;
// 3) IEC 61966-3
// Y = (aX + b)^Gamma | X <= -b/a
@@ -3043,7 +3036,7 @@ cmsInt32Number CheckParametricToneCurves(void)
Params[3] = 0.3;
- if (!CheckSingleParametric("IEC 61966-3", IEC61966_3, 3, Params)) return 0;
+ if (!CheckSingleParametric(ContextID, "IEC 61966-3", IEC61966_3, 3, Params)) return 0;
// 4) IEC 61966-2.1 (sRGB)
// Y = (aX + b)^Gamma | X >= d
@@ -3055,7 +3048,7 @@ cmsInt32Number CheckParametricToneCurves(void)
Params[3] = 1. / 12.92;
Params[4] = 0.04045;
- if (!CheckSingleParametric("IEC 61966-2.1", IEC61966_21, 4, Params)) return 0;
+ if (!CheckSingleParametric(ContextID, "IEC 61966-2.1", IEC61966_21, 4, Params)) return 0;
// 5) Y = (aX + b)^Gamma + e | X >= d
@@ -3069,7 +3062,7 @@ cmsInt32Number CheckParametricToneCurves(void)
Params[5] = 0.5;
Params[6] = 0.2;
- if (!CheckSingleParametric("param_5", param_5, 5, Params)) return 0;
+ if (!CheckSingleParametric(ContextID, "param_5", param_5, 5, Params)) return 0;
// 6) Y = (aX + b) ^ Gamma + c
@@ -3078,7 +3071,7 @@ cmsInt32Number CheckParametricToneCurves(void)
Params[2] = 0.2;
Params[3] = 0.3;
- if (!CheckSingleParametric("param_6", param_6, 6, Params)) return 0;
+ if (!CheckSingleParametric(ContextID, "param_6", param_6, 6, Params)) return 0;
// 7) Y = a * log (b * X^Gamma + c) + d
@@ -3088,7 +3081,7 @@ cmsInt32Number CheckParametricToneCurves(void)
Params[3] = 0.02;
Params[4] = 0.1;
- if (!CheckSingleParametric("param_7", param_7, 7, Params)) return 0;
+ if (!CheckSingleParametric(ContextID, "param_7", param_7, 7, Params)) return 0;
// 8) Y = a * b ^ (c*X+d) + e
@@ -3098,12 +3091,12 @@ cmsInt32Number CheckParametricToneCurves(void)
Params[3] = 0.1;
Params[4] = 0.2;
- if (!CheckSingleParametric("param_8", param_8, 8, Params)) return 0;
+ if (!CheckSingleParametric(ContextID, "param_8", param_8, 8, Params)) return 0;
// 108: S-Shaped: (1 - (1-x)^1/g)^1/g
Params[0] = 1.9;
- if (!CheckSingleParametric("sigmoidal", sigmoidal, 108, Params)) return 0;
+ if (!CheckSingleParametric(ContextID, "sigmoidal", sigmoidal, 108, Params)) return 0;
// All OK
@@ -3113,38 +3106,38 @@ cmsInt32Number CheckParametricToneCurves(void)
// LUT checks ------------------------------------------------------------------------------
static
-cmsInt32Number CheckLUTcreation(void)
+cmsInt32Number CheckLUTcreation(cmsContext ContextID)
{
cmsPipeline* lut;
cmsPipeline* lut2;
cmsInt32Number n1, n2;
- lut = cmsPipelineAlloc(DbgThread(), 1, 1);
- n1 = cmsPipelineStageCount(DbgThread(), lut);
- lut2 = cmsPipelineDup(DbgThread(), lut);
- n2 = cmsPipelineStageCount(DbgThread(), lut2);
+ lut = cmsPipelineAlloc(ContextID, 1, 1);
+ n1 = cmsPipelineStageCount(ContextID, lut);
+ lut2 = cmsPipelineDup(ContextID, lut);
+ n2 = cmsPipelineStageCount(ContextID, lut2);
- cmsPipelineFree(DbgThread(), lut);
- cmsPipelineFree(DbgThread(), lut2);
+ cmsPipelineFree(ContextID, lut);
+ cmsPipelineFree(ContextID, lut2);
return (n1 == 0) && (n2 == 0);
}
// Create a MPE for a identity matrix
static
-void AddIdentityMatrix(cmsPipeline* lut)
+void AddIdentityMatrix(cmsContext ContextID, cmsPipeline* lut)
{
const cmsFloat64Number Identity[] = { 1, 0, 0,
0, 1, 0,
0, 0, 1,
0, 0, 0 };
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, cmsStageAllocMatrix(DbgThread(), 3, 3, Identity, NULL));
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 3, Identity, NULL));
}
// Create a MPE for identity cmsFloat32Number CLUT
static
-void AddIdentityCLUTfloat(cmsPipeline* lut)
+void AddIdentityCLUTfloat(cmsContext ContextID, cmsPipeline* lut)
{
const cmsFloat32Number Table[] = {
@@ -3161,12 +3154,12 @@ void AddIdentityCLUTfloat(cmsPipeline* lut)
1.0, 1.0, 1.0
};
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, cmsStageAllocCLutFloat(DbgThread(), 2, 3, 3, Table));
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_END, cmsStageAllocCLutFloat(ContextID, 2, 3, 3, Table));
}
// Create a MPE for identity cmsFloat32Number CLUT
static
-void AddIdentityCLUT16(cmsPipeline* lut)
+void AddIdentityCLUT16(cmsContext ContextID, cmsPipeline* lut)
{
const cmsUInt16Number Table[] = {
@@ -3184,30 +3177,30 @@ void AddIdentityCLUT16(cmsPipeline* lut)
};
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, cmsStageAllocCLut16bit(DbgThread(), 2, 3, 3, Table));
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_END, cmsStageAllocCLut16bit(ContextID, 2, 3, 3, Table));
}
// Create a 3 fn identity curves
static
-void Add3GammaCurves(cmsPipeline* lut, cmsFloat64Number Curve)
+void Add3GammaCurves(cmsContext ContextID, cmsPipeline* lut, cmsFloat64Number Curve)
{
- cmsToneCurve* id = cmsBuildGamma(DbgThread(), Curve);
+ cmsToneCurve* id = cmsBuildGamma(ContextID, Curve);
cmsToneCurve* id3[3];
id3[0] = id;
id3[1] = id;
id3[2] = id;
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, cmsStageAllocToneCurves(DbgThread(), 3, id3));
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 3, id3));
- cmsFreeToneCurve(DbgThread(), id);
+ cmsFreeToneCurve(ContextID, id);
}
static
-cmsInt32Number CheckFloatLUT(cmsPipeline* lut)
+cmsInt32Number CheckFloatLUT(cmsContext ContextID, cmsPipeline* lut)
{
cmsInt32Number n1, i, j;
cmsFloat32Number Inf[3], Outf[3];
@@ -3219,7 +3212,7 @@ cmsInt32Number CheckFloatLUT(cmsPipeline* lut)
cmsInt32Number af[3];
Inf[0] = Inf[1] = Inf[2] = (cmsFloat32Number) j / 65535.0F;
- cmsPipelineEvalFloat(DbgThread(), Inf, Outf, lut);
+ cmsPipelineEvalFloat(ContextID, Inf, Outf, lut);
af[0] = (cmsInt32Number) floor(Outf[0]*65535.0 + 0.5);
af[1] = (cmsInt32Number) floor(Outf[1]*65535.0 + 0.5);
@@ -3239,7 +3232,7 @@ cmsInt32Number CheckFloatLUT(cmsPipeline* lut)
static
-cmsInt32Number Check16LUT(cmsPipeline* lut)
+cmsInt32Number Check16LUT(cmsContext ContextID, cmsPipeline* lut)
{
cmsInt32Number n2, i, j;
cmsUInt16Number Inw[3], Outw[3];
@@ -3251,7 +3244,7 @@ cmsInt32Number Check16LUT(cmsPipeline* lut)
cmsInt32Number aw[3];
Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j;
- cmsPipelineEval16(DbgThread(), Inw, Outw, lut);
+ cmsPipelineEval16(ContextID, Inw, Outw, lut);
aw[0] = Outw[0];
aw[1] = Outw[1];
aw[2] = Outw[2];
@@ -3271,205 +3264,205 @@ cmsInt32Number Check16LUT(cmsPipeline* lut)
// Check any LUT that is linear
static
-cmsInt32Number CheckStagesLUT(cmsPipeline* lut, cmsInt32Number ExpectedStages)
+cmsInt32Number CheckStagesLUT(cmsContext ContextID, cmsPipeline* lut, cmsInt32Number ExpectedStages)
{
cmsInt32Number nInpChans, nOutpChans, nStages;
- nInpChans = cmsPipelineInputChannels(DbgThread(), lut);
- nOutpChans = cmsPipelineOutputChannels(DbgThread(), lut);
- nStages = cmsPipelineStageCount(DbgThread(), lut);
+ nInpChans = cmsPipelineInputChannels(ContextID, lut);
+ nOutpChans = cmsPipelineOutputChannels(ContextID, lut);
+ nStages = cmsPipelineStageCount(ContextID, lut);
return (nInpChans == 3) && (nOutpChans == 3) && (nStages == ExpectedStages);
}
static
-cmsInt32Number CheckFullLUT(cmsPipeline* lut, cmsInt32Number ExpectedStages)
+cmsInt32Number CheckFullLUT(cmsContext ContextID, cmsPipeline* lut, cmsInt32Number ExpectedStages)
{
- cmsInt32Number rc = CheckStagesLUT(lut, ExpectedStages) && Check16LUT(lut) && CheckFloatLUT(lut);
+ cmsInt32Number rc = CheckStagesLUT(ContextID, lut, ExpectedStages) && Check16LUT(ContextID, lut) && CheckFloatLUT(ContextID, lut);
- cmsPipelineFree(DbgThread(), lut);
+ cmsPipelineFree(ContextID, lut);
return rc;
}
static
-cmsInt32Number Check1StageLUT(void)
+cmsInt32Number Check1StageLUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
- AddIdentityMatrix(lut);
- return CheckFullLUT(lut, 1);
+ AddIdentityMatrix(ContextID, lut);
+ return CheckFullLUT(ContextID, lut, 1);
}
static
-cmsInt32Number Check2StageLUT(void)
+cmsInt32Number Check2StageLUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
- AddIdentityMatrix(lut);
- AddIdentityCLUTfloat(lut);
+ AddIdentityMatrix(ContextID, lut);
+ AddIdentityCLUTfloat(ContextID, lut);
- return CheckFullLUT(lut, 2);
+ return CheckFullLUT(ContextID, lut, 2);
}
static
-cmsInt32Number Check2Stage16LUT(void)
+cmsInt32Number Check2Stage16LUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
- AddIdentityMatrix(lut);
- AddIdentityCLUT16(lut);
+ AddIdentityMatrix(ContextID, lut);
+ AddIdentityCLUT16(ContextID, lut);
- return CheckFullLUT(lut, 2);
+ return CheckFullLUT(ContextID, lut, 2);
}
static
-cmsInt32Number Check3StageLUT(void)
+cmsInt32Number Check3StageLUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
- AddIdentityMatrix(lut);
- AddIdentityCLUTfloat(lut);
- Add3GammaCurves(lut, 1.0);
+ AddIdentityMatrix(ContextID, lut);
+ AddIdentityCLUTfloat(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
- return CheckFullLUT(lut, 3);
+ return CheckFullLUT(ContextID, lut, 3);
}
static
-cmsInt32Number Check3Stage16LUT(void)
+cmsInt32Number Check3Stage16LUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
- AddIdentityMatrix(lut);
- AddIdentityCLUT16(lut);
- Add3GammaCurves(lut, 1.0);
+ AddIdentityMatrix(ContextID, lut);
+ AddIdentityCLUT16(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
- return CheckFullLUT(lut, 3);
+ return CheckFullLUT(ContextID, lut, 3);
}
static
-cmsInt32Number Check4StageLUT(void)
+cmsInt32Number Check4StageLUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
- AddIdentityMatrix(lut);
- AddIdentityCLUTfloat(lut);
- Add3GammaCurves(lut, 1.0);
- AddIdentityMatrix(lut);
+ AddIdentityMatrix(ContextID, lut);
+ AddIdentityCLUTfloat(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
+ AddIdentityMatrix(ContextID, lut);
- return CheckFullLUT(lut, 4);
+ return CheckFullLUT(ContextID, lut, 4);
}
static
-cmsInt32Number Check4Stage16LUT(void)
+cmsInt32Number Check4Stage16LUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
- AddIdentityMatrix(lut);
- AddIdentityCLUT16(lut);
- Add3GammaCurves(lut, 1.0);
- AddIdentityMatrix(lut);
+ AddIdentityMatrix(ContextID, lut);
+ AddIdentityCLUT16(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
+ AddIdentityMatrix(ContextID, lut);
- return CheckFullLUT(lut, 4);
+ return CheckFullLUT(ContextID, lut, 4);
}
static
-cmsInt32Number Check5StageLUT(void)
+cmsInt32Number Check5StageLUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
- AddIdentityMatrix(lut);
- AddIdentityCLUTfloat(lut);
- Add3GammaCurves(lut, 1.0);
- AddIdentityMatrix(lut);
- Add3GammaCurves(lut, 1.0);
+ AddIdentityMatrix(ContextID, lut);
+ AddIdentityCLUTfloat(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
+ AddIdentityMatrix(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
- return CheckFullLUT(lut, 5);
+ return CheckFullLUT(ContextID, lut, 5);
}
static
-cmsInt32Number Check5Stage16LUT(void)
+cmsInt32Number Check5Stage16LUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
- AddIdentityMatrix(lut);
- AddIdentityCLUT16(lut);
- Add3GammaCurves(lut, 1.0);
- AddIdentityMatrix(lut);
- Add3GammaCurves(lut, 1.0);
+ AddIdentityMatrix(ContextID, lut);
+ AddIdentityCLUT16(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
+ AddIdentityMatrix(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
- return CheckFullLUT(lut, 5);
+ return CheckFullLUT(ContextID, lut, 5);
}
static
-cmsInt32Number Check6StageLUT(void)
+cmsInt32Number Check6StageLUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
- AddIdentityMatrix(lut);
- Add3GammaCurves(lut, 1.0);
- AddIdentityCLUTfloat(lut);
- Add3GammaCurves(lut, 1.0);
- AddIdentityMatrix(lut);
- Add3GammaCurves(lut, 1.0);
+ AddIdentityMatrix(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
+ AddIdentityCLUTfloat(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
+ AddIdentityMatrix(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
- return CheckFullLUT(lut, 6);
+ return CheckFullLUT(ContextID, lut, 6);
}
static
-cmsInt32Number Check6Stage16LUT(void)
+cmsInt32Number Check6Stage16LUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
- AddIdentityMatrix(lut);
- Add3GammaCurves(lut, 1.0);
- AddIdentityCLUT16(lut);
- Add3GammaCurves(lut, 1.0);
- AddIdentityMatrix(lut);
- Add3GammaCurves(lut, 1.0);
+ AddIdentityMatrix(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
+ AddIdentityCLUT16(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
+ AddIdentityMatrix(ContextID, lut);
+ Add3GammaCurves(ContextID, lut, 1.0);
- return CheckFullLUT(lut, 6);
+ return CheckFullLUT(ContextID, lut, 6);
}
static
-cmsInt32Number CheckLab2LabLUT(void)
+cmsInt32Number CheckLab2LabLUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
cmsInt32Number rc;
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread()));
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread()));
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocLab2XYZ(ContextID));
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocXYZ2Lab(ContextID));
- rc = CheckFloatLUT(lut) && CheckStagesLUT(lut, 2);
+ rc = CheckFloatLUT(ContextID, lut) && CheckStagesLUT(ContextID, lut, 2);
- cmsPipelineFree(DbgThread(), lut);
+ cmsPipelineFree(ContextID, lut);
return rc;
}
static
-cmsInt32Number CheckXYZ2XYZLUT(void)
+cmsInt32Number CheckXYZ2XYZLUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
cmsInt32Number rc;
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread()));
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread()));
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocXYZ2Lab(ContextID));
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocLab2XYZ(ContextID));
- rc = CheckFloatLUT(lut) && CheckStagesLUT(lut, 2);
+ rc = CheckFloatLUT(ContextID, lut) && CheckStagesLUT(ContextID, lut, 2);
- cmsPipelineFree(DbgThread(), lut);
+ cmsPipelineFree(ContextID, lut);
return rc;
}
@@ -3477,26 +3470,26 @@ cmsInt32Number CheckXYZ2XYZLUT(void)
static
-cmsInt32Number CheckLab2LabMatLUT(void)
+cmsInt32Number CheckLab2LabMatLUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
cmsInt32Number rc;
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread()));
- AddIdentityMatrix(lut);
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread()));
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocLab2XYZ(ContextID));
+ AddIdentityMatrix(ContextID, lut);
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocXYZ2Lab(ContextID));
- rc = CheckFloatLUT(lut) && CheckStagesLUT(lut, 3);
+ rc = CheckFloatLUT(ContextID, lut) && CheckStagesLUT(ContextID, lut, 3);
- cmsPipelineFree(DbgThread(), lut);
+ cmsPipelineFree(ContextID, lut);
return rc;
}
static
-cmsInt32Number CheckNamedColorLUT(void)
+cmsInt32Number CheckNamedColorLUT(cmsContext ContextID)
{
- cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3);
cmsNAMEDCOLORLIST* nc;
cmsInt32Number i,j, rc = 1, n2;
cmsUInt16Number PCS[3];
@@ -3506,7 +3499,7 @@ cmsInt32Number CheckNamedColorLUT(void)
- nc = cmsAllocNamedColorList(DbgThread(), 256, 3, "pre", "post");
+ nc = cmsAllocNamedColorList(ContextID, 256, 3, "pre", "post");
if (nc == NULL) return 0;
for (i=0; i < 256; i++) {
@@ -3515,12 +3508,12 @@ cmsInt32Number CheckNamedColorLUT(void)
Colorant[0] = Colorant[1] = Colorant[2] = Colorant[3] = (cmsUInt16Number) i;
sprintf(Name, "#%d", i);
- if (!cmsAppendNamedColor(DbgThread(), nc, Name, PCS, Colorant)) { rc = 0; break; }
+ if (!cmsAppendNamedColor(ContextID, nc, Name, PCS, Colorant)) { rc = 0; break; }
}
- cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocNamedColor(DbgThread(), nc, FALSE));
+ cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocNamedColor(ContextID, nc, FALSE));
- cmsFreeNamedColorList(DbgThread(), nc);
+ cmsFreeNamedColorList(ContextID, nc);
if (rc == 0) return 0;
n2=0;
@@ -3529,7 +3522,7 @@ cmsInt32Number CheckNamedColorLUT(void)
Inw[0] = (cmsUInt16Number) j;
- cmsPipelineEval16(DbgThread(), Inw, Outw, lut);
+ cmsPipelineEval16(ContextID, Inw, Outw, lut);
for (i=0; i < 3; i++) {
if (Outw[i] != j) {
@@ -3539,7 +3532,7 @@ cmsInt32Number CheckNamedColorLUT(void)
}
- cmsPipelineFree(DbgThread(), lut);
+ cmsPipelineFree(ContextID, lut);
return (n2 == 0);
}
@@ -3550,7 +3543,7 @@ cmsInt32Number CheckNamedColorLUT(void)
// A lightweight test of multilocalized unicode structures.
static
-cmsInt32Number CheckMLU(void)
+cmsInt32Number CheckMLU(cmsContext ContextID)
{
cmsMLU* mlu, *mlu2, *mlu3;
char Buffer[256], Buffer2[256];
@@ -3559,40 +3552,40 @@ cmsInt32Number CheckMLU(void)
cmsHPROFILE h= NULL;
// Allocate a MLU structure, no preferred size
- mlu = cmsMLUalloc(DbgThread(), 0);
+ mlu = cmsMLUalloc(ContextID, 0);
// Add some localizations
- cmsMLUsetWide(DbgThread(), mlu, "en", "US", L"Hello, world");
- cmsMLUsetWide(DbgThread(), mlu, "es", "ES", L"Hola, mundo");
- cmsMLUsetWide(DbgThread(), mlu, "fr", "FR", L"Bonjour, le monde");
- cmsMLUsetWide(DbgThread(), mlu, "ca", "CA", L"Hola, mon");
+ cmsMLUsetWide(ContextID, mlu, "en", "US", L"Hello, world");
+ cmsMLUsetWide(ContextID, mlu, "es", "ES", L"Hola, mundo");
+ cmsMLUsetWide(ContextID, mlu, "fr", "FR", L"Bonjour, le monde");
+ cmsMLUsetWide(ContextID, mlu, "ca", "CA", L"Hola, mon");
// Check the returned string for each language
- cmsMLUgetASCII(DbgThread(), mlu, "en", "US", Buffer, 256);
+ cmsMLUgetASCII(ContextID, mlu, "en", "US", Buffer, 256);
if (strcmp(Buffer, "Hello, world") != 0) rc = 0;
- cmsMLUgetASCII(DbgThread(), mlu, "es", "ES", Buffer, 256);
+ cmsMLUgetASCII(ContextID, mlu, "es", "ES", Buffer, 256);
if (strcmp(Buffer, "Hola, mundo") != 0) rc = 0;
- cmsMLUgetASCII(DbgThread(), mlu, "fr", "FR", Buffer, 256);
+ cmsMLUgetASCII(ContextID, mlu, "fr", "FR", Buffer, 256);
if (strcmp(Buffer, "Bonjour, le monde") != 0) rc = 0;
- cmsMLUgetASCII(DbgThread(), mlu, "ca", "CA", Buffer, 256);
+ cmsMLUgetASCII(ContextID, mlu, "ca", "CA", Buffer, 256);
if (strcmp(Buffer, "Hola, mon") != 0) rc = 0;
if (rc == 0)
Fail("Unexpected string '%s'", Buffer);
// So far, so good.
- cmsMLUfree(DbgThread(), mlu);
+ cmsMLUfree(ContextID, mlu);
// Now for performance, allocate an empty struct
- mlu = cmsMLUalloc(DbgThread(), 0);
+ mlu = cmsMLUalloc(ContextID, 0);
// Fill it with several thousands of different lenguages
for (i=0; i < 4096; i++) {
@@ -3604,14 +3597,14 @@ cmsInt32Number CheckMLU(void)
Lang[2] = 0;
sprintf(Buffer, "String #%i", i);
- cmsMLUsetASCII(DbgThread(), mlu, Lang, Lang, Buffer);
+ cmsMLUsetASCII(ContextID, mlu, Lang, Lang, Buffer);
}
// Duplicate it
- mlu2 = cmsMLUdup(DbgThread(), mlu);
+ mlu2 = cmsMLUdup(ContextID, mlu);
// Get rid of original
- cmsMLUfree(DbgThread(), mlu);
+ cmsMLUfree(ContextID, mlu);
// Check all is still in place
for (i=0; i < 4096; i++) {
@@ -3622,7 +3615,7 @@ cmsInt32Number CheckMLU(void)
Lang[1] = (char)(i / 255);
Lang[2] = 0;
- cmsMLUgetASCII(DbgThread(), mlu2, Lang, Lang, Buffer2, 256);
+ cmsMLUgetASCII(ContextID, mlu2, Lang, Lang, Buffer2, 256);
sprintf(Buffer, "String #%i", i);
if (strcmp(Buffer, Buffer2) != 0) { rc = 0; break; }
@@ -3633,18 +3626,18 @@ cmsInt32Number CheckMLU(void)
// Check profile IO
- h = cmsOpenProfileFromFile(DbgThread(), "mlucheck.icc", "w");
+ h = cmsOpenProfileFromFile(ContextID, "mlucheck.icc", "w");
- cmsSetProfileVersion(DbgThread(), h, 4.3);
+ cmsSetProfileVersion(ContextID, h, 4.3);
- cmsWriteTag(DbgThread(), h, cmsSigProfileDescriptionTag, mlu2);
- cmsCloseProfile(DbgThread(), h);
- cmsMLUfree(DbgThread(), mlu2);
+ cmsWriteTag(ContextID, h, cmsSigProfileDescriptionTag, mlu2);
+ cmsCloseProfile(ContextID, h);
+ cmsMLUfree(ContextID, mlu2);
- h = cmsOpenProfileFromFile(DbgThread(), "mlucheck.icc", "r");
+ h = cmsOpenProfileFromFile(ContextID, "mlucheck.icc", "r");
- mlu3 = (cmsMLU *) cmsReadTag(DbgThread(), h, cmsSigProfileDescriptionTag);
+ mlu3 = (cmsMLU *) cmsReadTag(ContextID, h, cmsSigProfileDescriptionTag);
if (mlu3 == NULL) { Fail("Profile didn't get the MLU\n"); rc = 0; goto Error; }
// Check all is still in place
@@ -3656,7 +3649,7 @@ cmsInt32Number CheckMLU(void)
Lang[1] = (char) (i / 255);
Lang[2] = 0;
- cmsMLUgetASCII(DbgThread(), mlu3, Lang, Lang, Buffer2, 256);
+ cmsMLUgetASCII(ContextID, mlu3, Lang, Lang, Buffer2, 256);
sprintf(Buffer, "String #%i", i);
if (strcmp(Buffer, Buffer2) != 0) { rc = 0; break; }
@@ -3666,7 +3659,7 @@ cmsInt32Number CheckMLU(void)
Error:
- if (h != NULL) cmsCloseProfile(DbgThread(), h);
+ if (h != NULL) cmsCloseProfile(ContextID, h);
remove("mlucheck.icc");
return rc;
@@ -3675,7 +3668,7 @@ Error:
// A lightweight test of named color structures.
static
-cmsInt32Number CheckNamedColorList(void)
+cmsInt32Number CheckNamedColorList(cmsContext ContextID)
{
cmsNAMEDCOLORLIST* nc = NULL, *nc2;
cmsInt32Number i, j, rc=1;
@@ -3687,7 +3680,7 @@ cmsInt32Number CheckNamedColorList(void)
cmsUInt16Number CheckColorant[cmsMAXCHANNELS];
cmsHPROFILE h;
- nc = cmsAllocNamedColorList(DbgThread(), 0, 4, "prefix", "suffix");
+ nc = cmsAllocNamedColorList(ContextID, 0, 4, "prefix", "suffix");
if (nc == NULL) return 0;
for (i=0; i < 4096; i++) {
@@ -3697,7 +3690,7 @@ cmsInt32Number CheckNamedColorList(void)
Colorant[0] = Colorant[1] = Colorant[2] = Colorant[3] = (cmsUInt16Number) (4096 - i);
sprintf(Name, "#%d", i);
- if (!cmsAppendNamedColor(DbgThread(), nc, Name, PCS, Colorant)) { rc = 0; break; }
+ if (!cmsAppendNamedColor(ContextID, nc, Name, PCS, Colorant)) { rc = 0; break; }
}
for (i=0; i < 4096; i++) {
@@ -3706,7 +3699,7 @@ cmsInt32Number CheckNamedColorList(void)
CheckColorant[0] = CheckColorant[1] = CheckColorant[2] = CheckColorant[3] = (cmsUInt16Number) (4096 - i);
sprintf(CheckName, "#%d", i);
- if (!cmsNamedColorInfo(DbgThread(), nc, i, Name, NULL, NULL, PCS, Colorant)) { rc = 0; goto Error; }
+ if (!cmsNamedColorInfo(ContextID, nc, i, Name, NULL, NULL, PCS, Colorant)) { rc = 0; goto Error; }
for (j=0; j < 3; j++) {
@@ -3720,19 +3713,19 @@ cmsInt32Number CheckNamedColorList(void)
if (strcmp(Name, CheckName) != 0) {rc = 0; Fail("Invalid Name"); goto Error; };
}
- h = cmsOpenProfileFromFile(DbgThread(), "namedcol.icc", "w");
+ h = cmsOpenProfileFromFile(ContextID, "namedcol.icc", "w");
if (h == NULL) return 0;
- if (!cmsWriteTag(DbgThread(), h, cmsSigNamedColor2Tag, nc)) return 0;
- cmsCloseProfile(DbgThread(), h);
- cmsFreeNamedColorList(DbgThread(), nc);
+ if (!cmsWriteTag(ContextID, h, cmsSigNamedColor2Tag, nc)) return 0;
+ cmsCloseProfile(ContextID, h);
+ cmsFreeNamedColorList(ContextID, nc);
nc = NULL;
- h = cmsOpenProfileFromFile(DbgThread(), "namedcol.icc", "r");
- nc2 = (cmsNAMEDCOLORLIST *) cmsReadTag(DbgThread(), h, cmsSigNamedColor2Tag);
+ h = cmsOpenProfileFromFile(ContextID, "namedcol.icc", "r");
+ nc2 = (cmsNAMEDCOLORLIST *) cmsReadTag(ContextID, h, cmsSigNamedColor2Tag);
- if (cmsNamedColorCount(DbgThread(), nc2) != 4096) { rc = 0; Fail("Invalid count"); goto Error; }
+ if (cmsNamedColorCount(ContextID, nc2) != 4096) { rc = 0; Fail("Invalid count"); goto Error; }
- i = cmsNamedColorIndex(DbgThread(), nc2, "#123");
+ i = cmsNamedColorIndex(ContextID, nc2, "#123");
if (i != 123) { rc = 0; Fail("Invalid index"); goto Error; }
@@ -3742,7 +3735,7 @@ cmsInt32Number CheckNamedColorList(void)
CheckColorant[0] = CheckColorant[1] = CheckColorant[2] = CheckColorant[3] = (cmsUInt16Number) (4096 - i);
sprintf(CheckName, "#%d", i);
- if (!cmsNamedColorInfo(DbgThread(), nc2, i, Name, NULL, NULL, PCS, Colorant)) { rc = 0; goto Error; }
+ if (!cmsNamedColorInfo(ContextID, nc2, i, Name, NULL, NULL, PCS, Colorant)) { rc = 0; goto Error; }
for (j=0; j < 3; j++) {
@@ -3756,11 +3749,11 @@ cmsInt32Number CheckNamedColorList(void)
if (strcmp(Name, CheckName) != 0) {rc = 0; Fail("Invalid Name"); goto Error; };
}
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ContextID, h);
remove("namedcol.icc");
Error:
- if (nc != NULL) cmsFreeNamedColorList(DbgThread(), nc);
+ if (nc != NULL) cmsFreeNamedColorList(ContextID, nc);
return rc;
}
@@ -3813,9 +3806,9 @@ void CheckSingleFormatter16(cmsContext id, cmsUInt32Number Type, const char* Tex
Values[i] <<= 8;
}
- b.Fmt16(DbgThread(), &info, Values, Buffer, 2);
+ b.Fmt16(id, &info, Values, Buffer, 2);
memset(Values, 0, sizeof(Values));
- f.Fmt16(DbgThread(), &info, Values, Buffer, 2);
+ f.Fmt16(id, &info, Values, Buffer, 2);
for (i=0; i < nChannels; i++) {
if (bytes == 1)
@@ -3834,8 +3827,8 @@ void CheckSingleFormatter16(cmsContext id, cmsUInt32Number Type, const char* Tex
Values[i] <<= 8;
}
- b.Fmt16(DbgThread(), &info, Values, Buffer, 1);
- f.Fmt16(DbgThread(), &info, Values, Buffer, 1);
+ b.Fmt16(id, &info, Values, Buffer, 1);
+ f.Fmt16(id, &info, Values, Buffer, 1);
return;
}
}
@@ -3847,7 +3840,7 @@ void CheckSingleFormatter16(cmsContext id, cmsUInt32Number Type, const char* Tex
// Check all formatters
static
-cmsInt32Number CheckFormatters16(void)
+cmsInt32Number CheckFormatters16(cmsContext ContextID)
{
FormatterFailed = FALSE;
@@ -4028,7 +4021,7 @@ cmsInt32Number CheckFormatters16(void)
#undef C
static
-void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text)
+void CheckSingleFormatterFloat(cmsContext ContextID, cmsUInt32Number Type, const char* Text)
{
cmsFloat32Number Values[cmsMAXCHANNELS];
cmsUInt8Number Buffer[1024];
@@ -4043,16 +4036,16 @@ void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text)
info.OutputFormat = info.InputFormat = Type;
// Go forth and back
- f = _cmsGetFormatter(0, Type, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT);
- b = _cmsGetFormatter(0, Type, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT);
+ f = _cmsGetFormatter(ContextID, Type, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT);
+ b = _cmsGetFormatter(ContextID, Type, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT);
if (f.FmtFloat == NULL || b.FmtFloat == NULL) {
Fail("no formatter for %s", Text);
FormatterFailed = TRUE;
// Useful for debug
- f = _cmsGetFormatter(0, Type, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT);
- b = _cmsGetFormatter(0, Type, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT);
+ f = _cmsGetFormatter(ContextID, Type, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT);
+ b = _cmsGetFormatter(ContextID, Type, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT);
return;
}
@@ -4064,9 +4057,9 @@ void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text)
Values[i] = (cmsFloat32Number) (i+j);
}
- b.FmtFloat(DbgThread(), &info, Values, Buffer, 1);
+ b.FmtFloat(ContextID, &info, Values, Buffer, 1);
memset(Values, 0, sizeof(Values));
- f.FmtFloat(DbgThread(), &info, Values, Buffer, 1);
+ f.FmtFloat(ContextID, &info, Values, Buffer, 1);
for (i=0; i < nChannels; i++) {
@@ -4082,18 +4075,18 @@ void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text)
Values[i] = (cmsFloat32Number) (i+j);
}
- b.FmtFloat(DbgThread(), &info, Values, Buffer, 1);
- f.FmtFloat(DbgThread(), &info, Values, Buffer, 1);
+ b.FmtFloat(ContextID, &info, Values, Buffer, 1);
+ f.FmtFloat(ContextID, &info, Values, Buffer, 1);
return;
}
}
}
}
-#define C(a) CheckSingleFormatterFloat(a, #a)
+#define C(a) CheckSingleFormatterFloat(ContextID, a, #a)
static
-cmsInt32Number CheckFormattersFloat(void)
+cmsInt32Number CheckFormattersFloat(cmsContext ContextID)
{
FormatterFailed = FALSE;
@@ -4144,7 +4137,7 @@ cmsInt32Number CheckFormattersFloat(void)
// Check half float
#define my_isfinite(x) ((x) != (x))
static
-cmsInt32Number CheckFormattersHalf(void)
+cmsInt32Number CheckFormattersHalf(cmsContext ContextID)
{
int i, j;
@@ -4170,7 +4163,7 @@ cmsInt32Number CheckFormattersHalf(void)
#endif
static
-cmsInt32Number CheckOneRGB(cmsHTRANSFORM xform, cmsUInt16Number R, cmsUInt16Number G, cmsUInt16Number B, cmsUInt16Number Ro, cmsUInt16Number Go, cmsUInt16Number Bo)
+cmsInt32Number CheckOneRGB(cmsContext ContextID, cmsHTRANSFORM xform, cmsUInt16Number R, cmsUInt16Number G, cmsUInt16Number B, cmsUInt16Number Ro, cmsUInt16Number Go, cmsUInt16Number Bo)
{
cmsUInt16Number RGB[3];
cmsUInt16Number Out[3];
@@ -4179,7 +4172,7 @@ cmsInt32Number CheckOneRGB(cmsHTRANSFORM xform, cmsUInt16Number R, cmsUInt16Numb
RGB[1] = G;
RGB[2] = B;
- cmsDoTransform(DbgThread(), xform, RGB, Out, 1);
+ cmsDoTransform(ContextID, xform, RGB, Out, 1);
return IsGoodWord("R", Ro , Out[0]) &&
IsGoodWord("G", Go , Out[1]) &&
@@ -4188,7 +4181,7 @@ cmsInt32Number CheckOneRGB(cmsHTRANSFORM xform, cmsUInt16Number R, cmsUInt16Numb
// Check known values going from sRGB to XYZ
static
-cmsInt32Number CheckOneRGB_double(cmsHTRANSFORM xform, cmsFloat64Number R, cmsFloat64Number G, cmsFloat64Number B, cmsFloat64Number Ro, cmsFloat64Number Go, cmsFloat64Number Bo)
+cmsInt32Number CheckOneRGB_double(cmsContext ContextID, cmsHTRANSFORM xform, cmsFloat64Number R, cmsFloat64Number G, cmsFloat64Number B, cmsFloat64Number Ro, cmsFloat64Number Go, cmsFloat64Number Bo)
{
cmsFloat64Number RGB[3];
cmsFloat64Number Out[3];
@@ -4197,7 +4190,7 @@ cmsInt32Number CheckOneRGB_double(cmsHTRANSFORM xform, cmsFloat64Number R, cmsFl
RGB[1] = G;
RGB[2] = B;
- cmsDoTransform(DbgThread(), xform, RGB, Out, 1);
+ cmsDoTransform(ContextID, xform, RGB, Out, 1);
return IsGoodVal("R", Ro , Out[0], 0.01) &&
IsGoodVal("G", Go , Out[1], 0.01) &&
@@ -4206,37 +4199,37 @@ cmsInt32Number CheckOneRGB_double(cmsHTRANSFORM xform, cmsFloat64Number R, cmsFl
static
-cmsInt32Number CheckChangeBufferFormat(void)
+cmsInt32Number CheckChangeBufferFormat(cmsContext ContextID)
{
- cmsHPROFILE hsRGB = cmsCreate_sRGBProfile(DbgThread());
+ cmsHPROFILE hsRGB = cmsCreate_sRGBProfile(ContextID);
cmsHTRANSFORM xform;
cmsHTRANSFORM xform2;
- xform = cmsCreateTransform(DbgThread(), hsRGB, TYPE_RGB_16, hsRGB, TYPE_RGB_16, INTENT_PERCEPTUAL, 0);
- cmsCloseProfile(DbgThread(), hsRGB);
+ xform = cmsCreateTransform(ContextID, hsRGB, TYPE_RGB_16, hsRGB, TYPE_RGB_16, INTENT_PERCEPTUAL, 0);
+ cmsCloseProfile(ContextID, hsRGB);
if (xform == NULL) return 0;
- if (!CheckOneRGB(xform, 0, 0, 0, 0, 0, 0)) return 0;
- if (!CheckOneRGB(xform, 120, 0, 0, 120, 0, 0)) return 0;
- if (!CheckOneRGB(xform, 0, 222, 255, 0, 222, 255)) return 0;
+ if (!CheckOneRGB(ContextID, xform, 0, 0, 0, 0, 0, 0)) return 0;
+ if (!CheckOneRGB(ContextID, xform, 120, 0, 0, 120, 0, 0)) return 0;
+ if (!CheckOneRGB(ContextID, xform, 0, 222, 255, 0, 222, 255)) return 0;
- xform2 = cmsCloneTransformChangingFormats(DbgThread(), xform, TYPE_BGR_16, TYPE_RGB_16);
+ xform2 = cmsCloneTransformChangingFormats(ContextID, xform, TYPE_BGR_16, TYPE_RGB_16);
if (!xform2) return 0;
- if (!CheckOneRGB(xform2, 0, 0, 123, 123, 0, 0)) return 0;
- if (!CheckOneRGB(xform2, 154, 234, 0, 0, 234, 154)) return 0;
+ if (!CheckOneRGB(ContextID, xform2, 0, 0, 123, 123, 0, 0)) return 0;
+ if (!CheckOneRGB(ContextID, xform2, 154, 234, 0, 0, 234, 154)) return 0;
- cmsDeleteTransform(DbgThread(),xform2);
- xform2 = cmsCloneTransformChangingFormats(DbgThread(), xform, TYPE_RGB_DBL, TYPE_RGB_DBL);
+ cmsDeleteTransform(ContextID,xform2);
+ xform2 = cmsCloneTransformChangingFormats(ContextID, xform, TYPE_RGB_DBL, TYPE_RGB_DBL);
if (!xform2) return 0;
- if (!CheckOneRGB_double(xform2, 0.20, 0, 0, 0.20, 0, 0)) return 0;
- if (!CheckOneRGB_double(xform2, 0, 0.9, 1, 0, 0.9, 1)) return 0;
+ if (!CheckOneRGB_double(ContextID, xform2, 0.20, 0, 0, 0.20, 0, 0)) return 0;
+ if (!CheckOneRGB_double(ContextID, xform2, 0, 0.9, 1, 0, 0.9, 1)) return 0;
- cmsDeleteTransform(DbgThread(),xform2);
- cmsDeleteTransform(DbgThread(),xform);
+ cmsDeleteTransform(ContextID,xform2);
+ cmsDeleteTransform(ContextID,xform);
return 1;
}
@@ -4245,7 +4238,7 @@ return 1;
// Write tag testbed ----------------------------------------------------------------------------------------
static
-cmsInt32Number CheckXYZ(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckXYZ(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsCIEXYZ XYZ, *Pt;
@@ -4255,10 +4248,10 @@ cmsInt32Number CheckXYZ(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignatu
case 1:
XYZ.X = 1.0; XYZ.Y = 1.1; XYZ.Z = 1.2;
- return cmsWriteTag(DbgThread(), hProfile, tag, &XYZ);
+ return cmsWriteTag(ContextID, hProfile, tag, &XYZ);
case 2:
- Pt = (cmsCIEXYZ *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsCIEXYZ *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
return IsGoodFixed15_16("X", 1.0, Pt ->X) &&
IsGoodFixed15_16("Y", 1.1, Pt->Y) &&
@@ -4271,7 +4264,7 @@ cmsInt32Number CheckXYZ(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignatu
static
-cmsInt32Number CheckGamma(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckGamma(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsToneCurve *g, *Pt;
cmsInt32Number rc;
@@ -4280,15 +4273,15 @@ cmsInt32Number CheckGamma(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna
case 1:
- g = cmsBuildGamma(DbgThread(), 1.0);
- rc = cmsWriteTag(DbgThread(), hProfile, tag, g);
- cmsFreeToneCurve(DbgThread(), g);
+ g = cmsBuildGamma(ContextID, 1.0);
+ rc = cmsWriteTag(ContextID, hProfile, tag, g);
+ cmsFreeToneCurve(ContextID, g);
return rc;
case 2:
- Pt = (cmsToneCurve *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsToneCurve *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
- return cmsIsToneCurveLinear(DbgThread(), Pt);
+ return cmsIsToneCurveLinear(ContextID, Pt);
default:
return 0;
@@ -4296,7 +4289,7 @@ cmsInt32Number CheckGamma(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna
}
static
-cmsInt32Number CheckTextSingle(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckTextSingle(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsMLU *m, *Pt;
cmsInt32Number rc;
@@ -4306,16 +4299,16 @@ cmsInt32Number CheckTextSingle(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag
switch (Pass) {
case 1:
- m = cmsMLUalloc(DbgThread(), 0);
- cmsMLUsetASCII(DbgThread(), m, cmsNoLanguage, cmsNoCountry, "Test test");
- rc = cmsWriteTag(DbgThread(), hProfile, tag, m);
- cmsMLUfree(DbgThread(), m);
+ m = cmsMLUalloc(ContextID, 0);
+ cmsMLUsetASCII(ContextID, m, cmsNoLanguage, cmsNoCountry, "Test test");
+ rc = cmsWriteTag(ContextID, hProfile, tag, m);
+ cmsMLUfree(ContextID, m);
return rc;
case 2:
- Pt = (cmsMLU *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsMLU *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
- cmsMLUgetASCII(DbgThread(), Pt, cmsNoLanguage, cmsNoCountry, Buffer, 256);
+ cmsMLUgetASCII(ContextID, Pt, cmsNoLanguage, cmsNoCountry, Buffer, 256);
if (strcmp(Buffer, "Test test") != 0) return FALSE;
return TRUE;
@@ -4326,7 +4319,7 @@ cmsInt32Number CheckTextSingle(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag
static
-cmsInt32Number CheckText(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckText(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsMLU *m, *Pt;
cmsInt32Number rc;
@@ -4336,28 +4329,28 @@ cmsInt32Number CheckText(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat
switch (Pass) {
case 1:
- m = cmsMLUalloc(DbgThread(), 0);
- cmsMLUsetASCII(DbgThread(), m, cmsNoLanguage, cmsNoCountry, "Test test");
- cmsMLUsetASCII(DbgThread(), m, "en", "US", "1 1 1 1");
- cmsMLUsetASCII(DbgThread(), m, "es", "ES", "2 2 2 2");
- cmsMLUsetASCII(DbgThread(), m, "ct", "ES", "3 3 3 3");
- cmsMLUsetASCII(DbgThread(), m, "en", "GB", "444444444");
- rc = cmsWriteTag(DbgThread(), hProfile, tag, m);
- cmsMLUfree(DbgThread(), m);
+ m = cmsMLUalloc(ContextID, 0);
+ cmsMLUsetASCII(ContextID, m, cmsNoLanguage, cmsNoCountry, "Test test");
+ cmsMLUsetASCII(ContextID, m, "en", "US", "1 1 1 1");
+ cmsMLUsetASCII(ContextID, m, "es", "ES", "2 2 2 2");
+ cmsMLUsetASCII(ContextID, m, "ct", "ES", "3 3 3 3");
+ cmsMLUsetASCII(ContextID, m, "en", "GB", "444444444");
+ rc = cmsWriteTag(ContextID, hProfile, tag, m);
+ cmsMLUfree(ContextID, m);
return rc;
case 2:
- Pt = (cmsMLU *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsMLU *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
- cmsMLUgetASCII(DbgThread(), Pt, cmsNoLanguage, cmsNoCountry, Buffer, 256);
+ cmsMLUgetASCII(ContextID, Pt, cmsNoLanguage, cmsNoCountry, Buffer, 256);
if (strcmp(Buffer, "Test test") != 0) return FALSE;
- cmsMLUgetASCII(DbgThread(), Pt, "en", "US", Buffer, 256);
+ cmsMLUgetASCII(ContextID, Pt, "en", "US", Buffer, 256);
if (strcmp(Buffer, "1 1 1 1") != 0) return FALSE;
- cmsMLUgetASCII(DbgThread(), Pt, "es", "ES", Buffer, 256);
+ cmsMLUgetASCII(ContextID, Pt, "es", "ES", Buffer, 256);
if (strcmp(Buffer, "2 2 2 2") != 0) return FALSE;
- cmsMLUgetASCII(DbgThread(), Pt, "ct", "ES", Buffer, 256);
+ cmsMLUgetASCII(ContextID, Pt, "ct", "ES", Buffer, 256);
if (strcmp(Buffer, "3 3 3 3") != 0) return FALSE;
- cmsMLUgetASCII(DbgThread(), Pt, "en", "GB", Buffer, 256);
+ cmsMLUgetASCII(ContextID, Pt, "en", "GB", Buffer, 256);
if (strcmp(Buffer, "444444444") != 0) return FALSE;
return TRUE;
@@ -4367,7 +4360,7 @@ cmsInt32Number CheckText(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat
}
static
-cmsInt32Number CheckData(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckData(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsICCData *Pt;
cmsICCData d = { 1, 0, { '?' }};
@@ -4377,11 +4370,11 @@ cmsInt32Number CheckData(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna
switch (Pass) {
case 1:
- rc = cmsWriteTag(DbgThread(), hProfile, tag, &d);
+ rc = cmsWriteTag(ContextID, hProfile, tag, &d);
return rc;
case 2:
- Pt = (cmsICCData *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsICCData *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
return (Pt ->data[0] == '?') && (Pt ->flag == 0) && (Pt ->len == 1);
@@ -4392,7 +4385,7 @@ cmsInt32Number CheckData(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna
static
-cmsInt32Number CheckSignature(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckSignature(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsTagSignature *Pt, Holder;
@@ -4400,10 +4393,10 @@ cmsInt32Number CheckSignature(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag
case 1:
Holder = (cmsTagSignature) cmsSigPerceptualReferenceMediumGamut;
- return cmsWriteTag(DbgThread(), hProfile, tag, &Holder);
+ return cmsWriteTag(ContextID, hProfile, tag, &Holder);
case 2:
- Pt = (cmsTagSignature *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsTagSignature *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
return *Pt == cmsSigPerceptualReferenceMediumGamut;
@@ -4414,7 +4407,7 @@ cmsInt32Number CheckSignature(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag
static
-cmsInt32Number CheckDateTime(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckDateTime(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
struct tm *Pt, Holder;
@@ -4428,10 +4421,10 @@ cmsInt32Number CheckDateTime(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagS
Holder.tm_mday = 4;
Holder.tm_mon = 5;
Holder.tm_year = 2009 - 1900;
- return cmsWriteTag(DbgThread(), hProfile, tag, &Holder);
+ return cmsWriteTag(ContextID, hProfile, tag, &Holder);
case 2:
- Pt = (struct tm *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (struct tm *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
return (Pt ->tm_hour == 1 &&
@@ -4449,7 +4442,7 @@ cmsInt32Number CheckDateTime(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagS
static
-cmsInt32Number CheckNamedColor(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag, cmsInt32Number max_check, cmsBool colorant_check)
+cmsInt32Number CheckNamedColor(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag, cmsInt32Number max_check, cmsBool colorant_check)
{
cmsNAMEDCOLORLIST* nc;
cmsInt32Number i, j, rc;
@@ -4464,7 +4457,7 @@ cmsInt32Number CheckNamedColor(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTa
case 1:
- nc = cmsAllocNamedColorList(DbgThread(), 0, 4, "prefix", "suffix");
+ nc = cmsAllocNamedColorList(ContextID, 0, 4, "prefix", "suffix");
if (nc == NULL) return 0;
for (i=0; i < max_check; i++) {
@@ -4473,16 +4466,16 @@ cmsInt32Number CheckNamedColor(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTa
Colorant[0] = Colorant[1] = Colorant[2] = Colorant[3] = (cmsUInt16Number) (max_check - i);
sprintf(Name, "#%d", i);
- if (!cmsAppendNamedColor(DbgThread(), nc, Name, PCS, Colorant)) { Fail("Couldn't append named color"); return 0; }
+ if (!cmsAppendNamedColor(ContextID, nc, Name, PCS, Colorant)) { Fail("Couldn't append named color"); return 0; }
}
- rc = cmsWriteTag(DbgThread(), hProfile, tag, nc);
- cmsFreeNamedColorList(DbgThread(), nc);
+ rc = cmsWriteTag(ContextID, hProfile, tag, nc);
+ cmsFreeNamedColorList(ContextID, nc);
return rc;
case 2:
- nc = (cmsNAMEDCOLORLIST *) cmsReadTag(DbgThread(), hProfile, tag);
+ nc = (cmsNAMEDCOLORLIST *) cmsReadTag(ContextID, hProfile, tag);
if (nc == NULL) return 0;
for (i=0; i < max_check; i++) {
@@ -4491,7 +4484,7 @@ cmsInt32Number CheckNamedColor(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTa
CheckColorant[0] = CheckColorant[1] = CheckColorant[2] = CheckColorant[3] = (cmsUInt16Number) (max_check - i);
sprintf(CheckName, "#%d", i);
- if (!cmsNamedColorInfo(DbgThread(), nc, i, Name, NULL, NULL, PCS, Colorant)) { Fail("Invalid string"); return 0; }
+ if (!cmsNamedColorInfo(ContextID, nc, i, Name, NULL, NULL, PCS, Colorant)) { Fail("Invalid string"); return 0; }
for (j=0; j < 3; j++) {
@@ -4517,7 +4510,7 @@ cmsInt32Number CheckNamedColor(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTa
static
-cmsInt32Number CheckLUT(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckLUT(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsPipeline* Lut, *Pt;
cmsInt32Number rc;
@@ -4527,24 +4520,24 @@ cmsInt32Number CheckLUT(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat
case 1:
- Lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ Lut = cmsPipelineAlloc(ContextID, 3, 3);
if (Lut == NULL) return 0;
// Create an identity LUT
- cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(DbgThread(), 3));
- cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_END, _cmsStageAllocIdentityCLut(DbgThread(), 3));
- cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_END, _cmsStageAllocIdentityCurves(DbgThread(), 3));
+ cmsPipelineInsertStage(ContextID, Lut, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 3));
+ cmsPipelineInsertStage(ContextID, Lut, cmsAT_END, _cmsStageAllocIdentityCLut(ContextID, 3));
+ cmsPipelineInsertStage(ContextID, Lut, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, 3));
- rc = cmsWriteTag(DbgThread(), hProfile, tag, Lut);
- cmsPipelineFree(DbgThread(), Lut);
+ rc = cmsWriteTag(ContextID, hProfile, tag, Lut);
+ cmsPipelineFree(ContextID, Lut);
return rc;
case 2:
- Pt = (cmsPipeline *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsPipeline *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
// Transform values, check for identity
- return Check16LUT(Pt);
+ return Check16LUT(ContextID, Pt);
default:
return 0;
@@ -4552,7 +4545,7 @@ cmsInt32Number CheckLUT(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat
}
static
-cmsInt32Number CheckCHAD(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckCHAD(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsFloat64Number *Pt;
cmsFloat64Number CHAD[] = { 0, .1, .2, .3, .4, .5, .6, .7, .8 };
@@ -4561,11 +4554,11 @@ cmsInt32Number CheckCHAD(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna
switch (Pass) {
case 1:
- return cmsWriteTag(DbgThread(), hProfile, tag, CHAD);
+ return cmsWriteTag(ContextID, hProfile, tag, CHAD);
case 2:
- Pt = (cmsFloat64Number *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsFloat64Number *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
for (i=0; i < 9; i++) {
@@ -4580,18 +4573,18 @@ cmsInt32Number CheckCHAD(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna
}
static
-cmsInt32Number CheckChromaticity(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckChromaticity(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsCIExyYTRIPLE *Pt, c = { {0, .1, 1 }, { .3, .4, 1 }, { .6, .7, 1 }};
switch (Pass) {
case 1:
- return cmsWriteTag(DbgThread(), hProfile, tag, &c);
+ return cmsWriteTag(ContextID, hProfile, tag, &c);
case 2:
- Pt = (cmsCIExyYTRIPLE *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsCIExyYTRIPLE *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
if (!IsGoodFixed15_16("xyY", Pt ->Red.x, c.Red.x)) return 0;
@@ -4609,7 +4602,7 @@ cmsInt32Number CheckChromaticity(cmsInt32Number Pass, cmsHPROFILE hProfile, cms
static
-cmsInt32Number CheckColorantOrder(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckColorantOrder(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsUInt8Number *Pt, c[cmsMAXCHANNELS];
cmsInt32Number i;
@@ -4618,11 +4611,11 @@ cmsInt32Number CheckColorantOrder(cmsInt32Number Pass, cmsHPROFILE hProfile, cm
case 1:
for (i=0; i < cmsMAXCHANNELS; i++) c[i] = (cmsUInt8Number) (cmsMAXCHANNELS - i - 1);
- return cmsWriteTag(DbgThread(), hProfile, tag, c);
+ return cmsWriteTag(ContextID, hProfile, tag, c);
case 2:
- Pt = (cmsUInt8Number *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsUInt8Number *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
for (i=0; i < cmsMAXCHANNELS; i++) {
@@ -4636,7 +4629,7 @@ cmsInt32Number CheckColorantOrder(cmsInt32Number Pass, cmsHPROFILE hProfile, cm
}
static
-cmsInt32Number CheckMeasurement(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckMeasurement(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsICCMeasurementConditions *Pt, m;
@@ -4650,11 +4643,11 @@ cmsInt32Number CheckMeasurement(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsT
m.Geometry = 1;
m.IlluminantType = cmsILLUMINANT_TYPE_D50;
m.Observer = 1;
- return cmsWriteTag(DbgThread(), hProfile, tag, &m);
+ return cmsWriteTag(ContextID, hProfile, tag, &m);
case 2:
- Pt = (cmsICCMeasurementConditions *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsICCMeasurementConditions *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
if (!IsGoodFixed15_16("Backing", Pt ->Backing.X, 0.1)) return 0;
@@ -4674,7 +4667,7 @@ cmsInt32Number CheckMeasurement(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsT
static
-cmsInt32Number CheckUcrBg(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckUcrBg(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsUcrBg *Pt, m;
cmsInt32Number rc;
@@ -4683,22 +4676,22 @@ cmsInt32Number CheckUcrBg(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSign
switch (Pass) {
case 1:
- m.Ucr = cmsBuildGamma(DbgThread(), 2.4);
- m.Bg = cmsBuildGamma(DbgThread(), -2.2);
- m.Desc = cmsMLUalloc(DbgThread(), 1);
- cmsMLUsetASCII(DbgThread(), m.Desc, cmsNoLanguage, cmsNoCountry, "test UCR/BG");
- rc = cmsWriteTag(DbgThread(), hProfile, tag, &m);
- cmsMLUfree(DbgThread(), m.Desc);
- cmsFreeToneCurve(DbgThread(), m.Bg);
- cmsFreeToneCurve(DbgThread(), m.Ucr);
+ m.Ucr = cmsBuildGamma(ContextID, 2.4);
+ m.Bg = cmsBuildGamma(ContextID, -2.2);
+ m.Desc = cmsMLUalloc(ContextID, 1);
+ cmsMLUsetASCII(ContextID, m.Desc, cmsNoLanguage, cmsNoCountry, "test UCR/BG");
+ rc = cmsWriteTag(ContextID, hProfile, tag, &m);
+ cmsMLUfree(ContextID, m.Desc);
+ cmsFreeToneCurve(ContextID, m.Bg);
+ cmsFreeToneCurve(ContextID, m.Ucr);
return rc;
case 2:
- Pt = (cmsUcrBg *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsUcrBg *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
- cmsMLUgetASCII(DbgThread(), Pt ->Desc, cmsNoLanguage, cmsNoCountry, Buffer, 256);
+ cmsMLUgetASCII(ContextID, Pt ->Desc, cmsNoLanguage, cmsNoCountry, Buffer, 256);
if (strcmp(Buffer, "test UCR/BG") != 0) return 0;
return 1;
@@ -4709,7 +4702,7 @@ cmsInt32Number CheckUcrBg(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSign
static
-cmsInt32Number CheckCRDinfo(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckCRDinfo(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsMLU *mlu;
char Buffer[256];
@@ -4718,41 +4711,41 @@ cmsInt32Number CheckCRDinfo(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSi
switch (Pass) {
case 1:
- mlu = cmsMLUalloc(DbgThread(), 5);
-
- cmsMLUsetWide(DbgThread(), mlu, "PS", "nm", L"test postscript");
- cmsMLUsetWide(DbgThread(), mlu, "PS", "#0", L"perceptual");
- cmsMLUsetWide(DbgThread(), mlu, "PS", "#1", L"relative_colorimetric");
- cmsMLUsetWide(DbgThread(), mlu, "PS", "#2", L"saturation");
- cmsMLUsetWide(DbgThread(), mlu, "PS", "#3", L"absolute_colorimetric");
- rc = cmsWriteTag(DbgThread(), hProfile, tag, mlu);
- cmsMLUfree(DbgThread(), mlu);
+ mlu = cmsMLUalloc(ContextID, 5);
+
+ cmsMLUsetWide(ContextID, mlu, "PS", "nm", L"test postscript");
+ cmsMLUsetWide(ContextID, mlu, "PS", "#0", L"perceptual");
+ cmsMLUsetWide(ContextID, mlu, "PS", "#1", L"relative_colorimetric");
+ cmsMLUsetWide(ContextID, mlu, "PS", "#2", L"saturation");
+ cmsMLUsetWide(ContextID, mlu, "PS", "#3", L"absolute_colorimetric");
+ rc = cmsWriteTag(ContextID, hProfile, tag, mlu);
+ cmsMLUfree(ContextID, mlu);
return rc;
case 2:
- mlu = (cmsMLU*) cmsReadTag(DbgThread(), hProfile, tag);
+ mlu = (cmsMLU*) cmsReadTag(ContextID, hProfile, tag);
if (mlu == NULL) return 0;
- cmsMLUgetASCII(DbgThread(), mlu, "PS", "nm", Buffer, 256);
+ cmsMLUgetASCII(ContextID, mlu, "PS", "nm", Buffer, 256);
if (strcmp(Buffer, "test postscript") != 0) return 0;
- cmsMLUgetASCII(DbgThread(), mlu, "PS", "#0", Buffer, 256);
+ cmsMLUgetASCII(ContextID, mlu, "PS", "#0", Buffer, 256);
if (strcmp(Buffer, "perceptual") != 0) return 0;
- cmsMLUgetASCII(DbgThread(), mlu, "PS", "#1", Buffer, 256);
+ cmsMLUgetASCII(ContextID, mlu, "PS", "#1", Buffer, 256);
if (strcmp(Buffer, "relative_colorimetric") != 0) return 0;
- cmsMLUgetASCII(DbgThread(), mlu, "PS", "#2", Buffer, 256);
+ cmsMLUgetASCII(ContextID, mlu, "PS", "#2", Buffer, 256);
if (strcmp(Buffer, "saturation") != 0) return 0;
- cmsMLUgetASCII(DbgThread(), mlu, "PS", "#3", Buffer, 256);
+ cmsMLUgetASCII(ContextID, mlu, "PS", "#3", Buffer, 256);
if (strcmp(Buffer, "absolute_colorimetric") != 0) return 0;
return 1;
@@ -4763,7 +4756,7 @@ cmsInt32Number CheckCRDinfo(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSi
static
-cmsToneCurve *CreateSegmentedCurve(void)
+cmsToneCurve *CreateSegmentedCurve(cmsContext ContextID)
{
cmsCurveSegment Seg[3];
cmsFloat32Number Sampled[2] = { 0, 1};
@@ -4790,12 +4783,12 @@ cmsToneCurve *CreateSegmentedCurve(void)
Seg[2].x0 = 1;
Seg[2].x1 = 1E22F;
- return cmsBuildSegmentedToneCurve(DbgThread(), 3, Seg);
+ return cmsBuildSegmentedToneCurve(ContextID, 3, Seg);
}
static
-cmsInt32Number CheckMPE(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckMPE(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsPipeline* Lut, *Pt;
cmsToneCurve* G[3];
@@ -4805,24 +4798,24 @@ cmsInt32Number CheckMPE(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat
case 1:
- Lut = cmsPipelineAlloc(DbgThread(), 3, 3);
+ Lut = cmsPipelineAlloc(ContextID, 3, 3);
- cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_BEGIN, _cmsStageAllocLabV2ToV4(DbgThread()));
- cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_END, _cmsStageAllocLabV4ToV2(DbgThread()));
- AddIdentityCLUTfloat(Lut);
+ cmsPipelineInsertStage(ContextID, Lut, cmsAT_BEGIN, _cmsStageAllocLabV2ToV4(ContextID));
+ cmsPipelineInsertStage(ContextID, Lut, cmsAT_END, _cmsStageAllocLabV4ToV2(ContextID));
+ AddIdentityCLUTfloat(ContextID, Lut);
- G[0] = G[1] = G[2] = CreateSegmentedCurve();
- cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_END, cmsStageAllocToneCurves(DbgThread(), 3, G));
- cmsFreeToneCurve(DbgThread(), G[0]);
+ G[0] = G[1] = G[2] = CreateSegmentedCurve(ContextID);
+ cmsPipelineInsertStage(ContextID, Lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 3, G));
+ cmsFreeToneCurve(ContextID, G[0]);
- rc = cmsWriteTag(DbgThread(), hProfile, tag, Lut);
- cmsPipelineFree(DbgThread(), Lut);
+ rc = cmsWriteTag(ContextID, hProfile, tag, Lut);
+ cmsPipelineFree(ContextID, Lut);
return rc;
case 2:
- Pt = (cmsPipeline *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsPipeline *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
- return CheckFloatLUT(Pt);
+ return CheckFloatLUT(ContextID, Pt);
default:
return 0;
@@ -4831,7 +4824,7 @@ cmsInt32Number CheckMPE(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat
static
-cmsInt32Number CheckScreening(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckScreening(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsScreening *Pt, sc;
cmsInt32Number rc;
@@ -4846,12 +4839,12 @@ cmsInt32Number CheckScreening(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag
sc.Channels[0].ScreenAngle = 3.0;
sc.Channels[0].SpotShape = cmsSPOT_ELLIPSE;
- rc = cmsWriteTag(DbgThread(), hProfile, tag, &sc);
+ rc = cmsWriteTag(ContextID, hProfile, tag, &sc);
return rc;
case 2:
- Pt = (cmsScreening *) cmsReadTag(DbgThread(), hProfile, tag);
+ Pt = (cmsScreening *) cmsReadTag(ContextID, hProfile, tag);
if (Pt == NULL) return 0;
if (Pt ->nChannels != 1) return 0;
@@ -4868,17 +4861,17 @@ cmsInt32Number CheckScreening(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag
static
-cmsBool CheckOneStr(cmsMLU* mlu, cmsInt32Number n)
+cmsBool CheckOneStr(cmsContext ContextID, cmsMLU* mlu, cmsInt32Number n)
{
char Buffer[256], Buffer2[256];
- cmsMLUgetASCII(DbgThread(), mlu, "en", "US", Buffer, 255);
+ cmsMLUgetASCII(ContextID, mlu, "en", "US", Buffer, 255);
sprintf(Buffer2, "Hello, world %d", n);
if (strcmp(Buffer, Buffer2) != 0) return FALSE;
- cmsMLUgetASCII(DbgThread(), mlu, "es", "ES", Buffer, 255);
+ cmsMLUgetASCII(ContextID, mlu, "es", "ES", Buffer, 255);
sprintf(Buffer2, "Hola, mundo %d", n);
if (strcmp(Buffer, Buffer2) != 0) return FALSE;
@@ -4887,16 +4880,16 @@ cmsBool CheckOneStr(cmsMLU* mlu, cmsInt32Number n)
static
-void SetOneStr(cmsMLU** mlu, wchar_t* s1, wchar_t* s2)
+void SetOneStr(cmsContext ContextID, cmsMLU** mlu, wchar_t* s1, wchar_t* s2)
{
- *mlu = cmsMLUalloc(DbgThread(), 0);
- cmsMLUsetWide(DbgThread(), *mlu, "en", "US", s1);
- cmsMLUsetWide(DbgThread(), *mlu, "es", "ES", s2);
+ *mlu = cmsMLUalloc(ContextID, 0);
+ cmsMLUsetWide(ContextID, *mlu, "en", "US", s1);
+ cmsMLUsetWide(ContextID, *mlu, "es", "ES", s2);
}
static
-cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfile)
+cmsInt32Number CheckProfileSequenceTag(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile)
{
cmsSEQ* s;
cmsInt32Number i;
@@ -4905,15 +4898,15 @@ cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfil
case 1:
- s = cmsAllocProfileSequenceDescription(DbgThread(), 3);
+ s = cmsAllocProfileSequenceDescription(ContextID, 3);
if (s == NULL) return 0;
- SetOneStr(&s -> seq[0].Manufacturer, L"Hello, world 0", L"Hola, mundo 0");
- SetOneStr(&s -> seq[0].Model, L"Hello, world 0", L"Hola, mundo 0");
- SetOneStr(&s -> seq[1].Manufacturer, L"Hello, world 1", L"Hola, mundo 1");
- SetOneStr(&s -> seq[1].Model, L"Hello, world 1", L"Hola, mundo 1");
- SetOneStr(&s -> seq[2].Manufacturer, L"Hello, world 2", L"Hola, mundo 2");
- SetOneStr(&s -> seq[2].Model, L"Hello, world 2", L"Hola, mundo 2");
+ SetOneStr(ContextID, &s -> seq[0].Manufacturer, L"Hello, world 0", L"Hola, mundo 0");
+ SetOneStr(ContextID, &s -> seq[0].Model, L"Hello, world 0", L"Hola, mundo 0");
+ SetOneStr(ContextID, &s -> seq[1].Manufacturer, L"Hello, world 1", L"Hola, mundo 1");
+ SetOneStr(ContextID, &s -> seq[1].Model, L"Hello, world 1", L"Hola, mundo 1");
+ SetOneStr(ContextID, &s -> seq[2].Manufacturer, L"Hello, world 2", L"Hola, mundo 2");
+ SetOneStr(ContextID, &s -> seq[2].Model, L"Hello, world 2", L"Hola, mundo 2");
#ifdef CMS_DONT_USE_INT64
@@ -4937,13 +4930,13 @@ cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfil
s ->seq[2].attributes = cmsTransparency|cmsGlossy;
#endif
- if (!cmsWriteTag(DbgThread(), hProfile, cmsSigProfileSequenceDescTag, s)) return 0;
- cmsFreeProfileSequenceDescription(DbgThread(), s);
+ if (!cmsWriteTag(ContextID, hProfile, cmsSigProfileSequenceDescTag, s)) return 0;
+ cmsFreeProfileSequenceDescription(ContextID, s);
return 1;
case 2:
- s = (cmsSEQ *) cmsReadTag(DbgThread(), hProfile, cmsSigProfileSequenceDescTag);
+ s = (cmsSEQ *) cmsReadTag(ContextID, hProfile, cmsSigProfileSequenceDescTag);
if (s == NULL) return 0;
if (s ->n != 3) return 0;
@@ -4972,8 +4965,8 @@ cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfil
// Check MLU
for (i=0; i < 3; i++) {
- if (!CheckOneStr(s -> seq[i].Manufacturer, i)) return 0;
- if (!CheckOneStr(s -> seq[i].Model, i)) return 0;
+ if (!CheckOneStr(ContextID, s -> seq[i].Manufacturer, i)) return 0;
+ if (!CheckOneStr(ContextID, s -> seq[i].Model, i)) return 0;
}
return 1;
@@ -4984,7 +4977,7 @@ cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfil
static
-cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProfile)
+cmsInt32Number CheckProfileSequenceIDTag(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile)
{
cmsSEQ* s;
cmsInt32Number i;
@@ -4993,7 +4986,7 @@ cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProf
case 1:
- s = cmsAllocProfileSequenceDescription(DbgThread(), 3);
+ s = cmsAllocProfileSequenceDescription(ContextID, 3);
if (s == NULL) return 0;
memcpy(s ->seq[0].ProfileID.ID8, "0123456789ABCDEF", 16);
@@ -5001,17 +4994,17 @@ cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProf
memcpy(s ->seq[2].ProfileID.ID8, "2222222222222222", 16);
- SetOneStr(&s -> seq[0].Description, L"Hello, world 0", L"Hola, mundo 0");
- SetOneStr(&s -> seq[1].Description, L"Hello, world 1", L"Hola, mundo 1");
- SetOneStr(&s -> seq[2].Description, L"Hello, world 2", L"Hola, mundo 2");
+ SetOneStr(ContextID, &s -> seq[0].Description, L"Hello, world 0", L"Hola, mundo 0");
+ SetOneStr(ContextID, &s -> seq[1].Description, L"Hello, world 1", L"Hola, mundo 1");
+ SetOneStr(ContextID, &s -> seq[2].Description, L"Hello, world 2", L"Hola, mundo 2");
- if (!cmsWriteTag(DbgThread(), hProfile, cmsSigProfileSequenceIdTag, s)) return 0;
- cmsFreeProfileSequenceDescription(DbgThread(), s);
+ if (!cmsWriteTag(ContextID, hProfile, cmsSigProfileSequenceIdTag, s)) return 0;
+ cmsFreeProfileSequenceDescription(ContextID, s);
return 1;
case 2:
- s = (cmsSEQ *) cmsReadTag(DbgThread(), hProfile, cmsSigProfileSequenceIdTag);
+ s = (cmsSEQ *) cmsReadTag(ContextID, hProfile, cmsSigProfileSequenceIdTag);
if (s == NULL) return 0;
if (s ->n != 3) return 0;
@@ -5022,7 +5015,7 @@ cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProf
for (i=0; i < 3; i++) {
- if (!CheckOneStr(s -> seq[i].Description, i)) return 0;
+ if (!CheckOneStr(ContextID, s -> seq[i].Description, i)) return 0;
}
return 1;
@@ -5034,7 +5027,7 @@ cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProf
static
-cmsInt32Number CheckICCViewingConditions(cmsInt32Number Pass, cmsHPROFILE hProfile)
+cmsInt32Number CheckICCViewingConditions(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile)
{
cmsICCViewingConditions* v;
cmsICCViewingConditions s;
@@ -5050,11 +5043,11 @@ cmsInt32Number CheckICCViewingConditions(cmsInt32Number Pass, cmsHPROFILE hProf
s.SurroundXYZ.Y = 0.5;
s.SurroundXYZ.Z = 0.6;
- if (!cmsWriteTag(DbgThread(), hProfile, cmsSigViewingConditionsTag, &s)) return 0;
+ if (!cmsWriteTag(ContextID, hProfile, cmsSigViewingConditionsTag, &s)) return 0;
return 1;
case 2:
- v = (cmsICCViewingConditions *) cmsReadTag(DbgThread(), hProfile, cmsSigViewingConditionsTag);
+ v = (cmsICCViewingConditions *) cmsReadTag(ContextID, hProfile, cmsSigViewingConditionsTag);
if (v == NULL) return 0;
if (v ->IlluminantType != 1) return 0;
@@ -5076,7 +5069,7 @@ cmsInt32Number CheckICCViewingConditions(cmsInt32Number Pass, cmsHPROFILE hProf
static
-cmsInt32Number CheckVCGT(cmsInt32Number Pass, cmsHPROFILE hProfile)
+cmsInt32Number CheckVCGT(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile)
{
cmsToneCurve* Curves[3];
cmsToneCurve** PtrCurve;
@@ -5084,23 +5077,23 @@ cmsInt32Number CheckVCGT(cmsInt32Number Pass, cmsHPROFILE hProfile)
switch (Pass) {
case 1:
- Curves[0] = cmsBuildGamma(DbgThread(), 1.1);
- Curves[1] = cmsBuildGamma(DbgThread(), 2.2);
- Curves[2] = cmsBuildGamma(DbgThread(), 3.4);
+ Curves[0] = cmsBuildGamma(ContextID, 1.1);
+ Curves[1] = cmsBuildGamma(ContextID, 2.2);
+ Curves[2] = cmsBuildGamma(ContextID, 3.4);
- if (!cmsWriteTag(DbgThread(), hProfile, cmsSigVcgtTag, Curves)) return 0;
+ if (!cmsWriteTag(ContextID, hProfile, cmsSigVcgtTag, Curves)) return 0;
- cmsFreeToneCurveTriple(DbgThread(), Curves);
+ cmsFreeToneCurveTriple(ContextID, Curves);
return 1;
case 2:
- PtrCurve = (cmsToneCurve **) cmsReadTag(DbgThread(), hProfile, cmsSigVcgtTag);
+ PtrCurve = (cmsToneCurve **) cmsReadTag(ContextID, hProfile, cmsSigVcgtTag);
if (PtrCurve == NULL) return 0;
- if (!IsGoodVal("VCGT R", cmsEstimateGamma(DbgThread(), PtrCurve[0], 0.01), 1.1, 0.001)) return 0;
- if (!IsGoodVal("VCGT G", cmsEstimateGamma(DbgThread(), PtrCurve[1], 0.01), 2.2, 0.001)) return 0;
- if (!IsGoodVal("VCGT B", cmsEstimateGamma(DbgThread(), PtrCurve[2], 0.01), 3.4, 0.001)) return 0;
+ if (!IsGoodVal("VCGT R", cmsEstimateGamma(ContextID, PtrCurve[0], 0.01), 1.1, 0.001)) return 0;
+ if (!IsGoodVal("VCGT G", cmsEstimateGamma(ContextID, PtrCurve[1], 0.01), 2.2, 0.001)) return 0;
+ if (!IsGoodVal("VCGT B", cmsEstimateGamma(ContextID, PtrCurve[2], 0.01), 3.4, 0.001)) return 0;
return 1;
default:;
@@ -5112,38 +5105,38 @@ cmsInt32Number CheckVCGT(cmsInt32Number Pass, cmsHPROFILE hProfile)
// Only one of the two following may be used, as they share the same tag
static
-cmsInt32Number CheckDictionary16(cmsInt32Number Pass, cmsHPROFILE hProfile)
+cmsInt32Number CheckDictionary16(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile)
{
cmsHANDLE hDict;
const cmsDICTentry* e;
switch (Pass) {
case 1:
- hDict = cmsDictAlloc(DbgThread());
- cmsDictAddEntry(DbgThread(), hDict, L"Name0", NULL, NULL, NULL);
- cmsDictAddEntry(DbgThread(), hDict, L"Name1", L"", NULL, NULL);
- cmsDictAddEntry(DbgThread(), hDict, L"Name", L"String", NULL, NULL);
- cmsDictAddEntry(DbgThread(), hDict, L"Name2", L"12", NULL, NULL);
- if (!cmsWriteTag(DbgThread(), hProfile, cmsSigMetaTag, hDict)) return 0;
- cmsDictFree(DbgThread(), hDict);
+ hDict = cmsDictAlloc(ContextID);
+ cmsDictAddEntry(ContextID, hDict, L"Name0", NULL, NULL, NULL);
+ cmsDictAddEntry(ContextID, hDict, L"Name1", L"", NULL, NULL);
+ cmsDictAddEntry(ContextID, hDict, L"Name", L"String", NULL, NULL);
+ cmsDictAddEntry(ContextID, hDict, L"Name2", L"12", NULL, NULL);
+ if (!cmsWriteTag(ContextID, hProfile, cmsSigMetaTag, hDict)) return 0;
+ cmsDictFree(ContextID, hDict);
return 1;
case 2:
- hDict = cmsReadTag(DbgThread(), hProfile, cmsSigMetaTag);
+ hDict = cmsReadTag(ContextID, hProfile, cmsSigMetaTag);
if (hDict == NULL) return 0;
- e = cmsDictGetEntryList(DbgThread(), hDict);
+ e = cmsDictGetEntryList(ContextID, hDict);
if (memcmp(e ->Name, L"Name2", sizeof(wchar_t) * 5) != 0) return 0;
if (memcmp(e ->Value, L"12", sizeof(wchar_t) * 2) != 0) return 0;
- e = cmsDictNextEntry(DbgThread(), e);
+ e = cmsDictNextEntry(ContextID, e);
if (memcmp(e ->Name, L"Name", sizeof(wchar_t) * 4) != 0) return 0;
if (memcmp(e ->Value, L"String", sizeof(wchar_t) * 5) != 0) return 0;
- e = cmsDictNextEntry(DbgThread(), e);
+ e = cmsDictNextEntry(ContextID, e);
if (memcmp(e ->Name, L"Name1", sizeof(wchar_t) *5) != 0) return 0;
if (e ->Value == NULL) return 0;
if (*e->Value != 0) return 0;
- e = cmsDictNextEntry(DbgThread(), e);
+ e = cmsDictNextEntry(ContextID, e);
if (memcmp(e ->Name, L"Name0", sizeof(wchar_t) * 5) != 0) return 0;
if (e ->Value != NULL) return 0;
return 1;
@@ -5158,7 +5151,7 @@ cmsInt32Number CheckDictionary16(cmsInt32Number Pass, cmsHPROFILE hProfile)
static
-cmsInt32Number CheckDictionary24(cmsInt32Number Pass, cmsHPROFILE hProfile)
+cmsInt32Number CheckDictionary24(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile)
{
cmsHANDLE hDict;
const cmsDICTentry* e;
@@ -5169,50 +5162,50 @@ cmsInt32Number CheckDictionary24(cmsInt32Number Pass, cmsHPROFILE hProfile)
switch (Pass) {
case 1:
- hDict = cmsDictAlloc(DbgThread());
+ hDict = cmsDictAlloc(ContextID);
- DisplayName = cmsMLUalloc(DbgThread(), 0);
+ DisplayName = cmsMLUalloc(ContextID, 0);
- cmsMLUsetWide(DbgThread(), DisplayName, "en", "US", L"Hello, world");
- cmsMLUsetWide(DbgThread(), DisplayName, "es", "ES", L"Hola, mundo");
- cmsMLUsetWide(DbgThread(), DisplayName, "fr", "FR", L"Bonjour, le monde");
- cmsMLUsetWide(DbgThread(), DisplayName, "ca", "CA", L"Hola, mon");
+ cmsMLUsetWide(ContextID, DisplayName, "en", "US", L"Hello, world");
+ cmsMLUsetWide(ContextID, DisplayName, "es", "ES", L"Hola, mundo");
+ cmsMLUsetWide(ContextID, DisplayName, "fr", "FR", L"Bonjour, le monde");
+ cmsMLUsetWide(ContextID, DisplayName, "ca", "CA", L"Hola, mon");
- cmsDictAddEntry(DbgThread(), hDict, L"Name", L"String", DisplayName, NULL);
- cmsMLUfree(DbgThread(), DisplayName);
+ cmsDictAddEntry(ContextID, hDict, L"Name", L"String", DisplayName, NULL);
+ cmsMLUfree(ContextID, DisplayName);
- cmsDictAddEntry(DbgThread(), hDict, L"Name2", L"12", NULL, NULL);
- if (!cmsWriteTag(DbgThread(), hProfile, cmsSigMetaTag, hDict)) return 0;
- cmsDictFree(DbgThread(), hDict);
+ cmsDictAddEntry(ContextID, hDict, L"Name2", L"12", NULL, NULL);
+ if (!cmsWriteTag(ContextID, hProfile, cmsSigMetaTag, hDict)) return 0;
+ cmsDictFree(ContextID, hDict);
return 1;
case 2:
- hDict = cmsReadTag(DbgThread(), hProfile, cmsSigMetaTag);
+ hDict = cmsReadTag(ContextID, hProfile, cmsSigMetaTag);
if (hDict == NULL) return 0;
- e = cmsDictGetEntryList(DbgThread(), hDict);
+ e = cmsDictGetEntryList(ContextID, hDict);
if (memcmp(e ->Name, L"Name2", sizeof(wchar_t) * 5) != 0) return 0;
if (memcmp(e ->Value, L"12", sizeof(wchar_t) * 2) != 0) return 0;
- e = cmsDictNextEntry(DbgThread(), e);
+ e = cmsDictNextEntry(ContextID, e);
if (memcmp(e ->Name, L"Name", sizeof(wchar_t) * 4) != 0) return 0;
if (memcmp(e ->Value, L"String", sizeof(wchar_t) * 5) != 0) return 0;
- cmsMLUgetASCII(DbgThread(), e->DisplayName, "en", "US", Buffer, 256);
+ cmsMLUgetASCII(ContextID, e->DisplayName, "en", "US", Buffer, 256);
if (strcmp(Buffer, "Hello, world") != 0) rc = 0;
- cmsMLUgetASCII(DbgThread(), e->DisplayName, "es", "ES", Buffer, 256);
+ cmsMLUgetASCII(ContextID, e->DisplayName, "es", "ES", Buffer, 256);
if (strcmp(Buffer, "Hola, mundo") != 0) rc = 0;
- cmsMLUgetASCII(DbgThread(), e->DisplayName, "fr", "FR", Buffer, 256);
+ cmsMLUgetASCII(ContextID, e->DisplayName, "fr", "FR", Buffer, 256);
if (strcmp(Buffer, "Bonjour, le monde") != 0) rc = 0;
- cmsMLUgetASCII(DbgThread(), e->DisplayName, "ca", "CA", Buffer, 256);
+ cmsMLUgetASCII(ContextID, e->DisplayName, "ca", "CA", Buffer, 256);
if (strcmp(Buffer, "Hola, mon") != 0) rc = 0;
if (rc == 0)
@@ -5226,17 +5219,17 @@ cmsInt32Number CheckDictionary24(cmsInt32Number Pass, cmsHPROFILE hProfile)
}
static
-cmsInt32Number CheckRAWtags(cmsInt32Number Pass, cmsHPROFILE hProfile)
+cmsInt32Number CheckRAWtags(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile)
{
char Buffer[7];
switch (Pass) {
case 1:
- return cmsWriteRawTag(DbgThread(), hProfile, (cmsTagSignature) 0x31323334, "data123", 7);
+ return cmsWriteRawTag(ContextID, hProfile, (cmsTagSignature) 0x31323334, "data123", 7);
case 2:
- if (!cmsReadRawTag(DbgThread(), hProfile, (cmsTagSignature) 0x31323334, Buffer, 7)) return 0;
+ if (!cmsReadRawTag(ContextID, hProfile, (cmsTagSignature) 0x31323334, Buffer, 7)) return 0;
if (strncmp(Buffer, "data123", 7) != 0) return 0;
return 1;
@@ -5249,153 +5242,153 @@ cmsInt32Number CheckRAWtags(cmsInt32Number Pass, cmsHPROFILE hProfile)
// This is a very big test that checks every single tag
static
-cmsInt32Number CheckProfileCreation(void)
+cmsInt32Number CheckProfileCreation(cmsContext ContextID)
{
cmsHPROFILE h;
cmsInt32Number Pass;
- h = cmsCreateProfilePlaceholder(DbgThread());
+ h = cmsCreateProfilePlaceholder(ContextID);
if (h == NULL) return 0;
- cmsSetProfileVersion(DbgThread(), h, 4.3);
- if (cmsGetTagCount(DbgThread(), h) != 0) { Fail("Empty profile with nonzero number of tags"); goto Error; }
- if (cmsIsTag(DbgThread(), h, cmsSigAToB0Tag)) { Fail("Found a tag in an empty profile"); goto Error; }
+ cmsSetProfileVersion(ContextID, h, 4.3);
+ if (cmsGetTagCount(ContextID, h) != 0) { Fail("Empty profile with nonzero number of tags"); goto Error; }
+ if (cmsIsTag(ContextID, h, cmsSigAToB0Tag)) { Fail("Found a tag in an empty profile"); goto Error; }
- cmsSetColorSpace(DbgThread(), h, cmsSigRgbData);
- if (cmsGetColorSpace(DbgThread(), h) != cmsSigRgbData) { Fail("Unable to set colorspace"); goto Error; }
+ cmsSetColorSpace(ContextID, h, cmsSigRgbData);
+ if (cmsGetColorSpace(ContextID, h) != cmsSigRgbData) { Fail("Unable to set colorspace"); goto Error; }
- cmsSetPCS(DbgThread(), h, cmsSigLabData);
- if (cmsGetPCS(DbgThread(), h) != cmsSigLabData) { Fail("Unable to set colorspace"); goto Error; }
+ cmsSetPCS(ContextID, h, cmsSigLabData);
+ if (cmsGetPCS(ContextID, h) != cmsSigLabData) { Fail("Unable to set colorspace"); goto Error; }
- cmsSetDeviceClass(DbgThread(), h, cmsSigDisplayClass);
- if (cmsGetDeviceClass(DbgThread(), h) != cmsSigDisplayClass) { Fail("Unable to set deviceclass"); goto Error; }
+ cmsSetDeviceClass(ContextID, h, cmsSigDisplayClass);
+ if (cmsGetDeviceClass(ContextID, h) != cmsSigDisplayClass) { Fail("Unable to set deviceclass"); goto Error; }
- cmsSetHeaderRenderingIntent(DbgThread(), h, INTENT_SATURATION);
- if (cmsGetHeaderRenderingIntent(DbgThread(), h) != INTENT_SATURATION) { Fail("Unable to set rendering intent"); goto Error; }
+ cmsSetHeaderRenderingIntent(ContextID, h, INTENT_SATURATION);
+ if (cmsGetHeaderRenderingIntent(ContextID, h) != INTENT_SATURATION) { Fail("Unable to set rendering intent"); goto Error; }
for (Pass = 1; Pass <= 2; Pass++) {
SubTest("Tags holding XYZ");
- if (!CheckXYZ(Pass, h, cmsSigBlueColorantTag)) goto Error;
- if (!CheckXYZ(Pass, h, cmsSigGreenColorantTag)) goto Error;
- if (!CheckXYZ(Pass, h, cmsSigRedColorantTag)) goto Error;
- if (!CheckXYZ(Pass, h, cmsSigMediaBlackPointTag)) goto Error;
- if (!CheckXYZ(Pass, h, cmsSigMediaWhitePointTag)) goto Error;
- if (!CheckXYZ(Pass, h, cmsSigLuminanceTag)) goto Error;
+ if (!CheckXYZ(ContextID, Pass, h, cmsSigBlueColorantTag)) goto Error;
+ if (!CheckXYZ(ContextID, Pass, h, cmsSigGreenColorantTag)) goto Error;
+ if (!CheckXYZ(ContextID, Pass, h, cmsSigRedColorantTag)) goto Error;
+ if (!CheckXYZ(ContextID, Pass, h, cmsSigMediaBlackPointTag)) goto Error;
+ if (!CheckXYZ(ContextID, Pass, h, cmsSigMediaWhitePointTag)) goto Error;
+ if (!CheckXYZ(ContextID, Pass, h, cmsSigLuminanceTag)) goto Error;
SubTest("Tags holding curves");
- if (!CheckGamma(Pass, h, cmsSigBlueTRCTag)) goto Error;
- if (!CheckGamma(Pass, h, cmsSigGrayTRCTag)) goto Error;
- if (!CheckGamma(Pass, h, cmsSigGreenTRCTag)) goto Error;
- if (!CheckGamma(Pass, h, cmsSigRedTRCTag)) goto Error;
+ if (!CheckGamma(ContextID, Pass, h, cmsSigBlueTRCTag)) goto Error;
+ if (!CheckGamma(ContextID, Pass, h, cmsSigGrayTRCTag)) goto Error;
+ if (!CheckGamma(ContextID, Pass, h, cmsSigGreenTRCTag)) goto Error;
+ if (!CheckGamma(ContextID, Pass, h, cmsSigRedTRCTag)) goto Error;
SubTest("Tags holding text");
- if (!CheckTextSingle(Pass, h, cmsSigCharTargetTag)) goto Error;
- if (!CheckTextSingle(Pass, h, cmsSigScreeningDescTag)) goto Error;
+ if (!CheckTextSingle(ContextID, Pass, h, cmsSigCharTargetTag)) goto Error;
+ if (!CheckTextSingle(ContextID, Pass, h, cmsSigScreeningDescTag)) goto Error;
- if (!CheckText(Pass, h, cmsSigCopyrightTag)) goto Error;
- if (!CheckText(Pass, h, cmsSigProfileDescriptionTag)) goto Error;
- if (!CheckText(Pass, h, cmsSigDeviceMfgDescTag)) goto Error;
- if (!CheckText(Pass, h, cmsSigDeviceModelDescTag)) goto Error;
- if (!CheckText(Pass, h, cmsSigViewingCondDescTag)) goto Error;
+ if (!CheckText(ContextID, Pass, h, cmsSigCopyrightTag)) goto Error;
+ if (!CheckText(ContextID, Pass, h, cmsSigProfileDescriptionTag)) goto Error;
+ if (!CheckText(ContextID, Pass, h, cmsSigDeviceMfgDescTag)) goto Error;
+ if (!CheckText(ContextID, Pass, h, cmsSigDeviceModelDescTag)) goto Error;
+ if (!CheckText(ContextID, Pass, h, cmsSigViewingCondDescTag)) goto Error;
SubTest("Tags holding cmsICCData");
- if (!CheckData(Pass, h, cmsSigPs2CRD0Tag)) goto Error;
- if (!CheckData(Pass, h, cmsSigPs2CRD1Tag)) goto Error;
- if (!CheckData(Pass, h, cmsSigPs2CRD2Tag)) goto Error;
- if (!CheckData(Pass, h, cmsSigPs2CRD3Tag)) goto Error;
- if (!CheckData(Pass, h, cmsSigPs2CSATag)) goto Error;
- if (!CheckData(Pass, h, cmsSigPs2RenderingIntentTag)) goto Error;
+ if (!CheckData(ContextID, Pass, h, cmsSigPs2CRD0Tag)) goto Error;
+ if (!CheckData(ContextID, Pass, h, cmsSigPs2CRD1Tag)) goto Error;
+ if (!CheckData(ContextID, Pass, h, cmsSigPs2CRD2Tag)) goto Error;
+ if (!CheckData(ContextID, Pass, h, cmsSigPs2CRD3Tag)) goto Error;
+ if (!CheckData(ContextID, Pass, h, cmsSigPs2CSATag)) goto Error;
+ if (!CheckData(ContextID, Pass, h, cmsSigPs2RenderingIntentTag)) goto Error;
SubTest("Tags holding signatures");
- if (!CheckSignature(Pass, h, cmsSigColorimetricIntentImageStateTag)) goto Error;
- if (!CheckSignature(Pass, h, cmsSigPerceptualRenderingIntentGamutTag)) goto Error;
- if (!CheckSignature(Pass, h, cmsSigSaturationRenderingIntentGamutTag)) goto Error;
- if (!CheckSignature(Pass, h, cmsSigTechnologyTag)) goto Error;
+ if (!CheckSignature(ContextID, Pass, h, cmsSigColorimetricIntentImageStateTag)) goto Error;
+ if (!CheckSignature(ContextID, Pass, h, cmsSigPerceptualRenderingIntentGamutTag)) goto Error;
+ if (!CheckSignature(ContextID, Pass, h, cmsSigSaturationRenderingIntentGamutTag)) goto Error;
+ if (!CheckSignature(ContextID, Pass, h, cmsSigTechnologyTag)) goto Error;
SubTest("Tags holding date_time");
- if (!CheckDateTime(Pass, h, cmsSigCalibrationDateTimeTag)) goto Error;
- if (!CheckDateTime(Pass, h, cmsSigDateTimeTag)) goto Error;
+ if (!CheckDateTime(ContextID, Pass, h, cmsSigCalibrationDateTimeTag)) goto Error;
+ if (!CheckDateTime(ContextID, Pass, h, cmsSigDateTimeTag)) goto Error;
SubTest("Tags holding named color lists");
- if (!CheckNamedColor(Pass, h, cmsSigColorantTableTag, 15, FALSE)) goto Error;
- if (!CheckNamedColor(Pass, h, cmsSigColorantTableOutTag, 15, FALSE)) goto Error;
- if (!CheckNamedColor(Pass, h, cmsSigNamedColor2Tag, 4096, TRUE)) goto Error;
+ if (!CheckNamedColor(ContextID, Pass, h, cmsSigColorantTableTag, 15, FALSE)) goto Error;
+ if (!CheckNamedColor(ContextID, Pass, h, cmsSigColorantTableOutTag, 15, FALSE)) goto Error;
+ if (!CheckNamedColor(ContextID, Pass, h, cmsSigNamedColor2Tag, 4096, TRUE)) goto Error;
SubTest("Tags holding LUTs");
- if (!CheckLUT(Pass, h, cmsSigAToB0Tag)) goto Error;
- if (!CheckLUT(Pass, h, cmsSigAToB1Tag)) goto Error;
- if (!CheckLUT(Pass, h, cmsSigAToB2Tag)) goto Error;
- if (!CheckLUT(Pass, h, cmsSigBToA0Tag)) goto Error;
- if (!CheckLUT(Pass, h, cmsSigBToA1Tag)) goto Error;
- if (!CheckLUT(Pass, h, cmsSigBToA2Tag)) goto Error;
- if (!CheckLUT(Pass, h, cmsSigPreview0Tag)) goto Error;
- if (!CheckLUT(Pass, h, cmsSigPreview1Tag)) goto Error;
- if (!CheckLUT(Pass, h, cmsSigPreview2Tag)) goto Error;
- if (!CheckLUT(Pass, h, cmsSigGamutTag)) goto Error;
+ if (!CheckLUT(ContextID, Pass, h, cmsSigAToB0Tag)) goto Error;
+ if (!CheckLUT(ContextID, Pass, h, cmsSigAToB1Tag)) goto Error;
+ if (!CheckLUT(ContextID, Pass, h, cmsSigAToB2Tag)) goto Error;
+ if (!CheckLUT(ContextID, Pass, h, cmsSigBToA0Tag)) goto Error;
+ if (!CheckLUT(ContextID, Pass, h, cmsSigBToA1Tag)) goto Error;
+ if (!CheckLUT(ContextID, Pass, h, cmsSigBToA2Tag)) goto Error;
+ if (!CheckLUT(ContextID, Pass, h, cmsSigPreview0Tag)) goto Error;
+ if (!CheckLUT(ContextID, Pass, h, cmsSigPreview1Tag)) goto Error;
+ if (!CheckLUT(ContextID, Pass, h, cmsSigPreview2Tag)) goto Error;
+ if (!CheckLUT(ContextID, Pass, h, cmsSigGamutTag)) goto Error;
SubTest("Tags holding CHAD");
- if (!CheckCHAD(Pass, h, cmsSigChromaticAdaptationTag)) goto Error;
+ if (!CheckCHAD(ContextID, Pass, h, cmsSigChromaticAdaptationTag)) goto Error;
SubTest("Tags holding Chromaticity");
- if (!CheckChromaticity(Pass, h, cmsSigChromaticityTag)) goto Error;
+ if (!CheckChromaticity(ContextID, Pass, h, cmsSigChromaticityTag)) goto Error;
SubTest("Tags holding colorant order");
- if (!CheckColorantOrder(Pass, h, cmsSigColorantOrderTag)) goto Error;
+ if (!CheckColorantOrder(ContextID, Pass, h, cmsSigColorantOrderTag)) goto Error;
SubTest("Tags holding measurement");
- if (!CheckMeasurement(Pass, h, cmsSigMeasurementTag)) goto Error;
+ if (!CheckMeasurement(ContextID, Pass, h, cmsSigMeasurementTag)) goto Error;
SubTest("Tags holding CRD info");
- if (!CheckCRDinfo(Pass, h, cmsSigCrdInfoTag)) goto Error;
+ if (!CheckCRDinfo(ContextID, Pass, h, cmsSigCrdInfoTag)) goto Error;
SubTest("Tags holding UCR/BG");
- if (!CheckUcrBg(Pass, h, cmsSigUcrBgTag)) goto Error;
+ if (!CheckUcrBg(ContextID, Pass, h, cmsSigUcrBgTag)) goto Error;
SubTest("Tags holding MPE");
- if (!CheckMPE(Pass, h, cmsSigDToB0Tag)) goto Error;
- if (!CheckMPE(Pass, h, cmsSigDToB1Tag)) goto Error;
- if (!CheckMPE(Pass, h, cmsSigDToB2Tag)) goto Error;
- if (!CheckMPE(Pass, h, cmsSigDToB3Tag)) goto Error;
- if (!CheckMPE(Pass, h, cmsSigBToD0Tag)) goto Error;
- if (!CheckMPE(Pass, h, cmsSigBToD1Tag)) goto Error;
- if (!CheckMPE(Pass, h, cmsSigBToD2Tag)) goto Error;
- if (!CheckMPE(Pass, h, cmsSigBToD3Tag)) goto Error;
+ if (!CheckMPE(ContextID, Pass, h, cmsSigDToB0Tag)) goto Error;
+ if (!CheckMPE(ContextID, Pass, h, cmsSigDToB1Tag)) goto Error;
+ if (!CheckMPE(ContextID, Pass, h, cmsSigDToB2Tag)) goto Error;
+ if (!CheckMPE(ContextID, Pass, h, cmsSigDToB3Tag)) goto Error;
+ if (!CheckMPE(ContextID, Pass, h, cmsSigBToD0Tag)) goto Error;
+ if (!CheckMPE(ContextID, Pass, h, cmsSigBToD1Tag)) goto Error;
+ if (!CheckMPE(ContextID, Pass, h, cmsSigBToD2Tag)) goto Error;
+ if (!CheckMPE(ContextID, Pass, h, cmsSigBToD3Tag)) goto Error;
SubTest("Tags using screening");
- if (!CheckScreening(Pass, h, cmsSigScreeningTag)) goto Error;
+ if (!CheckScreening(ContextID, Pass, h, cmsSigScreeningTag)) goto Error;
SubTest("Tags holding profile sequence description");
- if (!CheckProfileSequenceTag(Pass, h)) goto Error;
- if (!CheckProfileSequenceIDTag(Pass, h)) goto Error;
+ if (!CheckProfileSequenceTag(ContextID, Pass, h)) goto Error;
+ if (!CheckProfileSequenceIDTag(ContextID, Pass, h)) goto Error;
SubTest("Tags holding ICC viewing conditions");
- if (!CheckICCViewingConditions(Pass, h)) goto Error;
+ if (!CheckICCViewingConditions(ContextID, Pass, h)) goto Error;
SubTest("VCGT tags");
- if (!CheckVCGT(Pass, h)) goto Error;
+ if (!CheckVCGT(ContextID, Pass, h)) goto Error;
SubTest("RAW tags");
- if (!CheckRAWtags(Pass, h)) goto Error;
+ if (!CheckRAWtags(ContextID, Pass, h)) goto Error;
SubTest("Dictionary meta tags");
- // if (!CheckDictionary16(Pass, h)) goto Error;
- if (!CheckDictionary24(Pass, h)) goto Error;
+ // if (!CheckDictionary16(ContextID, Pass, h)) goto Error;
+ if (!CheckDictionary24(ContextID, Pass, h)) goto Error;
if (Pass == 1) {
- cmsSaveProfileToFile(DbgThread(), h, "alltags.icc");
- cmsCloseProfile(DbgThread(), h);
- h = cmsOpenProfileFromFile(DbgThread(), "alltags.icc", "r");
+ cmsSaveProfileToFile(ContextID, h, "alltags.icc");
+ cmsCloseProfile(ContextID, h);
+ h = cmsOpenProfileFromFile(ContextID, "alltags.icc", "r");
}
}
@@ -5409,12 +5402,12 @@ cmsInt32Number CheckProfileCreation(void)
cmsSigOutputResponseTag = 0x72657370, // 'resp' -- Possible patent on this
*/
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ContextID, h);
remove("alltags.icc");
return 1;
Error:
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ContextID, h);
remove("alltags.icc");
return 0;
}
@@ -5422,7 +5415,7 @@ Error:
// Thanks to Christopher James Halse Rogers for the bugfixing and providing this test
static
-cmsInt32Number CheckVersionHeaderWriting(void)
+cmsInt32Number CheckVersionHeaderWriting(cmsContext ContextID)
{
cmsHPROFILE h;
int index;
@@ -5435,24 +5428,24 @@ cmsInt32Number CheckVersionHeaderWriting(void)
for (index = 0; index < sizeof(test_versions)/sizeof(test_versions[0]); index++) {
- h = cmsCreateProfilePlaceholder(DbgThread());
+ h = cmsCreateProfilePlaceholder(ContextID);
if (h == NULL) return 0;
- cmsSetProfileVersion(DbgThread(), h, test_versions[index]);
+ cmsSetProfileVersion(ContextID, h, test_versions[index]);
- cmsSaveProfileToFile(DbgThread(), h, "versions.icc");
- cmsCloseProfile(DbgThread(), h);
+ cmsSaveProfileToFile(ContextID, h, "versions.icc");
+ cmsCloseProfile(ContextID, h);
- h = cmsOpenProfileFromFile(DbgThread(), "versions.icc", "r");
+ h = cmsOpenProfileFromFile(ContextID, "versions.icc", "r");
// Only the first 3 digits are significant
- if (fabs(cmsGetProfileVersion(DbgThread(), h) - test_versions[index]) > 0.005) {
+ if (fabs(cmsGetProfileVersion(ContextID, h) - test_versions[index]) > 0.005) {
Fail("Version failed to round-trip: wrote %.2f, read %.2f",
- test_versions[index], cmsGetProfileVersion(DbgThread(), h));
+ test_versions[index], cmsGetProfileVersion(ContextID, h));
return 0;
}
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ContextID, h);
remove("versions.icc");
}
return 1;
@@ -5461,21 +5454,21 @@ cmsInt32Number CheckVersionHeaderWriting(void)
// Test on Richard Hughes "crayons.icc"
static
-cmsInt32Number CheckMultilocalizedProfile(void)
+cmsInt32Number CheckMultilocalizedProfile(cmsContext ContextID)
{
cmsHPROFILE hProfile;
cmsMLU *Pt;
char Buffer[256];
- hProfile = cmsOpenProfileFromFile(DbgThread(), "crayons.icc", "r");
+ hProfile = cmsOpenProfileFromFile(ContextID, "crayons.icc", "r");
- Pt = (cmsMLU *) cmsReadTag(DbgThread(), hProfile, cmsSigProfileDescriptionTag);
- cmsMLUgetASCII(DbgThread(), Pt, "en", "GB", Buffer, 256);
+ Pt = (cmsMLU *) cmsReadTag(ContextID, hProfile, cmsSigProfileDescriptionTag);
+ cmsMLUgetASCII(ContextID, Pt, "en", "GB", Buffer, 256);
if (strcmp(Buffer, "Crayon Colours") != 0) return FALSE;
- cmsMLUgetASCII(DbgThread(), Pt, "en", "US", Buffer, 256);
+ cmsMLUgetASCII(ContextID, Pt, "en", "US", Buffer, 256);
if (strcmp(Buffer, "Crayon Colors") != 0) return FALSE;
- cmsCloseProfile(DbgThread(), hProfile);
+ cmsCloseProfile(ContextID, hProfile);
return TRUE;
}
@@ -5497,62 +5490,62 @@ void ErrorReportingFunction(cmsContext ContextID, cmsUInt32Number ErrorCode, con
static
-cmsInt32Number CheckBadProfiles(void)
+cmsInt32Number CheckBadProfiles(cmsContext ContextID)
{
cmsHPROFILE h;
- h = cmsOpenProfileFromFile(DbgThread(), "IDoNotExist.icc", "r");
+ h = cmsOpenProfileFromFile(ContextID, "IDoNotExist.icc", "r");
if (h != NULL) {
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ContextID, h);
return 0;
}
- h = cmsOpenProfileFromFile(DbgThread(), "IAmIllFormed*.icc", "r");
+ h = cmsOpenProfileFromFile(ContextID, "IAmIllFormed*.icc", "r");
if (h != NULL) {
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ContextID, h);
return 0;
}
// No profile name given
- h = cmsOpenProfileFromFile(DbgThread(), "", "r");
+ h = cmsOpenProfileFromFile(ContextID, "", "r");
if (h != NULL) {
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ContextID, h);
return 0;
}
- h = cmsOpenProfileFromFile(DbgThread(), "..", "r");
+ h = cmsOpenProfileFromFile(ContextID, "..", "r");
if (h != NULL) {
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ContextID, h);
return 0;
}
- h = cmsOpenProfileFromFile(DbgThread(), "IHaveBadAccessMode.icc", "@");
+ h = cmsOpenProfileFromFile(ContextID, "IHaveBadAccessMode.icc", "@");
if (h != NULL) {
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ContextID, h);
return 0;
}
- h = cmsOpenProfileFromFile(DbgThread(), "bad.icc", "r");
+ h = cmsOpenProfileFromFile(ContextID, "bad.icc", "r");
if (h != NULL) {
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ContextID, h);
return 0;
}
- h = cmsOpenProfileFromFile(DbgThread(), "toosmall.icc", "r");
+ h = cmsOpenProfileFromFile(ContextID, "toosmall.icc", "r");
if (h != NULL) {
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ContextID, h);
return 0;
}
- h = cmsOpenProfileFromMem(DbgThread(), NULL, 3);
+ h = cmsOpenProfileFromMem(ContextID, NULL, 3);
if (h != NULL) {
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ContextID, h);
return 0;
}
- h = cmsOpenProfileFromMem(DbgThread(), "123", 3);
+ h = cmsOpenProfileFromMem(ContextID, "123", 3);
if (h != NULL) {
- cmsCloseProfile(DbgThread(), h);
+ cmsCloseProfile(ContextID, h);
return 0;
}
@@ -5563,13 +5556,13 @@ cmsInt32Number CheckBadProfiles(void)
static
-cmsInt32Number CheckErrReportingOnBadProfiles(void)
+cmsInt32Number CheckErrReportingOnBadProfiles(cmsContext ContextID)
{
cmsInt32Number rc;
- cmsSetLogErrorHandler(DbgThread(), ErrorReportingFunction);
- rc = CheckBadProfiles();
- cmsSetLogErrorHandler(DbgThread(), FatalErrorQuit);
+ cmsSetLogErrorHandler(ContextID, ErrorReportingFunction);
+ rc = CheckBadProfiles(ContextID);
+ cmsSetLogErrorHandler(ContextID, FatalErrorQuit);
// Reset the error state
TrappedError = FALSE;
@@ -5578,57 +5571,57 @@ cmsInt32Number CheckErrReportingOnBadProfiles(void)
static
-cmsInt32Number CheckBadTransforms(void)
+cmsInt32Number CheckBadTransforms(cmsContext ContextID)
{
- cmsHPROFILE h1 = cmsCreate_sRGBProfile(DbgThread());
+ cmsHPROFILE h1 = cmsCreate_sRGBProfile(ContextID);
cmsHTRANSFORM x1;
- x1 = cmsCreateTransform(DbgThread(), NULL, 0, NULL, 0, 0, 0);
+ x1 = cmsCreateTransform(ContextID, NULL, 0, NULL, 0, 0, 0);
if (x1 != NULL) {
- cmsDeleteTransform(DbgThread(), x1);
+ cmsDeleteTransform(ContextID, x1);
return 0;
}
- x1 = cmsCreateTransform(DbgThread(), h1, TYPE_RGB_8, h1, TYPE_RGB_8, 12345, 0);
+ x1 = cmsCreateTransform(ContextID, h1, TYPE_RGB_8, h1, TYPE_RGB_8, 12345, 0);
if (x1 != NULL) {
- cmsDeleteTransform(DbgThread(), x1);
+ cmsDeleteTransform(ContextID, x1);
return 0;
}
- x1 = cmsCreateTransform(DbgThread(), h1, TYPE_CMYK_8, h1, TYPE_RGB_8, 0, 0);
+ x1 = cmsCreateTransform(ContextID, h1, TYPE_CMYK_8, h1, TYPE_RGB_8, 0, 0);
if (x1 != NULL) {
- cmsDeleteTransform(DbgThread(), x1);
+ cmsDeleteTransform(ContextID, x1);
return 0;
}
- x1 = cmsCreateTransform(DbgThread(), h1, TYPE_RGB_8, h1, TYPE_CMYK_8, 1, 0);
+ x1 = cmsCreateTransform(ContextID, h1, TYPE_RGB_8, h1, TYPE_CMYK_8, 1, 0);
if (x1 != NULL) {
- cmsDeleteTransform(DbgThread(), x1);
+ cmsDeleteTransform(ContextID, x1);
return 0;
}
// sRGB does its output as XYZ!
- x1 = cmsCreateTransform(DbgThread(), h1, TYPE_RGB_8, NULL, TYPE_Lab_8, 1, 0);
+ x1 = cmsCreateTransform(ContextID, h1, TYPE_RGB_8, NULL, TYPE_Lab_8, 1, 0);
if (x1 != NULL) {
- cmsDeleteTransform(DbgThread(), x1);
+ cmsDeleteTransform(ContextID, x1);
return 0;
}
- cmsCloseProfile(DbgThread(), h1);
+ cmsCloseProfile(ContextID, h1);
{
- cmsHPROFILE hp1 = cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r");
- cmsHPROFILE hp2 = cmsCreate_sRGBProfile(DbgThread());
+ cmsHPROFILE hp1 = cmsOpenProfileFromFile(ContextID, "test1.icc", "r");
+ cmsHPROFILE hp2 = cmsCreate_sRGBProfile(ContextID);
- x1 = cmsCreateTransform(DbgThread(), hp1, TYPE_BGR_8, hp2, TYPE_BGR_8, INTENT_PERCEPTUAL, 0);
+ x1 = cmsCreateTransform(ContextID, hp1, TYPE_BGR_8, hp2, TYPE_BGR_8, INTENT_PERCEPTUAL, 0);
- cmsCloseProfile(DbgThread(), hp1); cmsCloseProfile(DbgThread(), hp2);
+ cmsCloseProfile(ContextID, hp1); cmsCloseProfile(ContextID, hp2);
if (x1 != NULL) {
- cmsDeleteTransform(DbgThread(), x1);
+ cmsDeleteTransform(ContextID, x1);
return 0;
}
}
@@ -5638,13 +5631,13 @@ cmsInt32Number CheckBadTransforms(void)
}
static
-cmsInt32Number CheckErrReportingOnBadTransforms(void)
+cmsInt32Number CheckErrReportingOnBadTransforms(cmsContext ContextID)
{
cmsInt32Number rc;
- cmsSetLogErrorHandler(DbgThread(), ErrorReportingFunction);
- rc = CheckBadTransforms();
- cmsSetLogErrorHandler(DbgThread(), FatalErrorQuit);
+ cmsSetLogErrorHandler(ContextID, ErrorReportingFunction);
+ rc = CheckBadTransforms(ContextID);
+ cmsSetLogErrorHandler(ContextID, FatalErrorQuit);
// Reset the error state
TrappedError = FALSE;
@@ -5658,7 +5651,7 @@ cmsInt32Number CheckErrReportingOnBadTransforms(void)
// Check a linear xform
static
-cmsInt32Number Check8linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan)
+cmsInt32Number Check8linearXFORM(cmsContext ContextID, cmsHTRANSFORM xform, cmsInt32Number nChan)
{
cmsInt32Number n2, i, j;
cmsUInt8Number Inw[cmsMAXCHANNELS], Outw[cmsMAXCHANNELS];
@@ -5668,7 +5661,7 @@ cmsInt32Number Check8linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan)
for (j=0; j < 0xFF; j++) {
memset(Inw, j, sizeof(Inw));
- cmsDoTransform(DbgThread(), xform, Inw, Outw, 1);
+ cmsDoTransform(ContextID, xform, Inw, Outw, 1);
for (i=0; i < nChan; i++) {
@@ -5689,7 +5682,7 @@ cmsInt32Number Check8linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan)
}
static
-cmsInt32Number Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan)
+cmsInt32Number Compare8bitXFORM(cmsContext ContextID, cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan)
{
cmsInt32Number n2, i, j;
cmsUInt8Number Inw[cmsMAXCHANNELS], Outw1[cmsMAXCHANNELS], Outw2[cmsMAXCHANNELS];;
@@ -5699,8 +5692,8 @@ cmsInt32Number Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsI
for (j=0; j < 0xFF; j++) {
memset(Inw, j, sizeof(Inw));
- cmsDoTransform(DbgThread(), xform1, Inw, Outw1, 1);
- cmsDoTransform(DbgThread(), xform2, Inw, Outw2, 1);
+ cmsDoTransform(ContextID, xform1, Inw, Outw1, 1);
+ cmsDoTransform(ContextID, xform2, Inw, Outw2, 1);
for (i=0; i < nChan; i++) {
@@ -5724,7 +5717,7 @@ cmsInt32Number Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsI
// Check a linear xform
static
-cmsInt32Number Check16linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan)
+cmsInt32Number Check16linearXFORM(cmsContext ContextID, cmsHTRANSFORM xform, cmsInt32Number nChan)
{
cmsInt32Number n2, i, j;
cmsUInt16Number Inw[cmsMAXCHANNELS], Outw[cmsMAXCHANNELS];
@@ -5734,7 +5727,7 @@ cmsInt32Number Check16linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan)
for (i=0; i < nChan; i++) Inw[i] = (cmsUInt16Number) j;
- cmsDoTransform(DbgThread(), xform, Inw, Outw, 1);
+ cmsDoTransform(ContextID, xform, Inw, Outw, 1);
for (i=0; i < nChan; i++) {
@@ -5756,7 +5749,7 @@ cmsInt32Number Check16linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan)
}
static
-cmsInt32Number Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan)
+cmsInt32Number Compare16bitXFORM(cmsContext ContextID, cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan)
{
cmsInt32Number n2, i, j;
cmsUInt16Number Inw[cmsMAXCHANNELS], Outw1[cmsMAXCHANNELS], Outw2[cmsMAXCHANNELS];;
@@ -5767,8 +5760,8 @@ cmsInt32Number Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cms
for (i=0; i < nChan; i++) Inw[i] = (cmsUInt16Number) j;
- cmsDoTransform(DbgThread(), xform1, Inw, Outw1, 1);
- cmsDoTransform(DbgThread(), xform2, Inw, Outw2, 1);
+ cmsDoTransform(ContextID, xform1, Inw, Outw1, 1);
+ cmsDoTransform(ContextID, xform2, Inw, Outw2, 1);
for (i=0; i < nChan; i++) {
@@ -5792,7 +5785,7 @@ cmsInt32Number Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cms
// Check a linear xform
static
-cmsInt32Number CheckFloatlinearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan)
+cmsInt32Number CheckFloatlinearXFORM(cmsContext ContextID, cmsHTRANSFORM xform, cmsInt32Number nChan)
{
cmsInt32Number i, j;
cmsFloat32Number In[cmsMAXCHANNELS], Out[cmsMAXCHANNELS];
@@ -5801,7 +5794,7 @@ cmsInt32Number CheckFloatlinearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan)
for (i=0; i < nChan; i++) In[i] = (cmsFloat32Number) (j / 65535.0);;
- cmsDoTransform(DbgThread(), xform, In, Out, 1);
+ cmsDoTransform(ContextID, xform, In, Out, 1);
for (i=0; i < nChan; i++) {
@@ -5817,7 +5810,7 @@ cmsInt32Number CheckFloatlinearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan)
// Check a linear xform
static
-cmsInt32Number CompareFloatXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan)
+cmsInt32Number CompareFloatXFORM(cmsContext ContextID, cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan)
{
cmsInt32Number i, j;
cmsFloat32Number In[cmsMAXCHANNELS], Out1[cmsMAXCHANNELS], Out2[cmsMAXCHANNELS];
@@ -5826,8 +5819,8 @@ cmsInt32Number CompareFloatXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cms
for (i=0; i < nChan; i++) In[i] = (cmsFloat32Number) (j / 65535.0);;
- cmsDoTransform(DbgThread(), xform1, In, Out1, 1);
- cmsDoTransform(DbgThread(), xform2, In, Out2, 1);
+ cmsDoTransform(ContextID, xform1, In, Out1, 1);
+ cmsDoTransform(ContextID, xform2, In, Out2, 1);
for (i=0; i < nChan; i++) {
@@ -5845,7 +5838,7 @@ cmsInt32Number CompareFloatXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cms
// Curves only transforms ----------------------------------------------------------------------------------------
static
-cmsInt32Number CheckCurvesOnlyTransforms(void)
+cmsInt32Number CheckCurvesOnlyTransforms(cmsContext ContextID)
{
cmsHTRANSFORM xform1, xform2;
@@ -5854,64 +5847,64 @@ cmsInt32Number CheckCurvesOnlyTransforms(void)
cmsInt32Number rc = 1;
- c1 = cmsBuildGamma(DbgThread(), 2.2);
- c2 = cmsBuildGamma(DbgThread(), 1/2.2);
- c3 = cmsBuildGamma(DbgThread(), 4.84);
+ c1 = cmsBuildGamma(ContextID, 2.2);
+ c2 = cmsBuildGamma(ContextID, 1/2.2);
+ c3 = cmsBuildGamma(ContextID, 4.84);
- h1 = cmsCreateLinearizationDeviceLink(DbgThread(), cmsSigGrayData, &c1);
- h2 = cmsCreateLinearizationDeviceLink(DbgThread(), cmsSigGrayData, &c2);
- h3 = cmsCreateLinearizationDeviceLink(DbgThread(), cmsSigGrayData, &c3);
+ h1 = cmsCreateLinearizationDeviceLink(ContextID, cmsSigGrayData, &c1);
+ h2 = cmsCreateLinearizationDeviceLink(ContextID, cmsSigGrayData, &c2);
+ h3 = cmsCreateLinearizationDeviceLink(ContextID, cmsSigGrayData, &c3);
SubTest("Gray float optimizeable transform");
- xform1 = cmsCreateTransform(DbgThread(), h1, TYPE_GRAY_FLT, h2, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0);
- rc &= CheckFloatlinearXFORM(xform1, 1);
- cmsDeleteTransform(DbgThread(), xform1);
+ xform1 = cmsCreateTransform(ContextID, h1, TYPE_GRAY_FLT, h2, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0);
+ rc &= CheckFloatlinearXFORM(ContextID, xform1, 1);
+ cmsDeleteTransform(ContextID, xform1);
if (rc == 0) goto Error;
SubTest("Gray 8 optimizeable transform");
- xform1 = cmsCreateTransform(DbgThread(), h1, TYPE_GRAY_8, h2, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0);
- rc &= Check8linearXFORM(xform1, 1);
- cmsDeleteTransform(DbgThread(), xform1);
+ xform1 = cmsCreateTransform(ContextID, h1, TYPE_GRAY_8, h2, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0);
+ rc &= Check8linearXFORM(ContextID, xform1, 1);
+ cmsDeleteTransform(ContextID, xform1);
if (rc == 0) goto Error;
SubTest("Gray 16 optimizeable transform");
- xform1 = cmsCreateTransform(DbgThread(), h1, TYPE_GRAY_16, h2, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0);
- rc &= Check16linearXFORM(xform1, 1);
- cmsDeleteTransform(DbgThread(), xform1);
+ xform1 = cmsCreateTransform(ContextID, h1, TYPE_GRAY_16, h2, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0);
+ rc &= Check16linearXFORM(ContextID, xform1, 1);
+ cmsDeleteTransform(ContextID, xform1);
if (rc == 0) goto Error;
SubTest("Gray float non-optimizeable transform");
- xform1 = cmsCreateTransform(DbgThread(), h1, TYPE_GRAY_FLT, h1, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0);
- xform2 = cmsCreateTransform(DbgThread(), h3, TYPE_GRAY_FLT, NULL, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0);
+ xform1 = cmsCreateTransform(ContextID, h1, TYPE_GRAY_FLT, h1, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0);
+ xform2 = cmsCreateTransform(ContextID, h3, TYPE_GRAY_FLT, NULL, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0);
- rc &= CompareFloatXFORM(xform1, xform2, 1);
- cmsDeleteTransform(DbgThread(), xform1);
- cmsDeleteTransform(DbgThread(), xform2);
+ rc &= CompareFloatXFORM(ContextID, xform1, xform2, 1);
+ cmsDeleteTransform(ContextID, xform1);
+ cmsDeleteTransform(ContextID, xform2);
if (rc == 0) goto Error;
SubTest("Gray 8 non-optimizeable transform");
- xform1 = cmsCreateTransform(DbgThread(), h1, TYPE_GRAY_8, h1, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0);
- xform2 = cmsCreateTransform(DbgThread(), h3, TYPE_GRAY_8, NULL, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0);
+ xform1 = cmsCreateTransform(ContextID, h1, TYPE_GRAY_8, h1, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0);
+ xform2 = cmsCreateTransform(ContextID, h3, TYPE_GRAY_8, NULL, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0);
- rc &= Compare8bitXFORM(xform1, xform2, 1);
- cmsDeleteTransform(DbgThread(), xform1);
- cmsDeleteTransform(DbgThread(), xform2);
+ rc &= Compare8bitXFORM(ContextID, xform1, xform2, 1);
+ cmsDeleteTransform(ContextID, xform1);
+ cmsDeleteTransform(ContextID, xform2);
if (rc == 0) goto Error;
SubTest("Gray 16 non-optimizeable transform");
- xform1 = cmsCreateTransform(DbgThread(), h1, TYPE_GRAY_16, h1, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0);
- xform2 = cmsCreateTransform(DbgThread(), h3, TYPE_GRAY_16, NULL, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0);
+ xform1 = cmsCreateTransform(ContextID, h1, TYPE_GRAY_16, h1, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0);
+ xform2 = cmsCreateTransform(ContextID, h3, TYPE_GRAY_16, NULL, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0);
- rc &= Compare16bitXFORM(xform1, xform2, 1);
- cmsDeleteTransform(DbgThread(), xform1);
- cmsDeleteTransform(DbgThread(), xform2);
+ rc &= Compare16bitXFORM(ContextID, xform1, xform2, 1);
+ cmsDeleteTransform(ContextID, xform1);
+ cmsDeleteTransform(ContextID, xform2);
if (rc == 0) goto Error;
Error:
- cmsCloseProfile(DbgThread(), h1); cmsCloseProfile(DbgThread(), h2); cmsCloseProfile(DbgThread(), h3);
- cmsFreeToneCurve(DbgThread(), c1); cmsFreeToneCurve(DbgThread(), c2); cmsFreeToneCurve(DbgThread(), c3);
+ cmsCloseProfile(ContextID, h1); cmsCloseProfile(ContextID, h2); cmsCloseProfile(ContextID, h3);
+ cmsFreeToneCurve(ContextID, c1); cmsFreeToneCurve(ContextID, c2); cmsFreeToneCurve(ContextID, c3);
return rc;
}
@@ -5923,21 +5916,21 @@ Error:
static cmsFloat64Number MaxDE;
static
-cmsInt32Number CheckOneLab(cmsHTRANSFORM xform, cmsFloat64Number L, cmsFloat64Number a, cmsFloat64Number b)
+cmsInt32Number CheckOneLab(cmsContext ContextID, cmsHTRANSFORM xform, cmsFloat64Number L, cmsFloat64Number a, cmsFloat64Number b)
{
cmsCIELab In, Out;
cmsFloat64Number dE;
In.L = L; In.a = a; In.b = b;
- cmsDoTransform(DbgThread(), xform, &In, &Out, 1);
+ cmsDoTransform(ContextID, xform, &In, &Out, 1);
- dE = cmsDeltaE(DbgThread(), &In, &Out);
+ dE = cmsDeltaE(ContextID, &In, &Out);
if (dE > MaxDE) MaxDE = dE;
if (MaxDE > 0.003) {
Fail("dE=%f Lab1=(%f, %f, %f)\n\tLab2=(%f %f %f)", MaxDE, In.L, In.a, In.b, Out.L, Out.a, Out.b);
- cmsDoTransform(DbgThread(), xform, &In, &Out, 1);
+ cmsDoTransform(ContextID, xform, &In, &Out, 1);
return 0;
}
@@ -5946,7 +5939,7 @@ cmsInt32Number CheckOneLab(cmsHTRANSFORM xform, cmsFloat64Number L, cmsFloat64Nu
// Check several Lab, slicing at non-exact values. Precision should be 16 bits. 50x50x50 checks aprox.
static
-cmsInt32Number CheckSeveralLab(cmsHTRANSFORM xform)
+cmsInt32Number CheckSeveralLab(cmsContext ContextID, cmsHTRANSFORM xform)
{
cmsInt32Number L, a, b;
@@ -5957,7 +5950,7 @@ cmsInt32Number CheckSeveralLab(cmsHTRANSFORM xform)
for (b = 0; b < 65536; b += 1111) {
- if (!CheckOneLab(xform, (L * 100.0) / 65535.0,
+ if (!CheckOneLab(ContextID, xform, (L * 100.0) / 65535.0,
(a / 257.0) - 128, (b / 257.0) - 128))
return 0;
}
@@ -5970,171 +5963,171 @@ cmsInt32Number CheckSeveralLab(cmsHTRANSFORM xform)
static
-cmsInt32Number OneTrivialLab(cmsHPROFILE hLab1, cmsHPROFILE hLab2, const char* txt)
+cmsInt32Number OneTrivialLab(cmsContext ContextID, cmsHPROFILE hLab1, cmsHPROFILE hLab2, const char* txt)
{
cmsHTRANSFORM xform;
cmsInt32Number rc;
SubTest(txt);
- xform = cmsCreateTransform(DbgThread(), hLab1, TYPE_Lab_DBL, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hLab1); cmsCloseProfile(DbgThread(), hLab2);
+ xform = cmsCreateTransform(ContextID, hLab1, TYPE_Lab_DBL, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hLab1); cmsCloseProfile(ContextID, hLab2);
- rc = CheckSeveralLab(xform);
- cmsDeleteTransform(DbgThread(), xform);
+ rc = CheckSeveralLab(ContextID, xform);
+ cmsDeleteTransform(ContextID, xform);
return rc;
}
static
-cmsInt32Number CheckFloatLabTransforms(void)
+cmsInt32Number CheckFloatLabTransforms(cmsContext ContextID)
{
- return OneTrivialLab(cmsCreateLab4Profile(DbgThread(), NULL), cmsCreateLab4Profile(DbgThread(), NULL), "Lab4/Lab4") &&
- OneTrivialLab(cmsCreateLab2Profile(DbgThread(), NULL), cmsCreateLab2Profile(DbgThread(), NULL), "Lab2/Lab2") &&
- OneTrivialLab(cmsCreateLab4Profile(DbgThread(), NULL), cmsCreateLab2Profile(DbgThread(), NULL), "Lab4/Lab2") &&
- OneTrivialLab(cmsCreateLab2Profile(DbgThread(), NULL), cmsCreateLab4Profile(DbgThread(), NULL), "Lab2/Lab4");
+ return OneTrivialLab(ContextID, cmsCreateLab4Profile(ContextID, NULL), cmsCreateLab4Profile(ContextID, NULL), "Lab4/Lab4") &&
+ OneTrivialLab(ContextID, cmsCreateLab2Profile(ContextID, NULL), cmsCreateLab2Profile(ContextID, NULL), "Lab2/Lab2") &&
+ OneTrivialLab(ContextID, cmsCreateLab4Profile(ContextID, NULL), cmsCreateLab2Profile(ContextID, NULL), "Lab4/Lab2") &&
+ OneTrivialLab(ContextID, cmsCreateLab2Profile(ContextID, NULL), cmsCreateLab4Profile(ContextID, NULL), "Lab2/Lab4");
}
static
-cmsInt32Number CheckEncodedLabTransforms(void)
+cmsInt32Number CheckEncodedLabTransforms(cmsContext ContextID)
{
cmsHTRANSFORM xform;
cmsUInt16Number In[3];
cmsCIELab Lab;
cmsCIELab White = { 100, 0, 0 };
- cmsHPROFILE hLab1 = cmsCreateLab4Profile(DbgThread(), NULL);
- cmsHPROFILE hLab2 = cmsCreateLab4Profile(DbgThread(), NULL);
+ cmsHPROFILE hLab1 = cmsCreateLab4Profile(ContextID, NULL);
+ cmsHPROFILE hLab2 = cmsCreateLab4Profile(ContextID, NULL);
- xform = cmsCreateTransform(DbgThread(), hLab1, TYPE_Lab_16, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hLab1); cmsCloseProfile(DbgThread(), hLab2);
+ xform = cmsCreateTransform(ContextID, hLab1, TYPE_Lab_16, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hLab1); cmsCloseProfile(ContextID, hLab2);
In[0] = 0xFFFF;
In[1] = 0x8080;
In[2] = 0x8080;
- cmsDoTransform(DbgThread(), xform, In, &Lab, 1);
+ cmsDoTransform(ContextID, xform, In, &Lab, 1);
- if (cmsDeltaE(DbgThread(), &Lab, &White) > 0.0001) return 0;
- cmsDeleteTransform(DbgThread(), xform);
+ if (cmsDeltaE(ContextID, &Lab, &White) > 0.0001) return 0;
+ cmsDeleteTransform(ContextID, xform);
- hLab1 = cmsCreateLab2Profile(DbgThread(), NULL);
- hLab2 = cmsCreateLab4Profile(DbgThread(), NULL);
+ hLab1 = cmsCreateLab2Profile(ContextID, NULL);
+ hLab2 = cmsCreateLab4Profile(ContextID, NULL);
- xform = cmsCreateTransform(DbgThread(), hLab1, TYPE_LabV2_16, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hLab1); cmsCloseProfile(DbgThread(), hLab2);
+ xform = cmsCreateTransform(ContextID, hLab1, TYPE_LabV2_16, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hLab1); cmsCloseProfile(ContextID, hLab2);
In[0] = 0xFF00;
In[1] = 0x8000;
In[2] = 0x8000;
- cmsDoTransform(DbgThread(), xform, In, &Lab, 1);
+ cmsDoTransform(ContextID, xform, In, &Lab, 1);
- if (cmsDeltaE(DbgThread(), &Lab, &White) > 0.0001) return 0;
+ if (cmsDeltaE(ContextID, &Lab, &White) > 0.0001) return 0;
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
- hLab2 = cmsCreateLab2Profile(DbgThread(), NULL);
- hLab1 = cmsCreateLab4Profile(DbgThread(), NULL);
+ hLab2 = cmsCreateLab2Profile(ContextID, NULL);
+ hLab1 = cmsCreateLab4Profile(ContextID, NULL);
- xform = cmsCreateTransform(DbgThread(), hLab1, TYPE_Lab_DBL, hLab2, TYPE_LabV2_16, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hLab1); cmsCloseProfile(DbgThread(), hLab2);
+ xform = cmsCreateTransform(ContextID, hLab1, TYPE_Lab_DBL, hLab2, TYPE_LabV2_16, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hLab1); cmsCloseProfile(ContextID, hLab2);
Lab.L = 100;
Lab.a = 0;
Lab.b = 0;
- cmsDoTransform(DbgThread(), xform, &Lab, In, 1);
+ cmsDoTransform(ContextID, xform, &Lab, In, 1);
if (In[0] != 0xFF00 ||
In[1] != 0x8000 ||
In[2] != 0x8000) return 0;
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
- hLab1 = cmsCreateLab4Profile(DbgThread(), NULL);
- hLab2 = cmsCreateLab4Profile(DbgThread(), NULL);
+ hLab1 = cmsCreateLab4Profile(ContextID, NULL);
+ hLab2 = cmsCreateLab4Profile(ContextID, NULL);
- xform = cmsCreateTransform(DbgThread(), hLab1, TYPE_Lab_DBL, hLab2, TYPE_Lab_16, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hLab1); cmsCloseProfile(DbgThread(), hLab2);
+ xform = cmsCreateTransform(ContextID, hLab1, TYPE_Lab_DBL, hLab2, TYPE_Lab_16, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hLab1); cmsCloseProfile(ContextID, hLab2);
Lab.L = 100;
Lab.a = 0;
Lab.b = 0;
- cmsDoTransform(DbgThread(), xform, &Lab, In, 1);
+ cmsDoTransform(ContextID, xform, &Lab, In, 1);
if (In[0] != 0xFFFF ||
In[1] != 0x8080 ||
In[2] != 0x8080) return 0;
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
return 1;
}
static
-cmsInt32Number CheckStoredIdentities(void)
+cmsInt32Number CheckStoredIdentities(cmsContext ContextID)
{
cmsHPROFILE hLab, hLink, h4, h2;
cmsHTRANSFORM xform;
cmsInt32Number rc = 1;
- hLab = cmsCreateLab4Profile(DbgThread(), NULL);
- xform = cmsCreateTransform(DbgThread(), hLab, TYPE_Lab_8, hLab, TYPE_Lab_8, 0, 0);
+ hLab = cmsCreateLab4Profile(ContextID, NULL);
+ xform = cmsCreateTransform(ContextID, hLab, TYPE_Lab_8, hLab, TYPE_Lab_8, 0, 0);
- hLink = cmsTransform2DeviceLink(NULL, xform, 3.4, 0);
- cmsSaveProfileToFile(DbgThread(), hLink, "abstractv2.icc");
- cmsCloseProfile(DbgThread(), hLink);
+ hLink = cmsTransform2DeviceLink(ContextID, xform, 3.4, 0);
+ cmsSaveProfileToFile(ContextID, hLink, "abstractv2.icc");
+ cmsCloseProfile(ContextID, hLink);
- hLink = cmsTransform2DeviceLink(NULL, xform, 4.3, 0);
- cmsSaveProfileToFile(DbgThread(), hLink, "abstractv4.icc");
- cmsCloseProfile(DbgThread(), hLink);
+ hLink = cmsTransform2DeviceLink(ContextID, xform, 4.3, 0);
+ cmsSaveProfileToFile(ContextID, hLink, "abstractv4.icc");
+ cmsCloseProfile(ContextID, hLink);
- cmsDeleteTransform(DbgThread(), xform);
- cmsCloseProfile(DbgThread(), hLab);
+ cmsDeleteTransform(ContextID, xform);
+ cmsCloseProfile(ContextID, hLab);
- h4 = cmsOpenProfileFromFile(DbgThread(), "abstractv4.icc", "r");
+ h4 = cmsOpenProfileFromFile(ContextID, "abstractv4.icc", "r");
- xform = cmsCreateTransform(DbgThread(), h4, TYPE_Lab_DBL, h4, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
+ xform = cmsCreateTransform(ContextID, h4, TYPE_Lab_DBL, h4, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
SubTest("V4");
- rc &= CheckSeveralLab(xform);
+ rc &= CheckSeveralLab(ContextID, xform);
- cmsDeleteTransform(DbgThread(), xform);
- cmsCloseProfile(DbgThread(), h4);
+ cmsDeleteTransform(ContextID, xform);
+ cmsCloseProfile(ContextID, h4);
if (!rc) goto Error;
SubTest("V2");
- h2 = cmsOpenProfileFromFile(DbgThread(), "abstractv2.icc", "r");
+ h2 = cmsOpenProfileFromFile(ContextID, "abstractv2.icc", "r");
- xform = cmsCreateTransform(DbgThread(), h2, TYPE_Lab_DBL, h2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
- rc &= CheckSeveralLab(xform);
- cmsDeleteTransform(DbgThread(), xform);
- cmsCloseProfile(DbgThread(), h2);
+ xform = cmsCreateTransform(ContextID, h2, TYPE_Lab_DBL, h2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
+ rc &= CheckSeveralLab(ContextID, xform);
+ cmsDeleteTransform(ContextID, xform);
+ cmsCloseProfile(ContextID, h2);
if (!rc) goto Error;
SubTest("V2 -> V4");
- h2 = cmsOpenProfileFromFile(DbgThread(), "abstractv2.icc", "r");
- h4 = cmsOpenProfileFromFile(DbgThread(), "abstractv4.icc", "r");
+ h2 = cmsOpenProfileFromFile(ContextID, "abstractv2.icc", "r");
+ h4 = cmsOpenProfileFromFile(ContextID, "abstractv4.icc", "r");
- xform = cmsCreateTransform(DbgThread(), h4, TYPE_Lab_DBL, h2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
- rc &= CheckSeveralLab(xform);
- cmsDeleteTransform(DbgThread(), xform);
- cmsCloseProfile(DbgThread(), h2);
- cmsCloseProfile(DbgThread(), h4);
+ xform = cmsCreateTransform(ContextID, h4, TYPE_Lab_DBL, h2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
+ rc &= CheckSeveralLab(ContextID, xform);
+ cmsDeleteTransform(ContextID, xform);
+ cmsCloseProfile(ContextID, h2);
+ cmsCloseProfile(ContextID, h4);
SubTest("V4 -> V2");
- h2 = cmsOpenProfileFromFile(DbgThread(), "abstractv2.icc", "r");
- h4 = cmsOpenProfileFromFile(DbgThread(), "abstractv4.icc", "r");
+ h2 = cmsOpenProfileFromFile(ContextID, "abstractv2.icc", "r");
+ h4 = cmsOpenProfileFromFile(ContextID, "abstractv4.icc", "r");
- xform = cmsCreateTransform(DbgThread(), h2, TYPE_Lab_DBL, h4, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
- rc &= CheckSeveralLab(xform);
- cmsDeleteTransform(DbgThread(), xform);
- cmsCloseProfile(DbgThread(), h2);
- cmsCloseProfile(DbgThread(), h4);
+ xform = cmsCreateTransform(ContextID, h2, TYPE_Lab_DBL, h4, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
+ rc &= CheckSeveralLab(ContextID, xform);
+ cmsDeleteTransform(ContextID, xform);
+ cmsCloseProfile(ContextID, h2);
+ cmsCloseProfile(ContextID, h4);
Error:
remove("abstractv2.icc");
@@ -6147,23 +6140,23 @@ Error:
// Check a simple xform from a matrix profile to itself. Test floating point accuracy.
static
-cmsInt32Number CheckMatrixShaperXFORMFloat(void)
+cmsInt32Number CheckMatrixShaperXFORMFloat(cmsContext ContextID)
{
cmsHPROFILE hAbove, hSRGB;
cmsHTRANSFORM xform;
cmsInt32Number rc1, rc2;
- hAbove = Create_AboveRGB();
- xform = cmsCreateTransform(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hAbove);
- rc1 = CheckFloatlinearXFORM(xform, 3);
- cmsDeleteTransform(DbgThread(), xform);
+ hAbove = Create_AboveRGB(ContextID);
+ xform = cmsCreateTransform(ContextID, hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hAbove);
+ rc1 = CheckFloatlinearXFORM(ContextID, xform, 3);
+ cmsDeleteTransform(ContextID, xform);
- hSRGB = cmsCreate_sRGBProfile(DbgThread());
- xform = cmsCreateTransform(DbgThread(), hSRGB, TYPE_RGB_FLT, hSRGB, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hSRGB);
- rc2 = CheckFloatlinearXFORM(xform, 3);
- cmsDeleteTransform(DbgThread(), xform);
+ hSRGB = cmsCreate_sRGBProfile(ContextID);
+ xform = cmsCreateTransform(ContextID, hSRGB, TYPE_RGB_FLT, hSRGB, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hSRGB);
+ rc2 = CheckFloatlinearXFORM(ContextID, xform, 3);
+ cmsDeleteTransform(ContextID, xform);
return rc1 && rc2;
@@ -6171,24 +6164,24 @@ cmsInt32Number CheckMatrixShaperXFORMFloat(void)
// Check a simple xform from a matrix profile to itself. Test 16 bits accuracy.
static
-cmsInt32Number CheckMatrixShaperXFORM16(void)
+cmsInt32Number CheckMatrixShaperXFORM16(cmsContext ContextID)
{
cmsHPROFILE hAbove, hSRGB;
cmsHTRANSFORM xform;
cmsInt32Number rc1, rc2;
- hAbove = Create_AboveRGB();
- xform = cmsCreateTransform(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hAbove);
+ hAbove = Create_AboveRGB(ContextID);
+ xform = cmsCreateTransform(ContextID, hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hAbove);
- rc1 = Check16linearXFORM(xform, 3);
- cmsDeleteTransform(DbgThread(), xform);
+ rc1 = Check16linearXFORM(ContextID, xform, 3);
+ cmsDeleteTransform(ContextID, xform);
- hSRGB = cmsCreate_sRGBProfile(DbgThread());
- xform = cmsCreateTransform(DbgThread(), hSRGB, TYPE_RGB_16, hSRGB, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hSRGB);
- rc2 = Check16linearXFORM(xform, 3);
- cmsDeleteTransform(DbgThread(), xform);
+ hSRGB = cmsCreate_sRGBProfile(ContextID);
+ xform = cmsCreateTransform(ContextID, hSRGB, TYPE_RGB_16, hSRGB, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hSRGB);
+ rc2 = Check16linearXFORM(ContextID, xform, 3);
+ cmsDeleteTransform(ContextID, xform);
return rc1 && rc2;
@@ -6197,23 +6190,23 @@ cmsInt32Number CheckMatrixShaperXFORM16(void)
// Check a simple xform from a matrix profile to itself. Test 8 bits accuracy.
static
-cmsInt32Number CheckMatrixShaperXFORM8(void)
+cmsInt32Number CheckMatrixShaperXFORM8(cmsContext ContextID)
{
cmsHPROFILE hAbove, hSRGB;
cmsHTRANSFORM xform;
cmsInt32Number rc1, rc2;
- hAbove = Create_AboveRGB();
- xform = cmsCreateTransform(DbgThread(), hAbove, TYPE_RGB_8, hAbove, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hAbove);
- rc1 = Check8linearXFORM(xform, 3);
- cmsDeleteTransform(DbgThread(), xform);
+ hAbove = Create_AboveRGB(ContextID);
+ xform = cmsCreateTransform(ContextID, hAbove, TYPE_RGB_8, hAbove, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hAbove);
+ rc1 = Check8linearXFORM(ContextID, xform, 3);
+ cmsDeleteTransform(ContextID, xform);
- hSRGB = cmsCreate_sRGBProfile(DbgThread());
- xform = cmsCreateTransform(DbgThread(), hSRGB, TYPE_RGB_8, hSRGB, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hSRGB);
- rc2 = Check8linearXFORM(xform, 3);
- cmsDeleteTransform(DbgThread(), xform);
+ hSRGB = cmsCreate_sRGBProfile(ContextID);
+ xform = cmsCreateTransform(ContextID, hSRGB, TYPE_RGB_8, hSRGB, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hSRGB);
+ rc2 = Check8linearXFORM(ContextID, xform, 3);
+ cmsDeleteTransform(ContextID, xform);
return rc1 && rc2;
@@ -6232,7 +6225,7 @@ cmsInt32Number CheckMatrixShaperXFORM8(void)
// Check known values going from sRGB to XYZ
static
-cmsInt32Number CheckOneRGB_f(cmsHTRANSFORM xform, cmsInt32Number R, cmsInt32Number G, cmsInt32Number B, cmsFloat64Number X, cmsFloat64Number Y, cmsFloat64Number Z, cmsFloat64Number err)
+cmsInt32Number CheckOneRGB_f(cmsContext ContextID, cmsHTRANSFORM xform, cmsInt32Number R, cmsInt32Number G, cmsInt32Number B, cmsFloat64Number X, cmsFloat64Number Y, cmsFloat64Number Z, cmsFloat64Number err)
{
cmsFloat32Number RGB[3];
cmsFloat64Number Out[3];
@@ -6241,7 +6234,7 @@ cmsInt32Number CheckOneRGB_f(cmsHTRANSFORM xform, cmsInt32Number R, cmsInt32Numb
RGB[1] = (cmsFloat32Number) (G / 255.0);
RGB[2] = (cmsFloat32Number) (B / 255.0);
- cmsDoTransform(DbgThread(), xform, RGB, Out, 1);
+ cmsDoTransform(ContextID, xform, RGB, Out, 1);
return IsGoodVal("X", X , Out[0], err) &&
IsGoodVal("Y", Y , Out[1], err) &&
@@ -6249,43 +6242,43 @@ cmsInt32Number CheckOneRGB_f(cmsHTRANSFORM xform, cmsInt32Number R, cmsInt32Numb
}
static
-cmsInt32Number Chack_sRGB_Float(void)
+cmsInt32Number Chack_sRGB_Float(cmsContext ContextID)
{
cmsHPROFILE hsRGB, hXYZ, hLab;
cmsHTRANSFORM xform1, xform2;
cmsInt32Number rc;
- hsRGB = cmsCreate_sRGBProfile(DbgThread());
- hXYZ = cmsCreateXYZProfile(DbgThread());
- hLab = cmsCreateLab4Profile(DbgThread(), NULL);
+ hsRGB = cmsCreate_sRGBProfile(ContextID);
+ hXYZ = cmsCreateXYZProfile(ContextID);
+ hLab = cmsCreateLab4Profile(ContextID, NULL);
- xform1 = cmsCreateTransform(DbgThread(), hsRGB, TYPE_RGB_FLT, hXYZ, TYPE_XYZ_DBL,
+ xform1 = cmsCreateTransform(ContextID, hsRGB, TYPE_RGB_FLT, hXYZ, TYPE_XYZ_DBL,
INTENT_RELATIVE_COLORIMETRIC, 0);
- xform2 = cmsCreateTransform(DbgThread(), hsRGB, TYPE_RGB_FLT, hLab, TYPE_Lab_DBL,
+ xform2 = cmsCreateTransform(ContextID, hsRGB, TYPE_RGB_FLT, hLab, TYPE_Lab_DBL,
INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hsRGB);
- cmsCloseProfile(DbgThread(), hXYZ);
- cmsCloseProfile(DbgThread(), hLab);
+ cmsCloseProfile(ContextID, hsRGB);
+ cmsCloseProfile(ContextID, hXYZ);
+ cmsCloseProfile(ContextID, hLab);
MaxErr = 0;
// Xform 1 goes from 8 bits to XYZ,
- rc = CheckOneRGB_f(xform1, 1, 1, 1, 0.0002927, 0.0003035, 0.000250, 0.0001);
- rc &= CheckOneRGB_f(xform1, 127, 127, 127, 0.2046329, 0.212230, 0.175069, 0.0001);
- rc &= CheckOneRGB_f(xform1, 12, 13, 15, 0.0038364, 0.0039928, 0.003853, 0.0001);
- rc &= CheckOneRGB_f(xform1, 128, 0, 0, 0.0941240, 0.0480256, 0.003005, 0.0001);
- rc &= CheckOneRGB_f(xform1, 190, 25, 210, 0.3204592, 0.1605926, 0.468213, 0.0001);
+ rc = CheckOneRGB_f(ContextID, xform1, 1, 1, 1, 0.0002927, 0.0003035, 0.000250, 0.0001);
+ rc &= CheckOneRGB_f(ContextID, xform1, 127, 127, 127, 0.2046329, 0.212230, 0.175069, 0.0001);
+ rc &= CheckOneRGB_f(ContextID, xform1, 12, 13, 15, 0.0038364, 0.0039928, 0.003853, 0.0001);
+ rc &= CheckOneRGB_f(ContextID, xform1, 128, 0, 0, 0.0941240, 0.0480256, 0.003005, 0.0001);
+ rc &= CheckOneRGB_f(ContextID, xform1, 190, 25, 210, 0.3204592, 0.1605926, 0.468213, 0.0001);
// Xform 2 goes from 8 bits to Lab, we allow 0.01 error max
- rc &= CheckOneRGB_f(xform2, 1, 1, 1, 0.2741748, 0, 0, 0.01);
- rc &= CheckOneRGB_f(xform2, 127, 127, 127, 53.192776, 0, 0, 0.01);
- rc &= CheckOneRGB_f(xform2, 190, 25, 210, 47.052136, 74.565610, -56.883274, 0.01);
- rc &= CheckOneRGB_f(xform2, 128, 0, 0, 26.164701, 48.478171, 39.4384713, 0.01);
+ rc &= CheckOneRGB_f(ContextID, xform2, 1, 1, 1, 0.2741748, 0, 0, 0.01);
+ rc &= CheckOneRGB_f(ContextID, xform2, 127, 127, 127, 53.192776, 0, 0, 0.01);
+ rc &= CheckOneRGB_f(ContextID, xform2, 190, 25, 210, 47.052136, 74.565610, -56.883274, 0.01);
+ rc &= CheckOneRGB_f(ContextID, xform2, 128, 0, 0, 26.164701, 48.478171, 39.4384713, 0.01);
- cmsDeleteTransform(DbgThread(), xform1);
- cmsDeleteTransform(DbgThread(), xform2);
+ cmsDeleteTransform(ContextID, xform1);
+ cmsDeleteTransform(ContextID, xform2);
return rc;
}
@@ -6293,7 +6286,8 @@ cmsInt32Number Chack_sRGB_Float(void)
// ---------------------------------------------------
static
-cmsBool GetProfileRGBPrimaries(cmsHPROFILE hProfile,
+cmsBool GetProfileRGBPrimaries(cmsContext ContextID,
+ cmsHPROFILE hProfile,
cmsCIEXYZTRIPLE *result,
cmsUInt32Number intent)
{
@@ -6303,41 +6297,41 @@ cmsBool GetProfileRGBPrimaries(cmsHPROFILE hProfile,
{0., 1., 0.},
{0., 0., 1.}};
- hXYZ = cmsCreateXYZProfile(DbgThread());
+ hXYZ = cmsCreateXYZProfile(ContextID);
if (hXYZ == NULL) return FALSE;
- hTransform = cmsCreateTransform(DbgThread(), hProfile, TYPE_RGB_DBL, hXYZ, TYPE_XYZ_DBL,
+ hTransform = cmsCreateTransform(ContextID, hProfile, TYPE_RGB_DBL, hXYZ, TYPE_XYZ_DBL,
intent, cmsFLAGS_NOCACHE | cmsFLAGS_NOOPTIMIZE);
- cmsCloseProfile(DbgThread(), hXYZ);
+ cmsCloseProfile(ContextID, hXYZ);
if (hTransform == NULL) return FALSE;
- cmsDoTransform(DbgThread(), hTransform, rgb, result, 3);
- cmsDeleteTransform(DbgThread(), hTransform);
+ cmsDoTransform(ContextID, hTransform, rgb, result, 3);
+ cmsDeleteTransform(ContextID, hTransform);
return TRUE;
}
static
-int CheckRGBPrimaries(void)
+int CheckRGBPrimaries(cmsContext ContextID)
{
cmsHPROFILE hsRGB;
cmsCIEXYZTRIPLE tripXYZ;
cmsCIExyYTRIPLE tripxyY;
cmsBool result;
- cmsSetAdaptationState(DbgThread(), 0);
- hsRGB = cmsCreate_sRGBProfile(DbgThread());
+ cmsSetAdaptationState(ContextID, 0);
+ hsRGB = cmsCreate_sRGBProfile(ContextID);
if (!hsRGB) return 0;
- result = GetProfileRGBPrimaries(hsRGB, &tripXYZ,
+ result = GetProfileRGBPrimaries(ContextID, hsRGB, &tripXYZ,
INTENT_ABSOLUTE_COLORIMETRIC);
- cmsCloseProfile(DbgThread(), hsRGB);
+ cmsCloseProfile(ContextID, hsRGB);
if (!result) return 0;
- cmsXYZ2xyY(DbgThread(), &tripxyY.Red, &tripXYZ.Red);
- cmsXYZ2xyY(DbgThread(), &tripxyY.Green, &tripXYZ.Green);
- cmsXYZ2xyY(DbgThread(), &tripxyY.Blue, &tripXYZ.Blue);
+ cmsXYZ2xyY(ContextID, &tripxyY.Red, &tripXYZ.Red);
+ cmsXYZ2xyY(ContextID, &tripxyY.Green, &tripXYZ.Green);
+ cmsXYZ2xyY(ContextID, &tripxyY.Blue, &tripXYZ.Blue);
/* valus were taken from
http://en.wikipedia.org/wiki/RGB_color_spaces#Specifications */
@@ -6361,10 +6355,10 @@ int CheckRGBPrimaries(void)
// This function will check CMYK -> CMYK transforms. It uses FOGRA29 and SWOP ICC profiles
static
-cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char* Profile2)
+cmsInt32Number CheckCMYK(cmsContext ContextID, cmsInt32Number Intent, const char *Profile1, const char* Profile2)
{
- cmsHPROFILE hSWOP = cmsOpenProfileFromFile(DbgThread(), Profile1, "r");
- cmsHPROFILE hFOGRA = cmsOpenProfileFromFile(DbgThread(), Profile2, "r");
+ cmsHPROFILE hSWOP = cmsOpenProfileFromFile(ContextID, Profile1, "r");
+ cmsHPROFILE hFOGRA = cmsOpenProfileFromFile(ContextID, Profile2, "r");
cmsHTRANSFORM xform, swop_lab, fogra_lab;
cmsFloat32Number CMYK1[4], CMYK2[4];
cmsCIELab Lab1, Lab2;
@@ -6372,12 +6366,12 @@ cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char
cmsFloat64Number DeltaL, Max;
cmsInt32Number i;
- hLab = cmsCreateLab4Profile(DbgThread(), NULL);
+ hLab = cmsCreateLab4Profile(ContextID, NULL);
- xform = cmsCreateTransform(DbgThread(), hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, Intent, 0);
+ xform = cmsCreateTransform(ContextID, hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, Intent, 0);
- swop_lab = cmsCreateTransform(DbgThread(), hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, Intent, 0);
- fogra_lab = cmsCreateTransform(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, Intent, 0);
+ swop_lab = cmsCreateTransform(ContextID, hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, Intent, 0);
+ fogra_lab = cmsCreateTransform(ContextID, hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, Intent, 0);
Max = 0;
for (i=0; i <= 100; i++) {
@@ -6387,9 +6381,9 @@ cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char
CMYK1[2] = 30;
CMYK1[3] = (cmsFloat32Number) i;
- cmsDoTransform(DbgThread(), swop_lab, CMYK1, &Lab1, 1);
- cmsDoTransform(DbgThread(), xform, CMYK1, CMYK2, 1);
- cmsDoTransform(DbgThread(), fogra_lab, CMYK2, &Lab2, 1);
+ cmsDoTransform(ContextID, swop_lab, CMYK1, &Lab1, 1);
+ cmsDoTransform(ContextID, xform, CMYK1, CMYK2, 1);
+ cmsDoTransform(ContextID, fogra_lab, CMYK2, &Lab2, 1);
DeltaL = fabs(Lab1.L - Lab2.L);
@@ -6397,10 +6391,10 @@ cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char
}
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
- xform = cmsCreateTransform(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, Intent, 0);
+ xform = cmsCreateTransform(ContextID, hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, Intent, 0);
for (i=0; i <= 100; i++) {
CMYK1[0] = 10;
@@ -6408,9 +6402,9 @@ cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char
CMYK1[2] = 30;
CMYK1[3] = (cmsFloat32Number) i;
- cmsDoTransform(DbgThread(), fogra_lab, CMYK1, &Lab1, 1);
- cmsDoTransform(DbgThread(), xform, CMYK1, CMYK2, 1);
- cmsDoTransform(DbgThread(), swop_lab, CMYK2, &Lab2, 1);
+ cmsDoTransform(ContextID, fogra_lab, CMYK1, &Lab1, 1);
+ cmsDoTransform(ContextID, xform, CMYK1, CMYK2, 1);
+ cmsDoTransform(ContextID, swop_lab, CMYK2, &Lab2, 1);
DeltaL = fabs(Lab1.L - Lab2.L);
@@ -6418,45 +6412,45 @@ cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char
}
- cmsCloseProfile(DbgThread(), hSWOP);
- cmsCloseProfile(DbgThread(), hFOGRA);
- cmsCloseProfile(DbgThread(), hLab);
+ cmsCloseProfile(ContextID, hSWOP);
+ cmsCloseProfile(ContextID, hFOGRA);
+ cmsCloseProfile(ContextID, hLab);
- cmsDeleteTransform(DbgThread(), xform);
- cmsDeleteTransform(DbgThread(), swop_lab);
- cmsDeleteTransform(DbgThread(), fogra_lab);
+ cmsDeleteTransform(ContextID, xform);
+ cmsDeleteTransform(ContextID, swop_lab);
+ cmsDeleteTransform(ContextID, fogra_lab);
return Max < 3.0;
}
static
-cmsInt32Number CheckCMYKRoundtrip(void)
+cmsInt32Number CheckCMYKRoundtrip(cmsContext ContextID)
{
- return CheckCMYK(INTENT_RELATIVE_COLORIMETRIC, "test1.icc", "test1.icc");
+ return CheckCMYK(ContextID, INTENT_RELATIVE_COLORIMETRIC, "test1.icc", "test1.icc");
}
static
-cmsInt32Number CheckCMYKPerceptual(void)
+cmsInt32Number CheckCMYKPerceptual(cmsContext ContextID)
{
- return CheckCMYK(INTENT_PERCEPTUAL, "test1.icc", "test2.icc");
+ return CheckCMYK(ContextID, INTENT_PERCEPTUAL, "test1.icc", "test2.icc");
}
static
-cmsInt32Number CheckCMYKRelCol(void)
+cmsInt32Number CheckCMYKRelCol(cmsContext ContextID)
{
- return CheckCMYK(INTENT_RELATIVE_COLORIMETRIC, "test1.icc", "test2.icc");
+ return CheckCMYK(ContextID, INTENT_RELATIVE_COLORIMETRIC, "test1.icc", "test2.icc");
}
static
-cmsInt32Number CheckKOnlyBlackPreserving(void)
+cmsInt32Number CheckKOnlyBlackPreserving(cmsContext ContextID)
{
- cmsHPROFILE hSWOP = cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r");
- cmsHPROFILE hFOGRA = cmsOpenProfileFromFile(DbgThread(), "test2.icc", "r");
+ cmsHPROFILE hSWOP = cmsOpenProfileFromFile(ContextID, "test1.icc", "r");
+ cmsHPROFILE hFOGRA = cmsOpenProfileFromFile(ContextID, "test2.icc", "r");
cmsHTRANSFORM xform, swop_lab, fogra_lab;
cmsFloat32Number CMYK1[4], CMYK2[4];
cmsCIELab Lab1, Lab2;
@@ -6464,12 +6458,12 @@ cmsInt32Number CheckKOnlyBlackPreserving(void)
cmsFloat64Number DeltaL, Max;
cmsInt32Number i;
- hLab = cmsCreateLab4Profile(DbgThread(), NULL);
+ hLab = cmsCreateLab4Profile(ContextID, NULL);
- xform = cmsCreateTransform(DbgThread(), hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, INTENT_PRESERVE_K_ONLY_PERCEPTUAL, 0);
+ xform = cmsCreateTransform(ContextID, hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, INTENT_PRESERVE_K_ONLY_PERCEPTUAL, 0);
- swop_lab = cmsCreateTransform(DbgThread(), hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0);
- fogra_lab = cmsCreateTransform(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0);
+ swop_lab = cmsCreateTransform(ContextID, hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0);
+ fogra_lab = cmsCreateTransform(ContextID, hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0);
Max = 0;
@@ -6480,13 +6474,13 @@ cmsInt32Number CheckKOnlyBlackPreserving(void)
CMYK1[3] = (cmsFloat32Number) i;
// SWOP CMYK to Lab1
- cmsDoTransform(DbgThread(), swop_lab, CMYK1, &Lab1, 1);
+ cmsDoTransform(ContextID, swop_lab, CMYK1, &Lab1, 1);
// SWOP To FOGRA using black preservation
- cmsDoTransform(DbgThread(), xform, CMYK1, CMYK2, 1);
+ cmsDoTransform(ContextID, xform, CMYK1, CMYK2, 1);
// Obtained FOGRA CMYK to Lab2
- cmsDoTransform(DbgThread(), fogra_lab, CMYK2, &Lab2, 1);
+ cmsDoTransform(ContextID, fogra_lab, CMYK2, &Lab2, 1);
// We care only on L*
DeltaL = fabs(Lab1.L - Lab2.L);
@@ -6495,13 +6489,13 @@ cmsInt32Number CheckKOnlyBlackPreserving(void)
}
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
// dL should be below 3.0
// Same, but FOGRA to SWOP
- xform = cmsCreateTransform(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_ONLY_PERCEPTUAL, 0);
+ xform = cmsCreateTransform(ContextID, hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_ONLY_PERCEPTUAL, 0);
for (i=0; i <= 100; i++) {
CMYK1[0] = 0;
@@ -6509,9 +6503,9 @@ cmsInt32Number CheckKOnlyBlackPreserving(void)
CMYK1[2] = 0;
CMYK1[3] = (cmsFloat32Number) i;
- cmsDoTransform(DbgThread(), fogra_lab, CMYK1, &Lab1, 1);
- cmsDoTransform(DbgThread(), xform, CMYK1, CMYK2, 1);
- cmsDoTransform(DbgThread(), swop_lab, CMYK2, &Lab2, 1);
+ cmsDoTransform(ContextID, fogra_lab, CMYK1, &Lab1, 1);
+ cmsDoTransform(ContextID, xform, CMYK1, CMYK2, 1);
+ cmsDoTransform(ContextID, swop_lab, CMYK2, &Lab2, 1);
DeltaL = fabs(Lab1.L - Lab2.L);
@@ -6519,22 +6513,22 @@ cmsInt32Number CheckKOnlyBlackPreserving(void)
}
- cmsCloseProfile(DbgThread(), hSWOP);
- cmsCloseProfile(DbgThread(), hFOGRA);
- cmsCloseProfile(DbgThread(), hLab);
+ cmsCloseProfile(ContextID, hSWOP);
+ cmsCloseProfile(ContextID, hFOGRA);
+ cmsCloseProfile(ContextID, hLab);
- cmsDeleteTransform(DbgThread(), xform);
- cmsDeleteTransform(DbgThread(), swop_lab);
- cmsDeleteTransform(DbgThread(), fogra_lab);
+ cmsDeleteTransform(ContextID, xform);
+ cmsDeleteTransform(ContextID, swop_lab);
+ cmsDeleteTransform(ContextID, fogra_lab);
return Max < 3.0;
}
static
-cmsInt32Number CheckKPlaneBlackPreserving(void)
+cmsInt32Number CheckKPlaneBlackPreserving(cmsContext ContextID)
{
- cmsHPROFILE hSWOP = cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r");
- cmsHPROFILE hFOGRA = cmsOpenProfileFromFile(DbgThread(), "test2.icc", "r");
+ cmsHPROFILE hSWOP = cmsOpenProfileFromFile(ContextID, "test1.icc", "r");
+ cmsHPROFILE hFOGRA = cmsOpenProfileFromFile(ContextID, "test2.icc", "r");
cmsHTRANSFORM xform, swop_lab, fogra_lab;
cmsFloat32Number CMYK1[4], CMYK2[4];
cmsCIELab Lab1, Lab2;
@@ -6542,12 +6536,12 @@ cmsInt32Number CheckKPlaneBlackPreserving(void)
cmsFloat64Number DeltaE, Max;
cmsInt32Number i;
- hLab = cmsCreateLab4Profile(DbgThread(), NULL);
+ hLab = cmsCreateLab4Profile(ContextID, NULL);
- xform = cmsCreateTransform(DbgThread(), hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, INTENT_PERCEPTUAL, 0);
+ xform = cmsCreateTransform(ContextID, hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, INTENT_PERCEPTUAL, 0);
- swop_lab = cmsCreateTransform(DbgThread(), hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0);
- fogra_lab = cmsCreateTransform(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0);
+ swop_lab = cmsCreateTransform(ContextID, hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0);
+ fogra_lab = cmsCreateTransform(ContextID, hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0);
Max = 0;
@@ -6557,19 +6551,19 @@ cmsInt32Number CheckKPlaneBlackPreserving(void)
CMYK1[2] = 0;
CMYK1[3] = (cmsFloat32Number) i;
- cmsDoTransform(DbgThread(), swop_lab, CMYK1, &Lab1, 1);
- cmsDoTransform(DbgThread(), xform, CMYK1, CMYK2, 1);
- cmsDoTransform(DbgThread(), fogra_lab, CMYK2, &Lab2, 1);
+ cmsDoTransform(ContextID, swop_lab, CMYK1, &Lab1, 1);
+ cmsDoTransform(ContextID, xform, CMYK1, CMYK2, 1);
+ cmsDoTransform(ContextID, fogra_lab, CMYK2, &Lab2, 1);
- DeltaE = cmsDeltaE(DbgThread(), &Lab1, &Lab2);
+ DeltaE = cmsDeltaE(ContextID, &Lab1, &Lab2);
if (DeltaE > Max) Max = DeltaE;
}
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
- xform = cmsCreateTransform(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_PLANE_PERCEPTUAL, 0);
+ xform = cmsCreateTransform(ContextID, hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_PLANE_PERCEPTUAL, 0);
for (i=0; i <= 100; i++) {
CMYK1[0] = 30;
@@ -6577,26 +6571,26 @@ cmsInt32Number CheckKPlaneBlackPreserving(void)
CMYK1[2] = 10;
CMYK1[3] = (cmsFloat32Number) i;
- cmsDoTransform(DbgThread(), fogra_lab, CMYK1, &Lab1, 1);
- cmsDoTransform(DbgThread(), xform, CMYK1, CMYK2, 1);
- cmsDoTransform(DbgThread(), swop_lab, CMYK2, &Lab2, 1);
+ cmsDoTransform(ContextID, fogra_lab, CMYK1, &Lab1, 1);
+ cmsDoTransform(ContextID, xform, CMYK1, CMYK2, 1);
+ cmsDoTransform(ContextID, swop_lab, CMYK2, &Lab2, 1);
- DeltaE = cmsDeltaE(DbgThread(), &Lab1, &Lab2);
+ DeltaE = cmsDeltaE(ContextID, &Lab1, &Lab2);
if (DeltaE > Max) Max = DeltaE;
}
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
- cmsCloseProfile(DbgThread(), hSWOP);
- cmsCloseProfile(DbgThread(), hFOGRA);
- cmsCloseProfile(DbgThread(), hLab);
+ cmsCloseProfile(ContextID, hSWOP);
+ cmsCloseProfile(ContextID, hFOGRA);
+ cmsCloseProfile(ContextID, hLab);
- cmsDeleteTransform(DbgThread(), swop_lab);
- cmsDeleteTransform(DbgThread(), fogra_lab);
+ cmsDeleteTransform(ContextID, swop_lab);
+ cmsDeleteTransform(ContextID, fogra_lab);
return Max < 30.0;
}
@@ -6606,40 +6600,40 @@ cmsInt32Number CheckKPlaneBlackPreserving(void)
static
-cmsInt32Number CheckProofingXFORMFloat(void)
+cmsInt32Number CheckProofingXFORMFloat(cmsContext ContextID)
{
cmsHPROFILE hAbove;
cmsHTRANSFORM xform;
cmsInt32Number rc;
- hAbove = Create_AboveRGB();
- xform = cmsCreateProofingTransform(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove,
+ hAbove = Create_AboveRGB(ContextID);
+ xform = cmsCreateProofingTransform(ContextID, hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove,
INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_SOFTPROOFING);
- cmsCloseProfile(DbgThread(), hAbove);
- rc = CheckFloatlinearXFORM(xform, 3);
- cmsDeleteTransform(DbgThread(), xform);
+ cmsCloseProfile(ContextID, hAbove);
+ rc = CheckFloatlinearXFORM(ContextID, xform, 3);
+ cmsDeleteTransform(ContextID, xform);
return rc;
}
static
-cmsInt32Number CheckProofingXFORM16(void)
+cmsInt32Number CheckProofingXFORM16(cmsContext ContextID)
{
cmsHPROFILE hAbove;
cmsHTRANSFORM xform;
cmsInt32Number rc;
- hAbove = Create_AboveRGB();
- xform = cmsCreateProofingTransform(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hAbove,
+ hAbove = Create_AboveRGB(ContextID);
+ xform = cmsCreateProofingTransform(ContextID, hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hAbove,
INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_SOFTPROOFING|cmsFLAGS_NOCACHE);
- cmsCloseProfile(DbgThread(), hAbove);
- rc = Check16linearXFORM(xform, 3);
- cmsDeleteTransform(DbgThread(), xform);
+ cmsCloseProfile(ContextID, hAbove);
+ rc = Check16linearXFORM(ContextID, xform, 3);
+ cmsDeleteTransform(ContextID, xform);
return rc;
}
static
-cmsInt32Number CheckGamutCheck(void)
+cmsInt32Number CheckGamutCheck(cmsContext ContextID)
{
cmsHPROFILE hSRGB, hAbove;
cmsHTRANSFORM xform;
@@ -6647,42 +6641,42 @@ cmsInt32Number CheckGamutCheck(void)
cmsUInt16Number Alarm[16] = { 0xDEAD, 0xBABE, 0xFACE };
// Set alarm codes to fancy values so we could check the out of gamut condition
- cmsSetAlarmCodes(DbgThread(), Alarm);
+ cmsSetAlarmCodes(ContextID, Alarm);
// Create the profiles
- hSRGB = cmsCreate_sRGBProfile(DbgThread());
- hAbove = Create_AboveRGB();
+ hSRGB = cmsCreate_sRGBProfile(ContextID);
+ hAbove = Create_AboveRGB(ContextID);
if (hSRGB == NULL || hAbove == NULL) return 0; // Failed
SubTest("Gamut check on floating point");
// Create a gamut checker in the same space. No value should be out of gamut
- xform = cmsCreateProofingTransform(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove,
+ xform = cmsCreateProofingTransform(ContextID, hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove,
INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_GAMUTCHECK);
- if (!CheckFloatlinearXFORM(xform, 3)) {
- cmsCloseProfile(DbgThread(), hSRGB);
- cmsCloseProfile(DbgThread(), hAbove);
- cmsDeleteTransform(DbgThread(), xform);
+ if (!CheckFloatlinearXFORM(ContextID, xform, 3)) {
+ cmsCloseProfile(ContextID, hSRGB);
+ cmsCloseProfile(ContextID, hAbove);
+ cmsDeleteTransform(ContextID, xform);
Fail("Gamut check on same profile failed");
return 0;
}
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
SubTest("Gamut check on 16 bits");
- xform = cmsCreateProofingTransform(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hSRGB,
+ xform = cmsCreateProofingTransform(ContextID, hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hSRGB,
INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_GAMUTCHECK);
- cmsCloseProfile(DbgThread(), hSRGB);
- cmsCloseProfile(DbgThread(), hAbove);
+ cmsCloseProfile(ContextID, hSRGB);
+ cmsCloseProfile(ContextID, hAbove);
- rc = Check16linearXFORM(xform, 3);
+ rc = Check16linearXFORM(ContextID, xform, 3);
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
return rc;
}
@@ -6692,54 +6686,54 @@ cmsInt32Number CheckGamutCheck(void)
// -------------------------------------------------------------------------------------------------------------------
static
-cmsInt32Number CheckBlackPoint(void)
+cmsInt32Number CheckBlackPoint(cmsContext ContextID)
{
cmsHPROFILE hProfile;
cmsCIEXYZ Black;
cmsCIELab Lab;
- hProfile = cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r");
- cmsDetectDestinationBlackPoint(DbgThread(), &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hProfile);
+ hProfile = cmsOpenProfileFromFile(ContextID, "test5.icc", "r");
+ cmsDetectDestinationBlackPoint(ContextID, &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hProfile);
- hProfile = cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r");
- cmsDetectDestinationBlackPoint(DbgThread(), &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsXYZ2Lab(DbgThread(), NULL, &Lab, &Black);
- cmsCloseProfile(DbgThread(), hProfile);
+ hProfile = cmsOpenProfileFromFile(ContextID, "test1.icc", "r");
+ cmsDetectDestinationBlackPoint(ContextID, &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsXYZ2Lab(ContextID, NULL, &Lab, &Black);
+ cmsCloseProfile(ContextID, hProfile);
- hProfile = cmsOpenProfileFromFile(DbgThread(), "lcms2cmyk.icc", "r");
- cmsDetectDestinationBlackPoint(DbgThread(), &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsXYZ2Lab(DbgThread(), NULL, &Lab, &Black);
- cmsCloseProfile(DbgThread(), hProfile);
+ hProfile = cmsOpenProfileFromFile(ContextID, "lcms2cmyk.icc", "r");
+ cmsDetectDestinationBlackPoint(ContextID, &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsXYZ2Lab(ContextID, NULL, &Lab, &Black);
+ cmsCloseProfile(ContextID, hProfile);
- hProfile = cmsOpenProfileFromFile(DbgThread(), "test2.icc", "r");
- cmsDetectDestinationBlackPoint(DbgThread(), &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsXYZ2Lab(DbgThread(), NULL, &Lab, &Black);
- cmsCloseProfile(DbgThread(), hProfile);
+ hProfile = cmsOpenProfileFromFile(ContextID, "test2.icc", "r");
+ cmsDetectDestinationBlackPoint(ContextID, &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsXYZ2Lab(ContextID, NULL, &Lab, &Black);
+ cmsCloseProfile(ContextID, hProfile);
- hProfile = cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r");
- cmsDetectDestinationBlackPoint(DbgThread(), &Black, hProfile, INTENT_PERCEPTUAL, 0);
- cmsXYZ2Lab(DbgThread(), NULL, &Lab, &Black);
- cmsCloseProfile(DbgThread(), hProfile);
+ hProfile = cmsOpenProfileFromFile(ContextID, "test1.icc", "r");
+ cmsDetectDestinationBlackPoint(ContextID, &Black, hProfile, INTENT_PERCEPTUAL, 0);
+ cmsXYZ2Lab(ContextID, NULL, &Lab, &Black);
+ cmsCloseProfile(ContextID, hProfile);
return 1;
}
static
-cmsInt32Number CheckOneTAC(cmsFloat64Number InkLimit)
+cmsInt32Number CheckOneTAC(cmsContext ContextID, cmsFloat64Number InkLimit)
{
cmsHPROFILE h;
cmsFloat64Number d;
- h =CreateFakeCMYK(InkLimit, TRUE);
- cmsSaveProfileToFile(DbgThread(), h, "lcmstac.icc");
- cmsCloseProfile(DbgThread(), h);
+ h =CreateFakeCMYK(ContextID, InkLimit, TRUE);
+ cmsSaveProfileToFile(ContextID, h, "lcmstac.icc");
+ cmsCloseProfile(ContextID, h);
- h = cmsOpenProfileFromFile(DbgThread(), "lcmstac.icc", "r");
- d = cmsDetectTAC(DbgThread(), h);
- cmsCloseProfile(DbgThread(), h);
+ h = cmsOpenProfileFromFile(ContextID, "lcmstac.icc", "r");
+ d = cmsDetectTAC(ContextID, h);
+ cmsCloseProfile(ContextID, h);
remove("lcmstac.icc");
@@ -6750,13 +6744,13 @@ cmsInt32Number CheckOneTAC(cmsFloat64Number InkLimit)
static
-cmsInt32Number CheckTAC(void)
+cmsInt32Number CheckTAC(cmsContext ContextID)
{
- if (!CheckOneTAC(180)) return 0;
- if (!CheckOneTAC(220)) return 0;
- if (!CheckOneTAC(286)) return 0;
- if (!CheckOneTAC(310)) return 0;
- if (!CheckOneTAC(330)) return 0;
+ if (!CheckOneTAC(ContextID, 180)) return 0;
+ if (!CheckOneTAC(ContextID, 220)) return 0;
+ if (!CheckOneTAC(ContextID, 286)) return 0;
+ if (!CheckOneTAC(ContextID, 310)) return 0;
+ if (!CheckOneTAC(ContextID, 330)) return 0;
return 1;
}
@@ -6767,30 +6761,30 @@ cmsInt32Number CheckTAC(void)
#define NPOINTS_IT8 10 // (17*17*17*17)
static
-cmsInt32Number CheckCGATS(void)
+cmsInt32Number CheckCGATS(cmsContext ContextID)
{
cmsHANDLE it8;
cmsInt32Number i;
SubTest("IT8 creation");
- it8 = cmsIT8Alloc(DbgThread());
+ it8 = cmsIT8Alloc(ContextID);
if (it8 == NULL) return 0;
- cmsIT8SetSheetType(DbgThread(), it8, "LCMS/TESTING");
- cmsIT8SetPropertyStr(DbgThread(), it8, "ORIGINATOR", "1 2 3 4");
- cmsIT8SetPropertyUncooked(DbgThread(), it8, "DESCRIPTOR", "1234");
- cmsIT8SetPropertyStr(DbgThread(), it8, "MANUFACTURER", "3");
- cmsIT8SetPropertyDbl(DbgThread(), it8, "CREATED", 4);
- cmsIT8SetPropertyDbl(DbgThread(), it8, "SERIAL", 5);
- cmsIT8SetPropertyHex(DbgThread(), it8, "MATERIAL", 0x123);
+ cmsIT8SetSheetType(ContextID, it8, "LCMS/TESTING");
+ cmsIT8SetPropertyStr(ContextID, it8, "ORIGINATOR", "1 2 3 4");
+ cmsIT8SetPropertyUncooked(ContextID, it8, "DESCRIPTOR", "1234");
+ cmsIT8SetPropertyStr(ContextID, it8, "MANUFACTURER", "3");
+ cmsIT8SetPropertyDbl(ContextID, it8, "CREATED", 4);
+ cmsIT8SetPropertyDbl(ContextID, it8, "SERIAL", 5);
+ cmsIT8SetPropertyHex(ContextID, it8, "MATERIAL", 0x123);
- cmsIT8SetPropertyDbl(DbgThread(), it8, "NUMBER_OF_SETS", NPOINTS_IT8);
- cmsIT8SetPropertyDbl(DbgThread(), it8, "NUMBER_OF_FIELDS", 4);
+ cmsIT8SetPropertyDbl(ContextID, it8, "NUMBER_OF_SETS", NPOINTS_IT8);
+ cmsIT8SetPropertyDbl(ContextID, it8, "NUMBER_OF_FIELDS", 4);
- cmsIT8SetDataFormat(DbgThread(), it8, 0, "SAMPLE_ID");
- cmsIT8SetDataFormat(DbgThread(), it8, 1, "RGB_R");
- cmsIT8SetDataFormat(DbgThread(), it8, 2, "RGB_G");
- cmsIT8SetDataFormat(DbgThread(), it8, 3, "RGB_B");
+ cmsIT8SetDataFormat(ContextID, it8, 0, "SAMPLE_ID");
+ cmsIT8SetDataFormat(ContextID, it8, 1, "RGB_R");
+ cmsIT8SetDataFormat(ContextID, it8, 2, "RGB_G");
+ cmsIT8SetDataFormat(ContextID, it8, 3, "RGB_B");
SubTest("Table creation");
for (i=0; i < NPOINTS_IT8; i++) {
@@ -6799,73 +6793,73 @@ cmsInt32Number CheckCGATS(void)
sprintf(Patch, "P%d", i);
- cmsIT8SetDataRowCol(DbgThread(), it8, i, 0, Patch);
- cmsIT8SetDataRowColDbl(DbgThread(), it8, i, 1, i);
- cmsIT8SetDataRowColDbl(DbgThread(), it8, i, 2, i);
- cmsIT8SetDataRowColDbl(DbgThread(), it8, i, 3, i);
+ cmsIT8SetDataRowCol(ContextID, it8, i, 0, Patch);
+ cmsIT8SetDataRowColDbl(ContextID, it8, i, 1, i);
+ cmsIT8SetDataRowColDbl(ContextID, it8, i, 2, i);
+ cmsIT8SetDataRowColDbl(ContextID, it8, i, 3, i);
}
SubTest("Save to file");
- cmsIT8SaveToFile(DbgThread(), it8, "TEST.IT8");
- cmsIT8Free(DbgThread(), it8);
+ cmsIT8SaveToFile(ContextID, it8, "TEST.IT8");
+ cmsIT8Free(ContextID, it8);
SubTest("Load from file");
- it8 = cmsIT8LoadFromFile(DbgThread(), "TEST.IT8");
+ it8 = cmsIT8LoadFromFile(ContextID, "TEST.IT8");
if (it8 == NULL) return 0;
SubTest("Save again file");
- cmsIT8SaveToFile(DbgThread(), it8, "TEST.IT8");
- cmsIT8Free(DbgThread(), it8);
+ cmsIT8SaveToFile(ContextID, it8, "TEST.IT8");
+ cmsIT8Free(ContextID, it8);
SubTest("Load from file (II)");
- it8 = cmsIT8LoadFromFile(DbgThread(), "TEST.IT8");
+ it8 = cmsIT8LoadFromFile(ContextID, "TEST.IT8");
if (it8 == NULL) return 0;
SubTest("Change prop value");
- if (cmsIT8GetPropertyDbl(DbgThread(), it8, "DESCRIPTOR") != 1234) {
+ if (cmsIT8GetPropertyDbl(ContextID, it8, "DESCRIPTOR") != 1234) {
return 0;
}
- cmsIT8SetPropertyDbl(DbgThread(), it8, "DESCRIPTOR", 5678);
- if (cmsIT8GetPropertyDbl(DbgThread(), it8, "DESCRIPTOR") != 5678) {
+ cmsIT8SetPropertyDbl(ContextID, it8, "DESCRIPTOR", 5678);
+ if (cmsIT8GetPropertyDbl(ContextID, it8, "DESCRIPTOR") != 5678) {
return 0;
}
SubTest("Positive numbers");
- if (cmsIT8GetDataDbl(DbgThread(), it8, "P3", "RGB_G") != 3) {
+ if (cmsIT8GetDataDbl(ContextID, it8, "P3", "RGB_G") != 3) {
return 0;
}
SubTest("Positive exponent numbers");
- cmsIT8SetPropertyDbl(DbgThread(), it8, "DBL_PROP", 123E+12);
- if ((cmsIT8GetPropertyDbl(DbgThread(), it8, "DBL_PROP") - 123E+12) > 1 ) {
+ cmsIT8SetPropertyDbl(ContextID, it8, "DBL_PROP", 123E+12);
+ if ((cmsIT8GetPropertyDbl(ContextID, it8, "DBL_PROP") - 123E+12) > 1 ) {
return 0;
}
SubTest("Negative exponent numbers");
- cmsIT8SetPropertyDbl(DbgThread(), it8, "DBL_PROP_NEG", 123E-45);
- if ((cmsIT8GetPropertyDbl(DbgThread(), it8, "DBL_PROP_NEG") - 123E-45) > 1E-45 ) {
+ cmsIT8SetPropertyDbl(ContextID, it8, "DBL_PROP_NEG", 123E-45);
+ if ((cmsIT8GetPropertyDbl(ContextID, it8, "DBL_PROP_NEG") - 123E-45) > 1E-45 ) {
return 0;
}
SubTest("Negative numbers");
- cmsIT8SetPropertyDbl(DbgThread(), it8, "DBL_NEG_VAL", -123);
- if ((cmsIT8GetPropertyDbl(DbgThread(), it8, "DBL_NEG_VAL")) != -123 ) {
+ cmsIT8SetPropertyDbl(ContextID, it8, "DBL_NEG_VAL", -123);
+ if ((cmsIT8GetPropertyDbl(ContextID, it8, "DBL_NEG_VAL")) != -123 ) {
return 0;
}
- cmsIT8Free(DbgThread(), it8);
+ cmsIT8Free(ContextID, it8);
remove("TEST.IT8");
return 1;
@@ -6874,28 +6868,28 @@ cmsInt32Number CheckCGATS(void)
static
-cmsInt32Number CheckCGATS2(void)
+cmsInt32Number CheckCGATS2(cmsContext ContextID)
{
cmsHANDLE handle;
const cmsUInt8Number junk[] = { 0x0, 0xd, 0xd, 0xa, 0x20, 0xd, 0x20, 0x20, 0x20, 0x3a, 0x31, 0x3d, 0x3d, 0x3d, 0x3d };
- handle = cmsIT8LoadFromMem(0, (const void*)junk, sizeof(junk));
+ handle = cmsIT8LoadFromMem(ContextID, (const void*)junk, sizeof(junk));
if (handle)
- cmsIT8Free(DbgThread(), handle);
+ cmsIT8Free(ContextID, handle);
return 1;
}
static
-cmsInt32Number CheckCGATS_Overflow(void)
+cmsInt32Number CheckCGATS_Overflow(cmsContext ContextID)
{
cmsHANDLE handle;
const cmsUInt8Number junk[] = { "@\nA 1.e2147483648\n" };
- handle = cmsIT8LoadFromMem(0, (const void*)junk, sizeof(junk));
+ handle = cmsIT8LoadFromMem(ContextID, (const void*)junk, sizeof(junk));
if (handle)
- cmsIT8Free(DbgThread(), handle);
+ cmsIT8Free(ContextID, handle);
return 1;
}
@@ -6903,25 +6897,24 @@ cmsInt32Number CheckCGATS_Overflow(void)
// Create CSA/CRD
static
-void GenerateCSA(const char* cInProf, const char* FileName)
+void GenerateCSA(cmsContext BuffThread, const char* cInProf, const char* FileName)
{
cmsHPROFILE hProfile;
cmsUInt32Number n;
char* Buffer;
- cmsContext BuffThread = DbgThread();
FILE* o;
if (cInProf == NULL)
- hProfile = cmsCreateLab4Profile(DbgThread(), NULL);
+ hProfile = cmsCreateLab4Profile(BuffThread, NULL);
else
- hProfile = cmsOpenProfileFromFile(DbgThread(), cInProf, "r");
+ hProfile = cmsOpenProfileFromFile(BuffThread, cInProf, "r");
- n = cmsGetPostScriptCSA(DbgThread(), hProfile, 0, 0, NULL, 0);
+ n = cmsGetPostScriptCSA(BuffThread, hProfile, 0, 0, NULL, 0);
if (n == 0) return;
Buffer = (char*) _cmsMalloc(BuffThread, n + 1);
- cmsGetPostScriptCSA(DbgThread(), hProfile, 0, 0, Buffer, n);
+ cmsGetPostScriptCSA(BuffThread, hProfile, 0, 0, Buffer, n);
Buffer[n] = 0;
if (FileName != NULL) {
@@ -6931,32 +6924,31 @@ void GenerateCSA(const char* cInProf, const char* FileName)
}
_cmsFree(BuffThread, Buffer);
- cmsCloseProfile(DbgThread(), hProfile);
+ cmsCloseProfile(BuffThread, hProfile);
if (FileName != NULL)
remove(FileName);
}
static
-void GenerateCRD(const char* cOutProf, const char* FileName)
+void GenerateCRD(cmsContext BuffThread, const char* cOutProf, const char* FileName)
{
cmsHPROFILE hProfile;
cmsUInt32Number n;
char* Buffer;
cmsUInt32Number dwFlags = 0;
- cmsContext BuffThread = DbgThread();
if (cOutProf == NULL)
- hProfile = cmsCreateLab4Profile(DbgThread(), NULL);
+ hProfile = cmsCreateLab4Profile(BuffThread, NULL);
else
- hProfile = cmsOpenProfileFromFile(DbgThread(), cOutProf, "r");
+ hProfile = cmsOpenProfileFromFile(BuffThread, cOutProf, "r");
- n = cmsGetPostScriptCRD(DbgThread(), hProfile, 0, dwFlags, NULL, 0);
+ n = cmsGetPostScriptCRD(BuffThread, hProfile, 0, dwFlags, NULL, 0);
if (n == 0) return;
Buffer = (char*) _cmsMalloc(BuffThread, n + 1);
- cmsGetPostScriptCRD(DbgThread(), hProfile, 0, dwFlags, Buffer, n);
+ cmsGetPostScriptCRD(BuffThread, hProfile, 0, dwFlags, Buffer, n);
Buffer[n] = 0;
if (FileName != NULL) {
@@ -6966,38 +6958,38 @@ void GenerateCRD(const char* cOutProf, const char* FileName)
}
_cmsFree(BuffThread, Buffer);
- cmsCloseProfile(DbgThread(), hProfile);
+ cmsCloseProfile(BuffThread, hProfile);
if (FileName != NULL)
remove(FileName);
}
static
-cmsInt32Number CheckPostScript(void)
+cmsInt32Number CheckPostScript(cmsContext ContextID)
{
- GenerateCSA("test5.icc", "sRGB_CSA.ps");
- GenerateCSA("aRGBlcms2.icc", "aRGB_CSA.ps");
- GenerateCSA("test4.icc", "sRGBV4_CSA.ps");
- GenerateCSA("test1.icc", "SWOP_CSA.ps");
- GenerateCSA(NULL, "Lab_CSA.ps");
- GenerateCSA("graylcms2.icc", "gray_CSA.ps");
+ GenerateCSA(ContextID, "test5.icc", "sRGB_CSA.ps");
+ GenerateCSA(ContextID, "aRGBlcms2.icc", "aRGB_CSA.ps");
+ GenerateCSA(ContextID, "test4.icc", "sRGBV4_CSA.ps");
+ GenerateCSA(ContextID, "test1.icc", "SWOP_CSA.ps");
+ GenerateCSA(ContextID, NULL, "Lab_CSA.ps");
+ GenerateCSA(ContextID, "graylcms2.icc", "gray_CSA.ps");
- GenerateCRD("test5.icc", "sRGB_CRD.ps");
- GenerateCRD("aRGBlcms2.icc", "aRGB_CRD.ps");
- GenerateCRD(NULL, "Lab_CRD.ps");
- GenerateCRD("test1.icc", "SWOP_CRD.ps");
- GenerateCRD("test4.icc", "sRGBV4_CRD.ps");
- GenerateCRD("graylcms2.icc", "gray_CRD.ps");
+ GenerateCRD(ContextID, "test5.icc", "sRGB_CRD.ps");
+ GenerateCRD(ContextID, "aRGBlcms2.icc", "aRGB_CRD.ps");
+ GenerateCRD(ContextID, NULL, "Lab_CRD.ps");
+ GenerateCRD(ContextID, "test1.icc", "SWOP_CRD.ps");
+ GenerateCRD(ContextID, "test4.icc", "sRGBV4_CRD.ps");
+ GenerateCRD(ContextID, "graylcms2.icc", "gray_CRD.ps");
return 1;
}
static
-cmsInt32Number CheckGray(cmsHTRANSFORM xform, cmsUInt8Number g, double L)
+cmsInt32Number CheckGray(cmsContext ContextID, cmsHTRANSFORM xform, cmsUInt8Number g, double L)
{
cmsCIELab Lab;
- cmsDoTransform(DbgThread(), xform, &g, &Lab, 1);
+ cmsDoTransform(ContextID, xform, &g, &Lab, 1);
if (!IsGoodVal("a axis on gray", 0, Lab.a, 0.001)) return 0;
if (!IsGoodVal("b axis on gray", 0, Lab.b, 0.001)) return 0;
@@ -7006,50 +6998,50 @@ cmsInt32Number CheckGray(cmsHTRANSFORM xform, cmsUInt8Number g, double L)
}
static
-cmsInt32Number CheckInputGray(void)
+cmsInt32Number CheckInputGray(cmsContext ContextID)
{
- cmsHPROFILE hGray = Create_Gray22();
- cmsHPROFILE hLab = cmsCreateLab4Profile(DbgThread(), NULL);
+ cmsHPROFILE hGray = Create_Gray22(ContextID);
+ cmsHPROFILE hLab = cmsCreateLab4Profile(ContextID, NULL);
cmsHTRANSFORM xform;
if (hGray == NULL || hLab == NULL) return 0;
- xform = cmsCreateTransform(DbgThread(), hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hGray); cmsCloseProfile(DbgThread(), hLab);
+ xform = cmsCreateTransform(ContextID, hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hGray); cmsCloseProfile(ContextID, hLab);
- if (!CheckGray(xform, 0, 0)) return 0;
- if (!CheckGray(xform, 125, 52.768)) return 0;
- if (!CheckGray(xform, 200, 81.069)) return 0;
- if (!CheckGray(xform, 255, 100.0)) return 0;
+ if (!CheckGray(ContextID, xform, 0, 0)) return 0;
+ if (!CheckGray(ContextID, xform, 125, 52.768)) return 0;
+ if (!CheckGray(ContextID, xform, 200, 81.069)) return 0;
+ if (!CheckGray(ContextID, xform, 255, 100.0)) return 0;
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
return 1;
}
static
-cmsInt32Number CheckLabInputGray(void)
+cmsInt32Number CheckLabInputGray(cmsContext ContextID)
{
- cmsHPROFILE hGray = Create_GrayLab();
- cmsHPROFILE hLab = cmsCreateLab4Profile(DbgThread(), NULL);
+ cmsHPROFILE hGray = Create_GrayLab(ContextID);
+ cmsHPROFILE hLab = cmsCreateLab4Profile(ContextID, NULL);
cmsHTRANSFORM xform;
if (hGray == NULL || hLab == NULL) return 0;
- xform = cmsCreateTransform(DbgThread(), hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hGray); cmsCloseProfile(DbgThread(), hLab);
+ xform = cmsCreateTransform(ContextID, hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hGray); cmsCloseProfile(ContextID, hLab);
- if (!CheckGray(xform, 0, 0)) return 0;
- if (!CheckGray(xform, 125, 49.019)) return 0;
- if (!CheckGray(xform, 200, 78.431)) return 0;
- if (!CheckGray(xform, 255, 100.0)) return 0;
+ if (!CheckGray(ContextID, xform, 0, 0)) return 0;
+ if (!CheckGray(ContextID, xform, 125, 49.019)) return 0;
+ if (!CheckGray(ContextID, xform, 200, 78.431)) return 0;
+ if (!CheckGray(ContextID, xform, 255, 100.0)) return 0;
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
return 1;
}
static
-cmsInt32Number CheckOutGray(cmsHTRANSFORM xform, double L, cmsUInt8Number g)
+cmsInt32Number CheckOutGray(cmsContext ContextID, cmsHTRANSFORM xform, double L, cmsUInt8Number g)
{
cmsCIELab Lab;
cmsUInt8Number g_out;
@@ -7058,50 +7050,50 @@ cmsInt32Number CheckOutGray(cmsHTRANSFORM xform, double L, cmsUInt8Number g)
Lab.a = 0;
Lab.b = 0;
- cmsDoTransform(DbgThread(), xform, &Lab, &g_out, 1);
+ cmsDoTransform(ContextID, xform, &Lab, &g_out, 1);
return IsGoodVal("Gray value", g, (double) g_out, 0.01);
}
static
-cmsInt32Number CheckOutputGray(void)
+cmsInt32Number CheckOutputGray(cmsContext ContextID)
{
- cmsHPROFILE hGray = Create_Gray22();
- cmsHPROFILE hLab = cmsCreateLab4Profile(DbgThread(), NULL);
+ cmsHPROFILE hGray = Create_Gray22(ContextID);
+ cmsHPROFILE hLab = cmsCreateLab4Profile(ContextID, NULL);
cmsHTRANSFORM xform;
if (hGray == NULL || hLab == NULL) return 0;
- xform = cmsCreateTransform(DbgThread(), hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hGray); cmsCloseProfile(DbgThread(), hLab);
+ xform = cmsCreateTransform(ContextID, hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hGray); cmsCloseProfile(ContextID, hLab);
- if (!CheckOutGray(xform, 0, 0)) return 0;
- if (!CheckOutGray(xform, 100, 255)) return 0;
+ if (!CheckOutGray(ContextID, xform, 0, 0)) return 0;
+ if (!CheckOutGray(ContextID, xform, 100, 255)) return 0;
- if (!CheckOutGray(xform, 20, 52)) return 0;
- if (!CheckOutGray(xform, 50, 118)) return 0;
+ if (!CheckOutGray(ContextID, xform, 20, 52)) return 0;
+ if (!CheckOutGray(ContextID, xform, 50, 118)) return 0;
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
return 1;
}
static
-cmsInt32Number CheckLabOutputGray(void)
+cmsInt32Number CheckLabOutputGray(cmsContext ContextID)
{
- cmsHPROFILE hGray = Create_GrayLab();
- cmsHPROFILE hLab = cmsCreateLab4Profile(DbgThread(), NULL);
+ cmsHPROFILE hGray = Create_GrayLab(ContextID);
+ cmsHPROFILE hLab = cmsCreateLab4Profile(ContextID, NULL);
cmsHTRANSFORM xform;
cmsInt32Number i;
if (hGray == NULL || hLab == NULL) return 0;
- xform = cmsCreateTransform(DbgThread(), hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), hGray); cmsCloseProfile(DbgThread(), hLab);
+ xform = cmsCreateTransform(ContextID, hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ContextID, hGray); cmsCloseProfile(ContextID, hLab);
- if (!CheckOutGray(xform, 0, 0)) return 0;
- if (!CheckOutGray(xform, 100, 255)) return 0;
+ if (!CheckOutGray(ContextID, xform, 0, 0)) return 0;
+ if (!CheckOutGray(ContextID, xform, 100, 255)) return 0;
for (i=0; i < 100; i++) {
@@ -7109,32 +7101,32 @@ cmsInt32Number CheckLabOutputGray(void)
g = (cmsUInt8Number) floor(i * 255.0 / 100.0 + 0.5);
- if (!CheckOutGray(xform, i, g)) return 0;
+ if (!CheckOutGray(ContextID, xform, i, g)) return 0;
}
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
return 1;
}
static
-cmsInt32Number CheckV4gamma(void)
+cmsInt32Number CheckV4gamma(cmsContext ContextID)
{
cmsHPROFILE h;
cmsUInt16Number Lin[] = {0, 0xffff};
- cmsToneCurve*g = cmsBuildTabulatedToneCurve16(DbgThread(), 2, Lin);
+ cmsToneCurve*g = cmsBuildTabulatedToneCurve16(ContextID, 2, Lin);
- h = cmsOpenProfileFromFile(DbgThread(), "v4gamma.icc", "w");
+ h = cmsOpenProfileFromFile(ContextID, "v4gamma.icc", "w");
if (h == NULL) return 0;
- cmsSetProfileVersion(DbgThread(), h, 4.3);
+ cmsSetProfileVersion(ContextID, h, 4.3);
- if (!cmsWriteTag(DbgThread(), h, cmsSigGrayTRCTag, g)) return 0;
- cmsCloseProfile(DbgThread(), h);
+ if (!cmsWriteTag(ContextID, h, cmsSigGrayTRCTag, g)) return 0;
+ cmsCloseProfile(ContextID, h);
- cmsFreeToneCurve(DbgThread(), g);
+ cmsFreeToneCurve(ContextID, g);
remove("v4gamma.icc");
return 1;
}
@@ -7143,7 +7135,7 @@ cmsInt32Number CheckV4gamma(void)
// Gamut descriptor routines
static
-cmsInt32Number CheckGBD(void)
+cmsInt32Number CheckGBD(cmsContext ContextID)
{
cmsCIELab Lab;
cmsHANDLE h;
@@ -7152,7 +7144,7 @@ cmsInt32Number CheckGBD(void)
cmsHPROFILE hLab, hsRGB;
cmsHTRANSFORM xform;
- h = cmsGBDAlloc(DbgThread());
+ h = cmsGBDAlloc(ContextID);
if (h == NULL) return 0;
// Fill all Lab gamut as valid
@@ -7165,12 +7157,12 @@ cmsInt32Number CheckGBD(void)
Lab.L = L;
Lab.a = a;
Lab.b = b;
- if (!cmsGDBAddPoint(DbgThread(), h, &Lab)) return 0;
+ if (!cmsGDBAddPoint(ContextID, h, &Lab)) return 0;
}
// Complete boundaries
SubTest("computing Lab gamut");
- if (!cmsGDBCompute(DbgThread(), h, 0)) return 0;
+ if (!cmsGDBCompute(ContextID, h, 0)) return 0;
// All points should be inside gamut
@@ -7182,21 +7174,21 @@ cmsInt32Number CheckGBD(void)
Lab.L = L;
Lab.a = a;
Lab.b = b;
- if (!cmsGDBCheckPoint(DbgThread(), h, &Lab)) {
+ if (!cmsGDBCheckPoint(ContextID, h, &Lab)) {
return 0;
}
}
- cmsGBDFree(DbgThread(), h);
+ cmsGBDFree(ContextID, h);
// Now for sRGB
SubTest("checking sRGB gamut");
- h = cmsGBDAlloc(DbgThread());
- hsRGB = cmsCreate_sRGBProfile(DbgThread());
- hLab = cmsCreateLab4Profile(DbgThread(), NULL);
+ h = cmsGBDAlloc(ContextID);
+ hsRGB = cmsCreate_sRGBProfile(ContextID);
+ hLab = cmsCreateLab4Profile(ContextID, NULL);
- xform = cmsCreateTransform(DbgThread(), hsRGB, TYPE_RGB_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE);
- cmsCloseProfile(DbgThread(), hsRGB); cmsCloseProfile(DbgThread(), hLab);
+ xform = cmsCreateTransform(ContextID, hsRGB, TYPE_RGB_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(ContextID, hsRGB); cmsCloseProfile(ContextID, hLab);
for (r1=0; r1 < 256; r1 += 5) {
@@ -7210,12 +7202,12 @@ cmsInt32Number CheckGBD(void)
rgb[1] = (cmsUInt8Number) g1;
rgb[2] = (cmsUInt8Number) b1;
- cmsDoTransform(DbgThread(), xform, rgb, &Lab, 1);
+ cmsDoTransform(ContextID, xform, rgb, &Lab, 1);
// if (fabs(Lab.b) < 20 && Lab.a > 0) continue;
- if (!cmsGDBAddPoint(DbgThread(), h, &Lab)) {
- cmsGBDFree(DbgThread(), h);
+ if (!cmsGDBAddPoint(ContextID, h, &Lab)) {
+ cmsGBDFree(ContextID, h);
return 0;
}
@@ -7224,7 +7216,7 @@ cmsInt32Number CheckGBD(void)
}
- if (!cmsGDBCompute(DbgThread(), h, 0)) return 0;
+ if (!cmsGDBCompute(ContextID, h, 0)) return 0;
// cmsGBDdumpVRML(h, "c:\\colormaps\\lab.wrl");
for (r1=10; r1 < 200; r1 += 10) {
@@ -7238,22 +7230,22 @@ cmsInt32Number CheckGBD(void)
rgb[1] = (cmsUInt8Number) g1;
rgb[2] = (cmsUInt8Number) b1;
- cmsDoTransform(DbgThread(), xform, rgb, &Lab, 1);
- if (!cmsGDBCheckPoint(DbgThread(), h, &Lab)) {
+ cmsDoTransform(ContextID, xform, rgb, &Lab, 1);
+ if (!cmsGDBCheckPoint(ContextID, h, &Lab)) {
- cmsDeleteTransform(DbgThread(), xform);
- cmsGBDFree(DbgThread(), h);
+ cmsDeleteTransform(ContextID, xform);
+ cmsGBDFree(ContextID, h);
return 0;
}
}
}
- cmsDeleteTransform(DbgThread(), xform);
- cmsGBDFree(DbgThread(), h);
+ cmsDeleteTransform(ContextID, xform);
+ cmsGBDFree(ContextID, h);
SubTest("checking LCh chroma ring");
- h = cmsGBDAlloc(DbgThread());
+ h = cmsGBDAlloc(ContextID);
for (r1=0; r1 < 360; r1++) {
@@ -7264,43 +7256,43 @@ cmsInt32Number CheckGBD(void)
LCh.C = 60;
LCh.h = r1;
- cmsLCh2Lab(DbgThread(), &Lab, &LCh);
- if (!cmsGDBAddPoint(DbgThread(), h, &Lab)) {
- cmsGBDFree(DbgThread(), h);
+ cmsLCh2Lab(ContextID, &Lab, &LCh);
+ if (!cmsGDBAddPoint(ContextID, h, &Lab)) {
+ cmsGBDFree(ContextID, h);
return 0;
}
}
- if (!cmsGDBCompute(DbgThread(), h, 0)) return 0;
+ if (!cmsGDBCompute(ContextID, h, 0)) return 0;
- cmsGBDFree(DbgThread(), h);
+ cmsGBDFree(ContextID, h);
return 1;
}
static
-int CheckMD5(void)
+int CheckMD5(cmsContext ContextID)
{
_cmsICCPROFILE* h;
- cmsHPROFILE pProfile = cmsOpenProfileFromFile(DbgThread(), "sRGBlcms2.icc", "r");
+ cmsHPROFILE pProfile = cmsOpenProfileFromFile(ContextID, "sRGBlcms2.icc", "r");
cmsProfileID ProfileID1, ProfileID2, ProfileID3, ProfileID4;
h =(_cmsICCPROFILE*) pProfile;
- if (cmsMD5computeID(DbgThread(), pProfile)) cmsGetHeaderProfileID(DbgThread(), pProfile, ProfileID1.ID8);
- if (cmsMD5computeID(DbgThread(), pProfile)) cmsGetHeaderProfileID(DbgThread(), pProfile,ProfileID2.ID8);
+ if (cmsMD5computeID(ContextID, pProfile)) cmsGetHeaderProfileID(ContextID, pProfile, ProfileID1.ID8);
+ if (cmsMD5computeID(ContextID, pProfile)) cmsGetHeaderProfileID(ContextID, pProfile,ProfileID2.ID8);
- cmsCloseProfile(DbgThread(), pProfile);
+ cmsCloseProfile(ContextID, pProfile);
- pProfile = cmsOpenProfileFromFile(DbgThread(), "sRGBlcms2.icc", "r");
+ pProfile = cmsOpenProfileFromFile(ContextID, "sRGBlcms2.icc", "r");
h =(_cmsICCPROFILE*) pProfile;
- if (cmsMD5computeID(DbgThread(), pProfile)) cmsGetHeaderProfileID(DbgThread(), pProfile, ProfileID3.ID8);
- if (cmsMD5computeID(DbgThread(), pProfile)) cmsGetHeaderProfileID(DbgThread(), pProfile,ProfileID4.ID8);
+ if (cmsMD5computeID(ContextID, pProfile)) cmsGetHeaderProfileID(ContextID, pProfile, ProfileID3.ID8);
+ if (cmsMD5computeID(ContextID, pProfile)) cmsGetHeaderProfileID(ContextID, pProfile,ProfileID4.ID8);
- cmsCloseProfile(DbgThread(), pProfile);
+ cmsCloseProfile(ContextID, pProfile);
return ((memcmp(ProfileID1.ID8, ProfileID3.ID8, sizeof(ProfileID1)) == 0) &&
(memcmp(ProfileID2.ID8, ProfileID4.ID8, sizeof(ProfileID2)) == 0));
@@ -7309,47 +7301,47 @@ int CheckMD5(void)
static
-int CheckLinking(void)
+int CheckLinking(cmsContext ContextID)
{
cmsHPROFILE h;
cmsPipeline * pipeline;
cmsStage *stageBegin, *stageEnd;
// Create a CLUT based profile
- h = cmsCreateInkLimitingDeviceLink(DbgThread(), cmsSigCmykData, 150);
+ h = cmsCreateInkLimitingDeviceLink(ContextID, cmsSigCmykData, 150);
// link a second tag
- cmsLinkTag(DbgThread(), h, cmsSigAToB1Tag, cmsSigAToB0Tag);
+ cmsLinkTag(ContextID, h, cmsSigAToB1Tag, cmsSigAToB0Tag);
// Save the linked devicelink
- if (!cmsSaveProfileToFile(DbgThread(), h, "lcms2link.icc")) return 0;
- cmsCloseProfile(DbgThread(), h);
+ if (!cmsSaveProfileToFile(ContextID, h, "lcms2link.icc")) return 0;
+ cmsCloseProfile(ContextID, h);
// Now open the profile and read the pipeline
- h = cmsOpenProfileFromFile(DbgThread(), "lcms2link.icc", "r");
+ h = cmsOpenProfileFromFile(ContextID, "lcms2link.icc", "r");
if (h == NULL) return 0;
- pipeline = (cmsPipeline*) cmsReadTag(DbgThread(), h, cmsSigAToB1Tag);
+ pipeline = (cmsPipeline*) cmsReadTag(ContextID, h, cmsSigAToB1Tag);
if (pipeline == NULL)
{
return 0;
}
- pipeline = cmsPipelineDup(DbgThread(), pipeline);
+ pipeline = cmsPipelineDup(ContextID, pipeline);
// extract stage from pipe line
- cmsPipelineUnlinkStage(DbgThread(), pipeline, cmsAT_BEGIN, &stageBegin);
- cmsPipelineUnlinkStage(DbgThread(), pipeline, cmsAT_END, &stageEnd);
- cmsPipelineInsertStage(DbgThread(), pipeline, cmsAT_END, stageEnd);
- cmsPipelineInsertStage(DbgThread(), pipeline, cmsAT_BEGIN, stageBegin);
+ cmsPipelineUnlinkStage(ContextID, pipeline, cmsAT_BEGIN, &stageBegin);
+ cmsPipelineUnlinkStage(ContextID, pipeline, cmsAT_END, &stageEnd);
+ cmsPipelineInsertStage(ContextID, pipeline, cmsAT_END, stageEnd);
+ cmsPipelineInsertStage(ContextID, pipeline, cmsAT_BEGIN, stageBegin);
- if (cmsTagLinkedTo(DbgThread(), h, cmsSigAToB1Tag) != cmsSigAToB0Tag) return 0;
+ if (cmsTagLinkedTo(ContextID, h, cmsSigAToB1Tag) != cmsSigAToB0Tag) return 0;
- cmsWriteTag(DbgThread(), h, cmsSigAToB0Tag, pipeline);
- cmsPipelineFree(DbgThread(), pipeline);
+ cmsWriteTag(ContextID, h, cmsSigAToB0Tag, pipeline);
+ cmsPipelineFree(ContextID, pipeline);
- if (!cmsSaveProfileToFile(DbgThread(), h, "lcms2link2.icc")) return 0;
- cmsCloseProfile(DbgThread(), h);
+ if (!cmsSaveProfileToFile(ContextID, h, "lcms2link2.icc")) return 0;
+ cmsCloseProfile(ContextID, h);
return 1;
@@ -7361,51 +7353,50 @@ int CheckLinking(void)
// Created by Paul Miller on 30/08/2016.
//
static
-cmsHPROFILE IdentityMatrixProfile( cmsColorSpaceSignature dataSpace)
+cmsHPROFILE IdentityMatrixProfile(cmsContext ctx, cmsColorSpaceSignature dataSpace)
{
- cmsContext ctx = 0;
cmsVEC3 zero = {{0,0,0}};
cmsMAT3 identity;
cmsPipeline* forward;
cmsPipeline* reverse;
- cmsHPROFILE identityProfile = cmsCreateProfilePlaceholder( ctx);
+ cmsHPROFILE identityProfile = cmsCreateProfilePlaceholder(ctx);
- cmsSetProfileVersion(DbgThread(), identityProfile, 4.3);
+ cmsSetProfileVersion(ctx, identityProfile, 4.3);
- cmsSetDeviceClass(DbgThread(), identityProfile, cmsSigColorSpaceClass);
- cmsSetColorSpace(DbgThread(), identityProfile, dataSpace);
- cmsSetPCS(DbgThread(), identityProfile, cmsSigXYZData);
+ cmsSetDeviceClass(ctx, identityProfile, cmsSigColorSpaceClass);
+ cmsSetColorSpace(ctx, identityProfile, dataSpace);
+ cmsSetPCS(ctx, identityProfile, cmsSigXYZData);
- cmsSetHeaderRenderingIntent(DbgThread(), identityProfile, INTENT_RELATIVE_COLORIMETRIC);
+ cmsSetHeaderRenderingIntent(ctx, identityProfile, INTENT_RELATIVE_COLORIMETRIC);
- cmsWriteTag(DbgThread(), identityProfile, cmsSigMediaWhitePointTag, cmsD50_XYZ(DbgThread()));
+ cmsWriteTag(ctx, identityProfile, cmsSigMediaWhitePointTag, cmsD50_XYZ(ctx));
- _cmsMAT3identity(DbgThread(), &identity);
+ _cmsMAT3identity(ctx, &identity);
// build forward transform.... (RGB to PCS)
- forward = cmsPipelineAlloc( 0, 3, 3);
- cmsPipelineInsertStage(DbgThread(), forward, cmsAT_END, cmsStageAllocMatrix( ctx, 3, 3, (cmsFloat64Number*)&identity, (cmsFloat64Number*)&zero));
- cmsWriteTag(DbgThread(), identityProfile, cmsSigDToB1Tag, forward);
+ forward = cmsPipelineAlloc(ctx, 3, 3);
+ cmsPipelineInsertStage(ctx, forward, cmsAT_END, cmsStageAllocMatrix( ctx, 3, 3, (cmsFloat64Number*)&identity, (cmsFloat64Number*)&zero));
+ cmsWriteTag(ctx, identityProfile, cmsSigDToB1Tag, forward);
- cmsPipelineFree(DbgThread(), forward);
+ cmsPipelineFree(ctx, forward);
- reverse = cmsPipelineAlloc( 0, 3, 3);
- cmsPipelineInsertStage(DbgThread(), reverse, cmsAT_END, cmsStageAllocMatrix( ctx, 3, 3, (cmsFloat64Number*)&identity, (cmsFloat64Number*)&zero));
- cmsWriteTag(DbgThread(), identityProfile, cmsSigBToD1Tag, reverse);
+ reverse = cmsPipelineAlloc(ctx, 3, 3);
+ cmsPipelineInsertStage(ctx, reverse, cmsAT_END, cmsStageAllocMatrix( ctx, 3, 3, (cmsFloat64Number*)&identity, (cmsFloat64Number*)&zero));
+ cmsWriteTag(ctx, identityProfile, cmsSigBToD1Tag, reverse);
- cmsPipelineFree(DbgThread(), reverse);
+ cmsPipelineFree(ctx, reverse);
return identityProfile;
}
static
-cmsInt32Number CheckFloatXYZ(void)
+cmsInt32Number CheckFloatXYZ(cmsContext ctx)
{
cmsHPROFILE input;
- cmsHPROFILE xyzProfile = cmsCreateXYZProfile(DbgThread());
+ cmsHPROFILE xyzProfile = cmsCreateXYZProfile(ctx);
cmsHTRANSFORM xform;
cmsFloat32Number in[4];
cmsFloat32Number out[4];
@@ -7416,13 +7407,13 @@ cmsInt32Number CheckFloatXYZ(void)
in[3] = 0.5;
// RGB to XYZ
- input = IdentityMatrixProfile( cmsSigRgbData);
+ input = IdentityMatrixProfile(ctx, cmsSigRgbData);
- xform = cmsCreateTransform(DbgThread(), input, TYPE_RGB_FLT, xyzProfile, TYPE_XYZ_FLT, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), input);
+ xform = cmsCreateTransform(ctx, input, TYPE_RGB_FLT, xyzProfile, TYPE_XYZ_FLT, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ctx, input);
- cmsDoTransform(DbgThread(), xform, in, out, 1);
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDoTransform(ctx, xform, in, out, 1);
+ cmsDeleteTransform(ctx, xform);
if (!IsGoodVal("Float RGB->XYZ", in[0], out[0], FLOAT_PRECISSION) ||
!IsGoodVal("Float RGB->XYZ", in[1], out[1], FLOAT_PRECISSION) ||
@@ -7431,15 +7422,15 @@ cmsInt32Number CheckFloatXYZ(void)
// XYZ to XYZ
- input = IdentityMatrixProfile( cmsSigXYZData);
+ input = IdentityMatrixProfile(ctx, cmsSigXYZData);
- xform = cmsCreateTransform(DbgThread(), input, TYPE_XYZ_FLT, xyzProfile, TYPE_XYZ_FLT, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), input);
+ xform = cmsCreateTransform(ctx, input, TYPE_XYZ_FLT, xyzProfile, TYPE_XYZ_FLT, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ctx, input);
- cmsDoTransform(DbgThread(), xform, in, out, 1);
+ cmsDoTransform(ctx, xform, in, out, 1);
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ctx, xform);
if (!IsGoodVal("Float XYZ->XYZ", in[0], out[0], FLOAT_PRECISSION) ||
!IsGoodVal("Float XYZ->XYZ", in[1], out[1], FLOAT_PRECISSION) ||
@@ -7447,17 +7438,17 @@ cmsInt32Number CheckFloatXYZ(void)
return 0;
- input = IdentityMatrixProfile( cmsSigXYZData);
+ input = IdentityMatrixProfile(ctx, cmsSigXYZData);
# define TYPE_XYZA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4))
- xform = cmsCreateTransform(DbgThread(), input, TYPE_XYZA_FLT, xyzProfile, TYPE_XYZA_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_COPY_ALPHA);
- cmsCloseProfile(DbgThread(), input);
+ xform = cmsCreateTransform(ctx, input, TYPE_XYZA_FLT, xyzProfile, TYPE_XYZA_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_COPY_ALPHA);
+ cmsCloseProfile(ctx, input);
- cmsDoTransform(DbgThread(), xform, in, out, 1);
+ cmsDoTransform(ctx, xform, in, out, 1);
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ctx, xform);
if (!IsGoodVal("Float XYZA->XYZA", in[0], out[0], FLOAT_PRECISSION) ||
!IsGoodVal("Float XYZA->XYZA", in[1], out[1], FLOAT_PRECISSION) ||
@@ -7467,14 +7458,14 @@ cmsInt32Number CheckFloatXYZ(void)
// XYZ to RGB
- input = IdentityMatrixProfile( cmsSigRgbData);
+ input = IdentityMatrixProfile(ctx, cmsSigRgbData);
- xform = cmsCreateTransform(DbgThread(), xyzProfile, TYPE_XYZ_FLT, input, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), input);
+ xform = cmsCreateTransform(ctx, xyzProfile, TYPE_XYZ_FLT, input, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ctx, input);
- cmsDoTransform(DbgThread(), xform, in, out, 1);
+ cmsDoTransform(ctx, xform, in, out, 1);
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ctx, xform);
if (!IsGoodVal("Float XYZ->RGB", in[0], out[0], FLOAT_PRECISSION) ||
!IsGoodVal("Float XYZ->RGB", in[1], out[1], FLOAT_PRECISSION) ||
@@ -7485,21 +7476,21 @@ cmsInt32Number CheckFloatXYZ(void)
// Now the optimizer should remove a stage
// XYZ to RGB
- input = IdentityMatrixProfile( cmsSigRgbData);
+ input = IdentityMatrixProfile(ctx, cmsSigRgbData);
- xform = cmsCreateTransform(DbgThread(), input, TYPE_RGB_FLT, input, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0);
- cmsCloseProfile(DbgThread(), input);
+ xform = cmsCreateTransform(ctx, input, TYPE_RGB_FLT, input, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(ctx, input);
- cmsDoTransform(DbgThread(), xform, in, out, 1);
+ cmsDoTransform(ctx, xform, in, out, 1);
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ctx, xform);
if (!IsGoodVal("Float RGB->RGB", in[0], out[0], FLOAT_PRECISSION) ||
!IsGoodVal("Float RGB->RGB", in[1], out[1], FLOAT_PRECISSION) ||
!IsGoodVal("Float RGB->RGB", in[2], out[2], FLOAT_PRECISSION))
return 0;
- cmsCloseProfile(DbgThread(), xyzProfile);
+ cmsCloseProfile(ctx, xyzProfile);
return 1;
@@ -7523,13 +7514,13 @@ Bug reported
*/
static
-cmsInt32Number ChecksRGB2LabFLT(void)
+cmsInt32Number ChecksRGB2LabFLT(cmsContext ctx)
{
- cmsHPROFILE hSRGB = cmsCreate_sRGBProfile(DbgThread());
- cmsHPROFILE hLab = cmsCreateLab4Profile(DbgThread(), NULL);
+ cmsHPROFILE hSRGB = cmsCreate_sRGBProfile(ctx);
+ cmsHPROFILE hLab = cmsCreateLab4Profile(ctx, NULL);
- cmsHTRANSFORM xform1 = cmsCreateTransform(DbgThread(), hSRGB, TYPE_RGBA_FLT, hLab, TYPE_LabA_FLT, 0, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE);
- cmsHTRANSFORM xform2 = cmsCreateTransform(DbgThread(), hLab, TYPE_LabA_FLT, hSRGB, TYPE_RGBA_FLT, 0, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE);
+ cmsHTRANSFORM xform1 = cmsCreateTransform(ctx, hSRGB, TYPE_RGBA_FLT, hLab, TYPE_LabA_FLT, 0, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE);
+ cmsHTRANSFORM xform2 = cmsCreateTransform(ctx, hLab, TYPE_LabA_FLT, hSRGB, TYPE_RGBA_FLT, 0, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE);
cmsFloat32Number RGBA1[4], RGBA2[4], LabA[4];
int i;
@@ -7542,8 +7533,8 @@ cmsInt32Number ChecksRGB2LabFLT(void)
RGBA1[2] = i / 100.0F;
RGBA1[3] = 0;
- cmsDoTransform(DbgThread(), xform1, RGBA1, LabA, 1);
- cmsDoTransform(DbgThread(), xform2, LabA, RGBA2, 1);
+ cmsDoTransform(ctx, xform1, RGBA1, LabA, 1);
+ cmsDoTransform(ctx, xform2, LabA, RGBA2, 1);
if (!IsGoodVal("Float RGB->RGB", RGBA1[0], RGBA2[0], FLOAT_PRECISSION) ||
!IsGoodVal("Float RGB->RGB", RGBA1[1], RGBA2[1], FLOAT_PRECISSION) ||
@@ -7552,10 +7543,10 @@ cmsInt32Number ChecksRGB2LabFLT(void)
}
- cmsDeleteTransform(DbgThread(), xform1);
- cmsDeleteTransform(DbgThread(), xform2);
- cmsCloseProfile(DbgThread(), hSRGB);
- cmsCloseProfile(DbgThread(), hLab);
+ cmsDeleteTransform(ctx, xform1);
+ cmsDeleteTransform(ctx, xform2);
+ cmsCloseProfile(ctx, hSRGB);
+ cmsCloseProfile(ctx, hLab);
return 1;
}
@@ -7578,7 +7569,7 @@ double Rec709(double L)
static
-cmsInt32Number CheckParametricRec709(void)
+cmsInt32Number CheckParametricRec709(cmsContext ContextID)
{
cmsFloat64Number params[7];
cmsToneCurve* t;
@@ -7592,23 +7583,23 @@ cmsInt32Number CheckParametricRec709(void)
params[5] = -0.099; /* e */
params[6] = 0.0; /* f */
- t = cmsBuildParametricToneCurve (NULL, 5, params);
+ t = cmsBuildParametricToneCurve (ContextID, 5, params);
for (i=0; i < 256; i++)
{
cmsFloat32Number n = (cmsFloat32Number) i / 255.0F;
- cmsUInt16Number f1 = (cmsUInt16Number) floor(255.0 * cmsEvalToneCurveFloat(DbgThread(), t, n) + 0.5);
+ cmsUInt16Number f1 = (cmsUInt16Number) floor(255.0 * cmsEvalToneCurveFloat(ContextID, t, n) + 0.5);
cmsUInt16Number f2 = (cmsUInt16Number) floor(255.0*Rec709((double) i / 255.0) + 0.5);
if (f1 != f2)
{
- cmsFreeToneCurve(DbgThread(), t);
+ cmsFreeToneCurve(ContextID, t);
return 0;
}
}
- cmsFreeToneCurve(DbgThread(), t);
+ cmsFreeToneCurve(ContextID, t);
return 1;
}
@@ -7622,7 +7613,7 @@ static cmsFloat32Number StraightLine( cmsFloat32Number x)
return (cmsFloat32Number) (0.1 + 0.9 * x);
}
-static cmsInt32Number TestCurve( const char* label, cmsToneCurve* curve, Function fn)
+static cmsInt32Number TestCurve(cmsContext ContextID, const char* label, cmsToneCurve* curve, Function fn)
{
cmsInt32Number ok = 1;
int i;
@@ -7630,7 +7621,7 @@ static cmsInt32Number TestCurve( const char* label, cmsToneCurve* curve, Functio
cmsFloat32Number x = (cmsFloat32Number)i / (kNumPoints*3 - 1);
cmsFloat32Number expectedY = fn(x);
- cmsFloat32Number out = cmsEvalToneCurveFloat(DbgThread(), curve, x);
+ cmsFloat32Number out = cmsEvalToneCurveFloat(ContextID, curve, x);
if (!IsGoodVal(label, expectedY, out, FLOAT_PRECISSION)) {
ok = 0;
@@ -7640,7 +7631,7 @@ static cmsInt32Number TestCurve( const char* label, cmsToneCurve* curve, Functio
}
static
-cmsInt32Number CheckFloatSamples(void)
+cmsInt32Number CheckFloatSamples(cmsContext ContextID)
{
cmsFloat32Number y[kNumPoints];
int i;
@@ -7653,15 +7644,15 @@ cmsInt32Number CheckFloatSamples(void)
y[i] = StraightLine(x);
}
- curve = cmsBuildTabulatedToneCurveFloat(NULL, kNumPoints, y);
- ok = TestCurve( "Float Samples", curve, StraightLine);
- cmsFreeToneCurve(DbgThread(), curve);
+ curve = cmsBuildTabulatedToneCurveFloat(ContextID, kNumPoints, y);
+ ok = TestCurve(ContextID, "Float Samples", curve, StraightLine);
+ cmsFreeToneCurve(ContextID, curve);
return ok;
}
static
-cmsInt32Number CheckFloatSegments(void)
+cmsInt32Number CheckFloatSegments(cmsContext ContextID)
{
cmsInt32Number ok = 1;
int i;
@@ -7706,18 +7697,18 @@ cmsInt32Number CheckFloatSegments(void)
Seg[2].Params[3] = 0.1f;
Seg[2].Params[4] = 0.0f;
- curve = cmsBuildSegmentedToneCurve(0, 3, Seg);
+ curve = cmsBuildSegmentedToneCurve(ContextID, 3, Seg);
- ok = TestCurve( "Float Segmented Curve", curve, StraightLine);
+ ok = TestCurve(ContextID, "Float Segmented Curve", curve, StraightLine);
- cmsFreeToneCurve(DbgThread(), curve);
+ cmsFreeToneCurve(ContextID, curve);
return ok;
}
static
-cmsInt32Number CheckReadRAW(void)
+cmsInt32Number CheckReadRAW(cmsContext ContextID)
{
cmsInt32Number tag_size, tag_size1;
char buffer[4];
@@ -7725,15 +7716,15 @@ cmsInt32Number CheckReadRAW(void)
SubTest("RAW read on on-disk");
- hProfile = cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r");
+ hProfile = cmsOpenProfileFromFile(ContextID, "test1.icc", "r");
if (hProfile == NULL)
return 0;
- tag_size = cmsReadRawTag(DbgThread(), hProfile, cmsSigGamutTag, buffer, 4);
- tag_size1 = cmsReadRawTag(DbgThread(), hProfile, cmsSigGamutTag, NULL, 0);
+ tag_size = cmsReadRawTag(ContextID, hProfile, cmsSigGamutTag, buffer, 4);
+ tag_size1 = cmsReadRawTag(ContextID, hProfile, cmsSigGamutTag, NULL, 0);
- cmsCloseProfile(DbgThread(), hProfile);
+ cmsCloseProfile(ContextID, hProfile);
if (tag_size != 4)
return 0;
@@ -7742,11 +7733,11 @@ cmsInt32Number CheckReadRAW(void)
return 0;
SubTest("RAW read on in-memory created profiles");
- hProfile = cmsCreate_sRGBProfile(DbgThread());
- tag_size = cmsReadRawTag(DbgThread(), hProfile, cmsSigGreenColorantTag, buffer, 4);
- tag_size1 = cmsReadRawTag(DbgThread(), hProfile, cmsSigGreenColorantTag, NULL, 0);
+ hProfile = cmsCreate_sRGBProfile(ContextID);
+ tag_size = cmsReadRawTag(ContextID, hProfile, cmsSigGreenColorantTag, buffer, 4);
+ tag_size1 = cmsReadRawTag(ContextID, hProfile, cmsSigGreenColorantTag, NULL, 0);
- cmsCloseProfile(DbgThread(), hProfile);
+ cmsCloseProfile(ContextID, hProfile);
if (tag_size != 4)
return 0;
@@ -7758,7 +7749,7 @@ cmsInt32Number CheckReadRAW(void)
static
-cmsInt32Number CheckMeta(void)
+cmsInt32Number CheckMeta(cmsContext ContextID)
{
char *data;
cmsHANDLE dict;
@@ -7768,20 +7759,20 @@ cmsInt32Number CheckMeta(void)
int rc;
/* open file */
- p = cmsOpenProfileFromFile(DbgThread(), "ibm-t61.icc", "r");
+ p = cmsOpenProfileFromFile(ContextID, "ibm-t61.icc", "r");
if (p == NULL) return 0;
/* read dictionary, but don't do anything with the value */
//COMMENT OUT THE NEXT TWO LINES AND IT WORKS FINE!!!
- dict = cmsReadTag(DbgThread(), p, cmsSigMetaTag);
+ dict = cmsReadTag(ContextID, p, cmsSigMetaTag);
if (dict == NULL) return 0;
/* serialize profile to memory */
- rc = cmsSaveProfileToMem(DbgThread(), p, NULL, &clen);
+ rc = cmsSaveProfileToMem(ContextID, p, NULL, &clen);
if (!rc) return 0;
data = (char*) malloc(clen);
- rc = cmsSaveProfileToMem(DbgThread(), p, data, &clen);
+ rc = cmsSaveProfileToMem(ContextID, p, data, &clen);
if (!rc) return 0;
/* write the memory blob to a file */
@@ -7791,39 +7782,39 @@ cmsInt32Number CheckMeta(void)
fclose(fp);
free(data);
- cmsCloseProfile(DbgThread(), p);
+ cmsCloseProfile(ContextID, p);
/* open newly created file and read metadata */
- p = cmsOpenProfileFromFile(DbgThread(), "new.icc", "r");
+ p = cmsOpenProfileFromFile(ContextID, "new.icc", "r");
//ERROR: Bad dictionary Name/Value
//ERROR: Corrupted tag 'meta'
//test: test.c:59: main: Assertion `dict' failed.
- dict = cmsReadTag(DbgThread(), p, cmsSigMetaTag);
+ dict = cmsReadTag(ContextID, p, cmsSigMetaTag);
if (dict == NULL) return 0;
- cmsCloseProfile(DbgThread(), p);
+ cmsCloseProfile(ContextID, p);
return 1;
}
// Bug on applying null transforms on floating point buffers
static
-cmsInt32Number CheckFloatNULLxform(void)
+cmsInt32Number CheckFloatNULLxform(cmsContext ContextID)
{
int i;
cmsFloat32Number in[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
cmsFloat32Number out[10];
- cmsHTRANSFORM xform = cmsCreateTransform(DbgThread(), NULL, TYPE_GRAY_FLT, NULL, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, cmsFLAGS_NULLTRANSFORM);
+ cmsHTRANSFORM xform = cmsCreateTransform(ContextID, NULL, TYPE_GRAY_FLT, NULL, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, cmsFLAGS_NULLTRANSFORM);
if (xform == NULL) {
Fail("Unable to create float null transform");
return 0;
}
- cmsDoTransform(DbgThread(), xform, in, out, 10);
+ cmsDoTransform(ContextID, xform, in, out, 10);
- cmsDeleteTransform(DbgThread(), xform);
+ cmsDeleteTransform(ContextID, xform);
for (i=0; i < 10; i++) {
if (!IsGoodVal("float nullxform", in[i], out[i], 0.001)) {
@@ -7836,36 +7827,36 @@ cmsInt32Number CheckFloatNULLxform(void)
}
static
-cmsInt32Number CheckRemoveTag(void)
+cmsInt32Number CheckRemoveTag(cmsContext ContextID)
{
cmsHPROFILE p;
cmsMLU *mlu;
int ret;
- p = cmsCreate_sRGBProfile(NULL);
+ p = cmsCreate_sRGBProfile(ContextID);
/* set value */
- mlu = cmsMLUalloc (NULL, 1);
- ret = cmsMLUsetASCII(DbgThread(), mlu, "en", "US", "bar");
+ mlu = cmsMLUalloc (ContextID, 1);
+ ret = cmsMLUsetASCII(ContextID, mlu, "en", "US", "bar");
if (!ret) return 0;
- ret = cmsWriteTag(DbgThread(), p, cmsSigDeviceMfgDescTag, mlu);
+ ret = cmsWriteTag(ContextID, p, cmsSigDeviceMfgDescTag, mlu);
if (!ret) return 0;
- cmsMLUfree(DbgThread(), mlu);
+ cmsMLUfree(ContextID, mlu);
/* remove the tag */
- ret = cmsWriteTag(DbgThread(), p, cmsSigDeviceMfgDescTag, NULL);
+ ret = cmsWriteTag(ContextID, p, cmsSigDeviceMfgDescTag, NULL);
if (!ret) return 0;
/* THIS EXPLODES */
- cmsCloseProfile(DbgThread(), p);
+ cmsCloseProfile(ContextID, p);
return 1;
}
static
-cmsInt32Number CheckMatrixSimplify(void)
+cmsInt32Number CheckMatrixSimplify(cmsContext ContextID)
{
cmsHPROFILE pIn;
@@ -7874,16 +7865,16 @@ cmsInt32Number CheckMatrixSimplify(void)
unsigned char buf[3] = { 127, 32, 64 };
- pIn = cmsCreate_sRGBProfile(DbgThread());
- pOut = cmsOpenProfileFromFile(DbgThread(), "ibm-t61.icc", "r");
+ pIn = cmsCreate_sRGBProfile(ContextID);
+ pOut = cmsOpenProfileFromFile(ContextID, "ibm-t61.icc", "r");
if (pIn == NULL || pOut == NULL)
return 0;
- t = cmsCreateTransform(DbgThread(), pIn, TYPE_RGB_8, pOut, TYPE_RGB_8, INTENT_PERCEPTUAL, 0);
- cmsDoTransformStride(DbgThread(), t, buf, buf, 1, 1);
- cmsDeleteTransform(DbgThread(), t);
- cmsCloseProfile(DbgThread(), pIn);
- cmsCloseProfile(DbgThread(), pOut);
+ t = cmsCreateTransform(ContextID, pIn, TYPE_RGB_8, pOut, TYPE_RGB_8, INTENT_PERCEPTUAL, 0);
+ cmsDoTransformStride(ContextID, t, buf, buf, 1, 1);
+ cmsDeleteTransform(ContextID, t);
+ cmsCloseProfile(ContextID, pIn);
+ cmsCloseProfile(ContextID, pOut);
return buf[0] == 144 && buf[1] == 0 && buf[2] == 69;
@@ -7892,7 +7883,7 @@ cmsInt32Number CheckMatrixSimplify(void)
static
-cmsInt32Number CheckTransformLineStride(void)
+cmsInt32Number CheckTransformLineStride(cmsContext ContextID)
{
cmsHPROFILE pIn;
@@ -7924,50 +7915,50 @@ cmsInt32Number CheckTransformLineStride(void)
memset(out, 0, sizeof(out));
- pIn = cmsCreate_sRGBProfile(DbgThread());
- pOut = cmsOpenProfileFromFile(DbgThread(), "ibm-t61.icc", "r");
+ pIn = cmsCreate_sRGBProfile(ContextID);
+ pOut = cmsOpenProfileFromFile(ContextID, "ibm-t61.icc", "r");
if (pIn == NULL || pOut == NULL)
return 0;
- t = cmsCreateTransform(DbgThread(), pIn, TYPE_RGB_8, pOut, TYPE_RGB_8, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA);
+ t = cmsCreateTransform(ContextID, pIn, TYPE_RGB_8, pOut, TYPE_RGB_8, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA);
- cmsDoTransformLineStride(DbgThread(), t, buf1, out, 2, 4, 7, 7, 0, 0);
- cmsDeleteTransform(DbgThread(), t);
+ cmsDoTransformLineStride(ContextID, t, buf1, out, 2, 4, 7, 7, 0, 0);
+ cmsDeleteTransform(ContextID, t);
if (memcmp(out, buf1, sizeof(buf1)) != 0) {
Fail("Failed transform line stride on RGB8");
- cmsCloseProfile(DbgThread(), pIn);
- cmsCloseProfile(DbgThread(), pOut);
+ cmsCloseProfile(ContextID, pIn);
+ cmsCloseProfile(ContextID, pOut);
return 0;
}
memset(out, 0, sizeof(out));
- t = cmsCreateTransform(DbgThread(), pIn, TYPE_RGBA_8, pOut, TYPE_RGBA_8, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA);
+ t = cmsCreateTransform(ContextID, pIn, TYPE_RGBA_8, pOut, TYPE_RGBA_8, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA);
- cmsDoTransformLineStride(DbgThread(), t, buf2, out, 2, 4, 9, 9, 0, 0);
+ cmsDoTransformLineStride(ContextID, t, buf2, out, 2, 4, 9, 9, 0, 0);
- cmsDeleteTransform(DbgThread(), t);
+ cmsDeleteTransform(ContextID, t);
if (memcmp(out, buf2, sizeof(buf2)) != 0) {
- cmsCloseProfile(DbgThread(), pIn);
- cmsCloseProfile(DbgThread(), pOut);
+ cmsCloseProfile(ContextID, pIn);
+ cmsCloseProfile(ContextID, pOut);
Fail("Failed transform line stride on RGBA8");
return 0;
}
memset(out, 0, sizeof(out));
- t = cmsCreateTransform(DbgThread(), pIn, TYPE_RGBA_16, pOut, TYPE_RGBA_16, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA);
+ t = cmsCreateTransform(ContextID, pIn, TYPE_RGBA_16, pOut, TYPE_RGBA_16, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA);
- cmsDoTransformLineStride(DbgThread(), t, buf3, out, 2, 4, 18, 18, 0, 0);
+ cmsDoTransformLineStride(ContextID, t, buf3, out, 2, 4, 18, 18, 0, 0);
- cmsDeleteTransform(DbgThread(), t);
+ cmsDeleteTransform(ContextID, t);
if (memcmp(out, buf3, sizeof(buf3)) != 0) {
- cmsCloseProfile(DbgThread(), pIn);
- cmsCloseProfile(DbgThread(), pOut);
+ cmsCloseProfile(ContextID, pIn);
+ cmsCloseProfile(ContextID, pOut);
Fail("Failed transform line stride on RGBA16");
return 0;
}
@@ -7977,42 +7968,42 @@ cmsInt32Number CheckTransformLineStride(void)
// From 8 to 16
- t = cmsCreateTransform(DbgThread(), pIn, TYPE_RGBA_8, pOut, TYPE_RGBA_16, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA);
+ t = cmsCreateTransform(ContextID, pIn, TYPE_RGBA_8, pOut, TYPE_RGBA_16, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA);
- cmsDoTransformLineStride(DbgThread(), t, buf2, out, 2, 4, 9, 18, 0, 0);
+ cmsDoTransformLineStride(ContextID, t, buf2, out, 2, 4, 9, 18, 0, 0);
- cmsDeleteTransform(DbgThread(), t);
+ cmsDeleteTransform(ContextID, t);
if (memcmp(out, buf3, sizeof(buf3)) != 0) {
- cmsCloseProfile(DbgThread(), pIn);
- cmsCloseProfile(DbgThread(), pOut);
+ cmsCloseProfile(ContextID, pIn);
+ cmsCloseProfile(ContextID, pOut);
Fail("Failed transform line stride on RGBA16");
return 0;
}
- cmsCloseProfile(DbgThread(), pIn);
- cmsCloseProfile(DbgThread(), pOut);
+ cmsCloseProfile(ContextID, pIn);
+ cmsCloseProfile(ContextID, pOut);
return 1;
}
static
-int CheckPlanar8opt(void)
+int CheckPlanar8opt(cmsContext ContextID)
{
- cmsHPROFILE aboveRGB = Create_AboveRGB();
- cmsHPROFILE sRGB = cmsCreate_sRGBProfile(DbgThread());
+ cmsHPROFILE aboveRGB = Create_AboveRGB(ContextID);
+ cmsHPROFILE sRGB = cmsCreate_sRGBProfile(ContextID);
- cmsHTRANSFORM transform = cmsCreateTransform(DbgThread(),
+ cmsHTRANSFORM transform = cmsCreateTransform(ContextID,
sRGB, TYPE_RGB_8_PLANAR,
aboveRGB, TYPE_RGB_8_PLANAR,
INTENT_PERCEPTUAL, 0);
- cmsDeleteTransform(DbgThread(), transform);
- cmsCloseProfile(DbgThread(), aboveRGB);
- cmsCloseProfile(DbgThread(), sRGB);
+ cmsDeleteTransform(ContextID, transform);
+ cmsCloseProfile(ContextID, aboveRGB);
+ cmsCloseProfile(ContextID, sRGB);
return 1;
}
@@ -8021,20 +8012,20 @@ int CheckPlanar8opt(void)
* Bug reported & fixed. Thanks to Kornel Lesinski for spotting this.
*/
static
-int CheckSE(void)
+int CheckSE(cmsContext ContextID)
{
- cmsHPROFILE input_profile = Create_AboveRGB();
- cmsHPROFILE output_profile = cmsCreate_sRGBProfile(DbgThread());
+ cmsHPROFILE input_profile = Create_AboveRGB(ContextID);
+ cmsHPROFILE output_profile = cmsCreate_sRGBProfile(ContextID);
- cmsHTRANSFORM tr = cmsCreateTransform(DbgThread(), input_profile, TYPE_RGBA_8, output_profile, TYPE_RGBA_16_SE, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_COPY_ALPHA);
+ cmsHTRANSFORM tr = cmsCreateTransform(ContextID, input_profile, TYPE_RGBA_8, output_profile, TYPE_RGBA_16_SE, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_COPY_ALPHA);
cmsUInt8Number rgba[4] = { 40, 41, 41, 0xfa };
cmsUInt16Number out[4];
- cmsDoTransform(DbgThread(), tr, rgba, out, 1);
- cmsCloseProfile(DbgThread(), input_profile);
- cmsCloseProfile(DbgThread(), output_profile);
- cmsDeleteTransform(DbgThread(), tr);
+ cmsDoTransform(ContextID, tr, rgba, out, 1);
+ cmsCloseProfile(ContextID, input_profile);
+ cmsCloseProfile(ContextID, output_profile);
+ cmsDeleteTransform(ContextID, tr);
if (out[0] != 0xf622 || out[1] != 0x7f24 || out[2] != 0x7f24)
return 0;
@@ -8046,7 +8037,7 @@ int CheckSE(void)
* Bug reported.
*/
static
-int CheckForgedMPE(void)
+int CheckForgedMPE(cmsContext ContextID)
{
cmsUInt32Number i;
cmsHPROFILE srcProfile;
@@ -8059,18 +8050,18 @@ int CheckForgedMPE(void)
cmsHTRANSFORM hTransform;
cmsUInt8Number output[4];
- srcProfile = cmsOpenProfileFromFile(DbgThread(), "bad_mpe.icc", "r");
+ srcProfile = cmsOpenProfileFromFile(ContextID, "bad_mpe.icc", "r");
if (!srcProfile)
return 0;
- dstProfile = cmsCreate_sRGBProfile(DbgThread());
+ dstProfile = cmsCreate_sRGBProfile(ContextID);
if (!dstProfile) {
- cmsCloseProfile(DbgThread(), srcProfile);
+ cmsCloseProfile(ContextID, srcProfile);
return 0;
}
- srcCS = cmsGetColorSpace(DbgThread(), srcProfile);
- nSrcComponents = cmsChannelsOf(DbgThread(), srcCS);
+ srcCS = cmsGetColorSpace(ContextID, srcProfile);
+ nSrcComponents = cmsChannelsOf(ContextID, srcCS);
if (srcCS == cmsSigLabData) {
srcFormat =
@@ -8081,14 +8072,14 @@ int CheckForgedMPE(void)
COLORSPACE_SH(PT_ANY) | CHANNELS_SH(nSrcComponents) | BYTES_SH(1);
}
- cmsSetLogErrorHandler(DbgThread(), ErrorReportingFunction);
+ cmsSetLogErrorHandler(ContextID, ErrorReportingFunction);
- hTransform = cmsCreateTransform(DbgThread(), srcProfile, srcFormat, dstProfile,
+ hTransform = cmsCreateTransform(ContextID, srcProfile, srcFormat, dstProfile,
TYPE_BGR_8, intent, flags);
- cmsCloseProfile(DbgThread(), srcProfile);
- cmsCloseProfile(DbgThread(), dstProfile);
+ cmsCloseProfile(ContextID, srcProfile);
+ cmsCloseProfile(ContextID, dstProfile);
- cmsSetLogErrorHandler(DbgThread(), FatalErrorQuit);
+ cmsSetLogErrorHandler(ContextID, FatalErrorQuit);
// Should report error
if (!TrappedError) return 0;
@@ -8103,15 +8094,15 @@ int CheckForgedMPE(void)
double input[128];
for (i = 0; i < nSrcComponents; i++)
input[i] = 0.5f;
- cmsDoTransform(DbgThread(), hTransform, input, output, 1);
+ cmsDoTransform(ContextID, hTransform, input, output, 1);
}
else {
cmsUInt8Number input[128];
for (i = 0; i < nSrcComponents; i++)
input[i] = 128;
- cmsDoTransform(DbgThread(), hTransform, input, output, 1);
+ cmsDoTransform(ContextID, hTransform, input, output, 1);
}
- cmsDeleteTransform(DbgThread(), hTransform);
+ cmsDeleteTransform(ContextID, hTransform);
return 0;
}
@@ -8123,16 +8114,16 @@ int CheckForgedMPE(void)
* Thanks to Richard Hughes for providing the test
*/
static
-int CheckProofingIntersection(void)
+int CheckProofingIntersection(cmsContext ContextID)
{
cmsHPROFILE profile_null, hnd1, hnd2;
cmsHTRANSFORM transform;
- hnd1 = cmsCreate_sRGBProfile(DbgThread());
- hnd2 = Create_AboveRGB();
+ hnd1 = cmsCreate_sRGBProfile(ContextID);
+ hnd2 = Create_AboveRGB(ContextID);
- profile_null = cmsCreateNULLProfile(DbgThread());
- transform = cmsCreateProofingTransform(DbgThread(),
+ profile_null = cmsCreateNULLProfile(ContextID);
+ transform = cmsCreateProofingTransform(ContextID,
hnd1,
TYPE_RGB_FLT,
profile_null,
@@ -8143,14 +8134,14 @@ int CheckProofingIntersection(void)
cmsFLAGS_GAMUTCHECK |
cmsFLAGS_SOFTPROOFING);
- cmsCloseProfile(DbgThread(), hnd1);
- cmsCloseProfile(DbgThread(), hnd2);
- cmsCloseProfile(DbgThread(), profile_null);
+ cmsCloseProfile(ContextID, hnd1);
+ cmsCloseProfile(ContextID, hnd2);
+ cmsCloseProfile(ContextID, profile_null);
// Failed?
if (transform == NULL) return 0;
- cmsDeleteTransform(DbgThread(), transform);
+ cmsDeleteTransform(ContextID, transform);
return 1;
}
@@ -8185,7 +8176,7 @@ void PrintPerformance(cmsUInt32Number Bytes, cmsUInt32Number SizeOfPixel, cmsFlo
static
-void SpeedTest32bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
+void SpeedTest32bits(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
{
cmsInt32Number r, g, b, j;
clock_t atime;
@@ -8199,10 +8190,10 @@ void SpeedTest32bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE
if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
Die("Unable to open profiles");
- hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, TYPE_RGBA_FLT,
+ hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_RGBA_FLT,
hlcmsProfileOut, TYPE_RGBA_FLT, Intent, cmsFLAGS_NOCACHE);
- cmsCloseProfile(DbgThread(), hlcmsProfileIn);
- cmsCloseProfile(DbgThread(), hlcmsProfileOut);
+ cmsCloseProfile(ContextID, hlcmsProfileIn);
+ cmsCloseProfile(ContextID, hlcmsProfileOut);
NumPixels = 256 / Interval * 256 / Interval * 256 / Interval;
Mb = NumPixels * sizeof(Scanline_rgba32);
@@ -8227,19 +8218,19 @@ void SpeedTest32bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE
atime = clock();
- cmsDoTransform(DbgThread(), hlcmsxform, In, In, NumPixels);
+ cmsDoTransform(ContextID, hlcmsxform, In, In, NumPixels);
diff = clock() - atime;
free(In);
PrintPerformance(Mb, sizeof(Scanline_rgba32), diff);
- cmsDeleteTransform(DbgThread(), hlcmsxform);
+ cmsDeleteTransform(ContextID, hlcmsxform);
}
static
-void SpeedTest16bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
+void SpeedTest16bits(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
{
cmsInt32Number r, g, b, j;
clock_t atime;
@@ -8251,10 +8242,10 @@ void SpeedTest16bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE
if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
Die("Unable to open profiles");
- hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, TYPE_RGB_16,
+ hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_RGB_16,
hlcmsProfileOut, TYPE_RGB_16, Intent, cmsFLAGS_NOCACHE);
- cmsCloseProfile(DbgThread(), hlcmsProfileIn);
- cmsCloseProfile(DbgThread(), hlcmsProfileOut);
+ cmsCloseProfile(ContextID, hlcmsProfileIn);
+ cmsCloseProfile(ContextID, hlcmsProfileOut);
Mb = 256*256*256 * sizeof(Scanline_rgb16);
@@ -8277,19 +8268,19 @@ void SpeedTest16bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE
atime = clock();
- cmsDoTransform(DbgThread(), hlcmsxform, In, In, 256*256*256);
+ cmsDoTransform(ContextID, hlcmsxform, In, In, 256*256*256);
diff = clock() - atime;
free(In);
PrintPerformance(Mb, sizeof(Scanline_rgb16), diff);
- cmsDeleteTransform(DbgThread(), hlcmsxform);
+ cmsDeleteTransform(ContextID, hlcmsxform);
}
static
-void SpeedTest32bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+void SpeedTest32bitsCMYK(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
{
cmsInt32Number r, g, b, j;
clock_t atime;
@@ -8303,10 +8294,10 @@ void SpeedTest32bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO
if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
Die("Unable to open profiles");
- hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, TYPE_CMYK_FLT,
+ hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_CMYK_FLT,
hlcmsProfileOut, TYPE_CMYK_FLT, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
- cmsCloseProfile(DbgThread(), hlcmsProfileIn);
- cmsCloseProfile(DbgThread(), hlcmsProfileOut);
+ cmsCloseProfile(ContextID, hlcmsProfileIn);
+ cmsCloseProfile(ContextID, hlcmsProfileOut);
NumPixels = 256 / Interval * 256 / Interval * 256 / Interval;
Mb = NumPixels * sizeof(Scanline_rgba32);
@@ -8331,7 +8322,7 @@ void SpeedTest32bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO
atime = clock();
- cmsDoTransform(DbgThread(), hlcmsxform, In, In, NumPixels);
+ cmsDoTransform(ContextID, hlcmsxform, In, In, NumPixels);
diff = clock() - atime;
@@ -8339,13 +8330,13 @@ void SpeedTest32bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO
PrintPerformance(Mb, sizeof(Scanline_rgba32), diff);
- cmsDeleteTransform(DbgThread(), hlcmsxform);
+ cmsDeleteTransform(ContextID, hlcmsxform);
}
static
-void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+void SpeedTest16bitsCMYK(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
{
cmsInt32Number r, g, b, j;
clock_t atime;
@@ -8357,10 +8348,10 @@ void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO
if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
Die("Unable to open profiles");
- hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, TYPE_CMYK_16,
+ hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_CMYK_16,
hlcmsProfileOut, TYPE_CMYK_16, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
- cmsCloseProfile(DbgThread(), hlcmsProfileIn);
- cmsCloseProfile(DbgThread(), hlcmsProfileOut);
+ cmsCloseProfile(ContextID, hlcmsProfileIn);
+ cmsCloseProfile(ContextID, hlcmsProfileOut);
Mb = 256*256*256*sizeof(Scanline_rgba16);
@@ -8384,7 +8375,7 @@ void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO
atime = clock();
- cmsDoTransform(DbgThread(), hlcmsxform, In, In, 256*256*256);
+ cmsDoTransform(ContextID, hlcmsxform, In, In, 256*256*256);
diff = clock() - atime;
@@ -8392,13 +8383,13 @@ void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO
PrintPerformance(Mb, sizeof(Scanline_rgba16), diff);
- cmsDeleteTransform(DbgThread(), hlcmsxform);
+ cmsDeleteTransform(ContextID, hlcmsxform);
}
static
-void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
+void SpeedTest8bits(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
{
cmsInt32Number r, g, b, j;
clock_t atime;
@@ -8410,10 +8401,10 @@ void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE
if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
Die("Unable to open profiles");
- hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, TYPE_RGB_8,
+ hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_RGB_8,
hlcmsProfileOut, TYPE_RGB_8, Intent, cmsFLAGS_NOCACHE);
- cmsCloseProfile(DbgThread(), hlcmsProfileIn);
- cmsCloseProfile(DbgThread(), hlcmsProfileOut);
+ cmsCloseProfile(ContextID, hlcmsProfileIn);
+ cmsCloseProfile(ContextID, hlcmsProfileOut);
Mb = 256*256*256*sizeof(Scanline_rgb8);
@@ -8435,7 +8426,7 @@ void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE
atime = clock();
- cmsDoTransform(DbgThread(), hlcmsxform, In, In, 256*256*256);
+ cmsDoTransform(ContextID, hlcmsxform, In, In, 256*256*256);
diff = clock() - atime;
@@ -8443,13 +8434,13 @@ void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE
PrintPerformance(Mb, sizeof(Scanline_rgb8), diff);
- cmsDeleteTransform(DbgThread(), hlcmsxform);
+ cmsDeleteTransform(ContextID, hlcmsxform);
}
static
-void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+void SpeedTest8bitsCMYK(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
{
cmsInt32Number r, g, b, j;
clock_t atime;
@@ -8461,10 +8452,10 @@ void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF
if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
Die("Unable to open profiles");
- hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, TYPE_CMYK_8,
+ hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_CMYK_8,
hlcmsProfileOut, TYPE_CMYK_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
- cmsCloseProfile(DbgThread(), hlcmsProfileIn);
- cmsCloseProfile(DbgThread(), hlcmsProfileOut);
+ cmsCloseProfile(ContextID, hlcmsProfileIn);
+ cmsCloseProfile(ContextID, hlcmsProfileOut);
Mb = 256*256*256*sizeof(Scanline_rgba8);
@@ -8487,7 +8478,7 @@ void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF
atime = clock();
- cmsDoTransform(DbgThread(), hlcmsxform, In, In, 256*256*256);
+ cmsDoTransform(ContextID, hlcmsxform, In, In, 256*256*256);
diff = clock() - atime;
@@ -8496,13 +8487,13 @@ void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF
PrintPerformance(Mb, sizeof(Scanline_rgba8), diff);
- cmsDeleteTransform(DbgThread(), hlcmsxform);
+ cmsDeleteTransform(ContextID, hlcmsxform);
}
static
-void SpeedTest32bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
+void SpeedTest32bitsGray(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
{
cmsInt32Number r, g, b, j;
clock_t atime;
@@ -8516,10 +8507,10 @@ void SpeedTest32bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO
if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
Die("Unable to open profiles");
- hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn,
+ hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn,
TYPE_GRAY_FLT, hlcmsProfileOut, TYPE_GRAY_FLT, Intent, cmsFLAGS_NOCACHE);
- cmsCloseProfile(DbgThread(), hlcmsProfileIn);
- cmsCloseProfile(DbgThread(), hlcmsProfileOut);
+ cmsCloseProfile(ContextID, hlcmsProfileIn);
+ cmsCloseProfile(ContextID, hlcmsProfileOut);
NumPixels = 256 / Interval * 256 / Interval * 256 / Interval;
Mb = NumPixels * sizeof(cmsFloat32Number);
@@ -8540,18 +8531,18 @@ void SpeedTest32bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO
atime = clock();
- cmsDoTransform(DbgThread(), hlcmsxform, In, In, NumPixels);
+ cmsDoTransform(ContextID, hlcmsxform, In, In, NumPixels);
diff = clock() - atime;
free(In);
PrintPerformance(Mb, sizeof(cmsFloat32Number), diff);
- cmsDeleteTransform(DbgThread(), hlcmsxform);
+ cmsDeleteTransform(ContextID, hlcmsxform);
}
static
-void SpeedTest16bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
+void SpeedTest16bitsGray(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
{
cmsInt32Number r, g, b, j;
clock_t atime;
@@ -8563,10 +8554,10 @@ void SpeedTest16bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO
if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
Die("Unable to open profiles");
- hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn,
+ hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn,
TYPE_GRAY_16, hlcmsProfileOut, TYPE_GRAY_16, Intent, cmsFLAGS_NOCACHE);
- cmsCloseProfile(DbgThread(), hlcmsProfileIn);
- cmsCloseProfile(DbgThread(), hlcmsProfileOut);
+ cmsCloseProfile(ContextID, hlcmsProfileIn);
+ cmsCloseProfile(ContextID, hlcmsProfileOut);
Mb = 256*256*256 * sizeof(cmsUInt16Number);
In = (cmsUInt16Number *) malloc(Mb);
@@ -8585,18 +8576,18 @@ void SpeedTest16bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO
atime = clock();
- cmsDoTransform(DbgThread(), hlcmsxform, In, In, 256*256*256);
+ cmsDoTransform(ContextID, hlcmsxform, In, In, 256*256*256);
diff = clock() - atime;
free(In);
PrintPerformance(Mb, sizeof(cmsUInt16Number), diff);
- cmsDeleteTransform(DbgThread(), hlcmsxform);
+ cmsDeleteTransform(ContextID, hlcmsxform);
}
static
-void SpeedTest8bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
+void SpeedTest8bitsGray(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
{
cmsInt32Number r, g, b, j;
clock_t atime;
@@ -8609,10 +8600,10 @@ void SpeedTest8bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF
if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
Die("Unable to open profiles");
- hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn,
+ hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn,
TYPE_GRAY_8, hlcmsProfileOut, TYPE_GRAY_8, Intent, cmsFLAGS_NOCACHE);
- cmsCloseProfile(DbgThread(), hlcmsProfileIn);
- cmsCloseProfile(DbgThread(), hlcmsProfileOut);
+ cmsCloseProfile(ContextID, hlcmsProfileIn);
+ cmsCloseProfile(ContextID, hlcmsProfileOut);
Mb = 256*256*256;
In = (cmsUInt8Number*) malloc(Mb);
@@ -8631,191 +8622,191 @@ void SpeedTest8bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF
atime = clock();
- cmsDoTransform(DbgThread(), hlcmsxform, In, In, 256*256*256);
+ cmsDoTransform(ContextID, hlcmsxform, In, In, 256*256*256);
diff = clock() - atime;
free(In);
PrintPerformance(Mb, sizeof(cmsUInt8Number), diff);
- cmsDeleteTransform(DbgThread(), hlcmsxform);
+ cmsDeleteTransform(ContextID, hlcmsxform);
}
static
-cmsHPROFILE CreateCurves(void)
+cmsHPROFILE CreateCurves(cmsContext ContextID)
{
- cmsToneCurve* Gamma = cmsBuildGamma(DbgThread(), 1.1);
+ cmsToneCurve* Gamma = cmsBuildGamma(ContextID, 1.1);
cmsToneCurve* Transfer[3];
cmsHPROFILE h;
Transfer[0] = Transfer[1] = Transfer[2] = Gamma;
- h = cmsCreateLinearizationDeviceLink(DbgThread(), cmsSigRgbData, Transfer);
+ h = cmsCreateLinearizationDeviceLink(ContextID, cmsSigRgbData, Transfer);
- cmsFreeToneCurve(DbgThread(), Gamma);
+ cmsFreeToneCurve(ContextID, Gamma);
return h;
}
static
-void SpeedTest(void)
+void SpeedTest(cmsContext ContextID)
{
printf("\n\nP E R F O R M A N C E T E S T S\n");
printf( "=================================\n\n");
fflush(stdout);
- SpeedTest8bits("8 bits on CLUT profiles",
- cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "test3.icc", "r"),
+ SpeedTest8bits(ContextID, "8 bits on CLUT profiles",
+ cmsOpenProfileFromFile(ContextID, "test5.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "test3.icc", "r"),
INTENT_PERCEPTUAL);
- SpeedTest16bits("16 bits on CLUT profiles",
- cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "test3.icc", "r"), INTENT_PERCEPTUAL);
+ SpeedTest16bits(ContextID, "16 bits on CLUT profiles",
+ cmsOpenProfileFromFile(ContextID, "test5.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "test3.icc", "r"), INTENT_PERCEPTUAL);
- SpeedTest32bits("32 bits on CLUT profiles",
- cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "test3.icc", "r"), INTENT_PERCEPTUAL);
+ SpeedTest32bits(ContextID, "32 bits on CLUT profiles",
+ cmsOpenProfileFromFile(ContextID, "test5.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "test3.icc", "r"), INTENT_PERCEPTUAL);
printf("\n");
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- SpeedTest8bits("8 bits on Matrix-Shaper profiles",
- cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"),
+ SpeedTest8bits(ContextID, "8 bits on Matrix-Shaper profiles",
+ cmsOpenProfileFromFile(ContextID, "test5.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"),
INTENT_PERCEPTUAL);
- SpeedTest16bits("16 bits on Matrix-Shaper profiles",
- cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"),
+ SpeedTest16bits(ContextID, "16 bits on Matrix-Shaper profiles",
+ cmsOpenProfileFromFile(ContextID, "test5.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"),
INTENT_PERCEPTUAL);
- SpeedTest32bits("32 bits on Matrix-Shaper profiles",
- cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"),
+ SpeedTest32bits(ContextID, "32 bits on Matrix-Shaper profiles",
+ cmsOpenProfileFromFile(ContextID, "test5.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"),
INTENT_PERCEPTUAL);
printf("\n");
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- SpeedTest8bits("8 bits on SAME Matrix-Shaper profiles",
- cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"),
+ SpeedTest8bits(ContextID, "8 bits on SAME Matrix-Shaper profiles",
+ cmsOpenProfileFromFile(ContextID, "test5.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "test5.icc", "r"),
INTENT_PERCEPTUAL);
- SpeedTest16bits("16 bits on SAME Matrix-Shaper profiles",
- cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"),
+ SpeedTest16bits(ContextID, "16 bits on SAME Matrix-Shaper profiles",
+ cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"),
INTENT_PERCEPTUAL);
- SpeedTest32bits("32 bits on SAME Matrix-Shaper profiles",
- cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"),
+ SpeedTest32bits(ContextID, "32 bits on SAME Matrix-Shaper profiles",
+ cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"),
INTENT_PERCEPTUAL);
printf("\n");
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- SpeedTest8bits("8 bits on Matrix-Shaper profiles (AbsCol)",
- cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"),
+ SpeedTest8bits(ContextID, "8 bits on Matrix-Shaper profiles (AbsCol)",
+ cmsOpenProfileFromFile(ContextID, "test5.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"),
INTENT_ABSOLUTE_COLORIMETRIC);
- SpeedTest16bits("16 bits on Matrix-Shaper profiles (AbsCol)",
- cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"),
+ SpeedTest16bits(ContextID, "16 bits on Matrix-Shaper profiles (AbsCol)",
+ cmsOpenProfileFromFile(ContextID, "test5.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"),
INTENT_ABSOLUTE_COLORIMETRIC);
- SpeedTest32bits("32 bits on Matrix-Shaper profiles (AbsCol)",
- cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"),
+ SpeedTest32bits(ContextID, "32 bits on Matrix-Shaper profiles (AbsCol)",
+ cmsOpenProfileFromFile(ContextID, "test5.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"),
INTENT_ABSOLUTE_COLORIMETRIC);
printf("\n");
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- SpeedTest8bits("8 bits on curves",
- CreateCurves(),
- CreateCurves(),
+ SpeedTest8bits(ContextID, "8 bits on curves",
+ CreateCurves(ContextID),
+ CreateCurves(ContextID),
INTENT_PERCEPTUAL);
- SpeedTest16bits("16 bits on curves",
- CreateCurves(),
- CreateCurves(),
+ SpeedTest16bits(ContextID, "16 bits on curves",
+ CreateCurves(ContextID),
+ CreateCurves(ContextID),
INTENT_PERCEPTUAL);
- SpeedTest32bits("32 bits on curves",
- CreateCurves(),
- CreateCurves(),
+ SpeedTest32bits(ContextID, "32 bits on curves",
+ CreateCurves(ContextID),
+ CreateCurves(ContextID),
INTENT_PERCEPTUAL);
printf("\n");
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- SpeedTest8bitsCMYK("8 bits on CMYK profiles",
- cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "test2.icc", "r"));
+ SpeedTest8bitsCMYK(ContextID, "8 bits on CMYK profiles",
+ cmsOpenProfileFromFile(ContextID, "test1.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "test2.icc", "r"));
- SpeedTest16bitsCMYK("16 bits on CMYK profiles",
- cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "test2.icc", "r"));
+ SpeedTest16bitsCMYK(ContextID, "16 bits on CMYK profiles",
+ cmsOpenProfileFromFile(ContextID, "test1.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "test2.icc", "r"));
- SpeedTest32bitsCMYK("32 bits on CMYK profiles",
- cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "test2.icc", "r"));
+ SpeedTest32bitsCMYK(ContextID, "32 bits on CMYK profiles",
+ cmsOpenProfileFromFile(ContextID, "test1.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "test2.icc", "r"));
printf("\n");
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- SpeedTest8bitsGray("8 bits on gray-to gray",
- cmsOpenProfileFromFile(DbgThread(), "gray3lcms2.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC);
+ SpeedTest8bitsGray(ContextID, "8 bits on gray-to gray",
+ cmsOpenProfileFromFile(ContextID, "gray3lcms2.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC);
- SpeedTest16bitsGray("16 bits on gray-to gray",
- cmsOpenProfileFromFile(DbgThread(), "gray3lcms2.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC);
+ SpeedTest16bitsGray(ContextID, "16 bits on gray-to gray",
+ cmsOpenProfileFromFile(ContextID, "gray3lcms2.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC);
- SpeedTest32bitsGray("32 bits on gray-to gray",
- cmsOpenProfileFromFile(DbgThread(), "gray3lcms2.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC);
+ SpeedTest32bitsGray(ContextID, "32 bits on gray-to gray",
+ cmsOpenProfileFromFile(ContextID, "gray3lcms2.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC);
printf("\n");
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- SpeedTest8bitsGray("8 bits on gray-to-lab gray",
- cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC);
+ SpeedTest8bitsGray(ContextID, "8 bits on gray-to-lab gray",
+ cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC);
- SpeedTest16bitsGray("16 bits on gray-to-lab gray",
- cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC);
+ SpeedTest16bitsGray(ContextID, "16 bits on gray-to-lab gray",
+ cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC);
- SpeedTest32bitsGray("32 bits on gray-to-lab gray",
- cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC);
+ SpeedTest32bitsGray(ContextID, "32 bits on gray-to-lab gray",
+ cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC);
printf("\n");
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- SpeedTest8bitsGray("8 bits on SAME gray-to-gray",
- cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), INTENT_PERCEPTUAL);
+ SpeedTest8bitsGray(ContextID, "8 bits on SAME gray-to-gray",
+ cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), INTENT_PERCEPTUAL);
- SpeedTest16bitsGray("16 bits on SAME gray-to-gray",
- cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), INTENT_PERCEPTUAL);
+ SpeedTest16bitsGray(ContextID, "16 bits on SAME gray-to-gray",
+ cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), INTENT_PERCEPTUAL);
- SpeedTest32bitsGray("32 bits on SAME gray-to-gray",
- cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"),
- cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), INTENT_PERCEPTUAL);
+ SpeedTest32bitsGray(ContextID, "32 bits on SAME gray-to-gray",
+ cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"),
+ cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), INTENT_PERCEPTUAL);
printf("\n");
}
@@ -8856,6 +8847,7 @@ int main(int argc, char* argv[])
cmsInt32Number DoCheckTests = 1;
cmsInt32Number DoPluginTests = 1;
cmsInt32Number DoZooTests = 0;
+ cmsContext ctx;
#ifdef _MSC_VER
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
@@ -8881,250 +8873,251 @@ int main(int argc, char* argv[])
printf("done.\n");
#endif
-
printf("Installing debug memory plug-in ... ");
- cmsPlugin(DbgThread(), &DebugMemHandler);
+ cmsPlugin(NULL, &DebugMemHandler);
printf("done.\n");
+ ctx = NULL;//cmsCreateContext(NULL, NULL);
+
printf("Installing error logger ... ");
- cmsSetLogErrorHandler(DbgThread(), FatalErrorQuit);
+ cmsSetLogErrorHandler(NULL, FatalErrorQuit);
printf("done.\n");
PrintSupportedIntents();
- Check("Base types", CheckBaseTypes);
- Check("endianness", CheckEndianness);
- Check("quick floor", CheckQuickFloor);
- Check("quick floor word", CheckQuickFloorWord);
- Check("Fixed point 15.16 representation", CheckFixedPoint15_16);
- Check("Fixed point 8.8 representation", CheckFixedPoint8_8);
- Check("D50 roundtrip", CheckD50Roundtrip);
+ Check(ctx, "Base types", CheckBaseTypes);
+ Check(ctx, "endianness", CheckEndianness);
+ Check(ctx, "quick floor", CheckQuickFloor);
+ Check(ctx, "quick floor word", CheckQuickFloorWord);
+ Check(ctx, "Fixed point 15.16 representation", CheckFixedPoint15_16);
+ Check(ctx, "Fixed point 8.8 representation", CheckFixedPoint8_8);
+ Check(ctx, "D50 roundtrip", CheckD50Roundtrip);
// Create utility profiles
if (DoCheckTests || DoSpeedTests)
- Check("Creation of test profiles", CreateTestProfiles);
+ Check(ctx, "Creation of test profiles", CreateTestProfiles);
if (DoCheckTests) {
// Forward 1D interpolation
- Check("1D interpolation in 2pt tables", Check1DLERP2);
- Check("1D interpolation in 3pt tables", Check1DLERP3);
- Check("1D interpolation in 4pt tables", Check1DLERP4);
- Check("1D interpolation in 6pt tables", Check1DLERP6);
- Check("1D interpolation in 18pt tables", Check1DLERP18);
- Check("1D interpolation in descending 2pt tables", Check1DLERP2Down);
- Check("1D interpolation in descending 3pt tables", Check1DLERP3Down);
- Check("1D interpolation in descending 6pt tables", Check1DLERP6Down);
- Check("1D interpolation in descending 18pt tables", Check1DLERP18Down);
+ Check(ctx, "1D interpolation in 2pt tables", Check1DLERP2);
+ Check(ctx, "1D interpolation in 3pt tables", Check1DLERP3);
+ Check(ctx, "1D interpolation in 4pt tables", Check1DLERP4);
+ Check(ctx, "1D interpolation in 6pt tables", Check1DLERP6);
+ Check(ctx, "1D interpolation in 18pt tables", Check1DLERP18);
+ Check(ctx, "1D interpolation in descending 2pt tables", Check1DLERP2Down);
+ Check(ctx, "1D interpolation in descending 3pt tables", Check1DLERP3Down);
+ Check(ctx, "1D interpolation in descending 6pt tables", Check1DLERP6Down);
+ Check(ctx, "1D interpolation in descending 18pt tables", Check1DLERP18Down);
if (Exhaustive) {
- Check("1D interpolation in n tables", ExhaustiveCheck1DLERP);
- Check("1D interpolation in descending tables", ExhaustiveCheck1DLERPDown);
+ Check(ctx, "1D interpolation in n tables", ExhaustiveCheck1DLERP);
+ Check(ctx, "1D interpolation in descending tables", ExhaustiveCheck1DLERPDown);
}
// Forward 3D interpolation
- Check("3D interpolation Tetrahedral (float) ", Check3DinterpolationFloatTetrahedral);
- Check("3D interpolation Trilinear (float) ", Check3DinterpolationFloatTrilinear);
- Check("3D interpolation Tetrahedral (16) ", Check3DinterpolationTetrahedral16);
- Check("3D interpolation Trilinear (16) ", Check3DinterpolationTrilinear16);
+ Check(ctx, "3D interpolation Tetrahedral (float) ", Check3DinterpolationFloatTetrahedral);
+ Check(ctx, "3D interpolation Trilinear (float) ", Check3DinterpolationFloatTrilinear);
+ Check(ctx, "3D interpolation Tetrahedral (16) ", Check3DinterpolationTetrahedral16);
+ Check(ctx, "3D interpolation Trilinear (16) ", Check3DinterpolationTrilinear16);
if (Exhaustive) {
- Check("Exhaustive 3D interpolation Tetrahedral (float) ", ExaustiveCheck3DinterpolationFloatTetrahedral);
- Check("Exhaustive 3D interpolation Trilinear (float) ", ExaustiveCheck3DinterpolationFloatTrilinear);
- Check("Exhaustive 3D interpolation Tetrahedral (16) ", ExhaustiveCheck3DinterpolationTetrahedral16);
- Check("Exhaustive 3D interpolation Trilinear (16) ", ExhaustiveCheck3DinterpolationTrilinear16);
+ Check(ctx, "Exhaustive 3D interpolation Tetrahedral (float) ", ExaustiveCheck3DinterpolationFloatTetrahedral);
+ Check(ctx, "Exhaustive 3D interpolation Trilinear (float) ", ExaustiveCheck3DinterpolationFloatTrilinear);
+ Check(ctx, "Exhaustive 3D interpolation Tetrahedral (16) ", ExhaustiveCheck3DinterpolationTetrahedral16);
+ Check(ctx, "Exhaustive 3D interpolation Trilinear (16) ", ExhaustiveCheck3DinterpolationTrilinear16);
}
- Check("Reverse interpolation 3 -> 3", CheckReverseInterpolation3x3);
- Check("Reverse interpolation 4 -> 3", CheckReverseInterpolation4x3);
+ Check(ctx, "Reverse interpolation 3 -> 3", CheckReverseInterpolation3x3);
+ Check(ctx, "Reverse interpolation 4 -> 3", CheckReverseInterpolation4x3);
// High dimensionality interpolation
- Check("3D interpolation", Check3Dinterp);
- Check("3D interpolation with granularity", Check3DinterpGranular);
- Check("4D interpolation", Check4Dinterp);
- Check("4D interpolation with granularity", Check4DinterpGranular);
- Check("5D interpolation with granularity", Check5DinterpGranular);
- Check("6D interpolation with granularity", Check6DinterpGranular);
- Check("7D interpolation with granularity", Check7DinterpGranular);
- Check("8D interpolation with granularity", Check8DinterpGranular);
+ Check(ctx, "3D interpolation", Check3Dinterp);
+ Check(ctx, "3D interpolation with granularity", Check3DinterpGranular);
+ Check(ctx, "4D interpolation", Check4Dinterp);
+ Check(ctx, "4D interpolation with granularity", Check4DinterpGranular);
+ Check(ctx, "5D interpolation with granularity", Check5DinterpGranular);
+ Check(ctx, "6D interpolation with granularity", Check6DinterpGranular);
+ Check(ctx, "7D interpolation with granularity", Check7DinterpGranular);
+ Check(ctx, "8D interpolation with granularity", Check8DinterpGranular);
// Encoding of colorspaces
- Check("Lab to LCh and back (float only) ", CheckLab2LCh);
- Check("Lab to XYZ and back (float only) ", CheckLab2XYZ);
- Check("Lab to xyY and back (float only) ", CheckLab2xyY);
- Check("Lab V2 encoding", CheckLabV2encoding);
- Check("Lab V4 encoding", CheckLabV4encoding);
+ Check(ctx, "Lab to LCh and back (float only) ", CheckLab2LCh);
+ Check(ctx, "Lab to XYZ and back (float only) ", CheckLab2XYZ);
+ Check(ctx, "Lab to xyY and back (float only) ", CheckLab2xyY);
+ Check(ctx, "Lab V2 encoding", CheckLabV2encoding);
+ Check(ctx, "Lab V4 encoding", CheckLabV4encoding);
// BlackBody
- Check("Blackbody radiator", CheckTemp2CHRM);
+ Check(ctx, "Blackbody radiator", CheckTemp2CHRM);
// Tone curves
- Check("Linear gamma curves (16 bits)", CheckGammaCreation16);
- Check("Linear gamma curves (float)", CheckGammaCreationFlt);
+ Check(ctx, "Linear gamma curves (16 bits)", CheckGammaCreation16);
+ Check(ctx, "Linear gamma curves (float)", CheckGammaCreationFlt);
- Check("Curve 1.8 (float)", CheckGamma18);
- Check("Curve 2.2 (float)", CheckGamma22);
- Check("Curve 3.0 (float)", CheckGamma30);
+ Check(ctx, "Curve 1.8 (float)", CheckGamma18);
+ Check(ctx, "Curve 2.2 (float)", CheckGamma22);
+ Check(ctx, "Curve 3.0 (float)", CheckGamma30);
- Check("Curve 1.8 (table)", CheckGamma18Table);
- Check("Curve 2.2 (table)", CheckGamma22Table);
- Check("Curve 3.0 (table)", CheckGamma30Table);
+ Check(ctx, "Curve 1.8 (table)", CheckGamma18Table);
+ Check(ctx, "Curve 2.2 (table)", CheckGamma22Table);
+ Check(ctx, "Curve 3.0 (table)", CheckGamma30Table);
- Check("Curve 1.8 (word table)", CheckGamma18TableWord);
- Check("Curve 2.2 (word table)", CheckGamma22TableWord);
- Check("Curve 3.0 (word table)", CheckGamma30TableWord);
+ Check(ctx, "Curve 1.8 (word table)", CheckGamma18TableWord);
+ Check(ctx, "Curve 2.2 (word table)", CheckGamma22TableWord);
+ Check(ctx, "Curve 3.0 (word table)", CheckGamma30TableWord);
- Check("Parametric curves", CheckParametricToneCurves);
+ Check(ctx, "Parametric curves", CheckParametricToneCurves);
- Check("Join curves", CheckJointCurves);
- Check("Join curves descending", CheckJointCurvesDescending);
- Check("Join curves degenerated", CheckReverseDegenerated);
- Check("Join curves sRGB (Float)", CheckJointFloatCurves_sRGB);
- Check("Join curves sRGB (16 bits)", CheckJoint16Curves_sRGB);
- Check("Join curves sigmoidal", CheckJointCurvesSShaped);
+ Check(ctx, "Join curves", CheckJointCurves);
+ Check(ctx, "Join curves descending", CheckJointCurvesDescending);
+ Check(ctx, "Join curves degenerated", CheckReverseDegenerated);
+ Check(ctx, "Join curves sRGB (Float)", CheckJointFloatCurves_sRGB);
+ Check(ctx, "Join curves sRGB (16 bits)", CheckJoint16Curves_sRGB);
+ Check(ctx, "Join curves sigmoidal", CheckJointCurvesSShaped);
// LUT basics
- Check("LUT creation & dup", CheckLUTcreation);
- Check("1 Stage LUT ", Check1StageLUT);
- Check("2 Stage LUT ", Check2StageLUT);
- Check("2 Stage LUT (16 bits)", Check2Stage16LUT);
- Check("3 Stage LUT ", Check3StageLUT);
- Check("3 Stage LUT (16 bits)", Check3Stage16LUT);
- Check("4 Stage LUT ", Check4StageLUT);
- Check("4 Stage LUT (16 bits)", Check4Stage16LUT);
- Check("5 Stage LUT ", Check5StageLUT);
- Check("5 Stage LUT (16 bits) ", Check5Stage16LUT);
- Check("6 Stage LUT ", Check6StageLUT);
- Check("6 Stage LUT (16 bits) ", Check6Stage16LUT);
+ Check(ctx, "LUT creation & dup", CheckLUTcreation);
+ Check(ctx, "1 Stage LUT ", Check1StageLUT);
+ Check(ctx, "2 Stage LUT ", Check2StageLUT);
+ Check(ctx, "2 Stage LUT (16 bits)", Check2Stage16LUT);
+ Check(ctx, "3 Stage LUT ", Check3StageLUT);
+ Check(ctx, "3 Stage LUT (16 bits)", Check3Stage16LUT);
+ Check(ctx, "4 Stage LUT ", Check4StageLUT);
+ Check(ctx, "4 Stage LUT (16 bits)", Check4Stage16LUT);
+ Check(ctx, "5 Stage LUT ", Check5StageLUT);
+ Check(ctx, "5 Stage LUT (16 bits) ", Check5Stage16LUT);
+ Check(ctx, "6 Stage LUT ", Check6StageLUT);
+ Check(ctx, "6 Stage LUT (16 bits) ", Check6Stage16LUT);
// LUT operation
- Check("Lab to Lab LUT (float only) ", CheckLab2LabLUT);
- Check("XYZ to XYZ LUT (float only) ", CheckXYZ2XYZLUT);
- Check("Lab to Lab MAT LUT (float only) ", CheckLab2LabMatLUT);
- Check("Named Color LUT", CheckNamedColorLUT);
- Check("Usual formatters", CheckFormatters16);
- Check("Floating point formatters", CheckFormattersFloat);
+ Check(ctx, "Lab to Lab LUT (float only) ", CheckLab2LabLUT);
+ Check(ctx, "XYZ to XYZ LUT (float only) ", CheckXYZ2XYZLUT);
+ Check(ctx, "Lab to Lab MAT LUT (float only) ", CheckLab2LabMatLUT);
+ Check(ctx, "Named Color LUT", CheckNamedColorLUT);
+ Check(ctx, "Usual formatters", CheckFormatters16);
+ Check(ctx, "Floating point formatters", CheckFormattersFloat);
#ifndef CMS_NO_HALF_SUPPORT
- Check("HALF formatters", CheckFormattersHalf);
+ Check(ctx, "HALF formatters", CheckFormattersHalf);
#endif
// ChangeBuffersFormat
- Check("ChangeBuffersFormat", CheckChangeBufferFormat);
+ Check(ctx, "ChangeBuffersFormat", CheckChangeBufferFormat);
// MLU
- Check("Multilocalized Unicode", CheckMLU);
+ Check(ctx, "Multilocalized Unicode", CheckMLU);
// Named color
- Check("Named color lists", CheckNamedColorList);
+ Check(ctx, "Named color lists", CheckNamedColorList);
// Profile I/O (this one is huge!)
- Check("Profile creation", CheckProfileCreation);
- Check("Header version", CheckVersionHeaderWriting);
- Check("Multilocalized profile", CheckMultilocalizedProfile);
+ Check(ctx, "Profile creation", CheckProfileCreation);
+ Check(ctx, "Header version", CheckVersionHeaderWriting);
+ Check(ctx, "Multilocalized profile", CheckMultilocalizedProfile);
// Error reporting
- Check("Error reporting on bad profiles", CheckErrReportingOnBadProfiles);
- Check("Error reporting on bad transforms", CheckErrReportingOnBadTransforms);
+ Check(ctx, "Error reporting on bad profiles", CheckErrReportingOnBadProfiles);
+ Check(ctx, "Error reporting on bad transforms", CheckErrReportingOnBadTransforms);
// Transforms
- Check("Curves only transforms", CheckCurvesOnlyTransforms);
- Check("Float Lab->Lab transforms", CheckFloatLabTransforms);
- Check("Encoded Lab->Lab transforms", CheckEncodedLabTransforms);
- Check("Stored identities", CheckStoredIdentities);
+ Check(ctx, "Curves only transforms", CheckCurvesOnlyTransforms);
+ Check(ctx, "Float Lab->Lab transforms", CheckFloatLabTransforms);
+ Check(ctx, "Encoded Lab->Lab transforms", CheckEncodedLabTransforms);
+ Check(ctx, "Stored identities", CheckStoredIdentities);
- Check("Matrix-shaper transform (float)", CheckMatrixShaperXFORMFloat);
- Check("Matrix-shaper transform (16 bits)", CheckMatrixShaperXFORM16);
- Check("Matrix-shaper transform (8 bits)", CheckMatrixShaperXFORM8);
+ Check(ctx, "Matrix-shaper transform (float)", CheckMatrixShaperXFORMFloat);
+ Check(ctx, "Matrix-shaper transform (16 bits)", CheckMatrixShaperXFORM16);
+ Check(ctx, "Matrix-shaper transform (8 bits)", CheckMatrixShaperXFORM8);
- Check("Primaries of sRGB", CheckRGBPrimaries);
+ Check(ctx, "Primaries of sRGB", CheckRGBPrimaries);
// Known values
- Check("Known values across matrix-shaper", Chack_sRGB_Float);
- Check("Gray input profile", CheckInputGray);
- Check("Gray Lab input profile", CheckLabInputGray);
- Check("Gray output profile", CheckOutputGray);
- Check("Gray Lab output profile", CheckLabOutputGray);
+ Check(ctx, "Known values across matrix-shaper", Chack_sRGB_Float);
+ Check(ctx, "Gray input profile", CheckInputGray);
+ Check(ctx, "Gray Lab input profile", CheckLabInputGray);
+ Check(ctx, "Gray output profile", CheckOutputGray);
+ Check(ctx, "Gray Lab output profile", CheckLabOutputGray);
- Check("Matrix-shaper proofing transform (float)", CheckProofingXFORMFloat);
- Check("Matrix-shaper proofing transform (16 bits)", CheckProofingXFORM16);
+ Check(ctx, "Matrix-shaper proofing transform (float)", CheckProofingXFORMFloat);
+ Check(ctx, "Matrix-shaper proofing transform (16 bits)", CheckProofingXFORM16);
- Check("Gamut check", CheckGamutCheck);
+ Check(ctx, "Gamut check", CheckGamutCheck);
- Check("CMYK roundtrip on perceptual transform", CheckCMYKRoundtrip);
+ Check(ctx, "CMYK roundtrip on perceptual transform", CheckCMYKRoundtrip);
- Check("CMYK perceptual transform", CheckCMYKPerceptual);
+ Check(ctx, "CMYK perceptual transform", CheckCMYKPerceptual);
// Check("CMYK rel.col. transform", CheckCMYKRelCol);
- Check("Black ink only preservation", CheckKOnlyBlackPreserving);
- Check("Black plane preservation", CheckKPlaneBlackPreserving);
-
-
- Check("Deciding curve types", CheckV4gamma);
-
- Check("Black point detection", CheckBlackPoint);
- Check("TAC detection", CheckTAC);
-
- Check("CGATS parser", CheckCGATS);
- Check("CGATS parser on junk", CheckCGATS2);
- Check("CGATS parser on overflow", CheckCGATS_Overflow);
- Check("PostScript generator", CheckPostScript);
- Check("Segment maxima GBD", CheckGBD);
- Check("MD5 digest", CheckMD5);
- Check("Linking", CheckLinking);
- Check("floating point tags on XYZ", CheckFloatXYZ);
- Check("RGB->Lab->RGB with alpha on FLT", ChecksRGB2LabFLT);
- Check("Parametric curve on Rec709", CheckParametricRec709);
- Check("Floating Point sampled curve with non-zero start", CheckFloatSamples);
- Check("Floating Point segmented curve with short sampled segment", CheckFloatSegments);
- Check("Read RAW portions", CheckReadRAW);
- Check("Check MetaTag", CheckMeta);
- Check("Null transform on floats", CheckFloatNULLxform);
- Check("Set free a tag", CheckRemoveTag);
- Check("Matrix simplification", CheckMatrixSimplify);
- Check("Planar 8 optimization", CheckPlanar8opt);
- Check("Swap endian feature", CheckSE);
- Check("Transform line stride RGB", CheckTransformLineStride);
- Check("Forged MPE profile", CheckForgedMPE);
- Check("Proofing intersection", CheckProofingIntersection);
+ Check(ctx, "Black ink only preservation", CheckKOnlyBlackPreserving);
+ Check(ctx, "Black plane preservation", CheckKPlaneBlackPreserving);
+
+
+ Check(ctx, "Deciding curve types", CheckV4gamma);
+
+ Check(ctx, "Black point detection", CheckBlackPoint);
+ Check(ctx, "TAC detection", CheckTAC);
+
+ Check(ctx, "CGATS parser", CheckCGATS);
+ Check(ctx, "CGATS parser on junk", CheckCGATS2);
+ Check(ctx, "CGATS parser on overflow", CheckCGATS_Overflow);
+ Check(ctx, "PostScript generator", CheckPostScript);
+ Check(ctx, "Segment maxima GBD", CheckGBD);
+ Check(ctx, "MD5 digest", CheckMD5);
+ Check(ctx, "Linking", CheckLinking);
+ Check(ctx, "floating point tags on XYZ", CheckFloatXYZ);
+ Check(ctx, "RGB->Lab->RGB with alpha on FLT", ChecksRGB2LabFLT);
+ Check(ctx, "Parametric curve on Rec709", CheckParametricRec709);
+ Check(ctx, "Floating Point sampled curve with non-zero start", CheckFloatSamples);
+ Check(ctx, "Floating Point segmented curve with short sampled segment", CheckFloatSegments);
+ Check(ctx, "Read RAW portions", CheckReadRAW);
+ Check(ctx, "Check MetaTag", CheckMeta);
+ Check(ctx, "Null transform on floats", CheckFloatNULLxform);
+ Check(ctx, "Set free a tag", CheckRemoveTag);
+ Check(ctx, "Matrix simplification", CheckMatrixSimplify);
+ Check(ctx, "Planar 8 optimization", CheckPlanar8opt);
+ Check(ctx, "Swap endian feature", CheckSE);
+ Check(ctx, "Transform line stride RGB", CheckTransformLineStride);
+ Check(ctx, "Forged MPE profile", CheckForgedMPE);
+ Check(ctx, "Proofing intersection", CheckProofingIntersection);
}
if (DoPluginTests)
{
- Check("Context memory handling", CheckAllocContext);
- Check("Simple context functionality", CheckSimpleContext);
- Check("Alarm codes context", CheckAlarmColorsContext);
- Check("Adaptation state context", CheckAdaptationStateContext);
- Check("1D interpolation plugin", CheckInterp1DPlugin);
- Check("3D interpolation plugin", CheckInterp3DPlugin);
- Check("Parametric curve plugin", CheckParametricCurvePlugin);
- Check("Formatters plugin", CheckFormattersPlugin);
- Check("Tag type plugin", CheckTagTypePlugin);
- Check("MPE type plugin", CheckMPEPlugin);
- Check("Optimization plugin", CheckOptimizationPlugin);
- Check("Rendering intent plugin", CheckIntentPlugin);
- Check("Full transform plugin", CheckTransformPlugin);
- Check("Mutex plugin", CheckMutexPlugin);
+ Check(ctx, "Context memory handling", CheckAllocContext);
+ Check(ctx, "Simple context functionality", CheckSimpleContext);
+ Check(ctx, "Alarm codes context", CheckAlarmColorsContext);
+ Check(ctx, "Adaptation state context", CheckAdaptationStateContext);
+ Check(ctx, "1D interpolation plugin", CheckInterp1DPlugin);
+ Check(ctx, "3D interpolation plugin", CheckInterp3DPlugin);
+ Check(ctx, "Parametric curve plugin", CheckParametricCurvePlugin);
+ Check(ctx, "Formatters plugin", CheckFormattersPlugin);
+ Check(ctx, "Tag type plugin", CheckTagTypePlugin);
+ Check(ctx, "MPE type plugin", CheckMPEPlugin);
+ Check(ctx, "Optimization plugin", CheckOptimizationPlugin);
+ Check(ctx, "Rendering intent plugin", CheckIntentPlugin);
+ Check(ctx, "Full transform plugin", CheckTransformPlugin);
+ Check(ctx, "Mutex plugin", CheckMutexPlugin);
}
if (DoSpeedTests)
- SpeedTest();
+ SpeedTest(ctx);
#ifdef CMS_IS_WINDOWS_
if (DoZooTests)
- CheckProfileZOO(NULL);
+ CheckProfileZOO(ctx);
#endif
DebugMemPrintTotals();
- cmsUnregisterPlugins(DbgThread());
+ cmsUnregisterPlugins(NULL);
// Cleanup
if (DoCheckTests || DoSpeedTests)
diff --git a/lcms2mt/testbed/testcms2.h b/lcms2mt/testbed/testcms2.h
index 862f0ace..980f2c0b 100755
--- a/lcms2mt/testbed/testcms2.h
+++ b/lcms2mt/testbed/testcms2.h
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2014 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -27,13 +27,16 @@
#ifndef TESTCMS2_H
#define TESTCMS2_H
+#include "lcms2_internal.h"
+
+// On Visual Studio, use debug CRT
#ifdef _MSC_VER
-# define _CRT_SECURE_NO_WARNINGS 1
-# include "crtdbg.h"
-# include <io.h>
+# include "crtdbg.h"
#endif
-#include "lcms2_internal.h"
+#ifdef CMS_IS_WINDOWS_
+# include <io.h>
+#endif
#define cmsmin(a, b) (((a) < (b)) ? (a) : (b))
@@ -59,23 +62,22 @@ void TestMemoryLeaks(cmsBool ok);
void Say(const char* str);
// Plug-in tests
-cmsInt32Number CheckSimpleContext(void);
-cmsInt32Number CheckAllocContext(void);
-cmsInt32Number CheckAlarmColorsContext(void);
-cmsInt32Number CheckAdaptationStateContext(void);
-cmsInt32Number CheckInterp1DPlugin(void);
-cmsInt32Number CheckInterp3DPlugin(void);
-cmsInt32Number CheckParametricCurvePlugin(void);
-cmsInt32Number CheckFormattersPlugin(void);
-cmsInt32Number CheckTagTypePlugin(void);
-cmsInt32Number CheckMPEPlugin(void);
-cmsInt32Number CheckOptimizationPlugin(void);
-cmsInt32Number CheckIntentPlugin(void);
-cmsInt32Number CheckTransformPlugin(void);
-cmsInt32Number CheckMutexPlugin(void);
-
+cmsInt32Number CheckSimpleContext(cmsContext ContextID);
+cmsInt32Number CheckAllocContext(cmsContext ContextID);
+cmsInt32Number CheckAlarmColorsContext(cmsContext ContextID);
+cmsInt32Number CheckAdaptationStateContext(cmsContext ContextID);
+cmsInt32Number CheckInterp1DPlugin(cmsContext ContextID);
+cmsInt32Number CheckInterp3DPlugin(cmsContext ContextID);
+cmsInt32Number CheckParametricCurvePlugin(cmsContext ContextID);
+cmsInt32Number CheckFormattersPlugin(cmsContext ContextID);
+cmsInt32Number CheckTagTypePlugin(cmsContext ContextID);
+cmsInt32Number CheckMPEPlugin(cmsContext ContextID);
+cmsInt32Number CheckOptimizationPlugin(cmsContext ContextID);
+cmsInt32Number CheckIntentPlugin(cmsContext ContextID);
+cmsInt32Number CheckTransformPlugin(cmsContext ContextID);
+cmsInt32Number CheckMutexPlugin(cmsContext ContextID);
+cmsInt32Number CheckMethodPackDoublesFromFloat(cmsContext ContextID);
-cmsInt32Number CheckOptimizationPluginLeak(void);
// Zoo
void CheckProfileZOO(cmsContext ContextID);
diff --git a/lcms2mt/testbed/testplugin.c b/lcms2mt/testbed/testplugin.c
index b70e7d95..90d8e75c 100755
--- a/lcms2mt/testbed/testplugin.c
+++ b/lcms2mt/testbed/testplugin.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -46,7 +46,7 @@ cmsContext DupContext(cmsContext src, void* Data)
// --------------------------------------------------------------------------------------------------
// Allocation order
-cmsInt32Number CheckAllocContext(void)
+cmsInt32Number CheckAllocContext(cmsContext ContextID)
{
cmsContext c1, c2, c3, c4;
@@ -78,7 +78,7 @@ cmsInt32Number CheckAllocContext(void)
}
// Test the very basic context capabilities
-cmsInt32Number CheckSimpleContext(void)
+cmsInt32Number CheckSimpleContext(cmsContext ContextID)
{
int a = 1;
int b = 32;
@@ -140,7 +140,7 @@ cmsInt32Number CheckSimpleContext(void)
// --------------------------------------------------------------------------------------------------
// This function tests the alarm codes across contexts
-cmsInt32Number CheckAlarmColorsContext(void)
+cmsInt32Number CheckAlarmColorsContext(cmsContext ContextID)
{
cmsInt32Number rc = 0;
const cmsUInt16Number codes[] = {0x0000, 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888, 0x9999, 0xaaaa, 0xbbbb, 0xcccc, 0xdddd, 0xeeee, 0xffff};
@@ -178,7 +178,7 @@ cmsInt32Number CheckAlarmColorsContext(void)
// --------------------------------------------------------------------------------------------------
// Similar to the previous, but for adaptation state
-cmsInt32Number CheckAdaptationStateContext(void)
+cmsInt32Number CheckAdaptationStateContext(cmsContext ContextID)
{
cmsInt32Number rc = 0;
cmsContext c1, c2, c3;
@@ -276,13 +276,13 @@ cmsInterpFunction my_Interpolators_Factory(cmsContext ContextID, cmsUInt32Number
static
cmsPluginInterpolation InterpPluginSample = {
- { cmsPluginMagicNumber, 2060, cmsPluginInterpolationSig, NULL },
+ { cmsPluginMagicNumber, 2060-2000, cmsPluginInterpolationSig, NULL },
my_Interpolators_Factory
};
// This is the check code for 1D interpolation plug-in
-cmsInt32Number CheckInterp1DPlugin(void)
+cmsInt32Number CheckInterp1DPlugin(cmsContext ContextID)
{
cmsToneCurve* Sampled1D = NULL;
cmsContext ctx = NULL;
@@ -345,7 +345,7 @@ Error:
}
// Checks the 3D interpolation
-cmsInt32Number CheckInterp3DPlugin(void)
+cmsInt32Number CheckInterp3DPlugin(cmsContext ContextID)
{
cmsPipeline* p;
@@ -512,7 +512,7 @@ static double Rec709Math(cmsContext ContextID, int Type, const double Params[],
cmsPluginParametricCurves Rec709Plugin = {
- { cmsPluginMagicNumber, 2060, cmsPluginParametricCurveSig, NULL },
+ { cmsPluginMagicNumber, 2060-2000, cmsPluginParametricCurveSig, NULL },
1, {TYPE_709}, {5}, Rec709Math
@@ -521,7 +521,7 @@ cmsPluginParametricCurves Rec709Plugin = {
static
cmsPluginParametricCurves CurvePluginSample = {
- { cmsPluginMagicNumber, 2060, cmsPluginParametricCurveSig, NULL },
+ { cmsPluginMagicNumber, 2060-2000, cmsPluginParametricCurveSig, NULL },
2, // nFunctions
{ TYPE_SIN, TYPE_COS }, // Function Types
@@ -531,7 +531,7 @@ cmsPluginParametricCurves CurvePluginSample = {
static
cmsPluginParametricCurves CurvePluginSample2 = {
- { cmsPluginMagicNumber, 2060, cmsPluginParametricCurveSig, NULL },
+ { cmsPluginMagicNumber, 2060-2000, cmsPluginParametricCurveSig, NULL },
1, // nFunctions
{ TYPE_TAN}, // Function Types
@@ -542,7 +542,7 @@ cmsPluginParametricCurves CurvePluginSample2 = {
// --------------------------------------------------------------------------------------------------
// In this test, the DupContext function will be checked as well
// --------------------------------------------------------------------------------------------------
-cmsInt32Number CheckParametricCurvePlugin(void)
+cmsInt32Number CheckParametricCurvePlugin(cmsContext ContextID)
{
cmsContext ctx = NULL;
cmsContext cpy = NULL;
@@ -691,7 +691,7 @@ cmsFormatter my_FormatterFactory2(cmsContext ContextID, cmsUInt32Number Type,
static
cmsPluginFormatters FormattersPluginSample = { {cmsPluginMagicNumber,
- 2060,
+ 2060-2000,
cmsPluginFormattersSig,
NULL},
my_FormatterFactory };
@@ -700,13 +700,13 @@ cmsPluginFormatters FormattersPluginSample = { {cmsPluginMagicNumber,
static
cmsPluginFormatters FormattersPluginSample2 = { {cmsPluginMagicNumber,
- 2060,
+ 2060-2000,
cmsPluginFormattersSig,
NULL},
my_FormatterFactory2 };
-cmsInt32Number CheckFormattersPlugin(void)
+cmsInt32Number CheckFormattersPlugin(cmsContext ContextID)
{
cmsContext ctx = WatchDogContext(NULL);
cmsContext cpy;
@@ -779,21 +779,22 @@ void Type_int_Free(cmsContext ContextID, struct _cms_typehandler_struct* self,
static cmsPluginTag HiddenTagPluginSample = {
- { cmsPluginMagicNumber, 2060, cmsPluginTagSig, NULL},
+ { cmsPluginMagicNumber, 2060-2000, cmsPluginTagSig, NULL},
SigInt, { 1, 1, { SigIntType }, NULL }
};
static cmsPluginTagType TagTypePluginSample = {
- { cmsPluginMagicNumber, 2060, cmsPluginTagTypeSig, (cmsPluginBase*) &HiddenTagPluginSample},
+ { cmsPluginMagicNumber, 2060-2000, cmsPluginTagTypeSig, (cmsPluginBase*) &HiddenTagPluginSample},
{ SigIntType, Type_int_Read, Type_int_Write, Type_int_Dup, Type_int_Free, 0 }
};
-cmsInt32Number CheckTagTypePlugin(void)
+cmsInt32Number CheckTagTypePlugin(cmsContext ContextID)
{
cmsContext ctx = NULL;
cmsContext cpy = NULL;
+ cmsContext cpy2 = NULL;
cmsHPROFILE h = NULL;
cmsUInt32Number myTag = 1234;
cmsUInt32Number rc = 0;
@@ -805,20 +806,24 @@ cmsInt32Number CheckTagTypePlugin(void)
cmsPlugin(ctx, &TagTypePluginSample);
cpy = DupContext(ctx, NULL);
+ cpy2 = DupContext(cpy, NULL);
- h = cmsCreateProfilePlaceholder(cpy);
+ cmsDeleteContext(ctx);
+ cmsDeleteContext(cpy);
+
+ h = cmsCreateProfilePlaceholder(cpy2);
if (h == NULL) {
Fail("Create placeholder failed");
goto Error;
}
- if (!cmsWriteTag(cpy, h, SigInt, &myTag)) {
+ if (!cmsWriteTag(cpy2, h, SigInt, &myTag)) {
Fail("Plug-in failed");
goto Error;
}
- rc = cmsSaveProfileToMem(cpy, h, NULL, &clen);
+ rc = cmsSaveProfileToMem(cpy2, h, NULL, &clen);
if (!rc) {
Fail("Fetch mem size failed");
goto Error;
@@ -832,32 +837,32 @@ cmsInt32Number CheckTagTypePlugin(void)
}
- rc = cmsSaveProfileToMem(cpy, h, data, &clen);
+ rc = cmsSaveProfileToMem(cpy2, h, data, &clen);
if (!rc) {
Fail("Save to mem failed");
goto Error;
}
- cmsCloseProfile(cpy, h);
+ cmsCloseProfile(cpy2, h);
- cmsSetLogErrorHandler(cpy, NULL);
- h = cmsOpenProfileFromMem(cpy, data, clen);
+ cmsSetLogErrorHandler(ContextID, NULL);
+ h = cmsOpenProfileFromMem(ContextID, data, clen);
if (h == NULL) {
Fail("Open profile failed");
goto Error;
}
- ptr = (cmsUInt32Number*) cmsReadTag(cpy, h, SigInt);
+ ptr = (cmsUInt32Number*) cmsReadTag(ContextID, h, SigInt);
if (ptr != NULL) {
Fail("read tag/context switching failed");
goto Error;
}
- cmsCloseProfile(cpy, h);
- ResetFatalError(cpy);
+ cmsCloseProfile(ContextID, h);
+ ResetFatalError(ContextID);
- h = cmsOpenProfileFromMem(cpy, data, clen);
+ h = cmsOpenProfileFromMem(cpy2, data, clen);
if (h == NULL) {
Fail("Open profile from mem failed");
goto Error;
@@ -866,7 +871,7 @@ cmsInt32Number CheckTagTypePlugin(void)
// Get rid of data
free(data); data = NULL;
- ptr = (cmsUInt32Number*) cmsReadTag(cpy, h, SigInt);
+ ptr = (cmsUInt32Number*) cmsReadTag(cpy2, h, SigInt);
if (ptr == NULL) {
Fail("Read tag/conext switching failed (2)");
return 0;
@@ -874,9 +879,8 @@ cmsInt32Number CheckTagTypePlugin(void)
rc = (*ptr == 1234);
- cmsCloseProfile(cpy, h);
- cmsDeleteContext(ctx);
- cmsDeleteContext(cpy);
+ cmsCloseProfile(cpy2, h);
+ cmsDeleteContext(cpy2);
return rc;
@@ -940,16 +944,17 @@ cmsBool Type_negate_Write(cmsContext ContextID, struct _cms_typehandler_struct*
static
cmsPluginMultiProcessElement MPEPluginSample = {
- {cmsPluginMagicNumber, 2060, cmsPluginMultiProcessElementSig, NULL},
+ {cmsPluginMagicNumber, 2060-2000, cmsPluginMultiProcessElementSig, NULL},
{ (cmsTagTypeSignature) SigNegateType, Type_negate_Read, Type_negate_Write, NULL, NULL, 0 }
};
-cmsInt32Number CheckMPEPlugin(void)
+cmsInt32Number CheckMPEPlugin(cmsContext ContextID)
{
cmsContext ctx = NULL;
cmsContext cpy = NULL;
+ cmsContext cpy2 = NULL;
cmsHPROFILE h = NULL;
cmsUInt32Number myTag = 1234;
cmsUInt32Number rc = 0;
@@ -962,19 +967,23 @@ cmsInt32Number CheckMPEPlugin(void)
cmsPlugin(ctx, &MPEPluginSample);
cpy = DupContext(ctx, NULL);
+ cpy2 = DupContext(cpy, NULL);
+
+ cmsDeleteContext(ctx);
+ cmsDeleteContext(cpy);
- h = cmsCreateProfilePlaceholder(cpy);
+ h = cmsCreateProfilePlaceholder(cpy2);
if (h == NULL) {
Fail("Create placeholder failed");
goto Error;
}
- pipe = cmsPipelineAlloc(cpy, 3, 3);
- cmsPipelineInsertStage(cpy, pipe, cmsAT_BEGIN, StageAllocNegate(cpy));
+ pipe = cmsPipelineAlloc(cpy2, 3, 3);
+ cmsPipelineInsertStage(cpy2, pipe, cmsAT_BEGIN, StageAllocNegate(cpy2));
In[0] = 0.3f; In[1] = 0.2f; In[2] = 0.9f;
- cmsPipelineEvalFloat(cpy, In, Out, pipe);
+ cmsPipelineEvalFloat(cpy2, In, Out, pipe);
rc = (IsGoodVal("0", Out[0], 1.0-In[0], 0.001) &&
IsGoodVal("1", Out[1], 1.0-In[1], 0.001) &&
@@ -985,15 +994,15 @@ cmsInt32Number CheckMPEPlugin(void)
goto Error;
}
- if (!cmsWriteTag(cpy, h, cmsSigDToB3Tag, pipe)) {
+ if (!cmsWriteTag(cpy2, h, cmsSigDToB3Tag, pipe)) {
Fail("Plug-in failed");
goto Error;
}
// This cleans the stage as well
- cmsPipelineFree(cpy, pipe);
+ cmsPipelineFree(cpy2, pipe);
- rc = cmsSaveProfileToMem(cpy, h, NULL, &clen);
+ rc = cmsSaveProfileToMem(cpy2, h, NULL, &clen);
if (!rc) {
Fail("Fetch mem size failed");
goto Error;
@@ -1007,22 +1016,22 @@ cmsInt32Number CheckMPEPlugin(void)
}
- rc = cmsSaveProfileToMem(cpy, h, data, &clen);
+ rc = cmsSaveProfileToMem(cpy2, h, data, &clen);
if (!rc) {
Fail("Save to mem failed");
goto Error;
}
- cmsCloseProfile(cpy, h);
+ cmsCloseProfile(cpy2, h);
- cmsSetLogErrorHandler(cpy, NULL);
- h = cmsOpenProfileFromMem(cpy, data, clen);
+ cmsSetLogErrorHandler(ContextID, NULL);
+ h = cmsOpenProfileFromMem(ContextID, data, clen);
if (h == NULL) {
Fail("Open profile failed");
goto Error;
}
- pipe = (cmsPipeline*) cmsReadTag(cpy, h, cmsSigDToB3Tag);
+ pipe = (cmsPipeline*) cmsReadTag(ContextID, h, cmsSigDToB3Tag);
if (pipe != NULL) {
// Unsupported stage, should fail
@@ -1030,11 +1039,11 @@ cmsInt32Number CheckMPEPlugin(void)
goto Error;
}
- cmsCloseProfile(cpy, h);
+ cmsCloseProfile(ContextID, h);
- ResetFatalError(cpy);
+ ResetFatalError(ContextID);
- h = cmsOpenProfileFromMem(cpy, data, clen);
+ h = cmsOpenProfileFromMem(cpy2, data, clen);
if (h == NULL) {
Fail("Open profile from mem failed");
goto Error;
@@ -1043,7 +1052,7 @@ cmsInt32Number CheckMPEPlugin(void)
// Get rid of data
free(data); data = NULL;
- pipe = (cmsPipeline*) cmsReadTag(cpy, h, cmsSigDToB3Tag);
+ pipe = (cmsPipeline*) cmsReadTag(cpy2, h, cmsSigDToB3Tag);
if (pipe == NULL) {
Fail("Read tag/conext switching failed (2)");
return 0;
@@ -1051,22 +1060,20 @@ cmsInt32Number CheckMPEPlugin(void)
// Evaluate for negation
In[0] = 0.3f; In[1] = 0.2f; In[2] = 0.9f;
- cmsPipelineEvalFloat(cpy, In, Out, pipe);
+ cmsPipelineEvalFloat(cpy2, In, Out, pipe);
rc = (IsGoodVal("0", Out[0], 1.0-In[0], 0.001) &&
IsGoodVal("1", Out[1], 1.0-In[1], 0.001) &&
IsGoodVal("2", Out[2], 1.0-In[2], 0.001));
- cmsCloseProfile(cpy, h);
- cmsDeleteContext(ctx);
- cmsDeleteContext(cpy);
+ cmsCloseProfile(cpy2, h);
+ cmsDeleteContext(cpy2);
return rc;
Error:
- if (h != NULL) cmsCloseProfile(ctx, h);
- if (ctx != NULL) cmsDeleteContext(ctx);
- if (cpy != NULL) cmsDeleteContext(cpy);
+ if (h != NULL) cmsCloseProfile(cpy2, h);
+ if (cpy2 != NULL) cmsDeleteContext(cpy2);
if (data) free(data);
return 0;
@@ -1117,12 +1124,12 @@ cmsBool MyOptimize(cmsContext ContextID, cmsPipeline** Lut,
cmsPluginOptimization OptimizationPluginSample = {
- {cmsPluginMagicNumber, 2060, cmsPluginOptimizationSig, NULL},
+ {cmsPluginMagicNumber, 2060-2000, cmsPluginOptimizationSig, NULL},
MyOptimize
};
-cmsInt32Number CheckOptimizationPlugin(void)
+cmsInt32Number CheckOptimizationPlugin(cmsContext ContextID)
{
cmsContext ctx = WatchDogContext(NULL);
cmsContext cpy;
@@ -1205,12 +1212,12 @@ cmsPipeline* MyNewIntent(cmsContext ContextID,
static cmsPluginRenderingIntent IntentPluginSample = {
- {cmsPluginMagicNumber, 2060, cmsPluginRenderingIntentSig, NULL},
+ {cmsPluginMagicNumber, 2060-2000, cmsPluginRenderingIntentSig, NULL},
INTENT_DECEPTIVE, MyNewIntent, "bypass gray to gray rendering intent"
};
-cmsInt32Number CheckIntentPlugin(void)
+cmsInt32Number CheckIntentPlugin(cmsContext ContextID)
{
cmsContext ctx = WatchDogContext(NULL);
cmsContext cpy;
@@ -1295,12 +1302,12 @@ cmsBool TransformFactory(cmsContext ContextID, _cmsTransformFn* xformPtr,
// The Plug-in entry point
static cmsPluginTransform FullTransformPluginSample = {
- { cmsPluginMagicNumber, 2060, cmsPluginTransformSig, NULL},
+ { cmsPluginMagicNumber, 2060-2000, cmsPluginTransformSig, NULL},
TransformFactory
};
-cmsInt32Number CheckTransformPlugin(void)
+cmsInt32Number CheckTransformPlugin(cmsContext ContextID)
{
cmsContext ctx = WatchDogContext(NULL);
cmsContext cpy;
@@ -1390,7 +1397,7 @@ static cmsPluginMutex MutexPluginSample = {
};
-cmsInt32Number CheckMutexPlugin(void)
+cmsInt32Number CheckMutexPlugin(cmsContext ContextID)
{
cmsContext ctx = WatchDogContext(NULL);
cmsContext cpy;
@@ -1424,3 +1431,75 @@ cmsInt32Number CheckMutexPlugin(void)
return 1;
}
+
+
+cmsInt32Number CheckMethodPackDoublesFromFloat(cmsContext ContextID)
+{
+
+ cmsContext ctx = WatchDogContext(NULL);
+
+ cmsHTRANSFORM xform;
+ cmsHTRANSFORM l_pFakeProfileLAB;
+
+ cmsFloat64Number l_D_OutputColorArrayBlack[8];
+ cmsFloat64Number l_D_OutputColorArrayBlue[8];
+
+ cmsCIELab LabInBlack;
+ cmsCIELab LabInBlue;
+
+ cmsUInt16Number Lab_UI16_Black[3];
+ cmsUInt16Number Lab_UI16_Blue[3];
+
+ cmsHPROFILE OutputCMYKProfile;
+ cmsUInt32Number l_UI32_OutputFormat;
+
+
+ cmsPlugin(ctx, &FullTransformPluginSample);
+
+
+ l_pFakeProfileLAB = cmsCreateLab2Profile(ctx, NULL);
+
+ if (l_pFakeProfileLAB == NULL)
+ return 0;
+
+ OutputCMYKProfile = cmsOpenProfileFromFile(ctx, "TestCLT.icc", "r");
+
+ if (OutputCMYKProfile == NULL)
+ return 0;
+
+ l_UI32_OutputFormat = 0;
+ l_UI32_OutputFormat |= COLORSPACE_SH(PT_CMYK);
+ l_UI32_OutputFormat |= PLANAR_SH(1);
+ l_UI32_OutputFormat |= CHANNELS_SH(4);
+ l_UI32_OutputFormat |= BYTES_SH(0);
+ l_UI32_OutputFormat |= FLOAT_SH(1);
+
+
+ xform = cmsCreateTransform(ctx, l_pFakeProfileLAB, TYPE_Lab_DBL, OutputCMYKProfile, l_UI32_OutputFormat, INTENT_PERCEPTUAL, 0);
+ cmsCloseProfile(ctx, OutputCMYKProfile);
+ cmsCloseProfile(ctx, l_pFakeProfileLAB);
+
+ Lab_UI16_Black[0] = 0;
+ Lab_UI16_Black[1] = 32768;
+ Lab_UI16_Black[2] = 32768;
+
+ Lab_UI16_Blue[0] = 0;
+ Lab_UI16_Blue[1] = 8192;
+ Lab_UI16_Blue[2] = 8192;
+
+ cmsLabEncoded2Float(ctx, &LabInBlack, Lab_UI16_Black);
+ cmsLabEncoded2Float(ctx, &LabInBlue, Lab_UI16_Blue);
+
+ memset(l_D_OutputColorArrayBlack, 0, sizeof(l_D_OutputColorArrayBlack));
+ memset(l_D_OutputColorArrayBlue, 0, sizeof(l_D_OutputColorArrayBlue));
+
+ cmsDoTransform(ctx, xform, &LabInBlack, l_D_OutputColorArrayBlack, 1);
+ cmsDoTransform(ctx, xform, &LabInBlue, l_D_OutputColorArrayBlue, 1);
+
+
+ cmsDeleteTransform(ctx, xform);
+ cmsDeleteContext(ctx);
+
+ return 1;
+}
+
diff --git a/lcms2mt/testbed/zoo_icc.c b/lcms2mt/testbed/zoo_icc.c
index 06d05887..929bb5d5 100755
--- a/lcms2mt/testbed/zoo_icc.c
+++ b/lcms2mt/testbed/zoo_icc.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lcms2mt/utils/common/utils.h b/lcms2mt/utils/common/utils.h
index 4df35b07..6c78b062 100644
--- a/lcms2mt/utils/common/utils.h
+++ b/lcms2mt/utils/common/utils.h
@@ -2,7 +2,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lcms2mt/utils/common/vprf.c b/lcms2mt/utils/common/vprf.c
index d2e1efc0..9e8c13e9 100644
--- a/lcms2mt/utils/common/vprf.c
+++ b/lcms2mt/utils/common/vprf.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lcms2mt/utils/jpgicc/Makefile.am b/lcms2mt/utils/jpgicc/Makefile.am
index d0a0897f..e0d975b9 100644
--- a/lcms2mt/utils/jpgicc/Makefile.am
+++ b/lcms2mt/utils/jpgicc/Makefile.am
@@ -14,7 +14,7 @@ else
bin_PROGRAMS =
endif
-jpgicc_LDADD = $(top_builddir)/src/liblcms2.la @JPEGICC_DEPLIBS@
+jpgicc_LDADD = $(top_builddir)/src/liblcms2mt.la @JPEGICC_DEPLIBS@
jpgicc_LDFLAGS = @LDFLAGS@
jpgicc_SOURCES = jpgicc.c iccjpeg.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h
man_MANS = jpgicc.1
diff --git a/lcms2mt/utils/jpgicc/Makefile.in b/lcms2mt/utils/jpgicc/Makefile.in
index 69032832..978d6ad7 100644
--- a/lcms2mt/utils/jpgicc/Makefile.in
+++ b/lcms2mt/utils/jpgicc/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -117,7 +117,7 @@ am__dirstamp = $(am__leading_dot)dirstamp
am_jpgicc_OBJECTS = jpgicc.$(OBJEXT) iccjpeg.$(OBJEXT) \
../common/xgetopt.$(OBJEXT) ../common/vprf.$(OBJEXT)
jpgicc_OBJECTS = $(am_jpgicc_OBJECTS)
-jpgicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la
+jpgicc_DEPENDENCIES = $(top_builddir)/src/liblcms2mt.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -139,7 +139,7 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp =
-am__depfiles_maybe =
+am__maybe_remake_depfiles =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -362,7 +362,7 @@ AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies
AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \
-I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common
-jpgicc_LDADD = $(top_builddir)/src/liblcms2.la @JPEGICC_DEPLIBS@
+jpgicc_LDADD = $(top_builddir)/src/liblcms2mt.la @JPEGICC_DEPLIBS@
jpgicc_LDFLAGS = @LDFLAGS@
jpgicc_SOURCES = jpgicc.c iccjpeg.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h
man_MANS = jpgicc.1
@@ -388,8 +388,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -576,7 +576,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/lcms2mt/utils/jpgicc/jpgicc.c b/lcms2mt/utils/jpgicc/jpgicc.c
index 55d4cc5c..41deff08 100644
--- a/lcms2mt/utils/jpgicc/jpgicc.c
+++ b/lcms2mt/utils/jpgicc/jpgicc.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -696,19 +696,19 @@ cmsUInt32Number ComputeOutputFormatDescriptor(cmsUInt32Number dwInput, int OutCo
// Equivalence between ICC color spaces and lcms color spaces
static
-int GetProfileColorSpace(cmsHPROFILE hProfile)
+int GetProfileColorSpace(cmsContext ContextID, cmsHPROFILE hProfile)
{
- cmsColorSpaceSignature ProfileSpace = cmsGetColorSpace(NULL, hProfile);
+ cmsColorSpaceSignature ProfileSpace = cmsGetColorSpace(ContextID, hProfile);
- return _cmsLCMScolorSpace(NULL, ProfileSpace);
+ return _cmsLCMScolorSpace(ContextID, ProfileSpace);
}
static
-int GetDevicelinkColorSpace(cmsHPROFILE hProfile)
+int GetDevicelinkColorSpace(cmsContext ContextID, cmsHPROFILE hProfile)
{
- cmsColorSpaceSignature ProfileSpace = cmsGetPCS(NULL, hProfile);
+ cmsColorSpaceSignature ProfileSpace = cmsGetPCS(ContextID, hProfile);
- return _cmsLCMScolorSpace(NULL, ProfileSpace);
+ return _cmsLCMScolorSpace(ContextID, ProfileSpace);
}
@@ -842,7 +842,7 @@ void DoEmbedProfile(const char* ProfileFile)
static
-int DoTransform(cmsHTRANSFORM hXForm, int OutputColorSpace)
+int DoTransform(cmsContext ContextID, cmsHTRANSFORM hXForm, int OutputColorSpace)
{
JSAMPROW ScanLineIn;
JSAMPROW ScanLineOut;
@@ -874,7 +874,7 @@ int DoTransform(cmsHTRANSFORM hXForm, int OutputColorSpace)
jpeg_read_scanlines(&Decompressor, &ScanLineIn, 1);
- cmsDoTransform(NULL, hXForm, ScanLineIn, ScanLineOut, Decompressor.output_width);
+ cmsDoTransform(ContextID, hXForm, ScanLineIn, ScanLineOut, Decompressor.output_width);
jpeg_write_scanlines(&Compressor, &ScanLineOut, 1);
}
@@ -893,7 +893,7 @@ int DoTransform(cmsHTRANSFORM hXForm, int OutputColorSpace)
// Transform one image
static
-int TransformImage(char *cDefInpProf, char *cOutputProf)
+int TransformImage(cmsContext ContextID, char *cDefInpProf, char *cOutputProf)
{
cmsHPROFILE hIn, hOut, hProof;
cmsHTRANSFORM xform;
@@ -904,7 +904,7 @@ int TransformImage(char *cDefInpProf, char *cOutputProf)
cmsUInt8Number* EmbedBuffer;
- cmsSetAdaptationState(ObserverAdaptationState);
+ cmsSetAdaptationState(ContextID, ObserverAdaptationState);
if (BlackPointCompensation) {
@@ -923,7 +923,7 @@ int TransformImage(char *cDefInpProf, char *cOutputProf)
if (GamutCheck) {
dwFlags |= cmsFLAGS_GAMUTCHECK;
- cmsSetAlarmCodes(Alarm);
+ cmsSetAlarmCodes(ContextID, Alarm);
}
// Take input color space
@@ -931,7 +931,7 @@ int TransformImage(char *cDefInpProf, char *cOutputProf)
if (lIsDeviceLink) {
- hIn = cmsOpenProfileFromFile(cDefInpProf, "r");
+ hIn = cmsOpenProfileFromFile(ContextID, cDefInpProf, "r");
hOut = NULL;
hProof = NULL;
}
@@ -939,12 +939,12 @@ int TransformImage(char *cDefInpProf, char *cOutputProf)
if (!IgnoreEmbedded && read_icc_profile(&Decompressor, &EmbedBuffer, &EmbedLen))
{
- hIn = cmsOpenProfileFromMem(EmbedBuffer, EmbedLen);
+ hIn = cmsOpenProfileFromMem(ContextID, EmbedBuffer, EmbedLen);
if (Verbose) {
fprintf(stdout, " (Embedded profile found)\n");
- PrintProfileInformation(NULL, hIn);
+ PrintProfileInformation(ContextID, hIn);
fflush(stdout);
}
@@ -987,17 +987,17 @@ int TransformImage(char *cDefInpProf, char *cOutputProf)
FatalError("Output profile couldn't be read.");
// Assure both, input profile and input JPEG are on same colorspace
- if (cmsGetColorSpace(NULL, hIn) != _cmsICCcolorSpace(NULL, T_COLORSPACE(wInput)))
+ if (cmsGetColorSpace(ContextID, hIn) != _cmsICCcolorSpace(ContextID, T_COLORSPACE(wInput)))
FatalError("Input profile is not operating in proper color space");
// Output colorspace is given by output profile
if (lIsDeviceLink) {
- OutputColorSpace = GetDevicelinkColorSpace(hIn);
+ OutputColorSpace = GetDevicelinkColorSpace(ContextID, hIn);
}
else {
- OutputColorSpace = GetProfileColorSpace(hOut);
+ OutputColorSpace = GetProfileColorSpace(ContextID, hOut);
}
jpeg_copy_critical_parameters(&Decompressor, &Compressor);
@@ -1007,22 +1007,22 @@ int TransformImage(char *cDefInpProf, char *cOutputProf)
wOutput = ComputeOutputFormatDescriptor(wInput, OutputColorSpace);
- xform = cmsCreateProofingTransform(hIn, wInput,
+ xform = cmsCreateProofingTransform(ContextID, hIn, wInput,
hOut, wOutput,
hProof, Intent,
ProofingIntent, dwFlags);
if (xform == NULL)
FatalError("Cannot transform by using the profiles");
- DoTransform(xform, OutputColorSpace);
+ DoTransform(ContextID, xform, OutputColorSpace);
jcopy_markers_execute(&Decompressor, &Compressor);
- cmsDeleteTransform(NULL, xform);
- cmsCloseProfile(NULL, hIn);
- cmsCloseProfile(NULL, hOut);
- if (hProof) cmsCloseProfile(NULL, hProof);
+ cmsDeleteTransform(ContextID, xform);
+ cmsCloseProfile(ContextID, hIn);
+ cmsCloseProfile(ContextID, hOut);
+ if (hProof) cmsCloseProfile(ContextID, hProof);
return 1;
}
@@ -1238,6 +1238,8 @@ void HandleSwitches(int argc, char *argv[])
int main(int argc, char* argv[])
{
+ cmsContext ContextID = cmsCreateContext(NULL, NULL);
+
InitUtils(NULL, "jpgicc");
HandleSwitches(argc, argv);
@@ -1249,13 +1251,15 @@ int main(int argc, char* argv[])
OpenInput(argv[xoptind]);
OpenOutput(argv[xoptind+1]);
- TransformImage(cInpProf, cOutProf);
+ TransformImage(ContextID, cInpProf, cOutProf);
if (Verbose) { fprintf(stdout, "\n"); fflush(stdout); }
Done();
+ cmsDeleteContext(ContextID);
+
return 0;
}
diff --git a/lcms2mt/utils/linkicc/Makefile.am b/lcms2mt/utils/linkicc/Makefile.am
index 3b918697..78cd3710 100644
--- a/lcms2mt/utils/linkicc/Makefile.am
+++ b/lcms2mt/utils/linkicc/Makefile.am
@@ -11,9 +11,9 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \
bin_PROGRAMS = linkicc
-linkicc_LDADD = $(top_builddir)/src/liblcms2.la
+linkicc_LDADD = $(top_builddir)/src/liblcms2mt.la
linkicc_LDFLAGS = @LDFLAGS@
linkicc_SOURCES = linkicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h
-linkicc_MANS = linkicc.1
+man_MANS = linkicc.1
EXTRA_DIST = $(man_MANS)
diff --git a/lcms2mt/utils/linkicc/Makefile.in b/lcms2mt/utils/linkicc/Makefile.in
index 2631ab87..c5cb2fc9 100644
--- a/lcms2mt/utils/linkicc/Makefile.in
+++ b/lcms2mt/utils/linkicc/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -111,13 +111,13 @@ DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)"
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
PROGRAMS = $(bin_PROGRAMS)
am__dirstamp = $(am__leading_dot)dirstamp
am_linkicc_OBJECTS = linkicc.$(OBJEXT) ../common/xgetopt.$(OBJEXT) \
../common/vprf.$(OBJEXT)
linkicc_OBJECTS = $(am_linkicc_OBJECTS)
-linkicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la
+linkicc_DEPENDENCIES = $(top_builddir)/src/liblcms2mt.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -139,7 +139,7 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp =
-am__depfiles_maybe =
+am__maybe_remake_depfiles =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -165,6 +165,36 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(man_MANS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -332,10 +362,10 @@ AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies
AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \
-I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common
-linkicc_LDADD = $(top_builddir)/src/liblcms2.la
+linkicc_LDADD = $(top_builddir)/src/liblcms2mt.la
linkicc_LDFLAGS = @LDFLAGS@
linkicc_SOURCES = linkicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h
-linkicc_MANS = linkicc.1
+man_MANS = linkicc.1
EXTRA_DIST = $(man_MANS)
all: all-am
@@ -358,8 +388,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -450,6 +480,49 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -503,7 +576,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@@ -535,9 +611,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) $(MANS)
installdirs:
- for dir in "$(DESTDIR)$(bindir)"; do \
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -592,7 +668,7 @@ info: info-am
info-am:
-install-data-am:
+install-data-am: install-man
install-dvi: install-dvi-am
@@ -608,7 +684,7 @@ install-info: install-info-am
install-info-am:
-install-man:
+install-man: install-man1
install-pdf: install-pdf-am
@@ -637,7 +713,9 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-binPROGRAMS
+uninstall-am: uninstall-binPROGRAMS uninstall-man
+
+uninstall-man: uninstall-man1
.MAKE: install-am install-strip
@@ -648,12 +726,13 @@ uninstall-am: uninstall-binPROGRAMS
html-am info info-am install install-am install-binPROGRAMS \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
- install-info install-info-am install-man install-pdf \
- install-pdf-am install-ps install-ps-am install-strip \
- installcheck installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-am uninstall uninstall-am uninstall-binPROGRAMS
+ install-info install-info-am install-man install-man1 \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
+ uninstall-binPROGRAMS uninstall-man uninstall-man1
.PRECIOUS: Makefile
diff --git a/lcms2mt/utils/linkicc/linkicc.c b/lcms2mt/utils/linkicc/linkicc.c
index e2fa28c9..3be4323f 100644
--- a/lcms2mt/utils/linkicc/linkicc.c
+++ b/lcms2mt/utils/linkicc/linkicc.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lcms2mt/utils/psicc/Makefile.am b/lcms2mt/utils/psicc/Makefile.am
index fd9839a8..3f6bf4f2 100644
--- a/lcms2mt/utils/psicc/Makefile.am
+++ b/lcms2mt/utils/psicc/Makefile.am
@@ -11,9 +11,9 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \
bin_PROGRAMS = psicc
-psicc_LDADD = $(top_builddir)/src/liblcms2.la @LCMS_LIB_DEPLIBS@
+psicc_LDADD = $(top_builddir)/src/liblcms2mt.la @LCMS_LIB_DEPLIBS@
psicc_LDFLAGS = @LDFLAGS@
psicc_SOURCES = psicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h
-psicc_MANS = psicc.1
+man_MANS = psicc.1
EXTRA_DIST = $(man_MANS)
diff --git a/lcms2mt/utils/psicc/Makefile.in b/lcms2mt/utils/psicc/Makefile.in
index 6fed4758..a7f44689 100644
--- a/lcms2mt/utils/psicc/Makefile.in
+++ b/lcms2mt/utils/psicc/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -111,13 +111,13 @@ DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)"
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
PROGRAMS = $(bin_PROGRAMS)
am__dirstamp = $(am__leading_dot)dirstamp
am_psicc_OBJECTS = psicc.$(OBJEXT) ../common/xgetopt.$(OBJEXT) \
../common/vprf.$(OBJEXT)
psicc_OBJECTS = $(am_psicc_OBJECTS)
-psicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la
+psicc_DEPENDENCIES = $(top_builddir)/src/liblcms2mt.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -139,7 +139,7 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp =
-am__depfiles_maybe =
+am__maybe_remake_depfiles =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -165,6 +165,36 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(man_MANS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -332,10 +362,10 @@ AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies
AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \
-I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common
-psicc_LDADD = $(top_builddir)/src/liblcms2.la
+psicc_LDADD = $(top_builddir)/src/liblcms2mt.la @LCMS_LIB_DEPLIBS@
psicc_LDFLAGS = @LDFLAGS@
psicc_SOURCES = psicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h
-psicc_MANS = psicc.1
+man_MANS = psicc.1
EXTRA_DIST = $(man_MANS)
all: all-am
@@ -358,8 +388,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -450,6 +480,49 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -503,7 +576,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@@ -535,9 +611,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) $(MANS)
installdirs:
- for dir in "$(DESTDIR)$(bindir)"; do \
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -592,7 +668,7 @@ info: info-am
info-am:
-install-data-am:
+install-data-am: install-man
install-dvi: install-dvi-am
@@ -608,7 +684,7 @@ install-info: install-info-am
install-info-am:
-install-man:
+install-man: install-man1
install-pdf: install-pdf-am
@@ -637,7 +713,9 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-binPROGRAMS
+uninstall-am: uninstall-binPROGRAMS uninstall-man
+
+uninstall-man: uninstall-man1
.MAKE: install-am install-strip
@@ -648,12 +726,13 @@ uninstall-am: uninstall-binPROGRAMS
html-am info info-am install install-am install-binPROGRAMS \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
- install-info install-info-am install-man install-pdf \
- install-pdf-am install-ps install-ps-am install-strip \
- installcheck installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-am uninstall uninstall-am uninstall-binPROGRAMS
+ install-info install-info-am install-man install-man1 \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
+ uninstall-binPROGRAMS uninstall-man uninstall-man1
.PRECIOUS: Makefile
diff --git a/lcms2mt/utils/psicc/psicc.c b/lcms2mt/utils/psicc/psicc.c
index 51851e00..3a4d9961 100644
--- a/lcms2mt/utils/psicc/psicc.c
+++ b/lcms2mt/utils/psicc/psicc.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lcms2mt/utils/samples/Makefile.am b/lcms2mt/utils/samples/Makefile.am
index b3b62017..d33f7aa5 100644
--- a/lcms2mt/utils/samples/Makefile.am
+++ b/lcms2mt/utils/samples/Makefile.am
@@ -11,9 +11,9 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \
bin_PROGRAMS = wtpt
-wtpt_LDADD = $(top_builddir)/src/liblcms2.la
+wtpt_LDADD = $(top_builddir)/src/liblcms2mt.la
wtpt_LDFLAGS = @LDFLAGS@
wtpt_SOURCES = wtpt.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h
-wtpt_MANS = wtpt.1
+man_MANS = wtpt.1
EXTRA_DIST = $(man_MANS) roundtrip.c mktiff8.c mkgrayer.c mkcmy.c itufax.c
diff --git a/lcms2mt/utils/tificc/Makefile.am b/lcms2mt/utils/tificc/Makefile.am
index 50f5dc44..9e3643f2 100644
--- a/lcms2mt/utils/tificc/Makefile.am
+++ b/lcms2mt/utils/tificc/Makefile.am
@@ -16,7 +16,7 @@ else
bin_PROGRAMS =
endif
-tificc_LDADD = $(top_builddir)/src/liblcms2.la @TIFFICC_DEPLIBS@
+tificc_LDADD = $(top_builddir)/src/liblcms2mt.la @TIFFICC_DEPLIBS@
tificc_LDFLAGS = @LDFLAGS@
tificc_SOURCES = tificc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h
man_MANS = tificc.1
diff --git a/lcms2mt/utils/tificc/Makefile.in b/lcms2mt/utils/tificc/Makefile.in
index de4d9c29..c85c881d 100644
--- a/lcms2mt/utils/tificc/Makefile.in
+++ b/lcms2mt/utils/tificc/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -117,7 +117,7 @@ am__dirstamp = $(am__leading_dot)dirstamp
am_tificc_OBJECTS = tificc.$(OBJEXT) ../common/xgetopt.$(OBJEXT) \
../common/vprf.$(OBJEXT)
tificc_OBJECTS = $(am_tificc_OBJECTS)
-tificc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la
+tificc_DEPENDENCIES = $(top_builddir)/src/liblcms2mt.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -139,7 +139,7 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp =
-am__depfiles_maybe =
+am__maybe_remake_depfiles =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -362,7 +362,7 @@ AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies
AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \
-I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common
-tificc_LDADD = $(top_builddir)/src/liblcms2.la @TIFFICC_DEPLIBS@
+tificc_LDADD = $(top_builddir)/src/liblcms2mt.la @TIFFICC_DEPLIBS@
tificc_LDFLAGS = @LDFLAGS@
tificc_SOURCES = tificc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h
man_MANS = tificc.1
@@ -388,8 +388,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -576,7 +576,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/lcms2mt/utils/tificc/tifdiff.c b/lcms2mt/utils/tificc/tifdiff.c
index 6719ec1c..fb12b3c4 100644
--- a/lcms2mt/utils/tificc/tifdiff.c
+++ b/lcms2mt/utils/tificc/tifdiff.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lcms2mt/utils/tificc/tificc.c b/lcms2mt/utils/tificc/tificc.c
index 2d2c70f3..445cc338 100644
--- a/lcms2mt/utils/tificc/tificc.c
+++ b/lcms2mt/utils/tificc/tificc.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -237,7 +237,7 @@ cmsFormatter TiffFormatterFactory(cmsContext ContextID, cmsUInt32Number Type,
return Result;
}
-static cmsPluginFormatters TiffLabPlugin = { {cmsPluginMagicNumber, 2000, cmsPluginFormattersSig, NULL}, TiffFormatterFactory };
+static cmsPluginFormatters TiffLabPlugin = { {cmsPluginMagicNumber, 2000-2000, cmsPluginFormattersSig, NULL}, TiffFormatterFactory };
@@ -375,7 +375,7 @@ cmsUInt32Number ComputeOutputFormatDescriptor(cmsUInt32Number dwInput, int OutCo
// Tile based transforms
static
-int TileBasedXform(cmsHTRANSFORM hXForm, TIFF* in, TIFF* out, int nPlanes)
+int TileBasedXform(cmsContext ContextID, cmsHTRANSFORM hXForm, TIFF* in, TIFF* out, int nPlanes)
{
tsize_t BufSizeIn = TIFFTileSize(in);
tsize_t BufSizeOut = TIFFTileSize(out);
@@ -385,16 +385,20 @@ int TileBasedXform(cmsHTRANSFORM hXForm, TIFF* in, TIFF* out, int nPlanes)
int PixelCount, j;
+ // Check for bad tiffs
+ if (BufSizeIn > INT_MAX || BufSizeOut > INT_MAX)
+ FatalError("Probably corrupted TIFF, tile too big.");
+
TIFFGetFieldDefaulted(in, TIFFTAG_TILEWIDTH, &tw);
TIFFGetFieldDefaulted(in, TIFFTAG_TILELENGTH, &tl);
PixelCount = (int) tw * tl;
BufferIn = (unsigned char *) _TIFFmalloc(BufSizeIn * nPlanes);
- if (!BufferIn) OutOfMem(BufSizeIn * nPlanes);
+ if (!BufferIn) OutOfMem((cmsUInt32Number) BufSizeIn * nPlanes);
BufferOut = (unsigned char *) _TIFFmalloc(BufSizeOut * nPlanes);
- if (!BufferOut) OutOfMem(BufSizeOut * nPlanes);
+ if (!BufferOut) OutOfMem((cmsUInt32Number) BufSizeOut * nPlanes);
for (i = 0; i < TileCount; i++) {
@@ -405,7 +409,7 @@ int TileBasedXform(cmsHTRANSFORM hXForm, TIFF* in, TIFF* out, int nPlanes)
BufferIn + (j*BufSizeIn), BufSizeIn) < 0) goto cleanup;
}
- cmsDoTransform(NULL, hXForm, BufferIn, BufferOut, PixelCount);
+ cmsDoTransform(ContextID, hXForm, BufferIn, BufferOut, PixelCount);
for (j=0; j < nPlanes; j++) {
@@ -431,7 +435,7 @@ cleanup:
// Strip based transforms
static
-int StripBasedXform(cmsHTRANSFORM hXForm, TIFF* in, TIFF* out, int nPlanes)
+int StripBasedXform(cmsContext ContextID, cmsHTRANSFORM hXForm, TIFF* in, TIFF* out, int nPlanes)
{
tsize_t BufSizeIn = TIFFStripSize(in);
tsize_t BufSizeOut = TIFFStripSize(out);
@@ -443,6 +447,10 @@ int StripBasedXform(cmsHTRANSFORM hXForm, TIFF* in, TIFF* out, int nPlanes)
int j;
int PixelCount;
+ // Check for bad tiffs
+ if (BufSizeIn > INT_MAX || BufSizeOut > INT_MAX)
+ FatalError("Probably corrupted TIFF, strip too big.");
+
TIFFGetFieldDefaulted(in, TIFFTAG_IMAGEWIDTH, &sw);
TIFFGetFieldDefaulted(in, TIFFTAG_ROWSPERSTRIP, &sl);
TIFFGetFieldDefaulted(in, TIFFTAG_IMAGELENGTH, &iml);
@@ -452,10 +460,10 @@ int StripBasedXform(cmsHTRANSFORM hXForm, TIFF* in, TIFF* out, int nPlanes)
sl = iml; // One strip for whole image
BufferIn = (unsigned char *) _TIFFmalloc(BufSizeIn * nPlanes);
- if (!BufferIn) OutOfMem(BufSizeIn * nPlanes);
+ if (!BufferIn) OutOfMem((cmsUInt32Number) BufSizeIn * nPlanes);
BufferOut = (unsigned char *) _TIFFmalloc(BufSizeOut * nPlanes);
- if (!BufferOut) OutOfMem(BufSizeOut * nPlanes);
+ if (!BufferOut) OutOfMem((cmsUInt32Number) BufSizeOut * nPlanes);
for (i = 0; i < StripCount; i++) {
@@ -469,7 +477,7 @@ int StripBasedXform(cmsHTRANSFORM hXForm, TIFF* in, TIFF* out, int nPlanes)
PixelCount = (int) sw * (iml < sl ? iml : sl);
iml -= sl;
- cmsDoTransform(NULL, hXForm, BufferIn, BufferOut, PixelCount);
+ cmsDoTransform(ContextID, hXForm, BufferIn, BufferOut, PixelCount);
for (j=0; j < nPlanes; j++) {
if (TIFFWriteEncodedStrip(out, i + (j * StripCount),
@@ -667,7 +675,7 @@ void DoEmbedProfile(TIFF* Out, const char* ProfileFile)
size = cmsfilelength(f);
if (size < 0) return;
- EmbedBuffer = (cmsUInt8Number*) malloc(size + 1);
+ EmbedBuffer = (cmsUInt8Number*) malloc((size_t) size + 1);
if (EmbedBuffer == NULL) {
OutOfMem(size+1);
return;
@@ -675,7 +683,7 @@ void DoEmbedProfile(TIFF* Out, const char* ProfileFile)
EmbedLen = (cmsUInt32Number) fread(EmbedBuffer, 1, (size_t) size, f);
- if (EmbedLen != size)
+ if (EmbedLen != (cmsUInt32Number) size)
FatalError("Cannot read %ld bytes to %s", size, ProfileFile);
fclose(f);
@@ -688,7 +696,7 @@ void DoEmbedProfile(TIFF* Out, const char* ProfileFile)
static
-cmsHPROFILE GetTIFFProfile(TIFF* in)
+cmsHPROFILE GetTIFFProfile(cmsContext ContextID, TIFF* in)
{
cmsCIExyYTRIPLE Primaries;
cmsFloat32Number* chr;
@@ -705,13 +713,13 @@ cmsHPROFILE GetTIFFProfile(TIFF* in)
if (TIFFGetField(in, TIFFTAG_ICCPROFILE, &EmbedLen, &EmbedBuffer)) {
- hProfile = cmsOpenProfileFromMem(EmbedBuffer, EmbedLen);
+ hProfile = cmsOpenProfileFromMem(ContextID, EmbedBuffer, EmbedLen);
// Print description found in the profile
if (Verbose && (hProfile != NULL)) {
fprintf(stdout, "\n[Embedded profile]\n");
- PrintProfileInformation(NULL, hProfile);
+ PrintProfileInformation(ContextID, hProfile);
fflush(stdout);
}
@@ -747,14 +755,14 @@ cmsHPROFILE GetTIFFProfile(TIFF* in)
&gmg,
&gmb);
- Curve[0] = cmsBuildTabulatedToneCurve16(NULL, 256, gmr);
- Curve[1] = cmsBuildTabulatedToneCurve16(NULL, 256, gmg);
- Curve[2] = cmsBuildTabulatedToneCurve16(NULL, 256, gmb);
+ Curve[0] = cmsBuildTabulatedToneCurve16(ContextID, 256, gmr);
+ Curve[1] = cmsBuildTabulatedToneCurve16(ContextID, 256, gmg);
+ Curve[2] = cmsBuildTabulatedToneCurve16(ContextID, 256, gmb);
- hProfile = cmsCreateRGBProfileTHR(NULL, &WhitePoint, &Primaries, Curve);
+ hProfile = cmsCreateRGBProfile(ContextID, &WhitePoint, &Primaries, Curve);
for (i=0; i < 3; i++)
- cmsFreeToneCurve(NULL, Curve[i]);
+ cmsFreeToneCurve(ContextID, Curve[i]);
if (Verbose) {
fprintf(stdout, "\n[Colorimetric TIFF]\n");
@@ -771,7 +779,7 @@ cmsHPROFILE GetTIFFProfile(TIFF* in)
// Transform one image
static
-int TransformImage(TIFF* in, TIFF* out, const char *cDefInpProf)
+int TransformImage(cmsContext ContextID, TIFF* in, TIFF* out, const char *cDefInpProf)
{
cmsHPROFILE hIn, hOut, hProof, hInkLimit = NULL;
cmsHTRANSFORM xform;
@@ -783,7 +791,7 @@ int TransformImage(TIFF* in, TIFF* out, const char *cDefInpProf)
// Observer adaptation state (only meaningful on absolute colorimetric intent)
- cmsSetAdaptationState(ObserverAdaptationState);
+ cmsSetAdaptationState(ContextID, ObserverAdaptationState);
if (EmbedProfile && cOutProf)
DoEmbedProfile(out, cOutProf);
@@ -811,20 +819,20 @@ int TransformImage(TIFF* in, TIFF* out, const char *cDefInpProf)
if (lIsDeviceLink) {
- hIn = cmsOpenProfileFromFile(cDefInpProf, "r");
+ hIn = cmsOpenProfileFromFile(ContextID, cDefInpProf, "r");
}
else {
- hIn = GetTIFFProfile(in);
+ hIn = GetTIFFProfile(ContextID, in);
if (hIn == NULL)
- hIn = OpenStockProfile(NULL, cDefInpProf);
+ hIn = OpenStockProfile(ContextID, cDefInpProf);
- hOut = OpenStockProfile(NULL, cOutProf);
+ hOut = OpenStockProfile(ContextID, cOutProf);
if (cProofing != NULL) {
- hProof = OpenStockProfile(NULL, cProofing);
+ hProof = OpenStockProfile(ContextID, cProofing);
dwFlags |= cmsFLAGS_SOFTPROOFING;
}
}
@@ -835,14 +843,14 @@ int TransformImage(TIFF* in, TIFF* out, const char *cDefInpProf)
// Assure both, input profile and input TIFF are on same colorspace
- if (_cmsLCMScolorSpace(NULL, cmsGetColorSpace(NULL, hIn)) != (int) T_COLORSPACE(wInput))
+ if (_cmsLCMScolorSpace(ContextID, cmsGetColorSpace(ContextID, hIn)) != (int) T_COLORSPACE(wInput))
FatalError("Input profile is not operating in proper color space");
if (!lIsDeviceLink)
- OutputColorSpace = _cmsLCMScolorSpace(NULL, cmsGetColorSpace(NULL, hOut));
+ OutputColorSpace = _cmsLCMScolorSpace(ContextID, cmsGetColorSpace(ContextID, hOut));
else
- OutputColorSpace = _cmsLCMScolorSpace(NULL, cmsGetPCS(NULL, hIn));
+ OutputColorSpace = _cmsLCMScolorSpace(ContextID, cmsGetPCS(ContextID, hIn));
wOutput = ComputeOutputFormatDescriptor(wInput, OutputColorSpace, bps);
@@ -857,7 +865,7 @@ int TransformImage(TIFF* in, TIFF* out, const char *cDefInpProf)
int nProfiles = 0;
- hInkLimit = cmsCreateInkLimitingDeviceLink(cmsGetColorSpace(NULL, hOut), InkLimit);
+ hInkLimit = cmsCreateInkLimitingDeviceLink(ContextID, cmsGetColorSpace(ContextID, hOut), InkLimit);
hProfiles[nProfiles++] = hIn;
if (hProof) {
@@ -868,26 +876,26 @@ int TransformImage(TIFF* in, TIFF* out, const char *cDefInpProf)
hProfiles[nProfiles++] = hOut;
hProfiles[nProfiles++] = hInkLimit;
- xform = cmsCreateMultiprofileTransform(hProfiles, nProfiles,
+ xform = cmsCreateMultiprofileTransform(ContextID, hProfiles, nProfiles,
wInput, wOutput, Intent, dwFlags);
}
else {
- xform = cmsCreateProofingTransform(hIn, wInput,
+ xform = cmsCreateProofingTransform(ContextID, hIn, wInput,
hOut, wOutput,
hProof, Intent,
ProofingIntent,
dwFlags);
}
- cmsCloseProfile(NULL, hIn);
- cmsCloseProfile(NULL, hOut);
+ cmsCloseProfile(ContextID, hIn);
+ cmsCloseProfile(ContextID, hOut);
if (hInkLimit)
- cmsCloseProfile(NULL, hInkLimit);
+ cmsCloseProfile(ContextID, hInkLimit);
if (hProof)
- cmsCloseProfile(NULL, hProof);
+ cmsCloseProfile(ContextID, hProof);
if (xform == NULL) return 0;
@@ -901,14 +909,14 @@ int TransformImage(TIFF* in, TIFF* out, const char *cDefInpProf)
// Handle tile by tile or strip by strip
if (TIFFIsTiled(in)) {
- TileBasedXform(xform, in, out, nPlanes);
+ TileBasedXform(ContextID, xform, in, out, nPlanes);
}
else {
- StripBasedXform(xform, in, out, nPlanes);
+ StripBasedXform(ContextID, xform, in, out, nPlanes);
}
- cmsDeleteTransform(NULL, xform);
+ cmsDeleteTransform(ContextID, xform);
TIFFWriteDirectory(out);
@@ -1134,11 +1142,14 @@ void HandleSwitches(int argc, char *argv[])
int main(int argc, char* argv[])
{
+ cmsContext ContextID;
TIFF *in, *out;
- cmsPlugin(&TiffLabPlugin);
+ ContextID = cmsCreateContext(NULL, NULL);
+
+ cmsPlugin(ContextID, &TiffLabPlugin);
- InitUtils(NULL, "tificc");
+ InitUtils(ContextID, "tificc");
HandleSwitches(argc, argv);
@@ -1164,7 +1175,7 @@ int main(int argc, char* argv[])
do {
- TransformImage(in, out, cInpProf);
+ TransformImage(ContextID, in, out, cInpProf);
} while (TIFFReadDirectory(in));
@@ -1175,6 +1186,7 @@ int main(int argc, char* argv[])
TIFFClose(in);
TIFFClose(out);
+ cmsDeleteContext(ContextID);
+
return 0;
}
-
diff --git a/lcms2mt/utils/transicc/Makefile.am b/lcms2mt/utils/transicc/Makefile.am
index 7f033c6c..9078250a 100644
--- a/lcms2mt/utils/transicc/Makefile.am
+++ b/lcms2mt/utils/transicc/Makefile.am
@@ -11,9 +11,9 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \
bin_PROGRAMS = transicc
-transicc_LDADD = $(top_builddir)/src/liblcms2.la @LCMS_LIB_DEPLIBS@
+transicc_LDADD = $(top_builddir)/src/liblcms2mt.la @LCMS_LIB_DEPLIBS@
transicc_LDFLAGS = @LDFLAGS@
transicc_SOURCES = transicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h
-transicc_MANS = transicc.1
+man_MANS = transicc.1
EXTRA_DIST = $(man_MANS)
diff --git a/lcms2mt/utils/transicc/Makefile.in b/lcms2mt/utils/transicc/Makefile.in
index ce93e538..c4032bc2 100644
--- a/lcms2mt/utils/transicc/Makefile.in
+++ b/lcms2mt/utils/transicc/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -111,13 +111,13 @@ DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)"
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
PROGRAMS = $(bin_PROGRAMS)
am__dirstamp = $(am__leading_dot)dirstamp
am_transicc_OBJECTS = transicc.$(OBJEXT) ../common/xgetopt.$(OBJEXT) \
../common/vprf.$(OBJEXT)
transicc_OBJECTS = $(am_transicc_OBJECTS)
-transicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la
+transicc_DEPENDENCIES = $(top_builddir)/src/liblcms2mt.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -139,7 +139,7 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp =
-am__depfiles_maybe =
+am__maybe_remake_depfiles =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -165,6 +165,36 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(man_MANS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -332,10 +362,10 @@ AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies
AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \
-I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common
-transicc_LDADD = $(top_builddir)/src/liblcms2.la
+transicc_LDADD = $(top_builddir)/src/liblcms2mt.la @LCMS_LIB_DEPLIBS@
transicc_LDFLAGS = @LDFLAGS@
transicc_SOURCES = transicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h
-transicc_MANS = transicc.1
+man_MANS = transicc.1
EXTRA_DIST = $(man_MANS)
all: all-am
@@ -358,8 +388,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -450,6 +480,49 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -503,7 +576,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@@ -535,9 +611,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) $(MANS)
installdirs:
- for dir in "$(DESTDIR)$(bindir)"; do \
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -592,7 +668,7 @@ info: info-am
info-am:
-install-data-am:
+install-data-am: install-man
install-dvi: install-dvi-am
@@ -608,7 +684,7 @@ install-info: install-info-am
install-info-am:
-install-man:
+install-man: install-man1
install-pdf: install-pdf-am
@@ -637,7 +713,9 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-binPROGRAMS
+uninstall-am: uninstall-binPROGRAMS uninstall-man
+
+uninstall-man: uninstall-man1
.MAKE: install-am install-strip
@@ -648,12 +726,13 @@ uninstall-am: uninstall-binPROGRAMS
html-am info info-am install install-am install-binPROGRAMS \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
- install-info install-info-am install-man install-pdf \
- install-pdf-am install-ps install-ps-am install-strip \
- installcheck installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-am uninstall uninstall-am uninstall-binPROGRAMS
+ install-info install-info-am install-man install-man1 \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
+ uninstall-binPROGRAMS uninstall-man uninstall-man1
.PRECIOUS: Makefile
diff --git a/lcms2mt/utils/transicc/transicc.c b/lcms2mt/utils/transicc/transicc.c
index 4bd1b5bd..a92e3e18 100644
--- a/lcms2mt/utils/transicc/transicc.c
+++ b/lcms2mt/utils/transicc/transicc.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2017 Marti Maria Saguer
+// Copyright (c) 1998-2020 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/lib/FCOfontmap-PCLPS3 b/lib/FCOfontmap-PCLPS3
index 1dd130e0..2a01896f 100644
--- a/lib/FCOfontmap-PCLPS3
+++ b/lib/FCOfontmap-PCLPS3
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/FCOfontmap-PS3 b/lib/FCOfontmap-PS3
index 58e66a80..17e597df 100644
--- a/lib/FCOfontmap-PS3
+++ b/lib/FCOfontmap-PS3
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/Fontmap.ATB b/lib/Fontmap.ATB
index ffd754e1..9f7f92c0 100644
--- a/lib/Fontmap.ATB
+++ b/lib/Fontmap.ATB
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/Fontmap.ATM b/lib/Fontmap.ATM
index 06bec7b8..5080f767 100644
--- a/lib/Fontmap.ATM
+++ b/lib/Fontmap.ATM
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/Fontmap.OS2 b/lib/Fontmap.OS2
index ec425235..404deb7a 100644
--- a/lib/Fontmap.OS2
+++ b/lib/Fontmap.OS2
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/Fontmap.SGI b/lib/Fontmap.SGI
index 353ea833..a6087f06 100644
--- a/lib/Fontmap.SGI
+++ b/lib/Fontmap.SGI
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/Fontmap.Sol b/lib/Fontmap.Sol
index 453031a6..add5a3cc 100644
--- a/lib/Fontmap.Sol
+++ b/lib/Fontmap.Sol
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/Fontmap.Ult b/lib/Fontmap.Ult
index 85e3006c..45329670 100644
--- a/lib/Fontmap.Ult
+++ b/lib/Fontmap.Ult
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/Fontmap.VMS b/lib/Fontmap.VMS
index 210dd736..1707191c 100644
--- a/lib/Fontmap.VMS
+++ b/lib/Fontmap.VMS
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/align.ps b/lib/align.ps
index e73c2718..8f2ebf5a 100644
--- a/lib/align.ps
+++ b/lib/align.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/caption.ps b/lib/caption.ps
index 5d7806af..1ec719a7 100644
--- a/lib/caption.ps
+++ b/lib/caption.ps
@@ -1,5 +1,5 @@
%!
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/cat.ps b/lib/cat.ps
index 3b65f3b4..506ccf4c 100644
--- a/lib/cat.ps
+++ b/lib/cat.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/cid2code.ps b/lib/cid2code.ps
index 46bd1d29..98423fb7 100644
--- a/lib/cid2code.ps
+++ b/lib/cid2code.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/docie.ps b/lib/docie.ps
index 286ef2cb..82a16bb0 100644
--- a/lib/docie.ps
+++ b/lib/docie.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/font2pcl.ps b/lib/font2pcl.ps
index db0131a2..2ce2c3d7 100644
--- a/lib/font2pcl.ps
+++ b/lib/font2pcl.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/gs_ce_e.ps b/lib/gs_ce_e.ps
index 41b29d9a..5db08a11 100644
--- a/lib/gs_ce_e.ps
+++ b/lib/gs_ce_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/gs_il2_e.ps b/lib/gs_il2_e.ps
index 684c6bde..7ef56d45 100644
--- a/lib/gs_il2_e.ps
+++ b/lib/gs_il2_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/gs_kanji.ps b/lib/gs_kanji.ps
index f93af381..862f5ff3 100644
--- a/lib/gs_kanji.ps
+++ b/lib/gs_kanji.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/gs_ksb_e.ps b/lib/gs_ksb_e.ps
index d038190b..4d228765 100644
--- a/lib/gs_ksb_e.ps
+++ b/lib/gs_ksb_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/gs_lgo_e.ps b/lib/gs_lgo_e.ps
index b6707ae6..dd04ff66 100644
--- a/lib/gs_lgo_e.ps
+++ b/lib/gs_lgo_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/gs_lgx_e.ps b/lib/gs_lgx_e.ps
index c2e3217c..0c12e2d8 100644
--- a/lib/gs_lgx_e.ps
+++ b/lib/gs_lgx_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/gs_wl1_e.ps b/lib/gs_wl1_e.ps
index ef05498b..72185fee 100644
--- a/lib/gs_wl1_e.ps
+++ b/lib/gs_wl1_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/gs_wl2_e.ps b/lib/gs_wl2_e.ps
index 5c337a4a..6b55c557 100644
--- a/lib/gs_wl2_e.ps
+++ b/lib/gs_wl2_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/gs_wl5_e.ps b/lib/gs_wl5_e.ps
index 8d6ce40f..4f259792 100644
--- a/lib/gs_wl5_e.ps
+++ b/lib/gs_wl5_e.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/gslp.ps b/lib/gslp.ps
index 002dc978..9e2c21bf 100644
--- a/lib/gslp.ps
+++ b/lib/gslp.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/gsnup.ps b/lib/gsnup.ps
index 4ea81bdf..ea01d874 100644
--- a/lib/gsnup.ps
+++ b/lib/gsnup.ps
@@ -1,5 +1,5 @@
%!
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/gssetgs.bat b/lib/gssetgs.bat
index e2805617..7c0b8000 100644
--- a/lib/gssetgs.bat
+++ b/lib/gssetgs.bat
@@ -2,13 +2,16 @@
rem Set default values for GS (gs with graphics window) and GSC
rem (console mode gs) if the user hasn't set them.
+rem if 64-bit version is available, prefer that.
if NOT %GS%/==/ goto :gsset
if EXIST %~dp0..\bin\gswin32.exe set GS=%~dp0..\bin\gswin32
+if EXIST %~dp0..\bin\gswin64.exe set GS=%~dp0..\bin\gswin64
if %GS/==/ set GS=gswin32
:gsset
if NOT %GSC%/==/ goto :gscset
if EXIST %~dp0..\bin\gswin32c.exe set GSC=%~dp0..\bin\gswin32c
+if EXIST %~dp0..\bin\gswin64c.exe set GS=%~dp0..\bin\gswin64c
if %GSC%/==/ set GSC=gswin32c
:gscset
diff --git a/lib/image-qa.ps b/lib/image-qa.ps
index 3dd10b6c..307a951d 100644
--- a/lib/image-qa.ps
+++ b/lib/image-qa.ps
@@ -1,5 +1,5 @@
%!PS
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/jispaper.ps b/lib/jispaper.ps
index 11d16fa8..d1e33e6a 100644
--- a/lib/jispaper.ps
+++ b/lib/jispaper.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/lines.ps b/lib/lines.ps
index 2b77d8e9..287b6bdb 100644
--- a/lib/lines.ps
+++ b/lib/lines.ps
@@ -1,5 +1,5 @@
%!
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/mkcidfm.ps b/lib/mkcidfm.ps
index bb6629ef..7dd92fe3 100644
--- a/lib/mkcidfm.ps
+++ b/lib/mkcidfm.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/pdf2dsc.ps b/lib/pdf2dsc.ps
index d836bf32..88bc1536 100644
--- a/lib/pdf2dsc.ps
+++ b/lib/pdf2dsc.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/pdf_info.ps b/lib/pdf_info.ps
index 547809c8..0b4654ab 100644
--- a/lib/pdf_info.ps
+++ b/lib/pdf_info.ps
@@ -1,5 +1,5 @@
%!PS
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/pfbtopfa.ps b/lib/pfbtopfa.ps
index 0e6301c2..2b69c58f 100644
--- a/lib/pfbtopfa.ps
+++ b/lib/pfbtopfa.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/ppath.ps b/lib/ppath.ps
index f37a9c5d..5c571019 100644
--- a/lib/ppath.ps
+++ b/lib/ppath.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/pphs.ps b/lib/pphs.ps
index 84fd99f4..8605f2dd 100644
--- a/lib/pphs.ps
+++ b/lib/pphs.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/prfont.ps b/lib/prfont.ps
index a4456382..059d2a08 100644
--- a/lib/prfont.ps
+++ b/lib/prfont.ps
@@ -1,7 +1,7 @@
%!
%%Creator: Eric Gisin <egisin@waterloo.csnet>
%%Title: Print font catalog
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/ps2ai.ps b/lib/ps2ai.ps
index e82fc497..20ae204e 100644
--- a/lib/ps2ai.ps
+++ b/lib/ps2ai.ps
@@ -1,5 +1,5 @@
%!
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/ps2epsi b/lib/ps2epsi
index d992180f..7590cb5a 100755
--- a/lib/ps2epsi
+++ b/lib/ps2epsi
@@ -1,30 +1,22 @@
#!/bin/sh
+# Revised in 2020 to use the eps2write device (within ps2epsi.ps)
+
# This definition is changed on install to match the
-# executable name set in the makefile
+# executable name set in the makefile, but we check a couple of other
+# places (bin/ sibling to $LIBDIR and 'gs' on the $PATH)
GS_EXECUTABLE=gs
-gs="`dirname \"$0\"`/$GS_EXECUTABLE"
+LIBDIR=`dirname $0`
+gs="$LIBDIR/$GS_EXECUTABLE"
if test ! -x "$gs"; then
- gs="$GS_EXECUTABLE"
-fi
-GS_EXECUTABLE="$gs"
-
-# try to create a temporary file securely
-if test -z "$TMPDIR"; then
- TMPDIR=/tmp
-fi
-if which mktemp >/dev/null 2>/dev/null; then
- tmpfile="`mktemp $TMPDIR/ps2epsi.XXXXXX`"
-else
- tmpdir=$TMPDIR/ps2epsi.$$
- (umask 077 && mkdir "$tmpdir")
- if test ! -d "$tmpdir"; then
- echo "failed: could not create temporary file"
- exit 1
+ # Might be executing lib/ps2epsi with bin/ as sibling to lib/
+ gs="$LIBDIR/../bin/$GS_EXECUTABLE"
+ if test ! -x "$gs"; then
+ # Fallback to using any 'gs' on the path
+ gs="$GS_EXECUTABLE"
fi
- tmpfile="$tmpdir"/ps2epsi$$
fi
-trap "rm -rf \"$tmpfile\"" 0 1 2 3 7 13 15
+GS_EXECUTABLE="$gs"
export outfile
@@ -35,8 +27,7 @@ fi
infile=$1;
-if [ $# -eq 1 ]
-then
+if [ $# -eq 1 ]; then
case "${infile}" in
*.ps) base=`basename "${infile}" .ps` ;;
*.cps) base=`basename "${infile}" .cps` ;;
@@ -49,70 +40,8 @@ else
outfile=$2
fi
-"$GS_EXECUTABLE" -q -dBATCH -dNOPAUSE -P- -sDEVICE=bbox -sOutputFile=/dev/null "${infile}" 2>${outfile}
-
-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";
- exit(0);
- }
- ' U="$USERNAME$LOGNAME" F=1 - F=2 "${infile}" >"$tmpfile"
-
-ls -l "${outfile}" |
-awk 'F==1 {
- b="%%BoundingBox: 0 0 0 0\\n";
- }
- /^%%BoundingBox:/ {b=$0; next;}
- /^%%HiResBoundingBox:/ {
- hb=$0;
- print "ps2edict where {pop} {/ps2edict 30 dict def} ifelse";
- print "ps2edict begin";
- print "/BBoxString (" b "\\n) def";
- print "/HiresBBoxString (" hb "\\n) def";
- print "end";
- exit(0);
- }
- ' F=1 - F=2 "${outfile}" >>"$tmpfile"
-
-"$GS_EXECUTABLE" -q -dNOPAUSE -P- -r72 -sDEVICE=bit -sOutputFile=/dev/null "$tmpfile" ps2epsi.ps "$tmpfile" <"${infile}" 1>&2
-rm -f "$tmpfile"
-rm -rf "$tmpdir"
-
-(
-cat << BEGINEPS
-save countdictstack mark newpath /showpage {} def /setpagedevice /pop load def
-%%EndProlog
-%%Page 1 1
-BEGINEPS
-
-cat "${infile}" |
-LC_ALL=C \
-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
-%%Trailer
-cleartomark countdictstack exch sub { end } repeat restore
-%%EOF
-ENDEPS
-
-) >> "${outfile}"
+# Note, we expect 'ps2epsi.ps' to be in the same directory as 'ps2epsi'
+"$GS_EXECUTABLE" -q -dNOOUTERSAVE -dNODISPLAY -dLastPage=1 -sOutputFile="${outfile}" \
+ --permit-file-all="${infile}" -- "$LIBDIR/ps2epsi.ps" "${infile}" 1>&2
exit 0
diff --git a/lib/ps2epsi.bat b/lib/ps2epsi.bat
index f5e7b3e5..b5ac5c28 100755
--- a/lib/ps2epsi.bat
+++ b/lib/ps2epsi.bat
@@ -1,33 +1,15 @@
-@echo off
+@echo off
if %1/==/ goto usage
if %2/==/ goto usage
call "%~dp0gssetgs.bat"
+
set infile=%~1
set outfile=%~2
-rem First we need to determine the bounding box. ps2epsi.ps below will pick
-rem the result up from %outfile%
-%GSC% -q -dNOPAUSE -dBATCH -P- -sDEVICE=bbox -sOutputFile=NUL %1 2> %2
-
-rem Ghostscript uses %outfile% to define the output file
-%GSC% -q -dNOPAUSE -P- -sDEVICE=bit -sOutputFile=NUL ps2epsi.ps < %1
-
-rem We bracket the actual file with a few commands to help encapsulation
-echo %%%%Page: 1 1 >> %2
-echo %%%%BeginDocument: %2 >> %2
-echo /InitDictCount countdictstack def gsave save mark newpath >> %2
-echo userdict /setpagedevice /pop load put >> %2
-
-rem Append the original onto the preview header
-rem cat.ps uses the %infile% and %outfile% environment variables for the filenames
-%GSC% -q -dNOPAUSE -dBATCH -P- -sDEVICE=bit -sOutputFile=NUL cat.ps
-
-
-echo %%%%EndDocument >> %2
-echo countdictstack InitDictCount sub { end } repeat >> %2
-echo cleartomark restore grestore >> %2
+rem Now convert the input to EPSF and add the Preview to the EPSF file
+%GSC% -q -dNOOUTERSAVE -dNODISPLAY -dLastPage=1 -sOutputFile=%outfile% --permit-file-read=%infile% -- %~dp0ps2epsi.ps %infile%
goto end
diff --git a/lib/ps2epsi.cmd b/lib/ps2epsi.cmd
index 9eafdbd8..c87d82e6 100755
--- a/lib/ps2epsi.cmd
+++ b/lib/ps2epsi.cmd
@@ -1,8 +1,3 @@
-/*
- * 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
@@ -10,25 +5,8 @@ if %2/==/ goto usage
set infile=%1
set outfile=%2
-rem First we need to determine the bounding box. ps2epsi.ps below will pick
-rem the result up from %outfile%
-gsos2 -q -dNOPAUSE -dBATCH -P- -sDEVICE=bbox -sOutputFile=NUL %infile% 2> %outfile%
-
-rem Ghostscript uses %outfile% to define the output file
-gsos2 -q -dNOPAUSE -P- -sDEVICE=bit -sOutputFile=NUL ps2epsi.ps < %infile%
-
-rem We bracket the actual file with a few commands to help encapsulation
-echo %%%%Page: 1 1 >> %outfile%
-echo %%%%BeginDocument: %outfile% >> %outfile%
-echo /InitDictCount countdictstack def gsave save mark newpath >> %outfile%
-echo userdict /setpagedevice /pop load put >> %outfile%
-
-rem Append the original onto the preview header
-copy %outfile% + %infile%
-
-echo %%%%EndDocument >> %outfile%
-echo countdictstack InitDictCount sub { end } repeat >> %outfile%
-echo cleartomark restore grestore >> %outfile%
+rem Now convert the input to EPSF and add the Preview to the EPSF file
+gsos2 -q -dNOOUTERSAVE -dNODISPLAY -dLastPage=1 -sOutputFile=%outfile% --permit-file-read=%infile% %~dp0ps2epsi.ps %infile%
goto end
diff --git a/lib/ps2epsi.ps b/lib/ps2epsi.ps
index 86f1d2ff..54621f92 100644
--- a/lib/ps2epsi.ps
+++ b/lib/ps2epsi.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -11,234 +11,163 @@
% Refer to licensing information at http://www.artifex.com or contact
% Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
% CA 94945, U.S.A., +1(415)492-9861, for further information.
-%
-
-% 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@ghostscript.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
- {
- % bbox written to outfile by bbox device from ps2epsi command file
- outfile (r) file /epsifile exch def
- /BBoxString epsifile 256 string readline pop def
- /HiresBBoxString epsifile 256 string readline pop def
- epsifile closefile
- % 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
- userdict /setpagedevice /pop load put
- } 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
- } {
- pop
- } ifelse
- } for
-
- % 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 BBoxString writestring epsifile (\n) writestring
- epsifile HiresBBoxString writestring epsifile (\n) writestring
-
- % Define character and bit widths for the output line buffer:
- /cwidth rm lm sub 1 add def
- /out cwidth string def
-
- epsifile (%%EndComments\n\n) writestring
- epsifile (%%BeginProlog\n) writestring
- 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
+% Convert a PostScript file to an EPSI file, adding the Preview Image.
+
+% If the file is already EPSF, then skip the creation of an EPSF, and
+% only add the preview. A warning is issued if the %%Pages: comment
+% indicates that there is more than a single page in the input file.
+
+% Expected invocation:
+% gs -q -dNOOUTERSAVE -dNODISPLAY -dLastPage=1 -sOutputFile=out.epsi --permit-file-read=in.ps -- ps2epsi.ps in.ps
+
+% Usually this will be invoked by the ps2epsi script (or .bat or .cmd versions)
+
+false % no errors from initial param check
+% NOOUTERSAVE is needed for the SAVE to not remove the tempfile (if one was needed)
+vmstatus pop pop 0 gt { (Error: missing -dNOOUTERSAVE option) = pop true } if
+% NODISPLAY may not be strictly needed, but we don't want to open the default device
+/NODISPLAY where { pop } { (Error: missing -dNODISPLAY option) = pop true } ifelse
+% LastPage is needed if we are using eps2write on a PostScript (or PDF) file that has multiple pages.
+/LastPage where { pop } { (Error: missing -dLastPage option) = pop true } ifelse
+% OutputFile is needed so that it gets on the permit-file-writing list
+/OutputFile where { pop } { (Error: missing -sOutputFile option) = pop true } ifelse
+
+.shellarguments not count 3 lt or count -1 roll or
+{
+ (usage: gs -q -dNOOUTERSAVE -dNODISPLAY -dLastPage=1 -sOutputFile=out.epsi --permit-file-read=in.eps -- ps2epsi.ps in.ps) =
+ quit
+} {
+ dup /InputFile exch def
+ (r) file /I exch def
+} ifelse
+
+/O OutputFile (w) file def
+
+/S 65535 string def
+
+/R { I S readline not { (Error: Unexpected end of file.) = quit } if } bind def
+/WL { O exch writestring O (\n) writestring } bind def % Write with linefeed
+/TName null def
+
+/EPSFheader (%!PS-Adobe-3.0 EPSF-3.0) def
+% Read the header to check if this file was EPSF
+R
+dup EPSFheader ne {
+ % InputFile was not EPSF
+ pop % discard the first line of the InputFile
+ % run the file through eps2write (into a tempfile) to make an EPSF
+ (_ps2epsi) (w+) .tempfile closefile /TName exch def
+ /SAVE save def
+ (eps2write) finddevice mark /OutputFile TName 3 index putdeviceprops pop
+ setdevice
+ InputFile run
+ SAVE restore
+ /I TName (r) file def
+ R
+} if
+WL % Write the first line (either from InputFile or the tempfile
+
+% From the "5002 Encapsulated PostScript File Format Specification Version 3.0 1 May 1992"
+% The preview section must appear after the header comment section, but
+% before the document prologue definitions. That is, it should immediately
+% follow the %%EndComments: line in the EPS file.
+{ % loop until we see the %%EndComments line, writing those lines to output
+ R
+ dup (%%EndComments) anchorsearch exch pop { % discard the match or extra copy of the string
+ pop exit % found it
} if
+ % Check the %%Pages: comment to issue a warning if there is more than one page.
+ dup (%%Pages:) anchorsearch exch pop { % discard the match or extra copy of the string
+ cvi 1 gt {
+ (Warning: EPSI files can only have 1 page, Only the first page will be in the preview.) =
+ } if
+ } if
+ % Collect the BoundingBox data that will be used when generating the preview
+ dup (%%BoundingBox:) anchorsearch exch pop { % discard the match or extra copy of the string
+ mark
+ exch token not { (Error: invalid BoundingBox parameters) = quit } if
+ exch token not { (Error: invalid BoundingBox parameters) = quit } if
+ exch token not { (Error: invalid BoundingBox parameters) = quit } if
+ exch token not { (Error: invalid BoundingBox parameters) = quit } if
+ exch pop ]
+ /BBox exch def
+ % Preview dimensions
+ /PWidth BBox dup 2 get exch 0 get sub def
+ /PHeight BBox dup 3 get exch 1 get sub def
+ } if
+ WL % send to output file with linefeed.
+} loop
+
+WL % send to output file with linefeed.
+
+% If the InputFile already has a preview, skip past it
+R
+dup (%%BeginPreview) anchorsearch exch pop { % discard the match or extra copy of the string
+ pop
+ % Read lines until after the %%EndPreview
+ {
+ R
+ (%%EndPreview) anchorsearch exch pop { % discard the match or extra copy of the string
+ pop pop exit % found it
+ } if
+ } loop
+ % Get the next line for use after the generated preview
+ R
+}
+if
+/LineAfterEndComments exch def
+
+//null (w+) .tempfile
+closefile % will be opened by bit device
+/Pname exch def
+
+(bit) selectdevice
+<<
+ /GrayValues 256 % Gray, not monochrome
+ /OutputFile Pname
+ /TextAlphaBits 4
+ /GraphicsAlphaBits 4
+ /LastPage 1 % TBD: does this work?
+ /.IgnoreNumCopies true
+ /Install { BBox 0 get neg BBox 1 get neg translate { 1.0 exch sub } settransfer } % EPSI 00 is white
+ /HWResolution [ 72. 72. ]
+ /PageSize [ PWidth PHeight ]
+>> setpagedevice
+
+InputFile run
+
+/P Pname (r) file def % Preview data file
+/SP PWidth string def % One string per image line
+
+% Write the preview
+O (%%BeginPreview: ) writestring
+O PWidth write==only O ( ) writestring
+O PHeight write==only O ( 8 ) writestring
+O PHeight PWidth 39 add 40 idiv mul write== % 40 bytes per line
+O flushfile
+0 1 PHeight 1 sub {
+ pop
+ P SP readstring pop
+ 0 40 PWidth {
+ O (% ) writestring % 82 bytes on each line, plus EOL
+ SP exch 40 PWidth 2 index sub .min getinterval
+ O exch writehexstring
+ O (\n) writestring
+ } for
+ pop
+} for
+(%%EndPreview) WL
+
+% Write the line that followed the %%EndComments
+LineAfterEndComments WL
+
+% Copy the remainder of the inputfile
+{
+ I S readstring exch O exch writestring not { exit } if
+} loop
+
+% If we created a tempfile, delete it
+TName null ne { TName deletefile } if
-end
quit
diff --git a/lib/rollconv.ps b/lib/rollconv.ps
index 031747f1..3a39e021 100644
--- a/lib/rollconv.ps
+++ b/lib/rollconv.ps
@@ -1,5 +1,5 @@
%!
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/stcinfo.ps b/lib/stcinfo.ps
index beda3a29..dd0477c3 100644
--- a/lib/stcinfo.ps
+++ b/lib/stcinfo.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/stcolor.ps b/lib/stcolor.ps
index 7f0ca3ab..f14b44b8 100644
--- a/lib/stcolor.ps
+++ b/lib/stcolor.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/stocht.ps b/lib/stocht.ps
index dcfa5f7c..8c9bb438 100644
--- a/lib/stocht.ps
+++ b/lib/stocht.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/traceimg.ps b/lib/traceimg.ps
index 1bb256a1..4ab8720f 100644
--- a/lib/traceimg.ps
+++ b/lib/traceimg.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/traceop.ps b/lib/traceop.ps
index 7d98d4a0..ecd8ce27 100644
--- a/lib/traceop.ps
+++ b/lib/traceop.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/uninfo.ps b/lib/uninfo.ps
index dc93b8e2..98e89062 100644
--- a/lib/uninfo.ps
+++ b/lib/uninfo.ps
@@ -1,5 +1,5 @@
%!
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/viewcmyk.ps b/lib/viewcmyk.ps
index 5cc76981..e4250bf1 100644
--- a/lib/viewcmyk.ps
+++ b/lib/viewcmyk.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/viewgif.ps b/lib/viewgif.ps
index 423bfff0..55a39862 100644
--- a/lib/viewgif.ps
+++ b/lib/viewgif.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/viewmiff.ps b/lib/viewmiff.ps
index 2b60ccd0..39d715d0 100644
--- a/lib/viewmiff.ps
+++ b/lib/viewmiff.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/viewpbm.ps b/lib/viewpbm.ps
index ab4ede66..ec355313 100644
--- a/lib/viewpbm.ps
+++ b/lib/viewpbm.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/viewpcx.ps b/lib/viewpcx.ps
index 81531aff..6840f1e5 100644
--- a/lib/viewpcx.ps
+++ b/lib/viewpcx.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/viewps2a.ps b/lib/viewps2a.ps
index 91e5894f..e0fb32bd 100644
--- a/lib/viewps2a.ps
+++ b/lib/viewps2a.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/viewraw.ps b/lib/viewraw.ps
index ec1e1d7a..f1a3f890 100644
--- a/lib/viewraw.ps
+++ b/lib/viewraw.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/viewrgb.ps b/lib/viewrgb.ps
index 8b77dd2d..adde24e4 100644
--- a/lib/viewrgb.ps
+++ b/lib/viewrgb.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/winmaps.ps b/lib/winmaps.ps
index 06da63aa..75933fc2 100644
--- a/lib/winmaps.ps
+++ b/lib/winmaps.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/lib/zeroline.ps b/lib/zeroline.ps
index 521b1de0..7ace3ca3 100644
--- a/lib/zeroline.ps
+++ b/lib/zeroline.ps
@@ -1,5 +1,5 @@
%!
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/man/dvipdf.1 b/man/dvipdf.1
index 7880e46c..446b237d 100644
--- a/man/dvipdf.1
+++ b/man/dvipdf.1
@@ -1,4 +1,4 @@
-.TH DVIPDF 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
+.TH DVIPDF 1 "10 September 2020" 9.53.0 Ghostscript \" -*- nroff -*-
.SH NAME
dvipdf \- Convert TeX DVI file to PDF using ghostscript and dvips
.SH SYNOPSIS
@@ -21,7 +21,7 @@ and any options from the command-line.
.SH SEE ALSO
gs(1), dvips(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/gs.1 b/man/gs.1
index c86937eb..2cd715fc 100644
--- a/man/gs.1
+++ b/man/gs.1
@@ -1,4 +1,4 @@
-.TH GS 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
+.TH GS 1 "10 September 2020" 9.53.0 Ghostscript \" -*- nroff -*-
.SH NAME
gs \- Ghostscript (PostScript and PDF language interpreter and previewer)
.SH SYNOPSIS
@@ -442,7 +442,7 @@ The various Ghostscript document files (above), especially \fBUse.htm\fR.
See http://bugs.ghostscript.com/ and the Usenet news group
comp.lang.postscript.
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
.SH AUTHOR
Artifex Software, Inc. are the primary maintainers
of Ghostscript.
diff --git a/man/gslp.1 b/man/gslp.1
index f0d23cbe..149c52ae 100644
--- a/man/gslp.1
+++ b/man/gslp.1
@@ -1,4 +1,4 @@
-.TH GSLP 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
+.TH GSLP 1 "10 September 2020" 9.53.0 Ghostscript \" -*- nroff -*-
.SH NAME
gslp \- Format and print text using ghostscript
.br
@@ -92,7 +92,7 @@ Also, the string %# in a heading or footing is replaced with the page #.
.SH SEE ALSO
gs(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/gsnd.1 b/man/gsnd.1
index 045478ee..373ca32d 100644
--- a/man/gsnd.1
+++ b/man/gsnd.1
@@ -1,4 +1,4 @@
-.TH GSND 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
+.TH GSND 1 "10 September 2020" 9.53.0 Ghostscript \" -*- nroff -*-
.SH NAME
gsnd \- Run ghostscript (PostScript and PDF engine) without display
.SH SYNOPSIS
@@ -12,7 +12,7 @@ flag, followed by any other arguments from the command-line.
.SH SEE ALSO
gs(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/pdf2dsc.1 b/man/pdf2dsc.1
index 783ed727..6fcce730 100644
--- a/man/pdf2dsc.1
+++ b/man/pdf2dsc.1
@@ -1,4 +1,4 @@
-.TH PDF2DSC 1 "19 March 2020" 9.52 "Ghostscript Tools" \" -*- nroff -*-
+.TH PDF2DSC 1 "10 September 2020" 9.53.0 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
pdf2dsc \- generate a PostScript page list of a PDF document
.SH SYNOPSIS
@@ -28,6 +28,6 @@ Ghostscript since release 3.53.
.SH SEE ALSO
gs(1), ghostview(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
.SH AUTHOR
Yves Arrouye <yves.arrouye@usa.net> and Russell Lang gsview at ghostgum.com.au
diff --git a/man/pdf2ps.1 b/man/pdf2ps.1
index 0490dcef..fd76709c 100644
--- a/man/pdf2ps.1
+++ b/man/pdf2ps.1
@@ -1,4 +1,4 @@
-.TH PDF2PS 1 "19 March 2020" 9.52 "Ghostscript Tools" \" -*- nroff -*-
+.TH PDF2PS 1 "10 September 2020" 9.53.0 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
pdf2ps \- Ghostscript PDF to PostScript translator
.SH SYNOPSIS
@@ -14,7 +14,7 @@ LanguageLevel 3 in the output.
Run "\fBgs -h\fR" to find the location of Ghostscript documentation on your
system, from which you can get more details.
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/pf2afm.1 b/man/pf2afm.1
index 4fb679b9..87de712a 100644
--- a/man/pf2afm.1
+++ b/man/pf2afm.1
@@ -1,4 +1,4 @@
-.TH PF2AFM 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
+.TH PF2AFM 1 "10 September 2020" 9.53.0 Ghostscript \" -*- nroff -*-
.SH NAME
pf2afm \- Make an AFM file from Postscript (PFB/PFA/PFM) font files using ghostscript
.SH SYNOPSIS
@@ -15,7 +15,7 @@ gs(1)
.br
pf2afm.ps in the Ghostscript lib directory.
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/pfbtopfa.1 b/man/pfbtopfa.1
index 7ffdfd20..a245a851 100644
--- a/man/pfbtopfa.1
+++ b/man/pfbtopfa.1
@@ -1,4 +1,4 @@
-.TH PFBTOPFA 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
+.TH PFBTOPFA 1 "10 September 2020" 9.53.0 Ghostscript \" -*- nroff -*-
.SH NAME
pfbtopfa \- Convert Postscript .pfb fonts to .pfa format using ghostscript
.SH SYNOPSIS
@@ -10,7 +10,7 @@ to convert a .pfb file into a .pfa file.
.SH SEE ALSO
gs(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/printafm.1 b/man/printafm.1
index 338f8eaa..75aca2b4 100644
--- a/man/printafm.1
+++ b/man/printafm.1
@@ -1,4 +1,4 @@
-.TH PRINTAFM 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
+.TH PRINTAFM 1 "10 September 2020" 9.53.0 Ghostscript \" -*- nroff -*-
.SH NAME
printafm \- Print the metrics from a Postscript font in AFM format using ghostscript
.SH SYNOPSIS
@@ -11,7 +11,7 @@ Output goes to stdout.
.SH SEE ALSO
gs(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/ps2ascii.1 b/man/ps2ascii.1
index 548cfe24..8f1db5ea 100644
--- a/man/ps2ascii.1
+++ b/man/ps2ascii.1
@@ -1,4 +1,4 @@
-.TH PS2ASCII 1 "19 March 2020" 9.52 "Ghostscript Tools" \" -*- nroff -*-
+.TH PS2ASCII 1 "10 September 2020" 9.53.0 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
ps2ascii \- Ghostscript translator from PostScript or PDF to ASCII
.SH SYNOPSIS
@@ -22,7 +22,7 @@ system, from which you can get more details.
.SH SEE ALSO
pstotext(1), http://www.research.digital.com/SRC/virtualpaper/pstotext.html
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/ps2epsi.1 b/man/ps2epsi.1
index 00220860..6e43d8b6 100644
--- a/man/ps2epsi.1
+++ b/man/ps2epsi.1
@@ -1,4 +1,4 @@
-.TH PS2EPSI 1 "19 March 2020" 9.52 "Ghostscript Tools" \" -*- nroff -*-
+.TH PS2EPSI 1 "10 September 2020" 9.53.0 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
ps2epsi \- generate conforming Encapsulated PostScript
.SH SYNOPSIS
@@ -59,7 +59,7 @@ ps2epsi.ps>the Ghostscript program which does the work
.SH SEE ALSO
gs (1)
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
However, the content may be obsolete, or inconsistent with ps2epsi.txt.
.SH AUTHOR
George Cameron
diff --git a/man/ps2pdf.1 b/man/ps2pdf.1
index e584e5a1..9890235d 100644
--- a/man/ps2pdf.1
+++ b/man/ps2pdf.1
@@ -1,4 +1,4 @@
-.TH PS2PDF 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
+.TH PS2PDF 1 "10 September 2020" 9.53.0 Ghostscript \" -*- nroff -*-
.SH NAME
ps2pdf \- Convert PostScript to PDF using ghostscript
.br
@@ -84,12 +84,12 @@ Converting as part of a pipe:
.SH SEE ALSO
gs(1), ps2pdfwr(1),
.br
-Ps2pdf.htm in the Ghostscript documentation
+VectorDevices.htm in the Ghostscript documentation
.SH BUGS
See http://bugs.ghostscript.com/ and the Usenet news group
comp.lang.postscript.
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/ps2pdfwr.1 b/man/ps2pdfwr.1
index dfddcb86..dd8dda7d 100644
--- a/man/ps2pdfwr.1
+++ b/man/ps2pdfwr.1
@@ -1,4 +1,4 @@
-.TH PS2PDFWR 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
+.TH PS2PDFWR 1 "10 September 2020" 9.53.0 Ghostscript \" -*- nroff -*-
.SH NAME
ps2pdfwr \- Convert PostScript to PDF without specifying CompatibilityLevel, using ghostscript
.SH SYNOPSIS
@@ -23,7 +23,7 @@ scripts all invoke this one with the addition of the respective compatibility le
.SH SEE ALSO
gs(1), ps2pdf(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/ps2ps.1 b/man/ps2ps.1
index 747f9419..24c8459d 100644
--- a/man/ps2ps.1
+++ b/man/ps2ps.1
@@ -1,4 +1,4 @@
-.TH PS2PS 1 "19 March 2020" 9.52 "Ghostscript Tools" \" -*- nroff -*-
+.TH PS2PS 1 "10 September 2020" 9.53.0 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
ps2ps, eps2eps \- Ghostscript PostScript "distiller"
.SH SYNOPSIS
@@ -22,7 +22,7 @@ system, from which you can get more details.
.SH SEE ALSO
ps2pdf(1), ps2ascii(1), ps2epsi(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.52.
+This document was last revised for Ghostscript version 9.53.0.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/psi/bfont.h b/psi/bfont.h
index 7a1806a3..94748f34 100644
--- a/psi/bfont.h
+++ b/psi/bfont.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/btoken.h b/psi/btoken.h
index 5681a983..a93f2a57 100644
--- a/psi/btoken.h
+++ b/psi/btoken.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dmmain.c b/psi/dmmain.c
index d19f681b..24801a99 100644
--- a/psi/dmmain.c
+++ b/psi/dmmain.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dmmain.r b/psi/dmmain.r
index 2991a215..1a7f2a7a 100644
--- a/psi/dmmain.r
+++ b/psi/dmmain.r
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dpmain.c b/psi/dpmain.c
index 7cb72078..0184892d 100644
--- a/psi/dpmain.c
+++ b/psi/dpmain.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dscparse.c b/psi/dscparse.c
index 0c34eb14..f7c28fc8 100644
--- a/psi/dscparse.c
+++ b/psi/dscparse.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dscparse.h b/psi/dscparse.h
index 60baa517..d6af4d45 100644
--- a/psi/dscparse.h
+++ b/psi/dscparse.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dstack.h b/psi/dstack.h
index ab99fead..e827197f 100644
--- a/psi/dstack.h
+++ b/psi/dstack.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dw32c.def b/psi/dw32c.def
index 6a326280..7204a2cc 100644
--- a/psi/dw32c.def
+++ b/psi/dw32c.def
@@ -1,4 +1,4 @@
; 'Ghostscript Interpreter'
-NAME GSWIN32C
+NAME GSWIN32C
HEAPSIZE 256
STACKSIZE 131072
diff --git a/psi/dw64c.def b/psi/dw64c.def
index 9932c0be..5d3c0519 100644
--- a/psi/dw64c.def
+++ b/psi/dw64c.def
@@ -1,4 +1,4 @@
; 'Ghostscript Interpreter'
-NAME GSWIN64C
+NAME GSWIN64C
HEAPSIZE 256
STACKSIZE 131072
diff --git a/psi/dwdll.c b/psi/dwdll.c
index 2224a0e7..f8594f8c 100644
--- a/psi/dwdll.c
+++ b/psi/dwdll.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwdll.h b/psi/dwdll.h
index a8066242..5422f06c 100644
--- a/psi/dwdll.h
+++ b/psi/dwdll.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwimg.c b/psi/dwimg.c
index 62f7f5fb..e31bf8b2 100644
--- a/psi/dwimg.c
+++ b/psi/dwimg.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwimg.h b/psi/dwimg.h
index cbf6cea1..aff75b78 100644
--- a/psi/dwimg.h
+++ b/psi/dwimg.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwmain.c b/psi/dwmain.c
index de9f61cb..2fe1e9d1 100644
--- a/psi/dwmain.c
+++ b/psi/dwmain.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwmain.rc b/psi/dwmain.rc
index 2f8a8fa7..4b473d7b 100644
--- a/psi/dwmain.rc
+++ b/psi/dwmain.rc
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwmain32.def b/psi/dwmain32.def
index 3972c8cf..5da966a3 100644
--- a/psi/dwmain32.def
+++ b/psi/dwmain32.def
@@ -1,3 +1,3 @@
-NAME GSWIN32
+NAME GSWIN32
HEAPSIZE 256
STACKSIZE 131072
diff --git a/psi/dwmain64.def b/psi/dwmain64.def
index 1b9341a9..e6a8f21e 100644
--- a/psi/dwmain64.def
+++ b/psi/dwmain64.def
@@ -1,3 +1,3 @@
-NAME GSWIN64
+NAME GSWIN64
HEAPSIZE 256
STACKSIZE 131072
diff --git a/psi/dwmainc.c b/psi/dwmainc.c
index cc0db1f2..7fd21b91 100644
--- a/psi/dwmainc.c
+++ b/psi/dwmainc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -766,7 +766,7 @@ int wmain(int argc, wchar_t *argv[], wchar_t *envp[]) {
}
code = main_utf8(argc, nargv);
- if (0) {
+ if (0) {
err:
fprintf(stderr,
"Ghostscript failed to initialise due to malloc failure\n");
diff --git a/psi/dwnodll.c b/psi/dwnodll.c
index c8ea4501..382803c7 100644
--- a/psi/dwnodll.c
+++ b/psi/dwnodll.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwreg.c b/psi/dwreg.c
index ff7389ed..c9debca7 100644
--- a/psi/dwreg.c
+++ b/psi/dwreg.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwreg.h b/psi/dwreg.h
index 9f75662b..bb59db68 100644
--- a/psi/dwreg.h
+++ b/psi/dwreg.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwres.h b/psi/dwres.h
index 26f36aef..ff6b5ed8 100644
--- a/psi/dwres.h
+++ b/psi/dwres.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwsetup.def b/psi/dwsetup.def
index 28fe216d..71d9b935 100644
--- a/psi/dwsetup.def
+++ b/psi/dwsetup.def
@@ -1,4 +1,4 @@
; 'Ghostscript Setup'
-NAME SETUPGS
+NAME SETUPGS
HEAPSIZE 4096
STACKSIZE 32768
diff --git a/psi/dwtext.c b/psi/dwtext.c
index f690374d..39c9d9bb 100644
--- a/psi/dwtext.c
+++ b/psi/dwtext.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwtext.h b/psi/dwtext.h
index f6bd6ccf..e2457c8b 100644
--- a/psi/dwtext.h
+++ b/psi/dwtext.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwtrace.c b/psi/dwtrace.c
index 23e780bb..77b4d464 100644
--- a/psi/dwtrace.c
+++ b/psi/dwtrace.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwtrace.h b/psi/dwtrace.h
index 81245a36..30612792 100644
--- a/psi/dwtrace.h
+++ b/psi/dwtrace.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dwuninst.def b/psi/dwuninst.def
index 5a4002e2..f1c5f54c 100644
--- a/psi/dwuninst.def
+++ b/psi/dwuninst.def
@@ -1,4 +1,4 @@
; 'Ghostscript uninstall'
-NAME UNINSTGS
+NAME UNINSTGS
HEAPSIZE 4096
STACKSIZE 32768
diff --git a/psi/dxmain.c b/psi/dxmain.c
index a52ec362..728effd5 100644
--- a/psi/dxmain.c
+++ b/psi/dxmain.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/dxmainc.c b/psi/dxmainc.c
index c95c08ca..396484ab 100644
--- a/psi/dxmainc.c
+++ b/psi/dxmainc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/estack.h b/psi/estack.h
index 5bc7886b..706ca4be 100644
--- a/psi/estack.h
+++ b/psi/estack.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/files.h b/psi/files.h
index 9895d203..2ce9c306 100644
--- a/psi/files.h
+++ b/psi/files.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ghost.h b/psi/ghost.h
index 683de570..d25601cb 100644
--- a/psi/ghost.h
+++ b/psi/ghost.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/gs.c b/psi/gs.c
index 94e5a903..28fa6fce 100644
--- a/psi/gs.c
+++ b/psi/gs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/gsdll.c b/psi/gsdll.c
index 7fb14669..670bdeef 100644
--- a/psi/gsdll.c
+++ b/psi/gsdll.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/gsdll2.def b/psi/gsdll2.def
index b6e198ef..0bf09f33 100644
--- a/psi/gsdll2.def
+++ b/psi/gsdll2.def
@@ -14,8 +14,22 @@ EXPORTS
gsapi_run_file
gsapi_exit
gsapi_set_stdio
+ gsapi_set_stdio_with_handle
gsapi_set_poll
+ gsapi_set_poll_with_handle
gsapi_set_display_callback
+ gsapi_register_callout
+ gsapi_deregister_callout
gsapi_set_arg_encoding
gsapi_set_default_device_list
gsapi_get_default_device_list
+ gsapi_add_control_path
+ gsapi_remove_control_path
+ gsapi_purge_control_paths
+ gsapi_activate_path_control
+ gsapi_is_path_control_active
+ gsapi_add_fs
+ gsapi_remove_fs
+ gsapi_set_param
+ gsapi_get_param
+ gsapi_enumerate_params
diff --git a/psi/gsdll2.rc b/psi/gsdll2.rc
index 0daf3971..8712aedf 100644
--- a/psi/gsdll2.rc
+++ b/psi/gsdll2.rc
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/gsdll32.def b/psi/gsdll32.def
index 4f31f1fd..f4b6b519 100644
--- a/psi/gsdll32.def
+++ b/psi/gsdll32.def
@@ -1,37 +1,40 @@
; 'Ghostscript Interpreter DLL'
-LIBRARY GSDLL32
+LIBRARY GSDLL32
EXPORTS
- DllEntryPoint
- DllMain
- gsdll_revision @1
- gsdll_init @2
- gsdll_execute_begin @3
- gsdll_execute_cont @4
- gsdll_execute_end @5
- gsdll_exit @6
- gsdll_init_with_encoding
- gsdll_initA
- gsdll_initW
- gsapi_revision
- gsapi_new_instance
- gsapi_delete_instance
- gsapi_init_with_args
- gsapi_run_string_begin
- gsapi_run_string_continue
- gsapi_run_string_end
- gsapi_run_string_with_length
- gsapi_run_string
- gsapi_run_file
- gsapi_run_fileA
- gsapi_run_fileW
- gsapi_exit
- gsapi_set_stdio
- gsapi_set_poll
- gsapi_set_display_callback
- gsapi_set_arg_encoding
+ DllEntryPoint
+ DllMain
+ gsdll_revision @1
+ gsdll_init @2
+ gsdll_execute_begin @3
+ gsdll_execute_cont @4
+ gsdll_execute_end @5
+ gsdll_exit @6
+ gsdll_init_with_encoding
+ gsdll_initA
+ gsdll_initW
+ gsapi_revision
+ gsapi_new_instance
+ gsapi_delete_instance
+ gsapi_init_with_args
+ gsapi_run_string_begin
+ gsapi_run_string_continue
+ gsapi_run_string_end
+ gsapi_run_string_with_length
+ gsapi_run_string
+ gsapi_run_file
+ gsapi_run_fileA
+ gsapi_run_fileW
+ gsapi_exit
+ gsapi_set_stdio
+ gsapi_set_stdio_with_handle
+ gsapi_set_poll
+ gsapi_set_poll_with_handle
+ gsapi_set_display_callback
+ gsapi_register_callout
+ gsapi_deregister_callout
+ gsapi_set_arg_encoding
gsapi_set_default_device_list
gsapi_get_default_device_list
- gsapi_set_param
gsapi_add_control_path
gsapi_remove_control_path
gsapi_purge_control_paths
@@ -39,3 +42,6 @@ EXPORTS
gsapi_is_path_control_active
gsapi_add_fs
gsapi_remove_fs
+ gsapi_set_param
+ gsapi_get_param
+ gsapi_enumerate_params
diff --git a/psi/gsdll32.rc b/psi/gsdll32.rc
index 7ef58347..ecbea88c 100644
--- a/psi/gsdll32.rc
+++ b/psi/gsdll32.rc
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/gsdll32metro.def b/psi/gsdll32metro.def
index 998b1e68..7e9b7ab9 100644
--- a/psi/gsdll32metro.def
+++ b/psi/gsdll32metro.def
@@ -1,37 +1,41 @@
; 'Ghostscript Interpreter DLL'
-LIBRARY GSDLL32METRO
+LIBRARY GSDLL32METRO
EXPORTS
- DllEntryPoint
- DllMain
- gsdll_revision @1
- gsdll_init @2
- gsdll_execute_begin @3
- gsdll_execute_cont @4
- gsdll_execute_end @5
- gsdll_exit @6
- gsdll_init_with_encoding
- gsdll_initA
- gsdll_initW
- gsapi_revision
- gsapi_new_instance
- gsapi_delete_instance
- gsapi_init_with_args
- gsapi_init_with_argsA
- gsapi_init_with_argsW
- gsapi_run_string_begin
- gsapi_run_string_continue
- gsapi_run_string_end
- gsapi_run_string_with_length
- gsapi_run_string
- gsapi_run_file
- gsapi_exit
- gsapi_set_stdio
- gsapi_set_poll
- gsapi_set_display_callback
- gsapi_set_arg_encoding
+ DllEntryPoint
+ DllMain
+ gsdll_revision @1
+ gsdll_init @2
+ gsdll_execute_begin @3
+ gsdll_execute_cont @4
+ gsdll_execute_end @5
+ gsdll_exit @6
+ gsdll_init_with_encoding
+ gsdll_initA
+ gsdll_initW
+ gsapi_revision
+ gsapi_new_instance
+ gsapi_delete_instance
+ gsapi_init_with_args
+ gsapi_init_with_argsA
+ gsapi_init_with_argsW
+ gsapi_run_string_begin
+ gsapi_run_string_continue
+ gsapi_run_string_end
+ gsapi_run_string_with_length
+ gsapi_run_string
+ gsapi_run_file
+ gsapi_exit
+ gsapi_set_stdio
+ gsapi_set_stdio_with_handle
+ gsapi_set_poll
+ gsapi_set_poll_with_handle
+ gsapi_set_display_callback
+ gsapi_set_display_callback_with_handle
+ gsapi_register_callout
+ gsapi_deregister_callout
+ gsapi_set_arg_encoding
gsapi_set_default_device_list
gsapi_get_default_device_list
- gsapi_set_param
gsapi_add_control_path
gsapi_remove_control_path
gsapi_purge_control_paths
@@ -39,3 +43,6 @@ EXPORTS
gsapi_is_path_control_active
gsapi_add_fs
gsapi_remove_fs
+ gsapi_set_param
+ gsapi_get_param
+ gsapi_enumerate_params
diff --git a/psi/gsdll64.def b/psi/gsdll64.def
index b1bb0383..94675e6a 100644
--- a/psi/gsdll64.def
+++ b/psi/gsdll64.def
@@ -1,37 +1,40 @@
; 'Ghostscript Interpreter DLL'
-LIBRARY GSDLL64
+LIBRARY GSDLL64
EXPORTS
- DllEntryPoint
- DllMain
- gsdll_revision @1
- gsdll_init @2
- gsdll_execute_begin @3
- gsdll_execute_cont @4
- gsdll_execute_end @5
- gsdll_exit @6
- gsdll_init_with_encoding
- gsdll_initA
- gsdll_initW
- gsapi_revision
- gsapi_new_instance
- gsapi_delete_instance
- gsapi_init_with_args
- gsapi_init_with_argsA
- gsapi_init_with_argsW
- gsapi_run_string_begin
- gsapi_run_string_continue
- gsapi_run_string_end
- gsapi_run_string_with_length
- gsapi_run_string
- gsapi_run_file
- gsapi_exit
- gsapi_set_stdio
- gsapi_set_poll
- gsapi_set_display_callback
- gsapi_set_arg_encoding
+ DllEntryPoint
+ DllMain
+ gsdll_revision @1
+ gsdll_init @2
+ gsdll_execute_begin @3
+ gsdll_execute_cont @4
+ gsdll_execute_end @5
+ gsdll_exit @6
+ gsdll_init_with_encoding
+ gsdll_initA
+ gsdll_initW
+ gsapi_revision
+ gsapi_new_instance
+ gsapi_delete_instance
+ gsapi_init_with_args
+ gsapi_init_with_argsA
+ gsapi_init_with_argsW
+ gsapi_run_string_begin
+ gsapi_run_string_continue
+ gsapi_run_string_end
+ gsapi_run_string_with_length
+ gsapi_run_string
+ gsapi_run_file
+ gsapi_exit
+ gsapi_set_stdio
+ gsapi_set_stdio_with_handle
+ gsapi_set_poll
+ gsapi_set_poll_with_handle
+ gsapi_set_display_callback
+ gsapi_register_callout
+ gsapi_deregister_callout
+ gsapi_set_arg_encoding
gsapi_set_default_device_list
gsapi_get_default_device_list
- gsapi_set_param
gsapi_add_control_path
gsapi_remove_control_path
gsapi_purge_control_paths
@@ -39,3 +42,6 @@ EXPORTS
gsapi_is_path_control_active
gsapi_add_fs
gsapi_remove_fs
+ gsapi_set_param
+ gsapi_get_param
+ gsapi_enumerate_params
diff --git a/psi/gsdll64metro.def b/psi/gsdll64metro.def
index 9a2a5d57..e234915c 100644
--- a/psi/gsdll64metro.def
+++ b/psi/gsdll64metro.def
@@ -1,37 +1,40 @@
; 'Ghostscript Interpreter DLL'
-LIBRARY GSDLL64METRO
+LIBRARY GSDLL64METRO
EXPORTS
- DllEntryPoint
- DllMain
- gsdll_revision @1
- gsdll_init @2
- gsdll_execute_begin @3
- gsdll_execute_cont @4
- gsdll_execute_end @5
- gsdll_exit @6
- gsdll_init_with_encoding
- gsdll_initA
- gsdll_initW
- gsapi_revision
- gsapi_new_instance
- gsapi_delete_instance
- gsapi_init_with_args
- gsapi_init_with_argsA
- gsapi_init_with_argsW
- gsapi_run_string_begin
- gsapi_run_string_continue
- gsapi_run_string_end
- gsapi_run_string_with_length
- gsapi_run_string
- gsapi_run_file
- gsapi_exit
- gsapi_set_stdio
- gsapi_set_poll
- gsapi_set_display_callback
- gsapi_set_arg_encoding
+ DllEntryPoint
+ DllMain
+ gsdll_revision @1
+ gsdll_init @2
+ gsdll_execute_begin @3
+ gsdll_execute_cont @4
+ gsdll_execute_end @5
+ gsdll_exit @6
+ gsdll_init_with_encoding
+ gsdll_initA
+ gsdll_initW
+ gsapi_revision
+ gsapi_new_instance
+ gsapi_delete_instance
+ gsapi_init_with_args
+ gsapi_init_with_argsA
+ gsapi_init_with_argsW
+ gsapi_run_string_begin
+ gsapi_run_string_continue
+ gsapi_run_string_end
+ gsapi_run_string_with_length
+ gsapi_run_string
+ gsapi_run_file
+ gsapi_exit
+ gsapi_set_stdio
+ gsapi_set_stdio_with_handle
+ gsapi_set_poll
+ gsapi_set_poll_with_handle
+ gsapi_set_display_callback
+ gsapi_register_callout
+ gsapi_deregister_callout
+ gsapi_set_arg_encoding
gsapi_set_default_device_list
gsapi_get_default_device_list
- gsapi_set_param
gsapi_add_control_path
gsapi_remove_control_path
gsapi_purge_control_paths
@@ -39,3 +42,6 @@ EXPORTS
gsapi_is_path_control_active
gsapi_add_fs
gsapi_remove_fs
+ gsapi_set_param
+ gsapi_get_param
+ gsapi_enumerate_params
diff --git a/psi/gsdllARM32metro.def b/psi/gsdllARM32metro.def
index a9bfdc57..85178f74 100644
--- a/psi/gsdllARM32metro.def
+++ b/psi/gsdllARM32metro.def
@@ -1,34 +1,38 @@
; 'Ghostscript Interpreter DLL'
-LIBRARY GSDLLARM32METRO
+LIBRARY GSDLLARM32METRO
EXPORTS
- DllEntryPoint
- DllMain
- gsdll_revision @1
- gsdll_init @2
- gsdll_execute_begin @3
- gsdll_execute_cont @4
- gsdll_execute_end @5
- gsdll_exit @6
- gsdll_init_with_encoding
- gsdll_initA
- gsdll_initW
- gsapi_revision
- gsapi_new_instance
- gsapi_delete_instance
- gsapi_init_with_args
- gsapi_init_with_argsA
- gsapi_init_with_argsW
- gsapi_run_string_begin
- gsapi_run_string_continue
- gsapi_run_string_end
- gsapi_run_string_with_length
- gsapi_run_string
- gsapi_run_file
- gsapi_exit
- gsapi_set_stdio
- gsapi_set_poll
- gsapi_set_display_callback
- gsapi_set_arg_encoding
+ DllEntryPoint
+ DllMain
+ gsdll_revision @1
+ gsdll_init @2
+ gsdll_execute_begin @3
+ gsdll_execute_cont @4
+ gsdll_execute_end @5
+ gsdll_exit @6
+ gsdll_init_with_encoding
+ gsdll_initA
+ gsdll_initW
+ gsapi_revision
+ gsapi_new_instance
+ gsapi_delete_instance
+ gsapi_init_with_args
+ gsapi_init_with_argsA
+ gsapi_init_with_argsW
+ gsapi_run_string_begin
+ gsapi_run_string_continue
+ gsapi_run_string_end
+ gsapi_run_string_with_length
+ gsapi_run_string
+ gsapi_run_file
+ gsapi_exit
+ gsapi_set_stdio
+ gsapi_set_stdio_with_handle
+ gsapi_set_poll
+ gsapi_set_poll_with_handle
+ gsapi_set_display_callback
+ gsapi_register_callout
+ gsapi_deregister_callout
+ gsapi_set_arg_encoding
gsapi_set_default_device_list
gsapi_get_default_device_list
gsapi_set_param
@@ -39,3 +43,6 @@ EXPORTS
gsapi_is_path_control_active
gsapi_add_fs
gsapi_remove_fs
+ gsapi_set_param
+ gsapi_get_param
+ gsapi_enumerate_params
diff --git a/psi/gserver.c b/psi/gserver.c
index 4b8ebf5c..ca3a3d02 100644
--- a/psi/gserver.c
+++ b/psi/gserver.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/gsos2.def b/psi/gsos2.def
index 227a9fc1..029b8d8a 100644
--- a/psi/gsos2.def
+++ b/psi/gsos2.def
@@ -1,3 +1,3 @@
NAME GSOS2 WINDOWCOMPAT
-DESCRIPTION 'Ghostscript OS/2 EXE'
+DESCRIPTION 'Ghostscript OS/2 EXE'
STACKSIZE 131072
diff --git a/psi/gsos2.rc b/psi/gsos2.rc
index 9bcc0341..aa6c9c95 100644
--- a/psi/gsos2.rc
+++ b/psi/gsos2.rc
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ialloc.c b/psi/ialloc.c
index e8dd4ad1..f99398d4 100644
--- a/psi/ialloc.c
+++ b/psi/ialloc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -199,9 +199,9 @@ gs_alloc_ref_array(gs_ref_memory_t * mem, ref * parr, uint attrs,
ref *end;
obj = (ref *) mem->cc->rtop - 1; /* back up over last ref */
- if_debug4m('A', (const gs_memory_t *)mem, "[a%d:+$ ]%s(%u) = 0x%lx\n",
+ if_debug4m('A', (const gs_memory_t *)mem, "[a%d:+$ ]%s(%u) = "PRI_INTPTR"\n",
ialloc_trace_space(mem), client_name_string(cname),
- num_refs, (ulong) obj);
+ num_refs, (intptr_t)obj);
mem->cc->rcur[-1].o_size += num_refs * sizeof(ref);
end = (ref *) (mem->cc->rtop = mem->cc->cbot +=
num_refs * sizeof(ref));
@@ -285,16 +285,16 @@ gs_resize_ref_array(gs_ref_memory_t * mem, ref * parr,
ref *end = (ref *) (mem->cc->cbot = mem->cc->rtop -=
diff * sizeof(ref));
- if_debug4m('A', (const gs_memory_t *)mem, "[a%d:<$ ]%s(%u) 0x%lx\n",
+ if_debug4m('A', (const gs_memory_t *)mem, "[a%d:<$ ]%s(%u) "PRI_INTPTR"\n",
ialloc_trace_space(mem), client_name_string(cname), diff,
- (ulong) obj);
+ (intptr_t)obj);
mem->cc->rcur[-1].o_size -= diff * sizeof(ref);
make_mark(end - 1);
} else {
/* Punt. */
- if_debug4m('A', (const gs_memory_t *)mem, "[a%d:<$#]%s(%u) 0x%lx\n",
+ if_debug4m('A', (const gs_memory_t *)mem, "[a%d:<$#]%s(%u) "PRI_INTPTR"\n",
ialloc_trace_space(mem), client_name_string(cname), diff,
- (ulong) obj);
+ (intptr_t)obj);
mem->lost.refs += diff * sizeof(ref);
}
r_set_size(parr, new_num_refs);
@@ -329,9 +329,9 @@ gs_free_ref_array(gs_ref_memory_t * mem, ref * parr, client_name_t cname)
mem->cc->rtop = 0;
} else {
/* Deallocate it at the end of the refs object. */
- if_debug4m('A', (const gs_memory_t *)mem, "[a%d:-$ ]%s(%u) 0x%lx\n",
+ if_debug4m('A', (const gs_memory_t *)mem, "[a%d:-$ ]%s(%u) "PRI_INTPTR"\n",
ialloc_trace_space(mem), client_name_string(cname),
- num_refs, (ulong) obj);
+ num_refs, (intptr_t)obj);
mem->cc->rcur[-1].o_size -= num_refs * sizeof(ref);
mem->cc->rtop = mem->cc->cbot = (byte *) (obj + 1);
make_mark(obj);
@@ -350,9 +350,9 @@ gs_free_ref_array(gs_ref_memory_t * mem, ref * parr, client_name_t cname)
(byte *) (obj + (num_refs + 1)) == cl.cp->cend
) {
/* Free the clump. */
- if_debug4m('a', (const gs_memory_t *)mem, "[a%d:-$L]%s(%u) 0x%lx\n",
+ if_debug4m('a', (const gs_memory_t *)mem, "[a%d:-$L]%s(%u) "PRI_INTPTR"\n",
ialloc_trace_space(mem), client_name_string(cname),
- num_refs, (ulong) obj);
+ num_refs, (intptr_t)obj);
if ((gs_memory_t *)mem != mem->stable_memory) {
alloc_save_remove(mem, (ref_packed *)obj, "gs_free_ref_array");
}
@@ -362,9 +362,9 @@ gs_free_ref_array(gs_ref_memory_t * mem, ref * parr, client_name_t cname)
}
/* Punt, but fill the array with nulls so that there won't be */
/* dangling references to confuse the garbage collector. */
- if_debug4m('A', (const gs_memory_t *)mem, "[a%d:-$#]%s(%u) 0x%lx\n",
+ if_debug4m('A', (const gs_memory_t *)mem, "[a%d:-$#]%s(%u) "PRI_INTPTR"\n",
ialloc_trace_space(mem), client_name_string(cname), num_refs,
- (ulong) obj);
+ (intptr_t)obj);
{
uint size;
@@ -386,8 +386,8 @@ gs_free_ref_array(gs_ref_memory_t * mem, ref * parr, client_name_t cname)
size = num_refs * sizeof(ref);
break;
default:
- lprintf3("Unknown type 0x%x in free_ref_array(%u,0x%lx)!",
- r_type(parr), num_refs, (ulong) obj);
+ lprintf3("Unknown type 0x%x in free_ref_array(%u,"PRI_INTPTR")!",
+ r_type(parr), num_refs, (intptr_t)obj);
return;
}
/*
diff --git a/psi/ialloc.h b/psi/ialloc.h
index d47039e8..7887cfa9 100644
--- a/psi/ialloc.h
+++ b/psi/ialloc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iapi.c b/psi/iapi.c
index a887b060..25d2235f 100644
--- a/psi/iapi.c
+++ b/psi/iapi.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -33,6 +33,9 @@
#include "gslibctx.h"
#include "gp.h"
#include "gsargs.h"
+#include "gdevdsp.h"
+#include "gsstate.h"
+#include "icstate.h"
typedef struct { int a[(int)GS_ARG_ENCODING_LOCAL == (int)PS_ARG_ENCODING_LOCAL ? 1 : -1]; } compile_time_assert_0;
typedef struct { int a[(int)GS_ARG_ENCODING_UTF8 == (int)PS_ARG_ENCODING_UTF8 ? 1 : -1]; } compile_time_assert_1;
@@ -84,9 +87,25 @@ gsapi_set_stdio(void *instance,
gs_lib_ctx_t *ctx = (gs_lib_ctx_t *)instance;
if (instance == NULL)
return gs_error_Fatal;
+ return gsapi_set_stdio_with_handle(instance,
+ stdin_fn, stdout_fn, stderr_fn,
+ ctx->core->default_caller_handle);
+}
+
+GSDLLEXPORT int GSDLLAPI
+gsapi_set_stdio_with_handle(void *instance,
+ int(GSDLLCALL *stdin_fn)(void *caller_handle, char *buf, int len),
+ int(GSDLLCALL *stdout_fn)(void *caller_handle, const char *str, int len),
+ int(GSDLLCALL *stderr_fn)(void *caller_handle, const char *str, int len),
+ void *caller_handle)
+{
+ gs_lib_ctx_t *ctx = (gs_lib_ctx_t *)instance;
+ if (instance == NULL)
+ return gs_error_Fatal;
ctx->core->stdin_fn = stdin_fn;
ctx->core->stdout_fn = stdout_fn;
ctx->core->stderr_fn = stderr_fn;
+ ctx->core->std_caller_handle = caller_handle;
return 0;
}
@@ -98,25 +117,97 @@ gsapi_set_poll(void *instance,
gs_lib_ctx_t *ctx = (gs_lib_ctx_t *)instance;
if (instance == NULL)
return gs_error_Fatal;
+ return gsapi_set_poll_with_handle(instance, poll_fn,
+ ctx->core->default_caller_handle);
+}
+
+GSDLLEXPORT int GSDLLAPI
+gsapi_set_poll_with_handle(void *instance,
+ int(GSDLLCALL *poll_fn)(void *caller_handle),
+ void *caller_handle)
+{
+ gs_lib_ctx_t *ctx = (gs_lib_ctx_t *)instance;
+ if (instance == NULL)
+ return gs_error_Fatal;
ctx->core->poll_fn = poll_fn;
+ ctx->core->poll_caller_handle = caller_handle;
return 0;
}
+static int
+legacy_display_callout(void *instance,
+ void *handle,
+ const char *dev_name,
+ int id,
+ int size,
+ void *data)
+{
+ gs_main_instance *inst = (gs_main_instance *)instance;
+
+ if (dev_name == NULL)
+ return -1;
+ if (strcmp(dev_name, "display") != 0)
+ return -1;
+
+ if (id == DISPLAY_CALLOUT_GET_CALLBACK_LEGACY) {
+ /* get display callbacks */
+ gs_display_get_callback_t *cb = (gs_display_get_callback_t *)data;
+ cb->callback = inst->display;
+ return 0;
+ }
+ return -1;
+}
+
/* Set the display callback structure */
GSDLLEXPORT int GSDLLAPI
gsapi_set_display_callback(void *instance, display_callback *callback)
{
gs_lib_ctx_t *ctx = (gs_lib_ctx_t *)instance;
+ gs_main_instance *minst;
+ int code;
if (instance == NULL)
return gs_error_Fatal;
- get_minst_from_memory(ctx->memory)->display = callback;
+ minst = get_minst_from_memory(ctx->memory);
+ if (minst->display == NULL && callback != NULL) {
+ /* First registration. */
+ code = gs_lib_ctx_register_callout(minst->heap,
+ legacy_display_callout,
+ minst);
+ if (code < 0)
+ return code;
+ }
+ if (minst->display != NULL && callback == NULL) {
+ /* Deregistered. */
+ gs_lib_ctx_deregister_callout(minst->heap,
+ legacy_display_callout,
+ minst);
+ }
+ minst->display = callback;
/* not in a language switched build */
return 0;
}
+GSDLLEXPORT int GSDLLAPI
+gsapi_register_callout(void *instance, gs_callout fn, void *handle)
+{
+ gs_lib_ctx_t *ctx = (gs_lib_ctx_t *)instance;
+ if (instance == NULL)
+ return gs_error_Fatal;
+ return gs_lib_ctx_register_callout(ctx->memory, fn, handle);
+}
+
+GSDLLEXPORT void GSDLLAPI
+gsapi_deregister_callout(void *instance, gs_callout fn, void *handle)
+{
+ gs_lib_ctx_t *ctx = (gs_lib_ctx_t *)instance;
+ if (instance == NULL)
+ return;
+ gs_lib_ctx_deregister_callout(ctx->memory, fn, handle);
+}
+
/* Set/Get the default device list string */
GSDLLEXPORT int GSDLLAPI
-gsapi_set_default_device_list(void *instance, char *list, int listlen)
+gsapi_set_default_device_list(void *instance, const char *list, int listlen)
{
gs_lib_ctx_t *ctx = (gs_lib_ctx_t *)instance;
if (instance == NULL)
@@ -311,12 +402,376 @@ gsapi_exit(void *instance)
}
GSDLLEXPORT int GSDLLAPI
-gsapi_set_param(void *lib, gs_set_param_type type, const char *param, const void *value)
+gsapi_set_param(void *lib, const char *param, const void *value, gs_set_param_type type)
{
+ int code = 0;
+ gs_param_string str_value;
+ bool bval;
+ int more_to_come = type & gs_spt_more_to_come;
+ gs_main_instance *minst;
+ gs_c_param_list *params;
gs_lib_ctx_t *ctx = (gs_lib_ctx_t *)lib;
+
if (lib == NULL)
return gs_error_Fatal;
- return psapi_set_param(ctx, (psapi_sptype)type, param, value);
+ minst = get_minst_from_memory(ctx->memory);
+
+ /* First off, ensure we have a param list to work with. */
+ params = minst->param_list;
+ if (params == NULL) {
+ params = minst->param_list =
+ gs_c_param_list_alloc(minst->heap, "gs_main_instance_param_list");
+ if (params == NULL)
+ return_error(gs_error_VMerror);
+ gs_c_param_list_write(params, minst->heap);
+ gs_param_list_set_persistent_keys((gs_param_list *)params, false);
+ }
+
+ type &= ~gs_spt_more_to_come;
+
+ /* Set the passed param in the device params */
+ gs_c_param_list_write_more(params);
+ switch (type)
+ {
+ case gs_spt_null:
+ code = param_write_null((gs_param_list *) params,
+ param);
+ break;
+ case gs_spt_bool:
+ bval = !!*(int *)value;
+ code = param_write_bool((gs_param_list *) params,
+ param, &bval);
+ break;
+ case gs_spt_int:
+ code = param_write_int((gs_param_list *) params,
+ param, (int *)value);
+ break;
+ case gs_spt_float:
+ code = param_write_float((gs_param_list *) params,
+ param, (float *)value);
+ break;
+ case gs_spt_name:
+ param_string_from_transient_string(str_value, value);
+ code = param_write_name((gs_param_list *) params,
+ param, &str_value);
+ break;
+ case gs_spt_string:
+ param_string_from_transient_string(str_value, value);
+ code = param_write_string((gs_param_list *) params,
+ param, &str_value);
+ break;
+ case gs_spt_long:
+ code = param_write_long((gs_param_list *) params,
+ param, (long *)value);
+ break;
+ case gs_spt_i64:
+ code = param_write_i64((gs_param_list *) params,
+ param, (int64_t *)value);
+ break;
+ case gs_spt_size_t:
+ code = param_write_size_t((gs_param_list *) params,
+ param, (size_t *)value);
+ break;
+ case gs_spt_parsed:
+ code = gs_param_list_add_parsed_value((gs_param_list *)params,
+ param, (void *)value);
+ break;
+ default:
+ code = gs_note_error(gs_error_rangecheck);
+ }
+ if (code < 0) {
+ gs_c_param_list_release(params);
+ return code;
+ }
+ gs_c_param_list_read(params);
+
+ if (more_to_come || minst->i_ctx_p == NULL) {
+ /* Leave it in the param list for later. */
+ return 0;
+ }
+
+ /* Send it to the device. */
+ code = psapi_set_device_param(ctx, (gs_param_list *)params);
+ if (code < 0)
+ return code;
+
+ code = psapi_set_param(ctx, (gs_param_list *)params);
+ if (code < 0)
+ return code;
+
+ /* Trigger an initgraphics */
+ code = gs_initgraphics(minst->i_ctx_p->pgs);
+
+ gs_c_param_list_release(params);
+
+ return code;
+}
+
+GSDLLEXPORT int GSDLLAPI
+gsapi_get_param(void *lib, const char *param, void *value, gs_set_param_type type)
+{
+ int code = 0;
+ gs_param_string str_value;
+ gs_c_param_list params;
+ gs_lib_ctx_t *ctx = (gs_lib_ctx_t *)lib;
+
+ if (lib == NULL)
+ return gs_error_Fatal;
+
+ gs_c_param_list_write(&params, ctx->memory);
+
+ /* Should never be set, but clear the more to come bit anyway in case. */
+ type &= ~gs_spt_more_to_come;
+
+ code = psapi_get_device_params(ctx, (gs_param_list *)&params);
+ if (code < 0) {
+ gs_c_param_list_release(&params);
+ return code;
+ }
+
+ gs_c_param_list_read(&params);
+ switch (type)
+ {
+ case gs_spt_null:
+ code = param_read_null((gs_param_list *)&params, param);
+ if (code == 1)
+ code = gs_error_undefined;
+ if (code < 0)
+ break;
+ code = 0;
+ break;
+ case gs_spt_bool:
+ {
+ bool b;
+ code = param_read_bool((gs_param_list *)&params, param, &b);
+ if (code == 1)
+ code = gs_error_undefined;
+ if (code < 0)
+ break;
+ code = sizeof(int);
+ if (value != NULL)
+ *(int *)value = !!b;
+ break;
+ }
+ case gs_spt_int:
+ {
+ int i;
+ code = param_read_int((gs_param_list *)&params, param, &i);
+ if (code == 1)
+ code = gs_error_undefined;
+ if (code < 0)
+ break;
+ code = sizeof(int);
+ if (value != NULL)
+ *(int *)value = i;
+ break;
+ }
+ case gs_spt_float:
+ {
+ float f;
+ code = param_read_float((gs_param_list *)&params, param, &f);
+ if (code == 1)
+ code = gs_error_undefined;
+ if (code < 0)
+ break;
+ code = sizeof(float);
+ if (value != NULL)
+ *(float *)value = f;
+ break;
+ }
+ case gs_spt_name:
+ code = param_read_name((gs_param_list *)&params, param, &str_value);
+ if (code == 1)
+ code = gs_error_undefined;
+ if (code < 0)
+ break;
+ if (value != NULL) {
+ memcpy(value, str_value.data, str_value.size);
+ ((char *)value)[str_value.size] = 0;
+ }
+ code = str_value.size+1;
+ break;
+ case gs_spt_string:
+ code = param_read_string((gs_param_list *)&params, param, &str_value);
+ if (code == 1)
+ code = gs_error_undefined;
+ if (code < 0)
+ break;
+ if (value != NULL) {
+ memcpy(value, str_value.data, str_value.size);
+ ((char *)value)[str_value.size] = 0;
+ }
+ code = str_value.size+1;
+ break;
+ case gs_spt_long:
+ {
+ long l;
+ code = param_read_long((gs_param_list *)&params, param, &l);
+ if (code == 1)
+ code = gs_error_undefined;
+ if (code < 0)
+ break;
+ if (value != NULL)
+ *(long *)value = l;
+ code = sizeof(long);
+ break;
+ }
+ case gs_spt_i64:
+ {
+ int64_t i64;
+ code = param_read_i64((gs_param_list *)&params, param, &i64);
+ if (code == 1)
+ code = gs_error_undefined;
+ if (code < 0)
+ break;
+ if (value != NULL)
+ *(int64_t *)value = i64;
+ code = sizeof(int64_t);
+ break;
+ }
+ case gs_spt_size_t:
+ {
+ size_t z;
+ code = param_read_size_t((gs_param_list *)&params, param, &z);
+ if (code == 1)
+ code = gs_error_undefined;
+ if (code < 0)
+ break;
+ if (value != NULL)
+ *(size_t *)value = z;
+ code = sizeof(size_t);
+ break;
+ }
+ case gs_spt_parsed:
+ {
+ int len;
+ code = gs_param_list_to_string((gs_param_list *)&params,
+ param, (char *)value, &len);
+ if (code == 1)
+ code = gs_error_undefined;
+ if (code >= 0)
+ code = len;
+ break;
+ }
+ default:
+ code = gs_note_error(gs_error_rangecheck);
+ }
+ gs_c_param_list_release(&params);
+
+ return code;
+}
+
+GSDLLEXPORT int GSDLLAPI
+gsapi_enumerate_params(void *instance, void **iter, const char **key, gs_set_param_type *type)
+{
+ gs_main_instance *minst;
+ gs_c_param_list *params;
+ gs_lib_ctx_t *ctx = (gs_lib_ctx_t *)instance;
+ int code = 0;
+ gs_param_key_t keyp;
+
+ if (ctx == NULL)
+ return gs_error_Fatal;
+
+ minst = get_minst_from_memory(ctx->memory);
+ params = &minst->enum_params;
+
+ if (key == NULL)
+ return -1;
+ *key = NULL;
+ if (iter == NULL)
+ return -1;
+
+ if (*iter == NULL) {
+ /* Free any existing param list. */
+ gs_c_param_list_release(params);
+ if (minst->i_ctx_p == NULL) {
+ return 1;
+ }
+ /* Set up a new one. */
+ gs_c_param_list_write(params, minst->heap);
+ /* Get the keys. */
+ code = psapi_get_device_params(ctx, (gs_param_list *)params);
+ if (code < 0)
+ return code;
+
+ param_init_enumerator(&minst->enum_iter);
+ *iter = &minst->enum_iter;
+ } else if (*iter != &minst->enum_iter)
+ return -1;
+
+ gs_c_param_list_read(params);
+ code = param_get_next_key((gs_param_list *)params, &minst->enum_iter, &keyp);
+ if (code < 0)
+ return code;
+ if (code != 0) {
+ /* End of iteration. */
+ *iter = NULL;
+ return 1;
+ }
+ if (minst->enum_keybuf_max < keyp.size+1) {
+ int newsize = keyp.size+1;
+ char *newkey;
+ if (newsize < 128)
+ newsize = 128;
+ if (minst->enum_keybuf == NULL) {
+ newkey = (char *)gs_alloc_bytes(minst->heap, newsize, "enumerator key buffer");
+ } else {
+ newkey = (char *)gs_resize_object(minst->heap, minst->enum_keybuf, newsize, "enumerator key buffer");
+ }
+ if (newkey == NULL)
+ return_error(gs_error_VMerror);
+ minst->enum_keybuf = newkey;
+ minst->enum_keybuf_max = newsize;
+ }
+ memcpy(minst->enum_keybuf, keyp.data, keyp.size);
+ minst->enum_keybuf[keyp.size] = 0;
+ *key = minst->enum_keybuf;
+
+ if (type) {
+ gs_param_typed_value pvalue;
+ pvalue.type = gs_param_type_any;
+ code = param_read_typed((gs_param_list *)params, *key, &pvalue);
+ if (code < 0)
+ return code;
+ if (code > 0)
+ return_error(gs_error_unknownerror);
+
+ switch (pvalue.type) {
+ case gs_param_type_null:
+ *type = gs_spt_null;
+ break;
+ case gs_param_type_bool:
+ *type = gs_spt_bool;
+ break;
+ case gs_param_type_int:
+ *type = gs_spt_int;
+ break;
+ case gs_param_type_long:
+ *type = gs_spt_long;
+ break;
+ case gs_param_type_size_t:
+ *type = gs_spt_size_t;
+ break;
+ case gs_param_type_i64:
+ *type = gs_spt_i64;
+ break;
+ case gs_param_type_float:
+ *type = gs_spt_float;
+ break;
+ case gs_param_type_string:
+ *type = gs_spt_string;
+ break;
+ case gs_param_type_name:
+ *type = gs_spt_name;
+ break;
+ default:
+ *type = gs_spt_parsed;
+ break;
+ }
+ }
+
+ return code;
}
GSDLLEXPORT int GSDLLAPI
diff --git a/psi/iapi.h b/psi/iapi.h
index ae37fded..862d631d 100644
--- a/psi/iapi.h
+++ b/psi/iapi.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -196,6 +196,15 @@ gsapi_set_stdio(void *instance,
int (GSDLLCALLPTR stdout_fn)(void *caller_handle, const char *str, int len),
int (GSDLLCALLPTR stderr_fn)(void *caller_handle, const char *str, int len));
+/* Does the same as the above, but using the caller_handle given here,
+ * rather than the default one specified at gsapi_new_instance time. */
+GSDLLEXPORT int GSDLLAPI
+gsapi_set_stdio_with_handle(void *instance,
+ int (GSDLLCALLPTR stdin_fn)(void *caller_handle, char *buf, int len),
+ int (GSDLLCALLPTR stdout_fn)(void *caller_handle, const char *str, int len),
+ int (GSDLLCALLPTR stderr_fn)(void *caller_handle, const char *str, int len),
+ void *caller_handle);
+
/* Set the callback function for polling.
* This is used for handling window events or cooperative
* multitasking. This function will only be called if
@@ -208,14 +217,52 @@ gsapi_set_stdio(void *instance,
GSDLLEXPORT int GSDLLAPI gsapi_set_poll(void *instance,
int (GSDLLCALLPTR poll_fn)(void *caller_handle));
+/* Does the same as the above, but using the caller_handle given here,
+ * rather than the default one specified at gsapi_new_instance time. */
+GSDLLEXPORT int GSDLLAPI gsapi_set_poll_with_handle(void *instance,
+ int (GSDLLCALLPTR poll_fn)(void *caller_handle), void *caller_handle);
+
/* Set the display device callback structure.
* If the display device is used, this must be called
* after gsapi_new_instance() and before gsapi_init_with_args().
* See gdevdisp.h for more details.
+ * DEPRECATED: Use the gsapi_register_callback mechanism instead.
*/
GSDLLEXPORT int GSDLLAPI gsapi_set_display_callback(
void *instance, display_callback *callback);
+/* The callout mechanism allows devices to query "callers" (users of the
+ * DLL) in device specific ways. The callout function pointer type will
+ * be called with:
+ * callout_handle = the value given at registration
+ * device_name = the name of the current device
+ * id = An integer, guaranteed to be unique within the
+ * callouts from a given device, identifying the
+ * purpose of this call.
+ * size = device/id specific, but typically the size of 'data'.
+ * data = device/id specific, but typically the pointer to
+ * an in/out data block.
+ * Returns an error code (gs_error_unknownerror (-1) if unclaimed,
+ * non-negative on success, standard gs error numbers recommended).
+ */
+typedef int (*gs_callout)(void *instance,
+ void *callout_handle,
+ const char *device_name,
+ int id,
+ int size,
+ void *data);
+
+/* Register a handler for gs callouts.
+ * This must be called after gsapi_new_instance() and (typically)
+ * before gsapi_init_with_args().
+ */
+GSDLLEXPORT int GSDLLAPI gsapi_register_callout(
+ void *instance, gs_callout callout, void *callout_handle);
+
+/* Deregister a handler for gs callouts. */
+GSDLLEXPORT void GSDLLAPI gsapi_deregister_callout(
+ void *instance, gs_callout callout, void *callout_handle);
+
/* Set the string containing the list of default device names
* for example "display x11alpha x11 bbox". Allows the calling
* application to influence which device(s) gs will try in order
@@ -225,7 +272,7 @@ GSDLLEXPORT int GSDLLAPI gsapi_set_display_callback(
* gsapi_init_with_args().
*/
GSDLLEXPORT int GSDLLAPI
-gsapi_set_default_device_list(void *instance, char *list, int listlen);
+gsapi_set_default_device_list(void *instance, const char *list, int listlen);
/* Returns a pointer to the current default device string
* *Must* be called after gsapi_new_instance().
@@ -325,13 +372,63 @@ gsapi_exit(void *instance);
typedef enum {
gs_spt_invalid = -1,
gs_spt_null = 0, /* void * is NULL */
- gs_spt_bool = 1, /* void * is NULL (false) or non-NULL (true) */
+ gs_spt_bool = 1, /* void * is a pointer to an int (0 false,
+ * non-zero true). */
gs_spt_int = 2, /* void * is a pointer to an int */
gs_spt_float = 3, /* void * is a float * */
gs_spt_name = 4, /* void * is a char * */
- gs_spt_string = 5 /* void * is a char * */
+ gs_spt_string = 5, /* void * is a char * */
+ gs_spt_long = 6, /* void * is a long * */
+ gs_spt_i64 = 7, /* void * is an int64_t * */
+ gs_spt_size_t = 8, /* void * is a size_t * */
+ gs_spt_parsed = 9, /* void * is a pointer to a char * to be parsed */
+
+ /* Setting a typed param causes it to be instantly fed to to the
+ * device. This can cause the device to reinitialise itself. Hence,
+ * setting a sequence of typed params can cause the device to reset
+ * itself several times. Accordingly, if you OR the type with
+ * gs_spt_more_to_come, the param will held ready to be passed into
+ * the device, and will only actually be sent when the next typed
+ * param is set without this flag (or on device init). Not valid
+ * for get_typed_param. */
+ gs_spt_more_to_come = 1<<31
} gs_set_param_type;
-GSDLLEXPORT int GSDLLAPI gsapi_set_param(void *instance, gs_set_param_type type, const char *param, const void *value);
+/* gs_spt_parsed allows for a string such as "<< /Foo 0 /Bar true >>" or
+ * "[ 1 2 3 ]" etc to be used so more complex parameters can be set. */
+
+GSDLLEXPORT int GSDLLAPI gsapi_set_param(void *instance, const char *param, const void *value, gs_set_param_type type);
+
+/* Called to get a value. value points to storage of the appropriate
+ * type. If value is passed as NULL on entry, then the return code is
+ * the number of bytes storage required for the type. Thus to read a
+ * name/string/parsed value, call once with value=NULL, then obtain
+ * the storage, and call again with value=the storage to get a nul
+ * terminated string. (nul terminator is included in the count - hence
+ * an empty string requires 1 byte storage). Returns gs_error_undefined
+ * (-21) if not found. */
+GSDLLEXPORT int GSDLLAPI gsapi_get_param(void *instance, const char *param, void *value, gs_set_param_type type);
+
+/* Enumerator to list all the parameters.
+ * Caller defines void *iter = NULL, and calls with &iter.
+ * Each call, iter is updated to reflect the position within the
+ * enumeration, so passing iterator back in gets the next key. The call
+ * returns negative values for errors, 0 for success, and 1 for "no more
+ * keys".
+ *
+ * void *iter = NULL;
+ * gs_set_param_type type;
+ * const char *key;
+ * int code;
+ * while ((code = gsapi_enumerate_params(inst, &iter, &key, &type)) == 0) {
+ * // Process key
+ * }
+ *
+ * Note that the ordering of enumerations is NOT defined. key is valid
+ * until the next call to gsapi_enumerate_params. Only one enumeration
+ * at a time (starting a new enumeration will invalidate any previous
+ * enumeration).
+ */
+GSDLLEXPORT int GSDLLAPI gsapi_enumerate_params(void *instance, void **iterator, const char **key, gs_set_param_type *type);
enum {
GS_PERMIT_FILE_READING = 0,
@@ -455,7 +552,7 @@ typedef int (GSDLLAPIPTR PFN_gsapi_run_fileW)(void *instance,
const wchar_t *file_name, int user_errors, int *pexit_code);
#endif
typedef int (GSDLLAPIPTR PFN_gsapi_exit)(void *instance);
-typedef int (GSDLLAPIPTR PFN_gsapi_set_param)(void *instance, gs_set_param_type type, const char *param, const void *value);
+typedef int (GSDLLAPIPTR PFN_gsapi_set_param)(void *instance, const char *param, const void *value, gs_set_param_type type);
typedef int (GSDLLAPIPTR PFN_gsapi_add_control_path)(void *instance, int type, const char *path);
typedef int (GSDLLAPIPTR PFN_gsapi_remove_control_path)(void *instance, int type, const char *path);
diff --git a/psi/iastate.h b/psi/iastate.h
index ed405ba8..98cdd3fd 100644
--- a/psi/iastate.h
+++ b/psi/iastate.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iastruct.h b/psi/iastruct.h
index d09991df..211aa564 100644
--- a/psi/iastruct.h
+++ b/psi/iastruct.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ibnum.c b/psi/ibnum.c
index 7a63cd7b..96230360 100644
--- a/psi/ibnum.c
+++ b/psi/ibnum.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ibnum.h b/psi/ibnum.h
index 4827fb38..42607895 100644
--- a/psi/ibnum.h
+++ b/psi/ibnum.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ichar.h b/psi/ichar.h
index 94f10b8a..18ecb005 100644
--- a/psi/ichar.h
+++ b/psi/ichar.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ichar1.h b/psi/ichar1.h
index 5874a905..f516c166 100644
--- a/psi/ichar1.h
+++ b/psi/ichar1.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/icharout.h b/psi/icharout.h
index d6280f94..0c9a24d9 100644
--- a/psi/icharout.h
+++ b/psi/icharout.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/icid.h b/psi/icid.h
index 46296cfc..3e54e846 100644
--- a/psi/icid.h
+++ b/psi/icid.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/icie.h b/psi/icie.h
index 2d2d7362..e2b9e97b 100644
--- a/psi/icie.h
+++ b/psi/icie.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/icolor.h b/psi/icolor.h
index 523ba440..acea9234 100644
--- a/psi/icolor.h
+++ b/psi/icolor.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iconf.c b/psi/iconf.c
index 0b8ac463..18031142 100644
--- a/psi/iconf.c
+++ b/psi/iconf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iconf.h b/psi/iconf.h
index a01aeae6..3273de40 100644
--- a/psi/iconf.h
+++ b/psi/iconf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/icontext.c b/psi/icontext.c
index e7ad2bac..032522fa 100644
--- a/psi/icontext.c
+++ b/psi/icontext.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/icontext.h b/psi/icontext.h
index a27732a7..1ba03bc5 100644
--- a/psi/icontext.h
+++ b/psi/icontext.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/icremap.h b/psi/icremap.h
index 3c8e9e2e..e36d13f1 100644
--- a/psi/icremap.h
+++ b/psi/icremap.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/icsmap.h b/psi/icsmap.h
index 5a09de66..72b91446 100644
--- a/psi/icsmap.h
+++ b/psi/icsmap.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/icstate.h b/psi/icstate.h
index b06ba3fe..2e66f6b5 100644
--- a/psi/icstate.h
+++ b/psi/icstate.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iddict.h b/psi/iddict.h
index c623a397..e6e41cdc 100644
--- a/psi/iddict.h
+++ b/psi/iddict.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iddstack.h b/psi/iddstack.h
index 2f72866b..58d306fb 100644
--- a/psi/iddstack.h
+++ b/psi/iddstack.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/idebug.c b/psi/idebug.c
index 442eb766..02c4265a 100644
--- a/psi/idebug.c
+++ b/psi/idebug.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -66,7 +66,7 @@ debug_print_full_ref(const gs_memory_t *mem, const ref * pref)
dmprintf1(mem, "(%x)", r_type_attrs(pref));
switch (r_type(pref)) {
case t_array:
- dmprintf2(mem, "array(%u)0x%lx", size, (ulong) pref->value.refs);
+ dmprintf2(mem, "array(%u)"PRI_INTPTR, size, (intptr_t)pref->value.refs);
break;
case t_astruct:
goto strct;
@@ -74,15 +74,15 @@ debug_print_full_ref(const gs_memory_t *mem, const ref * pref)
dmprintf1(mem, "boolean %x", pref->value.boolval);
break;
case t_device:
- dmprintf1(mem, "device 0x%lx", (ulong) pref->value.pdevice);
+ dmprintf1(mem, "device "PRI_INTPTR, (intptr_t) pref->value.pdevice);
break;
case t_dictionary:
- dmprintf3(mem, "dict(%u/%u)0x%lx",
+ dmprintf3(mem, "dict(%u/%u)"PRI_INTPTR,
dict_length(pref), dict_maxlength(pref),
- (ulong) pref->value.pdict);
+ (intptr_t)pref->value.pdict);
break;
case t_file:
- dmprintf1(mem, "file 0x%lx", (ulong) pref->value.pfile);
+ dmprintf1(mem, "file "PRI_INTPTR, (intptr_t)pref->value.pfile);
break;
case t_fontID:
goto strct;
@@ -93,11 +93,11 @@ debug_print_full_ref(const gs_memory_t *mem, const ref * pref)
dmprintf(mem, "mark");
break;
case t_mixedarray:
- dmprintf2(mem, "mixed packedarray(%u)0x%lx", size,
- (ulong) pref->value.packed);
+ dmprintf2(mem, "mixed packedarray(%u)"PRI_INTPTR"", size,
+ (intptr_t)pref->value.packed);
break;
case t_name:
- dmprintf2(mem, "name(0x%lx#%u)", (ulong) pref->value.pname,
+ dmprintf2(mem, "name("PRI_INTPTR"#%u)", (intptr_t)pref->value.pname,
name_index(mem, pref));
debug_print_name(mem, pref);
break;
@@ -105,7 +105,7 @@ debug_print_full_ref(const gs_memory_t *mem, const ref * pref)
dmprintf(mem, "null");
break;
case t_oparray:
- dmprintf2(mem, "op_array(%u)0x%lx:", size, (ulong) pref->value.const_refs);
+ dmprintf2(mem, "op_array(%u)"PRI_INTPTR":", size, (intptr_t) pref->value.const_refs);
{
const op_array_table *opt = get_op_array(mem, size);
@@ -117,7 +117,7 @@ debug_print_full_ref(const gs_memory_t *mem, const ref * pref)
dmprintf1(mem, "op(%u", size);
if (size > 0 && size < op_def_count) /* just in case */
dmprintf1(mem, ":%s", (const char *)(op_index_def(size)->oname + 1));
- dmprintf1(mem, ")0x%lx", (ulong) pref->value.opproc);
+ dmprintf1(mem, ")"PRI_INTPTR"", (intptr_t)pref->value.opproc);
break;
case t_real:
dmprintf1(mem, "real %f", pref->value.realval);
@@ -126,11 +126,11 @@ debug_print_full_ref(const gs_memory_t *mem, const ref * pref)
dmprintf1(mem, "save %lu", pref->value.saveid);
break;
case t_shortarray:
- dmprintf2(mem, "short packedarray(%u)0x%lx", size,
- (ulong) pref->value.packed);
+ dmprintf2(mem, "short packedarray(%u)"PRI_INTPTR"", size,
+ (intptr_t)pref->value.packed);
break;
case t_string:
- dmprintf2(mem, "string(%u)0x%lx", size, (ulong) pref->value.bytes);
+ dmprintf2(mem, "string(%u)"PRI_INTPTR"", size, (intptr_t)pref->value.bytes);
break;
case t_struct:
strct:{
@@ -139,10 +139,10 @@ debug_print_full_ref(const gs_memory_t *mem, const ref * pref)
gs_memory_type_ptr_t otype =
gs_ref_memory_procs.object_type(NULL, obj);
- dmprintf2(mem, "struct %s 0x%lx",
+ dmprintf2(mem, "struct %s "PRI_INTPTR"",
(r_is_foreign(pref) ? "-foreign-" :
gs_struct_type_name_string(otype)),
- (ulong) obj);
+ (intptr_t)obj);
}
break;
default:
@@ -170,7 +170,7 @@ debug_print_packed_ref(const gs_memory_t *mem, const ref_packed *pref)
case pt_executable_name:
dmprintf(mem, "<exec_name>");
ptn: name_index_ref(mem, elt, &nref);
- dmprintf2(mem, "(0x%lx#%u)", (ulong) nref.value.pname, elt);
+ dmprintf2(mem, "("PRI_INTPTR"#%u)", (intptr_t) nref.value.pname, elt);
debug_print_name(mem, &nref);
break;
default:
@@ -243,9 +243,9 @@ debug_dump_refs(const gs_memory_t *mem, const ref * from,
uint count = size;
if (size && msg)
- dmprintf2(mem, "%s at 0x%lx:\n", msg, (ulong) from);
+ dmprintf2(mem, "%s at "PRI_INTPTR":\n", msg, (intptr_t)from);
while (count--) {
- dmprintf2(mem, "0x%lx: 0x%04x ", (ulong)p, r_type_attrs(p));
+ dmprintf2(mem, PRI_INTPTR": 0x%04x ", (intptr_t)p, r_type_attrs(p));
debug_dump_one_ref(mem, p);
dmputc(mem, '\n');
p++;
@@ -264,10 +264,10 @@ debug_dump_stack(const gs_memory_t *mem,
const ref *p = ref_stack_index(pstack, --i);
if (m) {
- dmprintf2(mem, "%s at 0x%lx:\n", m, (ulong) pstack);
+ dmprintf2(mem, "%s at "PRI_INTPTR":\n", m, (intptr_t)pstack);
m = NULL;
}
- dmprintf2(mem, "0x%lx: 0x%02x ", (ulong)p, r_type(p));
+ dmprintf2(mem, PRI_INTPTR": 0x%02x ", (intptr_t)p, r_type(p));
debug_dump_one_ref(mem, p);
dmputc(mem, '\n');
}
@@ -283,10 +283,10 @@ debug_dump_array(const gs_memory_t *mem, const ref * array)
switch (type) {
default:
- dmprintf2(mem, "%s at 0x%lx isn't an array.\n",
+ dmprintf2(mem, "%s at "PRI_INTPTR" isn't an array.\n",
(type < countof(type_strings) ?
type_strings[type] : "????"),
- (ulong) array);
+ (intptr_t)array);
return;
case t_oparray:
/* This isn't really an array, but we'd like to see */
@@ -307,10 +307,10 @@ debug_dump_array(const gs_memory_t *mem, const ref * array)
packed_get(mem, pp, &temp);
if (r_is_packed(pp)) {
- dmprintf2(mem, "0x%lx* 0x%04x ", (ulong)pp, (uint)*pp);
+ dmprintf2(mem, PRI_INTPTR"* 0x%04x ", (intptr_t)pp, (uint)*pp);
print_ref_data(mem, &temp);
} else {
- dmprintf2(mem, "0x%lx: 0x%02x ", (ulong)pp, r_type(&temp));
+ dmprintf2(mem, PRI_INTPTR": 0x%02x ", (intptr_t)pp, r_type(&temp));
debug_dump_one_ref(mem, &temp);
}
dmputc(mem, '\n');
diff --git a/psi/idebug.h b/psi/idebug.h
index 47648200..ebfb74ef 100644
--- a/psi/idebug.h
+++ b/psi/idebug.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/idict.c b/psi/idict.c
index 71d9d018..b698a9fe 100644
--- a/psi/idict.c
+++ b/psi/idict.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -502,8 +502,8 @@ dict_put(ref * pdref /* t_dictionary */ , const ref * pkey, const ref * pvalue,
} else {
ref *kp = pdict->keys.value.refs + index;
- if_debug2m('d', (const gs_memory_t *)mem, "[d]0x%lx: fill key at 0x%lx\n",
- (ulong) pdict, (ulong) kp);
+ if_debug2m('d', (const gs_memory_t *)mem, "[d]"PRI_INTPTR": fill key at "PRI_INTPTR"\n",
+ (intptr_t)pdict, (intptr_t)kp);
store_check_dest(pdref, pkey);
ref_assign_old_in(mem, &pdict->keys, kp, pkey,
"dict_put(key)"); /* set key of pair */
@@ -527,10 +527,10 @@ dict_put(ref * pdref /* t_dictionary */ , const ref * pkey, const ref * pvalue,
rcode = 1;
}
if_debug8m('d', (const gs_memory_t *)mem,
- "[d]0x%lx: put key 0x%lx 0x%lx\n value at 0x%lx: old 0x%lx 0x%lx, new 0x%lx 0x%lx\n",
- (ulong) pdref->value.pdict,
+ "[d]"PRI_INTPTR": put key 0x%lx 0x%lx\n value at "PRI_INTPTR": old 0x%lx 0x%lx, new 0x%lx 0x%lx\n",
+ (intptr_t) pdref->value.pdict,
((const ulong *)pkey)[0], ((const ulong *)pkey)[1],
- (ulong) pvslot,
+ (intptr_t) pvslot,
((const ulong *)pvslot)[0], ((const ulong *)pvslot)[1],
((const ulong *)pvalue)[0], ((const ulong *)pvalue)[1]);
ref_assign_old_in(mem, &pdref->value.pdict->values, pvslot, pvalue,
@@ -600,8 +600,8 @@ dict_undef(ref * pdref, const ref * pkey, dict_stack_t *pds)
bool must_save = ref_must_save_in(mem, &pdict->keys);
if_debug3m('d', (const gs_memory_t *)mem,
- "[d]0x%lx: removing key at 0%lx: 0x%x\n",
- (ulong)pdict, (ulong)pkp, (uint)*pkp);
+ "[d]"PRI_INTPTR": removing key at "PRI_INTPTR": 0x%x\n",
+ (intptr_t)pdict, (intptr_t)pkp, (uint)*pkp);
/* See the initial comment for why it is safe not to save */
/* the change if the keys array itself is new. */
if (must_save)
@@ -635,8 +635,8 @@ dict_undef(ref * pdref, const ref * pkey, dict_stack_t *pds)
ref *kp = pdict->keys.value.refs + index;
if_debug4m('d', (const gs_memory_t *)mem,
- "[d]0x%lx: removing key at 0%lx: 0x%lx 0x%lx\n",
- (ulong)pdict, (ulong)kp, ((ulong *)kp)[0], ((ulong *)kp)[1]);
+ "[d]"PRI_INTPTR": removing key at "PRI_INTPTR": 0x%lx 0x%lx\n",
+ (intptr_t)pdict, (intptr_t)kp, ((ulong *)kp)[0], ((ulong *)kp)[1]);
make_null_old_in(mem, &pdict->keys, kp, "dict_undef(key)");
/*
* Accumulating deleted entries slows down lookup.
@@ -659,8 +659,8 @@ dict_undef(ref * pdref, const ref * pkey, dict_stack_t *pds)
#ifdef DEBUG
/* Check the the cache is correct. */
if (!(pds && dstack_dict_is_permanent(pds, pdref)))
- lprintf1("dict_undef: cached name value pointer 0x%lx is incorrect!\n",
- (ulong) pname->pvalue);
+ lprintf1("dict_undef: cached name value pointer " PRI_INTPTR " is incorrect!\n",
+ (intptr_t) pname->pvalue);
#endif
/* Clear the cache */
pname->pvalue = pv_no_defn;
@@ -887,7 +887,7 @@ dict_next(const ref * pdref, int index, ref * eltp /* ref eltp[2] */ )
) {
eltp[1] = *vp;
if_debug6m('d', dict_mem(pdict), "[d]0x%lx: index %d: %lx %lx, %lx %lx\n",
- (ulong) pdict, index,
+ (intptr_t)pdict, index,
((ulong *) eltp)[0], ((ulong *) eltp)[1],
((ulong *) vp)[0], ((ulong *) vp)[1]);
return index;
diff --git a/psi/idict.h b/psi/idict.h
index fc0a056a..d5c19f28 100644
--- a/psi/idict.h
+++ b/psi/idict.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/idictdef.h b/psi/idictdef.h
index cb08cfe6..e6417a54 100644
--- a/psi/idictdef.h
+++ b/psi/idictdef.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/idicttpl.h b/psi/idicttpl.h
index cc6c6ff1..c48330a9 100644
--- a/psi/idicttpl.h
+++ b/psi/idicttpl.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -43,7 +43,7 @@
again:
for (; ; kp-- ) {
- if_debug2('D', "[D]probe 0x%lx: 0x%x\n", (ulong)kp, *kp);
+ if_debug2('D', "[D]probe "PRI_INTPTR": 0x%x\n", (intptr_t)kp, *kp);
if ( *kp == kpack ) {
found;
} else if ( !r_packed_is_name(kp) ) {
diff --git a/psi/idisp.c b/psi/idisp.c
index ecc3f2eb..ab8d070c 100644
--- a/psi/idisp.c
+++ b/psi/idisp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -47,70 +47,36 @@
#include "gsequivc.h"
#include "gdevdsp.h"
#include "gdevdsp2.h"
+#include "gxgstate.h"
+#include "gxdevsop.h"
int
-display_set_callback(gs_main_instance *minst, display_callback *callback)
+reopen_device_if_required(gs_main_instance *minst)
{
i_ctx_t *i_ctx_p;
- bool was_open;
int code;
- int exit_code = 0;
- os_ptr op;
gx_device *dev;
- gx_device_display *ddev;
-
- /* If display device exists, copy prototype if needed and return
- * device true
- * If it doesn't exist, return
- * false
- */
- const char getdisplay[] =
- "devicedict /display known dup { /display finddevice exch } if";
- code = gs_main_run_string(minst, getdisplay, 0, &exit_code,
- &minst->error_object);
- if (code < 0)
- return code;
i_ctx_p = minst->i_ctx_p; /* run_string may change i_ctx_p if GC */
- op = osp;
- check_type(*op, t_boolean);
- if (op->value.boolval) {
- /* display device was included in Ghostscript so we need
- * to set the callback structure pointer within it.
- * If the device is already open, close it before
- * setting callback, then reopen it.
- */
- check_read_type(op[-1], t_device);
- if (op[-1].value.pdevice == NULL)
- /* This can happen if we invalidated devices on the stack by calling nulldevice after they were pushed */
- return_error(gs_error_undefined);
-
- dev = op[-1].value.pdevice;
+ dev = gs_currentdevice_inline(i_ctx_p->pgs);
+ if (dev == NULL)
+ /* This can happen if we invalidated devices on the stack by calling nulldevice after they were pushed */
+ return_error(gs_error_undefined);
- was_open = dev->is_open;
- if (was_open) {
- code = gs_closedevice(dev);
- if (code < 0)
- return code;
- }
+ if (!dev->is_open)
+ return 0;
- ddev = (gx_device_display *) dev;
+ if (dev_proc(dev, dev_spec_op)(dev, gxdso_reopen_after_init, NULL, 0) != 1)
+ return 0;
- /* Deal with the case where we subclassed the device before we got here */
- while (ddev->child)
- ddev = (gx_device_display *)ddev->child;
-
- ddev->callback = callback;
+ code = gs_closedevice(dev);
+ if (code < 0)
+ return code;
- if (was_open) {
- code = gs_opendevice(dev);
- if (code < 0) {
- dmprintf(dev->memory, "**** Unable to open the display device, quitting.\n");
- return code;
- }
- }
- pop(1); /* device */
+ code = gs_opendevice(dev);
+ if (code < 0) {
+ dmprintf(dev->memory, "**** Unable to reopen the device, quitting.\n");
+ return code;
}
- pop(1); /* boolean */
return 0;
}
diff --git a/psi/idisp.h b/psi/idisp.h
index 7fa69747..215d915b 100644
--- a/psi/idisp.h
+++ b/psi/idisp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -25,7 +25,8 @@
typedef struct display_callback_s display_callback;
#endif
-/* Called from imain.c to set the display callback in the device instance. */
-int display_set_callback(gs_main_instance *minst, display_callback *callback);
+/* Called from imain.c to reopen the device after initialisation if the.
+ * device requires this. This gives it a chance to refetch any callbacks. */
+int reopen_device_if_required(gs_main_instance *minst);
#endif /* idisp_INCLUDED */
diff --git a/psi/idosave.h b/psi/idosave.h
index c8a527f5..ea161b23 100644
--- a/psi/idosave.h
+++ b/psi/idosave.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/idparam.c b/psi/idparam.c
index fbabc6c3..0fc0d9e6 100644
--- a/psi/idparam.c
+++ b/psi/idparam.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/idparam.h b/psi/idparam.h
index c31b37e9..40983680 100644
--- a/psi/idparam.h
+++ b/psi/idparam.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/idsdata.h b/psi/idsdata.h
index de673c6f..db1c956a 100644
--- a/psi/idsdata.h
+++ b/psi/idsdata.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/idstack.c b/psi/idstack.c
index 0dccd1c8..0e8615ab 100644
--- a/psi/idstack.c
+++ b/psi/idstack.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -121,8 +121,8 @@ dstack_find_name_by_index(dict_stack_t * pds, uint nidx)
name_index_ref(mem, nidx, &dnref);
dmlputs(mem, "[D]lookup ");
debug_print_name(mem, &dnref);
- dmprintf3(mem," in 0x%lx(%u/%u)\n",
- (ulong) pdict, dict_length(pdref),
+ dmprintf3(mem," in "PRI_INTPTR"(%u/%u)\n",
+ (intptr_t)pdict, dict_length(pdref),
dict_maxlength(pdref));
}
#endif
@@ -208,8 +208,8 @@ dstack_set_top(dict_stack_t * pds)
ds_ptr dsp = pds->stack.p;
dict *pdict = dsp->value.pdict;
- if_debug3('d', "[d]dsp = 0x%lx -> 0x%lx, key array type = %d\n",
- (ulong) dsp, (ulong) pdict, r_type(&pdict->keys));
+ if_debug3('d', "[d]dsp = "PRI_INTPTR" -> "PRI_INTPTR", key array type = %d\n",
+ (intptr_t)dsp, (intptr_t)pdict, r_type(&pdict->keys));
if (dict_is_packed(pdict) &&
r_has_attr(dict_access_ref(dsp), a_read)
) {
diff --git a/psi/idstack.h b/psi/idstack.h
index b690ecbb..111bcc6e 100644
--- a/psi/idstack.h
+++ b/psi/idstack.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ierrors.h b/psi/ierrors.h
index b34fcfc2..3f955b08 100644
--- a/psi/ierrors.h
+++ b/psi/ierrors.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iesdata.h b/psi/iesdata.h
index 68180bbb..0ee0fb05 100644
--- a/psi/iesdata.h
+++ b/psi/iesdata.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iestack.h b/psi/iestack.h
index 5b287060..6ec64b47 100644
--- a/psi/iestack.h
+++ b/psi/iestack.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ifapi.h b/psi/ifapi.h
index 098d4d30..a536ea43 100644
--- a/psi/ifapi.h
+++ b/psi/ifapi.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ifcid.h b/psi/ifcid.h
index 07554516..65b4e991 100644
--- a/psi/ifcid.h
+++ b/psi/ifcid.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ifilter.h b/psi/ifilter.h
index c49b4761..fcc6009f 100644
--- a/psi/ifilter.h
+++ b/psi/ifilter.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ifilter2.h b/psi/ifilter2.h
index 8fd933f7..d9e4b922 100644
--- a/psi/ifilter2.h
+++ b/psi/ifilter2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ifont.h b/psi/ifont.h
index 76f02db2..54581e96 100644
--- a/psi/ifont.h
+++ b/psi/ifont.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ifont1.h b/psi/ifont1.h
index efa8db16..c35c904e 100644
--- a/psi/ifont1.h
+++ b/psi/ifont1.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ifont2.h b/psi/ifont2.h
index 5afa638b..4fa50c3a 100644
--- a/psi/ifont2.h
+++ b/psi/ifont2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ifont42.h b/psi/ifont42.h
index 12225550..6c764f44 100644
--- a/psi/ifont42.h
+++ b/psi/ifont42.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ifrpred.h b/psi/ifrpred.h
index a5f5cc37..de6397c6 100644
--- a/psi/ifrpred.h
+++ b/psi/ifrpred.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ifunc.h b/psi/ifunc.h
index b8a61411..63e7349a 100644
--- a/psi/ifunc.h
+++ b/psi/ifunc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ifwpred.h b/psi/ifwpred.h
index 4c1c8929..0bc348bf 100644
--- a/psi/ifwpred.h
+++ b/psi/ifwpred.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/igc.c b/psi/igc.c
index 95778c8a..4eafc0d3 100644
--- a/psi/igc.c
+++ b/psi/igc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -318,8 +318,8 @@ gs_gc_reclaim(vm_spaces * pspaces, bool global)
pms->prev = end;
pms->on_heap = false;
if_debug2m('6', (const gs_memory_t *)mem,
- "[6]adding free 0x%lx(%u) to mark stack\n",
- (ulong) pms, pms->count);
+ "[6]adding free "PRI_INTPTR"(%u) to mark stack\n",
+ (intptr_t)pms, pms->count);
}
cp->rescan_bot = cp->cend;
cp->rescan_top = cp->cbase;
@@ -455,8 +455,8 @@ gs_gc_reclaim(vm_spaces * pspaces, bool global)
for_roots(ispace, max_trace, mem, rp) {
if_debug3m('6', (const gs_memory_t *)mem,
- "[6]relocating root 0x%lx: 0x%lx -> 0x%lx\n",
- (ulong) rp, (ulong) rp->p, (ulong) * rp->p);
+ "[6]relocating root "PRI_INTPTR": "PRI_INTPTR" -> "PRI_INTPTR"\n",
+ (intptr_t)rp, (intptr_t)rp->p, (intptr_t)*rp->p);
if (rp->ptype == ptr_ref_type) {
ref *pref = (ref *) * rp->p;
@@ -466,8 +466,8 @@ gs_gc_reclaim(vm_spaces * pspaces, bool global)
} else
*rp->p = (*rp->ptype->reloc) (*rp->p, &state);
if_debug3m('6', (const gs_memory_t *)mem,
- "[6]relocated root 0x%lx: 0x%lx -> 0x%lx\n",
- (ulong) rp, (ulong) rp->p, (ulong) * rp->p);
+ "[6]relocated root "PRI_INTPTR": "PRI_INTPTR" -> "PRI_INTPTR"\n",
+ (intptr_t)rp, (intptr_t)rp->p, (intptr_t)*rp->p);
}
end_phase(state.heap,"relocate roots");
@@ -530,8 +530,8 @@ gs_gc_reclaim(vm_spaces * pspaces, bool global)
mem->saved = prev;
mem->previous_status = total;
if_debug3m('6', (const gs_memory_t *)mem,
- "[6]0x%lx previous allocated=%lu, used=%lu\n",
- (ulong) mem, total.allocated, total.used);
+ "[6]"PRI_INTPTR" previous allocated=%lu, used=%lu\n",
+ (intptr_t)mem, total.allocated, total.used);
gs_memory_status((gs_memory_t *) mem, &total);
mem->gc_allocated = mem->allocated + total.allocated;
}
@@ -539,8 +539,8 @@ gs_gc_reclaim(vm_spaces * pspaces, bool global)
mem->previous_status = total;
mem->gc_allocated = mem->allocated + total.allocated;
if_debug3m('6', (const gs_memory_t *)mem,
- "[6]0x%lx previous allocated=%lu, used=%lu\n",
- (ulong) mem, total.allocated, total.used);
+ "[6]"PRI_INTPTR" previous allocated=%lu, used=%lu\n",
+ (intptr_t)mem, total.allocated, total.used);
}
end_phase(state.heap,"update stats");
@@ -615,9 +615,9 @@ gc_objects_clear_marks(const gs_memory_t *mem, clump_t * cp)
if (pre->o_type != &st_free)
debug_check_object(pre, cp, NULL);
#endif
- if_debug3m('7', (const gs_memory_t *)mem, " [7](un)marking %s(%lu) 0x%lx\n",
+ if_debug3m('7', (const gs_memory_t *)mem, " [7](un)marking %s(%lu) "PRI_INTPTR"\n",
struct_type_name_string(pre->o_type),
- (ulong) size, (ulong) pre);
+ (ulong) size, (intptr_t)pre);
o_set_unmarked(pre);
if (proc != 0)
(*proc) (mem, pre + 1, size, pre->o_type);
@@ -682,8 +682,8 @@ gc_rescan_clump(clump_t * cp, gc_state_t * pstate, gc_mark_stack * pmstack)
else if ((byte *) (pre + 1) > stop)
return more; /* 'break' won't work here */
else {
- if_debug2m('7', mem, " [7]scanning/marking 0x%lx(%lu)\n",
- (ulong) pre, (ulong) size);
+ if_debug2m('7', mem, " [7]scanning/marking "PRI_INTPTR"(%lu)\n",
+ (intptr_t)pre, (ulong)size);
if (pre->o_type == &st_refs) {
ref_packed *rp = (ref_packed *) (pre + 1);
char *end = (char *)rp + size;
@@ -740,8 +740,8 @@ gc_trace_clump(const gs_memory_t *mem, clump_t * cp, gc_state_t * pstate, gc_mar
SCAN_CLUMP_OBJECTS(cp)
DO_ALL
{
- if_debug2m('7', mem, " [7]scanning/marking 0x%lx(%lu)\n",
- (ulong) pre, (ulong) size);
+ if_debug2m('7', mem, " [7]scanning/marking "PRI_INTPTR"(%lu)\n",
+ (intptr_t)pre, (ulong)size);
if (pre->o_type == &st_refs) {
ref_packed *rp = (ref_packed *) (pre + 1);
char *end = (char *)rp + size;
@@ -804,8 +804,8 @@ gc_trace(gs_gc_root_t * rp, gc_state_t * pstate, gc_mark_stack * pmstack)
BEGIN\
if (names_mark_index(nt, nidx)) {\
new |= 1;\
- if_debug2m('8', gcst_get_memory_ptr(pstate), " [8]marked name 0x%lx(%u)\n",\
- (ulong)names_index_ptr(nt, nidx), nidx);\
+ if_debug2m('8', gcst_get_memory_ptr(pstate), " [8]marked name "PRI_INTPTR"(%u)\n",\
+ (intptr_t)names_index_ptr(nt, nidx), nidx);\
}\
END
@@ -850,10 +850,10 @@ gc_trace(gs_gc_root_t * rp, gc_state_t * pstate, gc_mark_stack * pmstack)
continue;
}
debug_check_object(ptr - 1, NULL, NULL);
- ts:if_debug4m('7', pstate->heap, " [7]%smarking %s 0x%lx[%u]",
+ ts:if_debug4m('7', pstate->heap, " [7]%smarking %s "PRI_INTPTR"[%u]",
depth_dots(sp, pms),
struct_type_name_string(ptr[-1].o_type),
- (ulong) ptr, sp->index);
+ (intptr_t)ptr, sp->index);
mproc = ptr[-1].o_type->enum_ptrs;
if (mproc == gs_no_struct_enum_ptrs ||
(ptp = (*mproc)
@@ -869,7 +869,7 @@ gc_trace(gs_gc_root_t * rp, gc_state_t * pstate, gc_mark_stack * pmstack)
/* template for pointer enumeration work. */
nptr = (void *)nep.ptr;
sp->index++;
- if_debug1m('7', pstate->heap, " = 0x%lx\n", (ulong) nptr);
+ if_debug1m('7', pstate->heap, " = "PRI_INTPTR"\n", (intptr_t)nptr);
/* Descend into nep.ptr, whose pointer type is ptp. */
if (ptp == ptr_struct_type) {
sp[1].index = 0;
@@ -909,8 +909,8 @@ gc_trace(gs_gc_root_t * rp, gc_state_t * pstate, gc_mark_stack * pmstack)
continue;
}
--(sp->index);
- if_debug3m('8', pstate->heap, " [8]%smarking refs 0x%lx[%u]\n",
- depth_dots(sp, pms), (ulong) pptr, sp->index);
+ if_debug3m('8', pstate->heap, " [8]%smarking refs "PRI_INTPTR"[%u]\n",
+ depth_dots(sp, pms), (intptr_t)pptr, sp->index);
if (r_is_packed(pptr)) {
if (!r_has_pmark(pptr)) {
r_set_pmark(pptr);
@@ -1060,8 +1060,8 @@ gc_extend_stack(gc_mark_stack * pms, gc_state_t * pstate)
if (cp == 0) { /* We were tracing outside collectible */
/* storage. This can't happen. */
- lprintf1("mark stack overflowed while outside collectible space at 0x%lx!\n",
- (ulong) cptr);
+ lprintf1("mark stack overflowed while outside collectible space at "PRI_INTPTR"!\n",
+ (intptr_t)cptr);
gs_abort(pstate->heap);
}
if (cptr < cp->rescan_bot)
@@ -1193,16 +1193,16 @@ gc_objects_set_reloc(gc_state_t * gcst, clump_t * cp)
) { /* Free object */
reloc += sizeof(obj_header_t) + obj_align_round(size);
if ((finalize = pre->o_type->finalize) != 0) {
- if_debug2m('u', gcst->heap, "[u]GC finalizing %s 0x%lx\n",
+ if_debug2m('u', gcst->heap, "[u]GC finalizing %s "PRI_INTPTR"\n",
struct_type_name_string(pre->o_type),
- (ulong) (pre + 1));
+ (intptr_t)(pre + 1));
(*finalize) (gcst->cur_mem, pre + 1);
}
pfree = (byte *) pre;
pre->o_back = (pfree - (byte *) chead) >> obj_back_shift;
pre->o_nreloc = reloc;
- if_debug3m('7', gcst->heap, " [7]at 0x%p, unmarked %lu, new reloc = %u\n",
- pre, (ulong) size, (unsigned int)reloc);
+ if_debug3m('7', gcst->heap, " [7]at "PRI_INTPTR", unmarked %lu, new reloc = %u\n",
+ (intptr_t)pre, (ulong) size, (unsigned int)reloc);
} else { /* Useful object */
debug_check_object(pre, cp, gcst);
pre->o_back = ((byte *) pre - pfree) >> obj_back_shift;
@@ -1241,9 +1241,9 @@ gc_do_reloc(clump_t * cp, gs_ref_memory_t * mem, gc_state_t * pstate)
pre->o_type->reloc_ptrs;
if_debug3m('7', (const gs_memory_t *)mem,
- " [7]relocating ptrs in %s(%lu) 0x%lx\n",
+ " [7]relocating ptrs in %s(%lu) "PRI_INTPTR"\n",
struct_type_name_string(pre->o_type),
- (ulong) size, (ulong) pre);
+ (ulong)size, (intptr_t)pre);
if (proc != 0)
(*proc) (pre + 1, size, pre->o_type, pstate);
}
@@ -1259,8 +1259,8 @@ gc_do_reloc(clump_t * cp, gs_ref_memory_t * mem, gc_state_t * pstate)
const void *
print_reloc_proc(const void *obj, const char *cname, const void *robj)
{
- if_debug3('9', " [9]relocate %s * 0x%lx to 0x%lx\n",
- cname, (ulong)obj, (ulong)robj);
+ if_debug3('9', " [9]relocate %s * "PRI_INTPTR" to "PRI_INTPTR"\n",
+ cname, (intptr_t)obj, (intptr_t)robj);
return robj;
}
@@ -1289,8 +1289,8 @@ igc_reloc_struct_ptr(const void /*obj_header_t */ *obj, gc_state_t * gcst)
if (cp != 0 && cp->cbase <= (byte *)obj && (byte *)obj <cp->ctop) {
if (back > (cp->ctop - cp->cbase) >> obj_back_shift) {
- lprintf2("Invalid back pointer %u at 0x%lx!\n",
- back, (ulong) obj);
+ lprintf2("Invalid back pointer %u at "PRI_INTPTR"!\n",
+ back, (intptr_t)obj);
gs_abort(NULL);
}
} else {
@@ -1340,9 +1340,9 @@ gc_objects_compact(clump_t * cp, gc_state_t * gcst)
debug_check_object(pre, cp, gcst);
if_debug4m('7', cmem,
- " [7]compacting %s 0x%lx(%lu) to 0x%lx\n",
+ " [7]compacting %s "PRI_INTPTR"(%lu) to "PRI_INTPTR"\n",
struct_type_name_string(pre->o_type),
- (ulong) pre, (ulong) size, (ulong) dpre);
+ (intptr_t)pre, (ulong)size, (intptr_t)dpre);
if (procs == 0) {
if (dpre != pre)
memmove(dpre, pre,
diff --git a/psi/igc.h b/psi/igc.h
index 4a7a4d81..20d66556 100644
--- a/psi/igc.h
+++ b/psi/igc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/igcref.c b/psi/igcref.c
index 94b94954..9c6c11d4 100644
--- a/psi/igcref.c
+++ b/psi/igcref.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -118,7 +118,7 @@ refs_clear_marks(const gs_memory_t *cmem,
if (r_is_packed(rp)) {
#ifdef DEBUG
if (gs_debug_c('8')) {
- dmlprintf1(cmem, " [8]unmark packed 0x%lx ", (ulong) rp);
+ dmlprintf1(cmem, " [8]unmark packed "PRI_INTPTR" ", (intptr_t) rp);
debug_print_ref(cmem, (const ref *)rp);
dmputs(cmem, "\n");
}
@@ -130,7 +130,7 @@ refs_clear_marks(const gs_memory_t *cmem,
#ifdef DEBUG
if (gs_debug_c('8')) {
- dmlprintf1(cmem, " [8]unmark ref 0x%lx ", (ulong) rp);
+ dmlprintf1(cmem, " [8]unmark ref "PRI_INTPTR" ", (intptr_t)rp);
debug_print_ref(cmem, pref);
dmputs(cmem, "\n");
}
@@ -190,7 +190,7 @@ refs_clear_reloc(obj_header_t *hdr, uint size)
ref *const pref = (ref *)rp;
if (!ref_type_uses_size_or_null(r_type(pref))) {
- if_debug1('8', " [8]clearing reloc at 0x%lx\n", (ulong) rp);
+ if_debug1('8', " [8]clearing reloc at "PRI_INTPTR"\n", (intptr_t)rp);
r_set_size(pref, 0);
}
rp += packed_per_ref;
@@ -219,8 +219,8 @@ refs_set_reloc(obj_header_t * hdr, uint reloc, uint size)
#if align_packed_per_ref == 1
if (r_has_pmark(rp)) {
if_debug1('8',
- " [8]packed ref 0x%lx is marked\n",
- (ulong) rp);
+ " [8]packed ref "PRI_INTPTR" is marked\n",
+ (intptr_t)rp);
rp++;
} else {
#else
@@ -263,9 +263,9 @@ refs_set_reloc(obj_header_t * hdr, uint reloc, uint size)
switch (marked) {
case all_marked:
if_debug2('8',
- " [8]packed refs 0x%lx..0x%lx are marked\n",
- (ulong) rp,
- (ulong) (rp + (align_packed_per_ref - 1)));
+ " [8]packed refs "PRI_INTPTR".."PRI_INTPTR" are marked\n",
+ (intptr_t)rp,
+ (intptr_t)(rp + (align_packed_per_ref - 1)));
rp += align_packed_per_ref;
break;
default:
@@ -274,14 +274,14 @@ refs_set_reloc(obj_header_t * hdr, uint reloc, uint size)
for (i = align_packed_per_ref; i--; rp++) {
r_set_pmark(rp);
if_debug1('8',
- " [8]packed ref 0x%lx is marked\n",
- (ulong) rp);
+ " [8]packed ref "PRI_INTPTR" is marked\n",
+ (intptr_t)rp);
}
break;
case 0:
#endif
- if_debug2('8', " [8]%d packed ref(s) at 0x%lx are unmarked\n",
- align_packed_per_ref, (ulong) rp);
+ if_debug2('8', " [8]%d packed ref(s) at "PRI_INTPTR" are unmarked\n",
+ align_packed_per_ref, (intptr_t)rp);
{
uint rel = reloc + freed;
@@ -302,28 +302,28 @@ refs_set_reloc(obj_header_t * hdr, uint reloc, uint size)
ref *pref = (ref *) rp;
if (!r_has_attr(pref, l_mark)) {
- if_debug1('8', " [8]ref 0x%lx is unmarked\n",
- (ulong) pref);
+ if_debug1('8', " [8]ref "PRI_INTPTR" is unmarked\n",
+ (intptr_t)pref);
/* Change this to a mark so we can */
/* store the relocation. */
r_set_type(pref, t_mark);
r_set_size(pref, rel);
freed += sizeof(ref);
} else {
- if_debug1('8', " [8]ref 0x%lx is marked\n",
- (ulong) pref);
+ if_debug1('8', " [8]ref "PRI_INTPTR" is marked\n",
+ (intptr_t)pref);
/* Store the relocation here if possible. */
if (!ref_type_uses_size_or_null(r_type(pref))) {
- if_debug2('8', " [8]storing reloc %u at 0x%lx\n",
- rel, (ulong) pref);
+ if_debug2('8', " [8]storing reloc %u at "PRI_INTPTR"\n",
+ rel, (intptr_t)pref);
r_set_size(pref, rel);
}
}
rp += packed_per_ref;
}
}
- if_debug3('7', " [7]at end of refs 0x%lx, size = %u, freed = %u\n",
- (ulong) (hdr + 1), size, freed);
+ if_debug3('7', " [7]at end of refs "PRI_INTPTR", size = %u, freed = %u\n",
+ (intptr_t)(hdr + 1), size, freed);
if (freed == size)
return false;
#if ARCH_SIZEOF_INT > ARCH_SIZEOF_SHORT
@@ -413,9 +413,9 @@ igc_reloc_refs(ref_packed * from, ref_packed * to, gc_state_t * gcst)
/* The following assignment is logically unnecessary; */
/* we do it only for convenience in debugging. */
pref = (ref *) rp;
- if_debug3m('8', gcst->heap, " [8]relocating %s %d ref at 0x%lx\n",
+ if_debug3m('8', gcst->heap, " [8]relocating %s %d ref at "PRI_INTPTR"\n",
(r_has_attr(pref, l_mark) ? "marked" : "unmarked"),
- r_btype(pref), (ulong) pref);
+ r_btype(pref), (intptr_t)pref);
if ((r_has_attr(pref, l_mark) || do_all) &&
r_space(pref) >= min_trace
) {
@@ -541,8 +541,8 @@ igc_reloc_refs(ref_packed * from, ref_packed * to, gc_state_t * gcst)
default:
goto no_reloc; /* don't print trace message */
}
- if_debug2m('8', gcst->heap, " [8]relocated 0x%lx => 0x%lx\n",
- (ulong)before, (ulong)after);
+ if_debug2m('8', gcst->heap, " [8]relocated "PRI_INTPTR" => "PRI_INTPTR"\n",
+ (intptr_t)before, (intptr_t)after);
}
no_reloc:
rp += packed_per_ref;
@@ -688,8 +688,8 @@ refs_compact(const gs_memory_t *mem, obj_header_t * pre, obj_header_t * dpre, ui
if (r_is_packed(src)) {
if (!r_has_pmark(src))
break;
- if_debug1m('8', mem, " [8]packed ref 0x%lx \"copied\"\n",
- (ulong) src);
+ if_debug1m('8', mem, " [8]packed ref "PRI_INTPTR" \"copied\"\n",
+ (intptr_t)src);
*src &= ~lp_mark;
src++;
} else { /* full-size ref */
@@ -697,7 +697,7 @@ refs_compact(const gs_memory_t *mem, obj_header_t * pre, obj_header_t * dpre, ui
if (!r_has_attr(pref, l_mark))
break;
- if_debug1m('8', mem, " [8]ref 0x%lx \"copied\"\n", (ulong) src);
+ if_debug1m('8', mem, " [8]ref "PRI_INTPTR" \"copied\"\n", (intptr_t)src);
r_clear_attrs(pref, l_mark);
src += packed_per_ref;
}
@@ -707,8 +707,8 @@ refs_compact(const gs_memory_t *mem, obj_header_t * pre, obj_header_t * dpre, ui
for (;;) {
if (r_is_packed(src)) {
if (r_has_pmark(src)) {
- if_debug2m('8', mem, " [8]packed ref 0x%lx copied to 0x%lx\n",
- (ulong) src, (ulong) dest);
+ if_debug2m('8', mem, " [8]packed ref "PRI_INTPTR" copied to "PRI_INTPTR"\n",
+ (intptr_t)src, (intptr_t)dest);
*dest++ = *src & ~lp_mark;
}
src++;
@@ -716,8 +716,8 @@ refs_compact(const gs_memory_t *mem, obj_header_t * pre, obj_header_t * dpre, ui
if (r_has_attr((ref *) src, l_mark)) {
ref rtemp;
- if_debug2m('8', mem, " [8]ref 0x%lx copied to 0x%lx\n",
- (ulong) src, (ulong) dest);
+ if_debug2m('8', mem, " [8]ref "PRI_INTPTR" copied to "PRI_INTPTR"\n",
+ (intptr_t)src, (intptr_t)dest);
/* We can't just use ref_assign_inline, */
/* because the source and destination */
/* might overlap! */
@@ -738,8 +738,8 @@ refs_compact(const gs_memory_t *mem, obj_header_t * pre, obj_header_t * dpre, ui
/* Check that the relocation came out OK. */
/* NOTE: this check only works within a single clump. */
if ((byte *) src - (byte *) dest != r_size((ref *) src - 1) + sizeof(ref)) {
- mlprintf3(mem, "Reloc error for refs 0x%lx: reloc = %lu, stored = %u\n",
- (ulong) dpre, (ulong) ((byte *) src - (byte *) dest),
+ mlprintf3(mem, "Reloc error for refs "PRI_INTPTR": reloc = %lu, stored = %u\n",
+ (intptr_t) dpre, (ulong) ((byte *) src - (byte *) dest),
(uint) r_size((ref *) src - 1));
gs_abort(mem);
}
diff --git a/psi/igcstr.c b/psi/igcstr.c
index f38c33aa..bfa8ace3 100644
--- a/psi/igcstr.c
+++ b/psi/igcstr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -31,8 +31,8 @@ void
gc_strings_set_marks(clump_t * cp, bool mark)
{
if (cp->smark != 0) {
- if_debug3('6', "[6]clearing string marks 0x%lx[%u] to %d\n",
- (ulong) cp->smark, cp->smark_size, (int)mark);
+ if_debug3('6', "[6]clearing string marks "PRI_INTPTR"[%u] to %d\n",
+ (intptr_t)cp->smark, cp->smark_size, (int)mark);
memset(cp->smark, 0, cp->smark_size);
if (mark)
gc_mark_string(cp->sbase + HDR_ID_OFFSET, (cp->climit - cp->sbase) - HDR_ID_OFFSET, true, cp);
@@ -141,7 +141,7 @@ gc_string_mark(const byte * ptr, uint size, bool set, gc_state_t * gcst)
if (!(cp = gc_locate(ptr - HDR_ID_OFFSET, gcst))) { /* not in a clump */
#ifdef DEBUG
if (gs_debug_c('5')) {
- dmlprintf2(gcst->heap, "[5]0x%lx[%u]", (ulong) ptr - HDR_ID_OFFSET, size);
+ dmlprintf2(gcst->heap, "[5]"PRI_INTPTR"[%u]", (intptr_t)ptr - HDR_ID_OFFSET, size);
dmprintstr(gcst->heap);
dmputs(gcst->heap, " not in a clump\n");
}
@@ -152,8 +152,8 @@ gc_string_mark(const byte * ptr, uint size, bool set, gc_state_t * gcst)
return false;
#ifdef DEBUG
if (ptr - HDR_ID_OFFSET < cp->ctop) {
- lprintf4("String pointer 0x%lx[%u] outside [0x%lx..0x%lx)\n",
- (ulong) ptr - HDR_ID_OFFSET, size, (ulong) cp->ctop, (ulong) cp->climit);
+ lprintf4("String pointer "PRI_INTPTR"[%u] outside ["PRI_INTPTR".."PRI_INTPTR")\n",
+ (intptr_t)ptr - HDR_ID_OFFSET, size, (intptr_t)cp->ctop, (intptr_t)cp->climit);
return false;
} else if (ptr + size > cp->climit) { /*
* If this is the bottommost string in a clump that has
@@ -171,9 +171,9 @@ gc_string_mark(const byte * ptr, uint size, bool set, gc_state_t * gcst)
while (ptr - HDR_ID_OFFSET == scp->climit && scp->outer != 0)
scp = scp->outer;
if (ptr - HDR_ID_OFFSET + size > scp->climit) {
- lprintf4("String pointer 0x%lx[%u] outside [0x%lx..0x%lx)\n",
- (ulong) ptr - HDR_ID_OFFSET, size,
- (ulong) scp->ctop, (ulong) scp->climit);
+ lprintf4("String pointer "PRI_INTPTR"[%u] outside ["PRI_INTPTR".."PRI_INTPTR")\n",
+ (intptr_t)ptr - HDR_ID_OFFSET, size,
+ (intptr_t)scp->ctop, (intptr_t)scp->climit);
return false;
}
}
@@ -181,9 +181,9 @@ gc_string_mark(const byte * ptr, uint size, bool set, gc_state_t * gcst)
marks = gc_mark_string(ptr, size, set, cp);
#ifdef DEBUG
if (gs_debug_c('5')) {
- dmlprintf4(gcst->heap, "[5]%s%smarked 0x%lx[%u]",
+ dmlprintf4(gcst->heap, "[5]%s%smarked "PRI_INTPTR"[%u]",
(marks ? "" : "already "), (set ? "" : "un"),
- (ulong) ptr - HDR_ID_OFFSET, size);
+ (intptr_t)ptr - HDR_ID_OFFSET, size);
dmprintstr(gcst->heap);
dmputc(gcst->heap, '\n');
}
@@ -198,8 +198,8 @@ gc_strings_clear_reloc(clump_t * cp)
{
if (cp->sreloc != 0) {
gc_strings_set_marks(cp, true);
- if_debug1('6', "[6]clearing string reloc 0x%lx\n",
- (ulong) cp->sreloc);
+ if_debug1('6', "[6]clearing string reloc "PRI_INTPTR"\n",
+ (intptr_t)cp->sreloc);
gc_strings_set_reloc(cp);
}
}
@@ -320,8 +320,8 @@ igc_reloc_string(gs_string * sptr, gc_state_t * gcst)
}
byt = *bitp & (0xff >> (8 - (offset & 7)));
reloc -= byte_count_one_bits(byt);
- if_debug2('5', "[5]relocate string 0x%lx to 0x%lx\n",
- (ulong) ptr, (ulong) (cp->sdest - reloc));
+ if_debug2('5', "[5]relocate string "PRI_INTPTR" to 0x%lx\n",
+ (intptr_t)ptr, (intptr_t)(cp->sdest - reloc));
sptr->data = (cp->sdest - reloc) + HDR_ID_OFFSET;
}
void
@@ -360,7 +360,7 @@ gc_strings_compact(clump_t * cp, const gs_memory_t *mem)
for (; i < n; i += R) {
uint j;
- dmlprintf1(mem, "[4]0x%lx: ", (ulong) (base + i));
+ dmlprintf1(mem, "[4]"PRI_INTPTR": ", (intptr_t) (base + i));
for (j = i; j < i + R; j++) {
byte ch = base[j];
diff --git a/psi/igcstr.h b/psi/igcstr.h
index ceb2190f..8d5cc783 100644
--- a/psi/igcstr.h
+++ b/psi/igcstr.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/igstate.h b/psi/igstate.h
index 18931f73..a6bbb63e 100644
--- a/psi/igstate.h
+++ b/psi/igstate.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iht.h b/psi/iht.h
index f3d6eef4..ce56d816 100644
--- a/psi/iht.h
+++ b/psi/iht.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iimage.h b/psi/iimage.h
index ea75911b..36914b9b 100644
--- a/psi/iimage.h
+++ b/psi/iimage.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iinit.c b/psi/iinit.c
index 25fe0a16..41ff8b09 100644
--- a/psi/iinit.c
+++ b/psi/iinit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -395,8 +395,8 @@ zop_init(i_ctx_t *i_ctx_p)
if (def->proc != 0) {
code = def->proc(i_ctx_p);
if (code < 0) {
- lprintf2("op_init proc 0x%lx returned error %d!\n",
- (ulong)def->proc, code);
+ lprintf2("op_init proc "PRI_INTPTR" returned error %d!\n",
+ (intptr_t)def->proc, code);
return code;
}
}
diff --git a/psi/iinit.h b/psi/iinit.h
index 8305252f..f4e4255f 100644
--- a/psi/iinit.h
+++ b/psi/iinit.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ilevel.h b/psi/ilevel.h
index 6af439cc..90d222ce 100644
--- a/psi/ilevel.h
+++ b/psi/ilevel.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ilocate.c b/psi/ilocate.c
index 35916087..f86cc5b2 100644
--- a/psi/ilocate.c
+++ b/psi/ilocate.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -249,13 +249,13 @@ ialloc_validate_memory(const gs_ref_memory_t * mem, gc_state_t * gcst)
const clump_t *cp;
int i;
- if_debug3m('6', (gs_memory_t *)mem, "[6]validating memory 0x%lx, space %d, level %d\n",
- (ulong) mem, mem->space, level);
+ if_debug3m('6', (gs_memory_t *)mem, "[6]validating memory "PRI_INTPTR", space %d, level %d\n",
+ (intptr_t) mem, mem->space, level);
/* Validate clumps. */
for (cp = clump_splay_walk_init(&sw, smem); cp != 0; cp = clump_splay_walk_fwd(&sw))
if (do_validate_clump(cp, gcst)) {
- mlprintf3((gs_memory_t *)mem, "while validating memory 0x%lx, space %d, level %d\n",
- (ulong) mem, mem->space, level);
+ mlprintf3((gs_memory_t *)mem, "while validating memory "PRI_INTPTR", space %d, level %d\n",
+ (intptr_t) mem, mem->space, level);
gs_abort(gcst->heap);
}
/* Validate freelists. */
@@ -269,17 +269,19 @@ ialloc_validate_memory(const gs_ref_memory_t * mem, gc_state_t * gcst)
obj_size_t size = pfree[-1].o_size;
if (pfree[-1].o_type != &st_free) {
- mlprintf3((gs_memory_t *)mem, "Non-free object 0x%lx(%u) on freelist %i!\n",
- (ulong) pfree, size, i);
+ mlprintf3((gs_memory_t *)mem, "Non-free object "PRI_INTPTR"(%u) on freelist %i!\n",
+ (intptr_t) pfree, size, i);
break;
}
if ((i == LARGE_FREELIST_INDEX && size < max_freelist_size) ||
(i != LARGE_FREELIST_INDEX &&
(size < free_size - obj_align_mask || size > free_size))) {
- mlprintf3((gs_memory_t *)mem, "Object 0x%lx(%u) size wrong on freelist %i!\n",
- (ulong) pfree, (uint)size, i);
+ mlprintf3((gs_memory_t *)mem, "Object "PRI_INTPTR"(%u) size wrong on freelist %i!\n",
+ (intptr_t) pfree, (uint)size, i);
break;
}
+ if (pfree == *(const obj_header_t* const*)pfree)
+ break;
}
}
};
@@ -313,17 +315,17 @@ do_validate_clump(const clump_t * cp, gc_state_t * gcst)
DO_ALL
if (pre->o_type == &st_free) {
if (!object_size_valid(pre, size, cp)) {
- lprintf3("Bad free object 0x%lx(%lu), in clump 0x%lx!\n",
- (ulong) (pre + 1), (ulong) size, (ulong) cp);
+ lprintf3("Bad free object "PRI_INTPTR"(%lu), in clump "PRI_INTPTR"!\n",
+ (intptr_t) (pre + 1), (ulong) size, (intptr_t) cp);
return 1;
}
} else if (do_validate_object(pre + 1, cp, gcst)) {
dmprintf_clump(gcst->heap, "while validating clump", cp);
return 1;
}
- if_debug3m('7', gcst->heap, " [7]validating %s(%lu) 0x%lx\n",
+ if_debug3m('7', gcst->heap, " [7]validating %s(%lu) "PRI_INTPTR"\n",
struct_type_name_string(pre->o_type),
- (ulong) size, (ulong) pre);
+ (ulong) size, (intptr_t) pre);
if (pre->o_type == &st_refs) {
const ref_packed *rp = (const ref_packed *)(pre + 1);
const char *end = (const char *)rp + size;
@@ -335,9 +337,9 @@ do_validate_clump(const clump_t * cp, gc_state_t * gcst)
ret = ialloc_validate_ref_packed(rp, gcst);
# endif
if (ret) {
- mlprintf3(gcst->heap, "while validating %s(%lu) 0x%lx\n",
+ mlprintf3(gcst->heap, "while validating %s(%lu) "PRI_INTPTR"\n",
struct_type_name_string(pre->o_type),
- (ulong) size, (ulong) pre);
+ (ulong) size, (intptr_t) pre);
dmprintf_clump(gcst->heap, "in clump", cp);
return ret;
}
@@ -461,9 +463,9 @@ cks: if (optr != 0) {
break;
case t_name:
if (name_index_ptr(cmem, name_index(cmem, pref)) != pref->value.pname) {
- lprintf3("At 0x%lx, bad name %u, pname = 0x%lx\n",
- (ulong) pref, (uint)name_index(cmem, pref),
- (ulong) pref->value.pname);
+ lprintf3("At "PRI_INTPTR", bad name %u, pname = "PRI_INTPTR"\n",
+ (intptr_t) pref, (uint)name_index(cmem, pref),
+ (intptr_t) pref->value.pname);
ret = 1;
break;
} {
@@ -473,18 +475,18 @@ cks: if (optr != 0) {
if (r_space(&sref) != avm_foreign &&
!gc_locate(sref.value.const_bytes, gcst)
) {
- lprintf4("At 0x%lx, bad name %u, pname = 0x%lx, string 0x%lx not in any clump\n",
- (ulong) pref, (uint) r_size(pref),
- (ulong) pref->value.pname,
- (ulong) sref.value.const_bytes);
+ lprintf4("At "PRI_INTPTR", bad name %u, pname = "PRI_INTPTR", string "PRI_INTPTR" not in any clump\n",
+ (intptr_t) pref, (uint) r_size(pref),
+ (intptr_t) pref->value.pname,
+ (intptr_t) sref.value.const_bytes);
ret = 1;
}
}
break;
case t_string:
if (r_size(pref) != 0 && !gc_locate(pref->value.bytes, gcst)) {
- lprintf3("At 0x%lx, string ptr 0x%lx[%u] not in any clump\n",
- (ulong) pref, (ulong) pref->value.bytes,
+ lprintf3("At "PRI_INTPTR", string ptr "PRI_INTPTR"[%u] not in any clump\n",
+ (intptr_t) pref, (intptr_t) pref->value.bytes,
(uint) r_size(pref));
ret = 1;
}
@@ -496,8 +498,8 @@ cks: if (optr != 0) {
size = r_size(pref);
tname = "array";
cka: if (!gc_locate(rptr, gcst)) {
- lprintf3("At 0x%lx, %s 0x%lx not in any clump\n",
- (ulong) pref, tname, (ulong) rptr);
+ lprintf3("At "PRI_INTPTR", %s "PRI_INTPTR" not in any clump\n",
+ (intptr_t) pref, tname, (intptr_t) rptr);
ret = 1;
break;
} {
@@ -507,8 +509,8 @@ cka: if (!gc_locate(rptr, gcst)) {
const ref *elt = rptr + i;
if (r_is_packed(elt)) {
- lprintf5("At 0x%lx, %s 0x%lx[%u] element %u is not a ref\n",
- (ulong) pref, tname, (ulong) rptr, size, i);
+ lprintf5("At "PRI_INTPTR", %s "PRI_INTPTR"[%u] element %u is not a ref\n",
+ (intptr_t) pref, tname, (intptr_t) rptr, size, i);
ret = 1;
}
}
@@ -520,8 +522,8 @@ cka: if (!gc_locate(rptr, gcst)) {
break;
optr = pref->value.packed;
if (!gc_locate(optr, gcst)) {
- lprintf2("At 0x%lx, packed array 0x%lx not in any clump\n",
- (ulong) pref, (ulong) optr);
+ lprintf2("At "PRI_INTPTR", packed array "PRI_INTPTR" not in any clump\n",
+ (intptr_t) pref, (intptr_t) optr);
ret = 1;
}
break;
@@ -534,8 +536,8 @@ cka: if (!gc_locate(rptr, gcst)) {
!r_has_type(&pdict->count, t_integer) ||
!r_has_type(&pdict->maxlength, t_integer)
) {
- lprintf2("At 0x%lx, invalid dict 0x%lx\n",
- (ulong) pref, (ulong) pdict);
+ lprintf2("At "PRI_INTPTR", invalid dict "PRI_INTPTR"\n",
+ (intptr_t) pref, (intptr_t) pdict);
ret = 1;
}
rptr = (const ref *)pdict;
@@ -562,10 +564,10 @@ ialloc_validate_pointer_stability(const obj_header_t * ptr_fr,
const char *sn_to = (ptr_to->d.o.space_id < count_of(sn)
? sn[ptr_to->d.o.space_id] : "unknown");
- lprintf6("Reference to a less stable object 0x%lx<%s> "
- "in the space \'%s\' from 0x%lx<%s> in the space \'%s\' !\n",
- (ulong) ptr_to, ptr_to->d.o.t.type->sname, sn_to,
- (ulong) ptr_fr, ptr_fr->d.o.t.type->sname, sn_fr);
+ lprintf6("Reference to a less stable object "PRI_INTPTR"<%s> "
+ "in the space \'%s\' from "PRI_INTPTR"<%s> in the space \'%s\' !\n",
+ (intptr_t) ptr_to, ptr_to->d.o.t.type->sname, sn_to,
+ (intptr_t) ptr_fr, ptr_fr->d.o.t.type->sname, sn_fr);
}
}
#endif
@@ -587,14 +589,14 @@ do_validate_object(const obj_header_t * ptr, const clump_t * cp,
st = *gcst; /* no side effects! */
if (!(cp = gc_locate(pre, &st))) {
- mlprintf1(gcst->heap, "Object 0x%lx not in any clump!\n",
- (ulong) ptr);
+ mlprintf1(gcst->heap, "Object "PRI_INTPTR" not in any clump!\n",
+ (intptr_t) ptr);
return 1; /*gs_abort(); */
}
}
if (otype == &st_free) {
- mlprintf3(gcst->heap, "Reference to free object 0x%lx(%lu), in clump 0x%lx!\n",
- (ulong) ptr, (ulong) size, (ulong) cp);
+ mlprintf3(gcst->heap, "Reference to free object "PRI_INTPTR"(%lu), in clump "PRI_INTPTR"!\n",
+ (intptr_t) ptr, (ulong) size, (intptr_t) cp);
return 1;
}
if ((cp != 0 && !object_size_valid(pre, size, cp)) ||
@@ -602,15 +604,15 @@ do_validate_object(const obj_header_t * ptr, const clump_t * cp,
(oname = struct_type_name_string(otype),
*oname < 33 || *oname > 126)
) {
- mlprintf2(gcst->heap, "\n Bad object 0x%lx(%lu),\n",
- (ulong) ptr, (ulong) size);
- dmprintf2(gcst->heap, " ssize = %u, in clump 0x%lx!\n",
- otype->ssize, (ulong) cp);
+ mlprintf2(gcst->heap, "\n Bad object "PRI_INTPTR"(%lu),\n",
+ (intptr_t) ptr, (ulong) size);
+ dmprintf2(gcst->heap, " ssize = %u, in clump "PRI_INTPTR"!\n",
+ otype->ssize, (intptr_t) cp);
return 1;
}
if (size % otype->ssize != 0) {
- mlprintf3(gcst->heap, "\n Potentially bad object 0x%lx(%lu), in clump 0x%lx!\n",
- (ulong) ptr, (ulong) size, (ulong) cp);
+ mlprintf3(gcst->heap, "\n Potentially bad object "PRI_INTPTR"(%lu), in clump "PRI_INTPTR"!\n",
+ (intptr_t) ptr, (ulong) size, (intptr_t) cp);
dmprintf3(gcst->heap, " structure name = %s, size = %lu, ssize = %u\n",
oname, size, otype->ssize);
dmprintf(gcst->heap, " This can happen (and is benign) if a device has been subclassed\n");
diff --git a/psi/imain.c b/psi/imain.c
index db3fd2a1..c45119c7 100644
--- a/psi/imain.c
+++ b/psi/imain.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -130,7 +130,8 @@ gs_main_init0(gs_main_instance * minst, gp_file * in, gp_file * out, gp_file * e
int code = 0;
if (gs_debug_c(gs_debug_flag_init_details))
- dmprintf1(minst->heap, "%% Init phase 0 started, instance 0x%p\n", minst);
+ dmprintf1(minst->heap, "%% Init phase 0 started, instance "PRI_INTPTR"\n",
+ (intptr_t)minst);
/* Do platform-dependent initialization. */
/* We have to do this as the very first thing, */
@@ -170,7 +171,8 @@ gs_main_init0(gs_main_instance * minst, gp_file * in, gp_file * out, gp_file * e
fail:
if (gs_debug_c(gs_debug_flag_init_details))
- dmprintf2(minst->heap, "%% Init phase 0 %s, instance 0x%p\n", code < 0 ? "failed" : "done", minst);
+ dmprintf2(minst->heap, "%% Init phase 0 %s, instance "PRI_INTPTR"\n",
+ code < 0 ? "failed" : "done", (intptr_t)minst);
return code;
}
@@ -187,7 +189,8 @@ gs_main_init1(gs_main_instance * minst)
return 0;
if (gs_debug_c(gs_debug_flag_init_details))
- dmprintf1(minst->heap, "%% Init phase 1 started, instance 0x%p\n", minst);
+ dmprintf1(minst->heap, "%% Init phase 1 started, instance "PRI_INTPTR"\n",
+ (intptr_t)minst);
code = ialloc_init(&idmem, minst->heap,
minst->memory_clump_size, gs_have_level2());
@@ -232,7 +235,8 @@ fail:
fail_early:
if (gs_debug_c(gs_debug_flag_init_details))
- dmprintf2(minst->heap, "%% Init phase 1 %s, instance 0x%p\n", code < 0 ? "failed" : "done", minst);
+ dmprintf2(minst->heap, "%% Init phase 1 %s, instance "PRI_INTPTR"\n",
+ code < 0 ? "failed" : "done", (intptr_t)minst);
return code;
}
@@ -302,11 +306,11 @@ int gs_main_init2aux(gs_main_instance * minst) {
if (code < 0)
return code;
minst->init_done = 2;
+
/* NB this is to be done with device parameters
* both minst->display and display_set_callback() are going away
*/
- if (minst->display)
- if ((code = display_set_callback(minst, minst->display)) < 0)
+ if ((code = reopen_device_if_required(minst)) < 0)
return code;
if ((code = gs_main_run_string(minst,
@@ -321,6 +325,132 @@ int gs_main_init2aux(gs_main_instance * minst) {
}
int
+gs_main_set_language_param(gs_main_instance *minst,
+ gs_param_list *plist)
+{
+ ref value;
+ int code = 0;
+ i_ctx_t *i_ctx_p = minst->i_ctx_p;
+ uint space = icurrent_space;
+ gs_param_enumerator_t enumerator;
+ gs_param_key_t key;
+ gs_lib_ctx_t *ctx = minst->heap->gs_lib_ctx;
+
+ ialloc_set_space(idmemory, avm_system);
+
+ param_init_enumerator(&enumerator);
+ while ((code = param_get_next_key(plist, &enumerator, &key)) == 0) {
+ char string_key[256]; /* big enough for any reasonable key */
+ gs_param_typed_value pvalue;
+
+ if (key.size > sizeof(string_key) - 1) {
+ code = gs_note_error(gs_error_rangecheck);
+ break;
+ }
+ memcpy(string_key, key.data, key.size);
+ string_key[key.size] = 0;
+ if ((code = param_read_typed(plist, string_key, &pvalue)) != 0) {
+ code = (code > 0 ? gs_note_error(gs_error_unknownerror) : code);
+ break;
+ }
+ switch (pvalue.type) {
+ case gs_param_type_null:
+ make_null(&value);
+ break;
+ case gs_param_type_bool:
+ if (pvalue.value.b)
+ make_true(&value);
+ else
+ make_false(&value);
+ break;
+ case gs_param_type_int:
+ make_int(&value, (ps_int)pvalue.value.i);
+ break;
+ case gs_param_type_i64:
+ make_int(&value, (ps_int)pvalue.value.i64);
+ break;
+ case gs_param_type_long:
+ make_int(&value, (ps_int)pvalue.value.l);
+ break;
+ case gs_param_type_size_t:
+ make_int(&value, (ps_int)pvalue.value.z);
+ break;
+ case gs_param_type_float:
+ make_real(&value, pvalue.value.f);
+ break;
+ case gs_param_type_dict:
+ /* We don't support dicts for now */
+ continue;
+ case gs_param_type_dict_int_keys:
+ /* We don't support dicts with int keys for now */
+ continue;
+ case gs_param_type_array:
+ /* We don't support arrays for now */
+ continue;
+ case gs_param_type_string:
+ if (pvalue.value.s.data == NULL || pvalue.value.s.size == 0)
+ make_empty_string(&value, a_readonly);
+ else {
+ size_t len = pvalue.value.s.size;
+ byte *body = ialloc_string(len, "-s");
+
+ if (body == NULL)
+ return gs_error_Fatal;
+ memcpy(body, pvalue.value.s.data, len);
+ make_const_string(&value, a_readonly | avm_system, len, body);
+ }
+ break;
+ case gs_param_type_name:
+ code = name_ref(ctx->memory, pvalue.value.n.data, pvalue.value.n.size, &value, 1);
+ break;
+ case gs_param_type_int_array:
+ /* We don't support arrays for now */
+ continue;
+ case gs_param_type_float_array:
+ /* We don't support arrays for now */
+ continue;
+ case gs_param_type_string_array:
+ /* We don't support arrays for now */
+ continue;
+ default:
+ continue;
+ }
+ if (code < 0)
+ break;
+
+ ialloc_set_space(idmemory, space);
+ /* Enter the name in systemdict. */
+ i_initial_enter_name_copy(minst->i_ctx_p, string_key, &value);
+ }
+
+ return code;
+}
+
+static int
+gs_main_push_params(gs_main_instance *minst)
+{
+ int code;
+ gs_c_param_list *plist;
+
+ plist = minst->param_list;
+ if (!plist)
+ return 0;
+
+ code = gs_putdeviceparams(minst->i_ctx_p->pgs->device,
+ (gs_param_list *)plist);
+ if (code < 0)
+ return code;
+
+ code = gs_main_set_language_param(minst, (gs_param_list *)plist);
+ if (code < 0)
+ return code;
+
+ gs_c_param_list_release(plist);
+
+ return code;
+}
+
+int
gs_main_init2(gs_main_instance * minst)
{
i_ctx_t *i_ctx_p;
@@ -329,17 +459,22 @@ gs_main_init2(gs_main_instance * minst)
if (code < 0)
return code;
+ code = gs_main_push_params(minst);
+ if (code < 0)
+ return code;
+
if (minst->init_done >= 2)
return 0;
if (gs_debug_c(gs_debug_flag_init_details))
- dmprintf1(minst->heap, "%% Init phase 2 started, instance 0x%p\n", minst);
+ dmprintf1(minst->heap, "%% Init phase 2 started, instance "PRI_INTPTR"\n",
+ (intptr_t)minst);
code = gs_main_init2aux(minst);
if (code < 0)
goto fail;
- i_ctx_p = minst->i_ctx_p; /* display_set_callback or run_string may change it */
+ i_ctx_p = minst->i_ctx_p; /* reopen_device_if_display or run_string may change it */
/* Now process the initial saved-pages=... argument, if any as well as saved-pages-test */
{
@@ -383,7 +518,8 @@ gs_main_init2(gs_main_instance * minst)
fail:
if (gs_debug_c(gs_debug_flag_init_details))
- dmprintf2(minst->heap, "%% Init phase 2 %s, instance 0x%p\n", code < 0 ? "failed" : "done", minst);
+ dmprintf2(minst->heap, "%% Init phase 2 %s, instance "PRI_INTPTR"\n",
+ code < 0 ? "failed" : "done", (intptr_t)minst);
return code;
}
@@ -619,7 +755,7 @@ gs_main_set_lib_paths(gs_main_instance * minst)
break;
}
}
- if (have_rom_device && code >= 0) {
+ if (have_rom_device) {
code = lib_path_add(minst, "%rom%Resource/Init/");
if (code < 0)
return code;
@@ -1073,7 +1209,7 @@ gs_finit_push_systemdict(i_ctx_t *i_ctx_p)
/* Free all resources and return. */
int
-gs_main_finit(gs_main_instance * minst, int exit_status, int code)
+gs_main_finit(gs_main_instance * minst, int exit_status, int env_code)
{
i_ctx_t *i_ctx_p = minst->i_ctx_p;
gs_dual_memory_t dmem = {0};
@@ -1225,7 +1361,7 @@ gs_main_finit(gs_main_instance * minst, int exit_status, int code)
i_ctx_p = minst->i_ctx_p; /* get current interp context */
if (gs_debug_c(':')) {
print_resource_usage(minst, &gs_imemory, "Final");
- dmprintf1(minst->heap, "%% Exiting instance 0x%p\n", minst);
+ dmprintf1(minst->heap, "%% Exiting instance "PRI_INTPTR"\n", (intptr_t)minst);
}
/* Do the equivalent of a restore "past the bottom". */
/* This will release all memory, close all open files, etc. */
@@ -1234,11 +1370,11 @@ gs_main_finit(gs_main_instance * minst, int exit_status, int code)
i_plugin_holder *h = i_ctx_p->plugin_list;
dmem = *idmemory;
- code = alloc_restore_all(i_ctx_p);
- if (code < 0)
+ env_code = alloc_restore_all(i_ctx_p);
+ if (env_code < 0)
emprintf1(mem_raw,
"ERROR %d while the final restore. See gs/psi/ierrors.h for code explanation.\n",
- code);
+ env_code);
i_iodev_finit(&dmem);
i_plugin_finit(mem_raw, h);
}
@@ -1258,12 +1394,12 @@ gs_main_finit(gs_main_instance * minst, int exit_status, int code)
if (tempnames) {
char *p = tempnames;
while (*p) {
- unlink(p);
+ gp_unlink(minst->heap, p);
p += strlen(p) + 1;
}
free(tempnames);
}
- gs_lib_finit(exit_status, code, minst->heap);
+ gs_lib_finit(exit_status, env_code, minst->heap);
set_lib_path_length(minst, 0);
gs_free_object(minst->heap, minst->lib_path.container.value.refs, "lib_path array");
diff --git a/psi/imain.h b/psi/imain.h
index dd333032..5d3c8e19 100644
--- a/psi/imain.h
+++ b/psi/imain.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -85,6 +85,10 @@ int gs_main_init1(gs_main_instance * minst);
*/
int gs_main_init2(gs_main_instance * minst);
+int
+gs_main_set_language_param(gs_main_instance *minst,
+ gs_param_list *plist);
+
/*
* The runlibfile operator uses a search path, as described in
* Use.htm, for looking up file names. Each interpreter instance has
diff --git a/psi/imainarg.c b/psi/imainarg.c
index c5d74caf..30ee6cca 100644
--- a/psi/imainarg.c
+++ b/psi/imainarg.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -229,7 +229,8 @@ gs_main_init_with_args01(gs_main_instance * minst, int argc, char *argv[])
if (gs_debug[':'] && !have_dumped_args) {
int i;
- dmprintf1(minst->heap, "%% Args passed to instance 0x%p: ", minst);
+ dmprintf1(minst->heap, "%% Args passed to instance "PRI_INTPTR": ",
+ (intptr_t)minst);
for (i=1; i<argc; i++)
dmprintf1(minst->heap, "%s ", argv[i]);
dmprintf(minst->heap, "\n");
@@ -474,6 +475,14 @@ run_stdin:
if (code < 0) return code;
break;
}
+ if (*arg != 0) {
+ /* Unmatched switch. */
+ outprintf(minst->heap,
+ " Unknown switch '--%s'.\n",
+ arg);
+ arg_finit(pal);
+ return gs_error_Fatal;
+ }
/* FALLTHROUGH */
case '+':
pal->expand_ats = false;
@@ -829,14 +838,15 @@ run_stdin:
ialloc_set_space(idmemory, avm_system);
if (isd) {
- int num, i;
+ int i;
+ int64_t num;
/* Check for numbers so we can provide for suffix scalers */
/* Note the check for '#' is for PS "radix" numbers such as 16#ff */
/* and check for '.' and 'e' or 'E' which are 'real' numbers */
if ((strchr(eqp, '#') == NULL) && (strchr(eqp, '.') == NULL) &&
(strchr(eqp, 'e') == NULL) && (strchr(eqp, 'E') == NULL) &&
- ((i = sscanf((const char *)eqp, "%d", &num)) == 1)) {
+ ((i = sscanf((const char *)eqp, "%"PRIi64, &num)) == 1)) {
char suffix = eqp[strlen(eqp) - 1];
switch (suffix) {
@@ -857,7 +867,7 @@ run_stdin:
default:
break; /* not a valid suffix or last char was digit */
}
- make_int(&value, num);
+ make_int(&value, (ps_int)num);
} else {
/* use the PS scanner to capture other valid token types */
stream astream;
@@ -918,6 +928,33 @@ run_stdin:
arg_free((char *)adef, minst->heap);
break;
}
+ case 'p':
+ {
+ char *adef = arg_copy(arg, minst->heap);
+ char *eqp;
+
+ if (adef == NULL)
+ return gs_error_Fatal;
+ eqp = strchr(adef, '=');
+
+ if (eqp == NULL)
+ eqp = strchr(adef, '#');
+ if (eqp == NULL) {
+ outprintf(minst->heap, "Usage: -pNAME=STRING\n");
+ arg_free((char *)adef, minst->heap);
+ return gs_error_Fatal;
+ }
+ *eqp++ = 0;
+ /* Slightly uncomfortable calling back up to a higher
+ * level, but we'll live with it. */
+ code = gsapi_set_param(gs_lib_ctx_get_interp_instance(minst->heap),
+ adef, eqp, gs_spt_parsed);
+ if (code < 0) {
+ arg_free((char *)adef, minst->heap);
+ return code;
+ }
+ break;
+ }
case 'u': /* undefine name */
if (!*arg) {
puts(minst->heap, "-u requires a name to undefine.");
@@ -1097,7 +1134,17 @@ gs_main_run_file2(gs_main_instance *minst,
int *pexit_code,
ref *perror_object)
{
- return runarg(minst, "", filename, ".runfile", runFlush, user_errors, pexit_code, perror_object);
+ int code, code1;
+
+ code = gs_add_control_path(minst->heap, gs_permit_file_reading, filename);
+ if (code < 0) return code;
+
+ code = runarg(minst, "", filename, ".runfile", runFlush, user_errors, pexit_code, perror_object);
+
+ code1 = gs_remove_control_path(minst->heap, gs_permit_file_reading, filename);
+ if (code >= 0 && code1 < 0) code = code1;
+
+ return code;
}
static int
run_string(gs_main_instance *minst,
diff --git a/psi/imainarg.h b/psi/imainarg.h
index d8de7841..f9a40379 100644
--- a/psi/imainarg.h
+++ b/psi/imainarg.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/imemory.h b/psi/imemory.h
index d9815074..9aed79bf 100644
--- a/psi/imemory.h
+++ b/psi/imemory.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iminst.h b/psi/iminst.h
index d7d660b0..b8a472a2 100644
--- a/psi/iminst.h
+++ b/psi/iminst.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -22,6 +22,7 @@
#include "iref.h"
#include "imain.h"
+#include "gsparam.h"
#ifndef display_callback_DEFINED
# define display_callback_DEFINED
@@ -83,6 +84,16 @@ struct gs_main_instance_s {
i_ctx_t *i_ctx_p; /* current interpreter context state */
char *saved_pages_initial_arg; /* used to defer processing of --saved-pages=begin... */
bool saved_pages_test_mode; /* for regression testing of saved-pages */
+
+ /* Used for gsapi_set_params in the gs (not gpdl) case. */
+ gs_c_param_list *param_list;
+ int mid_run_string;
+
+ /* The state for gsapi param enumeration in the gs (not gpdl) case. */
+ gs_c_param_list enum_params;
+ gs_param_enumerator_t enum_iter;
+ char *enum_keybuf;
+ int enum_keybuf_max;
};
/*
diff --git a/psi/iname.c b/psi/iname.c
index a8f32a99..e6b68d12 100644
--- a/psi/iname.c
+++ b/psi/iname.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -66,9 +66,9 @@ name_print(const char *msg, const name_table *nt, uint nidx, const int *pflag)
dmlprintf1(nt->memory, "[n]%s", msg);
if (pflag)
dmprintf1(nt->memory, "(%d)", *pflag);
- dmprintf2(nt->memory, " (0x%lx#%u)", (ulong)pname, nidx);
+ dmprintf2(nt->memory, " ("PRI_INTPTR"#%u)", (intptr_t)pname, nidx);
debug_print_string(nt->memory, str, pnstr->string_size);
- dmprintf2(nt->memory, "(0x%lx,%u)\n", (ulong)str, pnstr->string_size);
+ dmprintf2(nt->memory, "("PRI_INTPTR",%u)\n", (intptr_t)str, pnstr->string_size);
}
# define if_debug_name(msg, nt, nidx, pflag)\
if ( gs_debug_c('n') ) name_print(msg, nt, nidx, pflag)
diff --git a/psi/iname.h b/psi/iname.h
index a9117d6b..b06efbad 100644
--- a/psi/iname.h
+++ b/psi/iname.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/inamedef.h b/psi/inamedef.h
index 86731419..b8a1621c 100644
--- a/psi/inamedef.h
+++ b/psi/inamedef.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -62,7 +62,7 @@ struct name_s {
/* pvalue == pv_other: other status */
#define pv_other ((ref *)1)
/* pvalue != pv_no_defn, pvalue != pv_other: pvalue is valid */
-#define pv_valid(pvalue) ((unsigned long)(pvalue) > 1)
+#define pv_valid(pvalue) ((uintptr_t)(pvalue) > 1)
ref *pvalue; /* if only defined in systemdict or */
/* userdict, this points to the value */
};
diff --git a/psi/inameidx.h b/psi/inameidx.h
index 87f4897f..bf831c8f 100644
--- a/psi/inameidx.h
+++ b/psi/inameidx.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/inames.h b/psi/inames.h
index c2e88fe7..3080a3f2 100644
--- a/psi/inames.h
+++ b/psi/inames.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/inamestr.h b/psi/inamestr.h
index 8e710b46..6b8b035a 100644
--- a/psi/inamestr.h
+++ b/psi/inamestr.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/inobtokn.c b/psi/inobtokn.c
index ec417b14..11cbde5d 100644
--- a/psi/inobtokn.c
+++ b/psi/inobtokn.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/inouparm.c b/psi/inouparm.c
index f4d45a4f..c4ec30f4 100644
--- a/psi/inouparm.c
+++ b/psi/inouparm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/int.mak b/psi/int.mak
index f149452a..1a40d202 100644
--- a/psi/int.mak
+++ b/psi/int.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2018 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -1876,7 +1876,7 @@ $(PSOBJ)apitest.$(OBJ) : $(PSSRC)apitest.c $(GH)\
$(PSOBJ)iapi.$(OBJ) : $(PSSRC)iapi.c $(AK) $(psapi_h)\
$(string__h) $(ierrors_h) $(gscdefs_h) $(gstypes_h) $(iapi_h)\
$(iref_h) $(imain_h) $(imainarg_h) $(iminst_h) $(gslibctx_h)\
- $(INT_MAK) $(MAKEDIRS)
+ $(gsstate_h) $(icstate_h) $(INT_MAK) $(MAKEDIRS)
$(PSCC) $(PSO_)iapi.$(OBJ) $(C_) $(PSSRC)iapi.c
$(PSOBJ)psapi.$(OBJ) : $(PSSRC)psapi.c $(AK)\
@@ -1897,7 +1897,7 @@ gdevdsp2_h=$(DEVSRCDIR)$(D)gdevdsp2.h
$(PSOBJ)idisp.$(OBJ) : $(PSSRC)idisp.c $(OP) $(stdio__h) $(gp_h)\
$(stdpre_h) $(gscdefs_h) $(gsdevice_h) $(gsmemory_h) $(gstypes_h)\
- $(iapi_h) $(iref_h)\
+ $(iapi_h) $(iref_h) $(gxgstate_h) $(gxdevsop_h)\
$(imain_h) $(iminst_h) $(idisp_h) $(ostack_h)\
$(gx_h) $(gxdevice_h) $(gxdevmem_h) $(gdevdsp_h) $(gdevdsp2_h)\
$(INT_MAK) $(MAKEDIRS)
@@ -1949,142 +1949,142 @@ $(PSSRC)ierrors.h:$(GLSRC)gserrors.h
$(PSSRC)iconf.h:$(GLSRC)gxiodev.h
$(PSSRC)iconf.h:$(GLSRC)gsparam.h
$(PSSRC)iconf.h:$(GLSRC)gp.h
+$(PSSRC)iconf.h:$(GLSRC)memory_.h
$(PSSRC)iconf.h:$(GLSRC)srdline.h
$(PSSRC)iconf.h:$(GLSRC)scommon.h
$(PSSRC)iconf.h:$(GLSRC)gsfname.h
-$(PSSRC)iconf.h:$(GLSRC)gsstype.h
$(PSSRC)iconf.h:$(GLSRC)stat_.h
+$(PSSRC)iconf.h:$(GLSRC)gsstype.h
$(PSSRC)iconf.h:$(GLSRC)gsmemory.h
-$(PSSRC)iconf.h:$(GLSRC)memory_.h
$(PSSRC)iconf.h:$(GLSRC)gpgetenv.h
-$(PSSRC)iconf.h:$(GLSRC)gslibctx.h
$(PSSRC)iconf.h:$(GLSRC)gscdefs.h
-$(PSSRC)iconf.h:$(GLSRC)gs_dll_call.h
+$(PSSRC)iconf.h:$(GLSRC)gslibctx.h
$(PSSRC)iconf.h:$(GLSRC)stdio_.h
$(PSSRC)iconf.h:$(GLSRC)stdint_.h
$(PSSRC)iconf.h:$(GLSRC)gssprintf.h
-$(PSSRC)iconf.h:$(GLSRC)std.h
$(PSSRC)iconf.h:$(GLSRC)gstypes.h
+$(PSSRC)iconf.h:$(GLSRC)std.h
$(PSSRC)iconf.h:$(GLSRC)stdpre.h
$(PSSRC)iconf.h:$(GLGEN)arch.h
+$(PSSRC)iconf.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idebug.h:$(PSSRC)iref.h
$(PSSRC)idebug.h:$(GLSRC)gxalloc.h
$(PSSRC)idebug.h:$(GLSRC)gxobj.h
$(PSSRC)idebug.h:$(GLSRC)gsnamecl.h
$(PSSRC)idebug.h:$(GLSRC)gxcspace.h
+$(PSSRC)idebug.h:$(GLSRC)gscsel.h
$(PSSRC)idebug.h:$(GLSRC)gsdcolor.h
$(PSSRC)idebug.h:$(GLSRC)gxfrac.h
$(PSSRC)idebug.h:$(GLSRC)gscms.h
-$(PSSRC)idebug.h:$(GLSRC)gscspace.h
$(PSSRC)idebug.h:$(GLSRC)gsdevice.h
-$(PSSRC)idebug.h:$(GLSRC)gxarith.h
-$(PSSRC)idebug.h:$(GLSRC)gxhttile.h
+$(PSSRC)idebug.h:$(GLSRC)gscspace.h
+$(PSSRC)idebug.h:$(GLSRC)gsgstate.h
$(PSSRC)idebug.h:$(GLSRC)gsiparam.h
-$(PSSRC)idebug.h:$(GLSRC)gxbitmap.h
$(PSSRC)idebug.h:$(GLSRC)gsmatrix.h
-$(PSSRC)idebug.h:$(GLSRC)gsrefct.h
+$(PSSRC)idebug.h:$(GLSRC)gxhttile.h
$(PSSRC)idebug.h:$(GLSRC)gsparam.h
-$(PSSRC)idebug.h:$(GLSRC)gsccolor.h
+$(PSSRC)idebug.h:$(GLSRC)gsrefct.h
+$(PSSRC)idebug.h:$(GLSRC)memento.h
$(PSSRC)idebug.h:$(GLSRC)gsstruct.h
$(PSSRC)idebug.h:$(GLSRC)gxsync.h
+$(PSSRC)idebug.h:$(GLSRC)gxbitmap.h
$(PSSRC)idebug.h:$(GLSRC)scommon.h
-$(PSSRC)idebug.h:$(GLSRC)memento.h
-$(PSSRC)idebug.h:$(GLSRC)gscsel.h
$(PSSRC)idebug.h:$(GLSRC)gsbitmap.h
+$(PSSRC)idebug.h:$(GLSRC)gsccolor.h
+$(PSSRC)idebug.h:$(GLSRC)gxarith.h
+$(PSSRC)idebug.h:$(GLSRC)gpsync.h
$(PSSRC)idebug.h:$(GLSRC)gsstype.h
$(PSSRC)idebug.h:$(GLSRC)gsmemory.h
-$(PSSRC)idebug.h:$(GLSRC)gpsync.h
$(PSSRC)idebug.h:$(GLSRC)gslibctx.h
-$(PSSRC)idebug.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idebug.h:$(GLSRC)gsalloc.h
-$(PSSRC)idebug.h:$(GLSRC)stdio_.h
$(PSSRC)idebug.h:$(GLSRC)gxcindex.h
-$(PSSRC)idebug.h:$(GLSRC)gsgstate.h
+$(PSSRC)idebug.h:$(GLSRC)stdio_.h
$(PSSRC)idebug.h:$(GLSRC)stdint_.h
$(PSSRC)idebug.h:$(GLSRC)gssprintf.h
-$(PSSRC)idebug.h:$(GLSRC)std.h
$(PSSRC)idebug.h:$(GLSRC)gstypes.h
+$(PSSRC)idebug.h:$(GLSRC)std.h
$(PSSRC)idebug.h:$(GLSRC)stdpre.h
$(PSSRC)idebug.h:$(GLGEN)arch.h
+$(PSSRC)idebug.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iddstack.h:$(PSSRC)iref.h
$(PSSRC)iddstack.h:$(GLSRC)gxalloc.h
$(PSSRC)iddstack.h:$(GLSRC)gxobj.h
$(PSSRC)iddstack.h:$(GLSRC)gsnamecl.h
$(PSSRC)iddstack.h:$(GLSRC)gxcspace.h
+$(PSSRC)iddstack.h:$(GLSRC)gscsel.h
$(PSSRC)iddstack.h:$(GLSRC)gsdcolor.h
$(PSSRC)iddstack.h:$(GLSRC)gxfrac.h
$(PSSRC)iddstack.h:$(GLSRC)gscms.h
-$(PSSRC)iddstack.h:$(GLSRC)gscspace.h
$(PSSRC)iddstack.h:$(GLSRC)gsdevice.h
-$(PSSRC)iddstack.h:$(GLSRC)gxarith.h
-$(PSSRC)iddstack.h:$(GLSRC)gxhttile.h
+$(PSSRC)iddstack.h:$(GLSRC)gscspace.h
+$(PSSRC)iddstack.h:$(GLSRC)gsgstate.h
$(PSSRC)iddstack.h:$(GLSRC)gsiparam.h
-$(PSSRC)iddstack.h:$(GLSRC)gxbitmap.h
$(PSSRC)iddstack.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iddstack.h:$(GLSRC)gsrefct.h
+$(PSSRC)iddstack.h:$(GLSRC)gxhttile.h
$(PSSRC)iddstack.h:$(GLSRC)gsparam.h
-$(PSSRC)iddstack.h:$(GLSRC)gsccolor.h
+$(PSSRC)iddstack.h:$(GLSRC)gsrefct.h
+$(PSSRC)iddstack.h:$(GLSRC)memento.h
$(PSSRC)iddstack.h:$(GLSRC)gsstruct.h
$(PSSRC)iddstack.h:$(GLSRC)gxsync.h
+$(PSSRC)iddstack.h:$(GLSRC)gxbitmap.h
$(PSSRC)iddstack.h:$(GLSRC)scommon.h
-$(PSSRC)iddstack.h:$(GLSRC)memento.h
-$(PSSRC)iddstack.h:$(GLSRC)gscsel.h
$(PSSRC)iddstack.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iddstack.h:$(GLSRC)gsccolor.h
+$(PSSRC)iddstack.h:$(GLSRC)gxarith.h
+$(PSSRC)iddstack.h:$(GLSRC)gpsync.h
$(PSSRC)iddstack.h:$(GLSRC)gsstype.h
$(PSSRC)iddstack.h:$(GLSRC)gsmemory.h
-$(PSSRC)iddstack.h:$(GLSRC)gpsync.h
$(PSSRC)iddstack.h:$(GLSRC)gslibctx.h
-$(PSSRC)iddstack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iddstack.h:$(GLSRC)gsalloc.h
-$(PSSRC)iddstack.h:$(GLSRC)stdio_.h
$(PSSRC)iddstack.h:$(GLSRC)gxcindex.h
-$(PSSRC)iddstack.h:$(GLSRC)gsgstate.h
+$(PSSRC)iddstack.h:$(GLSRC)stdio_.h
$(PSSRC)iddstack.h:$(GLSRC)stdint_.h
$(PSSRC)iddstack.h:$(GLSRC)gssprintf.h
-$(PSSRC)iddstack.h:$(GLSRC)std.h
$(PSSRC)iddstack.h:$(GLSRC)gstypes.h
+$(PSSRC)iddstack.h:$(GLSRC)std.h
$(PSSRC)iddstack.h:$(GLSRC)stdpre.h
$(PSSRC)iddstack.h:$(GLGEN)arch.h
+$(PSSRC)iddstack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idict.h:$(PSSRC)iddstack.h
$(PSSRC)idict.h:$(PSSRC)iref.h
$(PSSRC)idict.h:$(GLSRC)gxalloc.h
$(PSSRC)idict.h:$(GLSRC)gxobj.h
$(PSSRC)idict.h:$(GLSRC)gsnamecl.h
$(PSSRC)idict.h:$(GLSRC)gxcspace.h
+$(PSSRC)idict.h:$(GLSRC)gscsel.h
$(PSSRC)idict.h:$(GLSRC)gsdcolor.h
$(PSSRC)idict.h:$(GLSRC)gxfrac.h
$(PSSRC)idict.h:$(GLSRC)gscms.h
-$(PSSRC)idict.h:$(GLSRC)gscspace.h
$(PSSRC)idict.h:$(GLSRC)gsdevice.h
-$(PSSRC)idict.h:$(GLSRC)gxarith.h
-$(PSSRC)idict.h:$(GLSRC)gxhttile.h
+$(PSSRC)idict.h:$(GLSRC)gscspace.h
+$(PSSRC)idict.h:$(GLSRC)gsgstate.h
$(PSSRC)idict.h:$(GLSRC)gsiparam.h
-$(PSSRC)idict.h:$(GLSRC)gxbitmap.h
$(PSSRC)idict.h:$(GLSRC)gsmatrix.h
-$(PSSRC)idict.h:$(GLSRC)gsrefct.h
+$(PSSRC)idict.h:$(GLSRC)gxhttile.h
$(PSSRC)idict.h:$(GLSRC)gsparam.h
-$(PSSRC)idict.h:$(GLSRC)gsccolor.h
+$(PSSRC)idict.h:$(GLSRC)gsrefct.h
+$(PSSRC)idict.h:$(GLSRC)memento.h
$(PSSRC)idict.h:$(GLSRC)gsstruct.h
$(PSSRC)idict.h:$(GLSRC)gxsync.h
+$(PSSRC)idict.h:$(GLSRC)gxbitmap.h
$(PSSRC)idict.h:$(GLSRC)scommon.h
-$(PSSRC)idict.h:$(GLSRC)memento.h
-$(PSSRC)idict.h:$(GLSRC)gscsel.h
$(PSSRC)idict.h:$(GLSRC)gsbitmap.h
+$(PSSRC)idict.h:$(GLSRC)gsccolor.h
+$(PSSRC)idict.h:$(GLSRC)gxarith.h
+$(PSSRC)idict.h:$(GLSRC)gpsync.h
$(PSSRC)idict.h:$(GLSRC)gsstype.h
$(PSSRC)idict.h:$(GLSRC)gsmemory.h
-$(PSSRC)idict.h:$(GLSRC)gpsync.h
$(PSSRC)idict.h:$(GLSRC)gslibctx.h
-$(PSSRC)idict.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idict.h:$(GLSRC)gsalloc.h
-$(PSSRC)idict.h:$(GLSRC)stdio_.h
$(PSSRC)idict.h:$(GLSRC)gxcindex.h
-$(PSSRC)idict.h:$(GLSRC)gsgstate.h
+$(PSSRC)idict.h:$(GLSRC)stdio_.h
$(PSSRC)idict.h:$(GLSRC)stdint_.h
$(PSSRC)idict.h:$(GLSRC)gssprintf.h
-$(PSSRC)idict.h:$(GLSRC)std.h
$(PSSRC)idict.h:$(GLSRC)gstypes.h
+$(PSSRC)idict.h:$(GLSRC)std.h
$(PSSRC)idict.h:$(GLSRC)stdpre.h
$(PSSRC)idict.h:$(GLGEN)arch.h
+$(PSSRC)idict.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idosave.h:$(PSSRC)imemory.h
$(PSSRC)idosave.h:$(PSSRC)ivmspace.h
$(PSSRC)idosave.h:$(PSSRC)iref.h
@@ -2093,58 +2093,58 @@ $(PSSRC)idosave.h:$(GLSRC)gxalloc.h
$(PSSRC)idosave.h:$(GLSRC)gxobj.h
$(PSSRC)idosave.h:$(GLSRC)gsnamecl.h
$(PSSRC)idosave.h:$(GLSRC)gxcspace.h
+$(PSSRC)idosave.h:$(GLSRC)gscsel.h
$(PSSRC)idosave.h:$(GLSRC)gsdcolor.h
$(PSSRC)idosave.h:$(GLSRC)gxfrac.h
$(PSSRC)idosave.h:$(GLSRC)gscms.h
-$(PSSRC)idosave.h:$(GLSRC)gscspace.h
$(PSSRC)idosave.h:$(GLSRC)gsdevice.h
-$(PSSRC)idosave.h:$(GLSRC)gxarith.h
-$(PSSRC)idosave.h:$(GLSRC)gxhttile.h
+$(PSSRC)idosave.h:$(GLSRC)gscspace.h
+$(PSSRC)idosave.h:$(GLSRC)gsgstate.h
$(PSSRC)idosave.h:$(GLSRC)gsiparam.h
-$(PSSRC)idosave.h:$(GLSRC)gxbitmap.h
$(PSSRC)idosave.h:$(GLSRC)gsmatrix.h
-$(PSSRC)idosave.h:$(GLSRC)gsrefct.h
+$(PSSRC)idosave.h:$(GLSRC)gxhttile.h
$(PSSRC)idosave.h:$(GLSRC)gsparam.h
-$(PSSRC)idosave.h:$(GLSRC)gsccolor.h
+$(PSSRC)idosave.h:$(GLSRC)gsrefct.h
+$(PSSRC)idosave.h:$(GLSRC)memento.h
$(PSSRC)idosave.h:$(GLSRC)gsstruct.h
$(PSSRC)idosave.h:$(GLSRC)gxsync.h
+$(PSSRC)idosave.h:$(GLSRC)gxbitmap.h
$(PSSRC)idosave.h:$(GLSRC)scommon.h
-$(PSSRC)idosave.h:$(GLSRC)memento.h
-$(PSSRC)idosave.h:$(GLSRC)gscsel.h
$(PSSRC)idosave.h:$(GLSRC)gsbitmap.h
+$(PSSRC)idosave.h:$(GLSRC)gsccolor.h
+$(PSSRC)idosave.h:$(GLSRC)gxarith.h
+$(PSSRC)idosave.h:$(GLSRC)gpsync.h
$(PSSRC)idosave.h:$(GLSRC)gsstype.h
$(PSSRC)idosave.h:$(GLSRC)gsmemory.h
-$(PSSRC)idosave.h:$(GLSRC)gpsync.h
$(PSSRC)idosave.h:$(GLSRC)gslibctx.h
-$(PSSRC)idosave.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idosave.h:$(GLSRC)gsalloc.h
-$(PSSRC)idosave.h:$(GLSRC)stdio_.h
$(PSSRC)idosave.h:$(GLSRC)gxcindex.h
-$(PSSRC)idosave.h:$(GLSRC)gsgstate.h
+$(PSSRC)idosave.h:$(GLSRC)stdio_.h
$(PSSRC)idosave.h:$(GLSRC)stdint_.h
$(PSSRC)idosave.h:$(GLSRC)gssprintf.h
-$(PSSRC)idosave.h:$(GLSRC)std.h
$(PSSRC)idosave.h:$(GLSRC)gstypes.h
+$(PSSRC)idosave.h:$(GLSRC)std.h
$(PSSRC)idosave.h:$(GLSRC)stdpre.h
$(PSSRC)idosave.h:$(GLGEN)arch.h
+$(PSSRC)idosave.h:$(GLSRC)gs_dll_call.h
$(PSSRC)igcstr.h:$(GLSRC)gxalloc.h
$(PSSRC)igcstr.h:$(GLSRC)gxobj.h
-$(PSSRC)igcstr.h:$(GLSRC)gxbitmap.h
$(PSSRC)igcstr.h:$(GLSRC)gsstruct.h
+$(PSSRC)igcstr.h:$(GLSRC)gxbitmap.h
$(PSSRC)igcstr.h:$(GLSRC)scommon.h
$(PSSRC)igcstr.h:$(GLSRC)gsbitmap.h
$(PSSRC)igcstr.h:$(GLSRC)gsstype.h
$(PSSRC)igcstr.h:$(GLSRC)gsmemory.h
$(PSSRC)igcstr.h:$(GLSRC)gslibctx.h
-$(PSSRC)igcstr.h:$(GLSRC)gs_dll_call.h
$(PSSRC)igcstr.h:$(GLSRC)gsalloc.h
$(PSSRC)igcstr.h:$(GLSRC)stdio_.h
$(PSSRC)igcstr.h:$(GLSRC)stdint_.h
$(PSSRC)igcstr.h:$(GLSRC)gssprintf.h
-$(PSSRC)igcstr.h:$(GLSRC)std.h
$(PSSRC)igcstr.h:$(GLSRC)gstypes.h
+$(PSSRC)igcstr.h:$(GLSRC)std.h
$(PSSRC)igcstr.h:$(GLSRC)stdpre.h
$(PSSRC)igcstr.h:$(GLGEN)arch.h
+$(PSSRC)igcstr.h:$(GLSRC)gs_dll_call.h
$(PSSRC)inames.h:$(PSSRC)imemory.h
$(PSSRC)inames.h:$(PSSRC)ivmspace.h
$(PSSRC)inames.h:$(PSSRC)iref.h
@@ -2153,40 +2153,40 @@ $(PSSRC)inames.h:$(GLSRC)gxalloc.h
$(PSSRC)inames.h:$(GLSRC)gxobj.h
$(PSSRC)inames.h:$(GLSRC)gsnamecl.h
$(PSSRC)inames.h:$(GLSRC)gxcspace.h
+$(PSSRC)inames.h:$(GLSRC)gscsel.h
$(PSSRC)inames.h:$(GLSRC)gsdcolor.h
$(PSSRC)inames.h:$(GLSRC)gxfrac.h
$(PSSRC)inames.h:$(GLSRC)gscms.h
-$(PSSRC)inames.h:$(GLSRC)gscspace.h
$(PSSRC)inames.h:$(GLSRC)gsdevice.h
-$(PSSRC)inames.h:$(GLSRC)gxarith.h
-$(PSSRC)inames.h:$(GLSRC)gxhttile.h
+$(PSSRC)inames.h:$(GLSRC)gscspace.h
+$(PSSRC)inames.h:$(GLSRC)gsgstate.h
$(PSSRC)inames.h:$(GLSRC)gsiparam.h
-$(PSSRC)inames.h:$(GLSRC)gxbitmap.h
$(PSSRC)inames.h:$(GLSRC)gsmatrix.h
-$(PSSRC)inames.h:$(GLSRC)gsrefct.h
+$(PSSRC)inames.h:$(GLSRC)gxhttile.h
$(PSSRC)inames.h:$(GLSRC)gsparam.h
-$(PSSRC)inames.h:$(GLSRC)gsccolor.h
+$(PSSRC)inames.h:$(GLSRC)gsrefct.h
+$(PSSRC)inames.h:$(GLSRC)memento.h
$(PSSRC)inames.h:$(GLSRC)gsstruct.h
$(PSSRC)inames.h:$(GLSRC)gxsync.h
+$(PSSRC)inames.h:$(GLSRC)gxbitmap.h
$(PSSRC)inames.h:$(GLSRC)scommon.h
-$(PSSRC)inames.h:$(GLSRC)memento.h
-$(PSSRC)inames.h:$(GLSRC)gscsel.h
$(PSSRC)inames.h:$(GLSRC)gsbitmap.h
+$(PSSRC)inames.h:$(GLSRC)gsccolor.h
+$(PSSRC)inames.h:$(GLSRC)gxarith.h
+$(PSSRC)inames.h:$(GLSRC)gpsync.h
$(PSSRC)inames.h:$(GLSRC)gsstype.h
$(PSSRC)inames.h:$(GLSRC)gsmemory.h
-$(PSSRC)inames.h:$(GLSRC)gpsync.h
$(PSSRC)inames.h:$(GLSRC)gslibctx.h
-$(PSSRC)inames.h:$(GLSRC)gs_dll_call.h
$(PSSRC)inames.h:$(GLSRC)gsalloc.h
-$(PSSRC)inames.h:$(GLSRC)stdio_.h
$(PSSRC)inames.h:$(GLSRC)gxcindex.h
-$(PSSRC)inames.h:$(GLSRC)gsgstate.h
+$(PSSRC)inames.h:$(GLSRC)stdio_.h
$(PSSRC)inames.h:$(GLSRC)stdint_.h
$(PSSRC)inames.h:$(GLSRC)gssprintf.h
-$(PSSRC)inames.h:$(GLSRC)std.h
$(PSSRC)inames.h:$(GLSRC)gstypes.h
+$(PSSRC)inames.h:$(GLSRC)std.h
$(PSSRC)inames.h:$(GLSRC)stdpre.h
$(PSSRC)inames.h:$(GLGEN)arch.h
+$(PSSRC)inames.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iname.h:$(PSSRC)inames.h
$(PSSRC)iname.h:$(PSSRC)imemory.h
$(PSSRC)iname.h:$(PSSRC)ivmspace.h
@@ -2196,80 +2196,80 @@ $(PSSRC)iname.h:$(GLSRC)gxalloc.h
$(PSSRC)iname.h:$(GLSRC)gxobj.h
$(PSSRC)iname.h:$(GLSRC)gsnamecl.h
$(PSSRC)iname.h:$(GLSRC)gxcspace.h
+$(PSSRC)iname.h:$(GLSRC)gscsel.h
$(PSSRC)iname.h:$(GLSRC)gsdcolor.h
$(PSSRC)iname.h:$(GLSRC)gxfrac.h
$(PSSRC)iname.h:$(GLSRC)gscms.h
-$(PSSRC)iname.h:$(GLSRC)gscspace.h
$(PSSRC)iname.h:$(GLSRC)gsdevice.h
-$(PSSRC)iname.h:$(GLSRC)gxarith.h
-$(PSSRC)iname.h:$(GLSRC)gxhttile.h
+$(PSSRC)iname.h:$(GLSRC)gscspace.h
+$(PSSRC)iname.h:$(GLSRC)gsgstate.h
$(PSSRC)iname.h:$(GLSRC)gsiparam.h
-$(PSSRC)iname.h:$(GLSRC)gxbitmap.h
$(PSSRC)iname.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iname.h:$(GLSRC)gsrefct.h
+$(PSSRC)iname.h:$(GLSRC)gxhttile.h
$(PSSRC)iname.h:$(GLSRC)gsparam.h
-$(PSSRC)iname.h:$(GLSRC)gsccolor.h
+$(PSSRC)iname.h:$(GLSRC)gsrefct.h
+$(PSSRC)iname.h:$(GLSRC)memento.h
$(PSSRC)iname.h:$(GLSRC)gsstruct.h
$(PSSRC)iname.h:$(GLSRC)gxsync.h
+$(PSSRC)iname.h:$(GLSRC)gxbitmap.h
$(PSSRC)iname.h:$(GLSRC)scommon.h
-$(PSSRC)iname.h:$(GLSRC)memento.h
-$(PSSRC)iname.h:$(GLSRC)gscsel.h
$(PSSRC)iname.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iname.h:$(GLSRC)gsccolor.h
+$(PSSRC)iname.h:$(GLSRC)gxarith.h
+$(PSSRC)iname.h:$(GLSRC)gpsync.h
$(PSSRC)iname.h:$(GLSRC)gsstype.h
$(PSSRC)iname.h:$(GLSRC)gsmemory.h
-$(PSSRC)iname.h:$(GLSRC)gpsync.h
$(PSSRC)iname.h:$(GLSRC)gslibctx.h
-$(PSSRC)iname.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iname.h:$(GLSRC)gsalloc.h
-$(PSSRC)iname.h:$(GLSRC)stdio_.h
$(PSSRC)iname.h:$(GLSRC)gxcindex.h
-$(PSSRC)iname.h:$(GLSRC)gsgstate.h
+$(PSSRC)iname.h:$(GLSRC)stdio_.h
$(PSSRC)iname.h:$(GLSRC)stdint_.h
$(PSSRC)iname.h:$(GLSRC)gssprintf.h
-$(PSSRC)iname.h:$(GLSRC)std.h
$(PSSRC)iname.h:$(GLSRC)gstypes.h
+$(PSSRC)iname.h:$(GLSRC)std.h
$(PSSRC)iname.h:$(GLSRC)stdpre.h
$(PSSRC)iname.h:$(GLGEN)arch.h
+$(PSSRC)iname.h:$(GLSRC)gs_dll_call.h
$(PSSRC)inamestr.h:$(PSSRC)inameidx.h
$(PSSRC)inamestr.h:$(GLSRC)stdpre.h
$(PSSRC)iref.h:$(GLSRC)gxalloc.h
$(PSSRC)iref.h:$(GLSRC)gxobj.h
$(PSSRC)iref.h:$(GLSRC)gsnamecl.h
$(PSSRC)iref.h:$(GLSRC)gxcspace.h
+$(PSSRC)iref.h:$(GLSRC)gscsel.h
$(PSSRC)iref.h:$(GLSRC)gsdcolor.h
$(PSSRC)iref.h:$(GLSRC)gxfrac.h
$(PSSRC)iref.h:$(GLSRC)gscms.h
-$(PSSRC)iref.h:$(GLSRC)gscspace.h
$(PSSRC)iref.h:$(GLSRC)gsdevice.h
-$(PSSRC)iref.h:$(GLSRC)gxarith.h
-$(PSSRC)iref.h:$(GLSRC)gxhttile.h
+$(PSSRC)iref.h:$(GLSRC)gscspace.h
+$(PSSRC)iref.h:$(GLSRC)gsgstate.h
$(PSSRC)iref.h:$(GLSRC)gsiparam.h
-$(PSSRC)iref.h:$(GLSRC)gxbitmap.h
$(PSSRC)iref.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iref.h:$(GLSRC)gsrefct.h
+$(PSSRC)iref.h:$(GLSRC)gxhttile.h
$(PSSRC)iref.h:$(GLSRC)gsparam.h
-$(PSSRC)iref.h:$(GLSRC)gsccolor.h
+$(PSSRC)iref.h:$(GLSRC)gsrefct.h
+$(PSSRC)iref.h:$(GLSRC)memento.h
$(PSSRC)iref.h:$(GLSRC)gsstruct.h
$(PSSRC)iref.h:$(GLSRC)gxsync.h
+$(PSSRC)iref.h:$(GLSRC)gxbitmap.h
$(PSSRC)iref.h:$(GLSRC)scommon.h
-$(PSSRC)iref.h:$(GLSRC)memento.h
-$(PSSRC)iref.h:$(GLSRC)gscsel.h
$(PSSRC)iref.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iref.h:$(GLSRC)gsccolor.h
+$(PSSRC)iref.h:$(GLSRC)gxarith.h
+$(PSSRC)iref.h:$(GLSRC)gpsync.h
$(PSSRC)iref.h:$(GLSRC)gsstype.h
$(PSSRC)iref.h:$(GLSRC)gsmemory.h
-$(PSSRC)iref.h:$(GLSRC)gpsync.h
$(PSSRC)iref.h:$(GLSRC)gslibctx.h
-$(PSSRC)iref.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iref.h:$(GLSRC)gsalloc.h
-$(PSSRC)iref.h:$(GLSRC)stdio_.h
$(PSSRC)iref.h:$(GLSRC)gxcindex.h
-$(PSSRC)iref.h:$(GLSRC)gsgstate.h
+$(PSSRC)iref.h:$(GLSRC)stdio_.h
$(PSSRC)iref.h:$(GLSRC)stdint_.h
$(PSSRC)iref.h:$(GLSRC)gssprintf.h
-$(PSSRC)iref.h:$(GLSRC)std.h
$(PSSRC)iref.h:$(GLSRC)gstypes.h
+$(PSSRC)iref.h:$(GLSRC)std.h
$(PSSRC)iref.h:$(GLSRC)stdpre.h
$(PSSRC)iref.h:$(GLGEN)arch.h
+$(PSSRC)iref.h:$(GLSRC)gs_dll_call.h
$(PSSRC)isave.h:$(PSSRC)idosave.h
$(PSSRC)isave.h:$(PSSRC)imemory.h
$(PSSRC)isave.h:$(PSSRC)ivmspace.h
@@ -2279,98 +2279,98 @@ $(PSSRC)isave.h:$(GLSRC)gxalloc.h
$(PSSRC)isave.h:$(GLSRC)gxobj.h
$(PSSRC)isave.h:$(GLSRC)gsnamecl.h
$(PSSRC)isave.h:$(GLSRC)gxcspace.h
+$(PSSRC)isave.h:$(GLSRC)gscsel.h
$(PSSRC)isave.h:$(GLSRC)gsdcolor.h
$(PSSRC)isave.h:$(GLSRC)gxfrac.h
$(PSSRC)isave.h:$(GLSRC)gscms.h
-$(PSSRC)isave.h:$(GLSRC)gscspace.h
$(PSSRC)isave.h:$(GLSRC)gsdevice.h
-$(PSSRC)isave.h:$(GLSRC)gxarith.h
-$(PSSRC)isave.h:$(GLSRC)gxhttile.h
+$(PSSRC)isave.h:$(GLSRC)gscspace.h
+$(PSSRC)isave.h:$(GLSRC)gsgstate.h
$(PSSRC)isave.h:$(GLSRC)gsiparam.h
-$(PSSRC)isave.h:$(GLSRC)gxbitmap.h
$(PSSRC)isave.h:$(GLSRC)gsmatrix.h
-$(PSSRC)isave.h:$(GLSRC)gsrefct.h
+$(PSSRC)isave.h:$(GLSRC)gxhttile.h
$(PSSRC)isave.h:$(GLSRC)gsparam.h
-$(PSSRC)isave.h:$(GLSRC)gsccolor.h
+$(PSSRC)isave.h:$(GLSRC)gsrefct.h
+$(PSSRC)isave.h:$(GLSRC)memento.h
$(PSSRC)isave.h:$(GLSRC)gsstruct.h
$(PSSRC)isave.h:$(GLSRC)gxsync.h
+$(PSSRC)isave.h:$(GLSRC)gxbitmap.h
$(PSSRC)isave.h:$(GLSRC)scommon.h
-$(PSSRC)isave.h:$(GLSRC)memento.h
-$(PSSRC)isave.h:$(GLSRC)gscsel.h
$(PSSRC)isave.h:$(GLSRC)gsbitmap.h
+$(PSSRC)isave.h:$(GLSRC)gsccolor.h
+$(PSSRC)isave.h:$(GLSRC)gxarith.h
+$(PSSRC)isave.h:$(GLSRC)gpsync.h
$(PSSRC)isave.h:$(GLSRC)gsstype.h
$(PSSRC)isave.h:$(GLSRC)gsmemory.h
-$(PSSRC)isave.h:$(GLSRC)gpsync.h
$(PSSRC)isave.h:$(GLSRC)gslibctx.h
-$(PSSRC)isave.h:$(GLSRC)gs_dll_call.h
$(PSSRC)isave.h:$(GLSRC)gsalloc.h
-$(PSSRC)isave.h:$(GLSRC)stdio_.h
$(PSSRC)isave.h:$(GLSRC)gxcindex.h
-$(PSSRC)isave.h:$(GLSRC)gsgstate.h
+$(PSSRC)isave.h:$(GLSRC)stdio_.h
$(PSSRC)isave.h:$(GLSRC)stdint_.h
$(PSSRC)isave.h:$(GLSRC)gssprintf.h
-$(PSSRC)isave.h:$(GLSRC)std.h
$(PSSRC)isave.h:$(GLSRC)gstypes.h
+$(PSSRC)isave.h:$(GLSRC)std.h
$(PSSRC)isave.h:$(GLSRC)stdpre.h
$(PSSRC)isave.h:$(GLGEN)arch.h
+$(PSSRC)isave.h:$(GLSRC)gs_dll_call.h
$(PSSRC)isstate.h:$(GLSRC)gsgc.h
$(PSSRC)isstate.h:$(GLSRC)gxalloc.h
$(PSSRC)isstate.h:$(GLSRC)gxobj.h
-$(PSSRC)isstate.h:$(GLSRC)gxbitmap.h
$(PSSRC)isstate.h:$(GLSRC)gsstruct.h
+$(PSSRC)isstate.h:$(GLSRC)gxbitmap.h
$(PSSRC)isstate.h:$(GLSRC)scommon.h
$(PSSRC)isstate.h:$(GLSRC)gsbitmap.h
$(PSSRC)isstate.h:$(GLSRC)gsstype.h
$(PSSRC)isstate.h:$(GLSRC)gsmemory.h
$(PSSRC)isstate.h:$(GLSRC)gslibctx.h
-$(PSSRC)isstate.h:$(GLSRC)gs_dll_call.h
$(PSSRC)isstate.h:$(GLSRC)gsalloc.h
$(PSSRC)isstate.h:$(GLSRC)stdio_.h
$(PSSRC)isstate.h:$(GLSRC)stdint_.h
$(PSSRC)isstate.h:$(GLSRC)gssprintf.h
-$(PSSRC)isstate.h:$(GLSRC)std.h
$(PSSRC)isstate.h:$(GLSRC)gstypes.h
+$(PSSRC)isstate.h:$(GLSRC)std.h
$(PSSRC)isstate.h:$(GLSRC)stdpre.h
$(PSSRC)isstate.h:$(GLGEN)arch.h
+$(PSSRC)isstate.h:$(GLSRC)gs_dll_call.h
$(PSSRC)istruct.h:$(PSSRC)iref.h
$(PSSRC)istruct.h:$(GLSRC)gxalloc.h
$(PSSRC)istruct.h:$(GLSRC)gxobj.h
$(PSSRC)istruct.h:$(GLSRC)gsnamecl.h
$(PSSRC)istruct.h:$(GLSRC)gxcspace.h
+$(PSSRC)istruct.h:$(GLSRC)gscsel.h
$(PSSRC)istruct.h:$(GLSRC)gsdcolor.h
$(PSSRC)istruct.h:$(GLSRC)gxfrac.h
$(PSSRC)istruct.h:$(GLSRC)gscms.h
-$(PSSRC)istruct.h:$(GLSRC)gscspace.h
$(PSSRC)istruct.h:$(GLSRC)gsdevice.h
-$(PSSRC)istruct.h:$(GLSRC)gxarith.h
-$(PSSRC)istruct.h:$(GLSRC)gxhttile.h
+$(PSSRC)istruct.h:$(GLSRC)gscspace.h
+$(PSSRC)istruct.h:$(GLSRC)gsgstate.h
$(PSSRC)istruct.h:$(GLSRC)gsiparam.h
-$(PSSRC)istruct.h:$(GLSRC)gxbitmap.h
$(PSSRC)istruct.h:$(GLSRC)gsmatrix.h
-$(PSSRC)istruct.h:$(GLSRC)gsrefct.h
+$(PSSRC)istruct.h:$(GLSRC)gxhttile.h
$(PSSRC)istruct.h:$(GLSRC)gsparam.h
-$(PSSRC)istruct.h:$(GLSRC)gsccolor.h
+$(PSSRC)istruct.h:$(GLSRC)gsrefct.h
+$(PSSRC)istruct.h:$(GLSRC)memento.h
$(PSSRC)istruct.h:$(GLSRC)gsstruct.h
$(PSSRC)istruct.h:$(GLSRC)gxsync.h
+$(PSSRC)istruct.h:$(GLSRC)gxbitmap.h
$(PSSRC)istruct.h:$(GLSRC)scommon.h
-$(PSSRC)istruct.h:$(GLSRC)memento.h
-$(PSSRC)istruct.h:$(GLSRC)gscsel.h
$(PSSRC)istruct.h:$(GLSRC)gsbitmap.h
+$(PSSRC)istruct.h:$(GLSRC)gsccolor.h
+$(PSSRC)istruct.h:$(GLSRC)gxarith.h
+$(PSSRC)istruct.h:$(GLSRC)gpsync.h
$(PSSRC)istruct.h:$(GLSRC)gsstype.h
$(PSSRC)istruct.h:$(GLSRC)gsmemory.h
-$(PSSRC)istruct.h:$(GLSRC)gpsync.h
$(PSSRC)istruct.h:$(GLSRC)gslibctx.h
-$(PSSRC)istruct.h:$(GLSRC)gs_dll_call.h
$(PSSRC)istruct.h:$(GLSRC)gsalloc.h
-$(PSSRC)istruct.h:$(GLSRC)stdio_.h
$(PSSRC)istruct.h:$(GLSRC)gxcindex.h
-$(PSSRC)istruct.h:$(GLSRC)gsgstate.h
+$(PSSRC)istruct.h:$(GLSRC)stdio_.h
$(PSSRC)istruct.h:$(GLSRC)stdint_.h
$(PSSRC)istruct.h:$(GLSRC)gssprintf.h
-$(PSSRC)istruct.h:$(GLSRC)std.h
$(PSSRC)istruct.h:$(GLSRC)gstypes.h
+$(PSSRC)istruct.h:$(GLSRC)std.h
$(PSSRC)istruct.h:$(GLSRC)stdpre.h
$(PSSRC)istruct.h:$(GLGEN)arch.h
+$(PSSRC)istruct.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iutil.h:$(PSSRC)imemory.h
$(PSSRC)iutil.h:$(PSSRC)ivmspace.h
$(PSSRC)iutil.h:$(PSSRC)iref.h
@@ -2379,119 +2379,119 @@ $(PSSRC)iutil.h:$(GLSRC)gxalloc.h
$(PSSRC)iutil.h:$(GLSRC)gxobj.h
$(PSSRC)iutil.h:$(GLSRC)gsnamecl.h
$(PSSRC)iutil.h:$(GLSRC)gxcspace.h
+$(PSSRC)iutil.h:$(GLSRC)gscsel.h
$(PSSRC)iutil.h:$(GLSRC)gsdcolor.h
$(PSSRC)iutil.h:$(GLSRC)gxfrac.h
$(PSSRC)iutil.h:$(GLSRC)gscms.h
-$(PSSRC)iutil.h:$(GLSRC)gscspace.h
$(PSSRC)iutil.h:$(GLSRC)gsdevice.h
-$(PSSRC)iutil.h:$(GLSRC)gxarith.h
-$(PSSRC)iutil.h:$(GLSRC)gxhttile.h
+$(PSSRC)iutil.h:$(GLSRC)gscspace.h
+$(PSSRC)iutil.h:$(GLSRC)gsgstate.h
$(PSSRC)iutil.h:$(GLSRC)gsiparam.h
-$(PSSRC)iutil.h:$(GLSRC)gxbitmap.h
$(PSSRC)iutil.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iutil.h:$(GLSRC)gsrefct.h
+$(PSSRC)iutil.h:$(GLSRC)gxhttile.h
$(PSSRC)iutil.h:$(GLSRC)gsparam.h
-$(PSSRC)iutil.h:$(GLSRC)gsccolor.h
+$(PSSRC)iutil.h:$(GLSRC)gsrefct.h
+$(PSSRC)iutil.h:$(GLSRC)memento.h
$(PSSRC)iutil.h:$(GLSRC)gsstruct.h
$(PSSRC)iutil.h:$(GLSRC)gxsync.h
+$(PSSRC)iutil.h:$(GLSRC)gxbitmap.h
$(PSSRC)iutil.h:$(GLSRC)scommon.h
-$(PSSRC)iutil.h:$(GLSRC)memento.h
-$(PSSRC)iutil.h:$(GLSRC)gscsel.h
$(PSSRC)iutil.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iutil.h:$(GLSRC)gsccolor.h
+$(PSSRC)iutil.h:$(GLSRC)gxarith.h
+$(PSSRC)iutil.h:$(GLSRC)gpsync.h
$(PSSRC)iutil.h:$(GLSRC)gsstype.h
$(PSSRC)iutil.h:$(GLSRC)gsmemory.h
-$(PSSRC)iutil.h:$(GLSRC)gpsync.h
$(PSSRC)iutil.h:$(GLSRC)gslibctx.h
-$(PSSRC)iutil.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iutil.h:$(GLSRC)gsalloc.h
-$(PSSRC)iutil.h:$(GLSRC)stdio_.h
$(PSSRC)iutil.h:$(GLSRC)gxcindex.h
-$(PSSRC)iutil.h:$(GLSRC)gsgstate.h
+$(PSSRC)iutil.h:$(GLSRC)stdio_.h
$(PSSRC)iutil.h:$(GLSRC)stdint_.h
$(PSSRC)iutil.h:$(GLSRC)gssprintf.h
-$(PSSRC)iutil.h:$(GLSRC)std.h
$(PSSRC)iutil.h:$(GLSRC)gstypes.h
+$(PSSRC)iutil.h:$(GLSRC)std.h
$(PSSRC)iutil.h:$(GLSRC)stdpre.h
$(PSSRC)iutil.h:$(GLGEN)arch.h
+$(PSSRC)iutil.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ivmspace.h:$(PSSRC)iref.h
$(PSSRC)ivmspace.h:$(GLSRC)gsgc.h
$(PSSRC)ivmspace.h:$(GLSRC)gxalloc.h
$(PSSRC)ivmspace.h:$(GLSRC)gxobj.h
$(PSSRC)ivmspace.h:$(GLSRC)gsnamecl.h
$(PSSRC)ivmspace.h:$(GLSRC)gxcspace.h
+$(PSSRC)ivmspace.h:$(GLSRC)gscsel.h
$(PSSRC)ivmspace.h:$(GLSRC)gsdcolor.h
$(PSSRC)ivmspace.h:$(GLSRC)gxfrac.h
$(PSSRC)ivmspace.h:$(GLSRC)gscms.h
-$(PSSRC)ivmspace.h:$(GLSRC)gscspace.h
$(PSSRC)ivmspace.h:$(GLSRC)gsdevice.h
-$(PSSRC)ivmspace.h:$(GLSRC)gxarith.h
-$(PSSRC)ivmspace.h:$(GLSRC)gxhttile.h
+$(PSSRC)ivmspace.h:$(GLSRC)gscspace.h
+$(PSSRC)ivmspace.h:$(GLSRC)gsgstate.h
$(PSSRC)ivmspace.h:$(GLSRC)gsiparam.h
-$(PSSRC)ivmspace.h:$(GLSRC)gxbitmap.h
$(PSSRC)ivmspace.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ivmspace.h:$(GLSRC)gsrefct.h
+$(PSSRC)ivmspace.h:$(GLSRC)gxhttile.h
$(PSSRC)ivmspace.h:$(GLSRC)gsparam.h
-$(PSSRC)ivmspace.h:$(GLSRC)gsccolor.h
+$(PSSRC)ivmspace.h:$(GLSRC)gsrefct.h
+$(PSSRC)ivmspace.h:$(GLSRC)memento.h
$(PSSRC)ivmspace.h:$(GLSRC)gsstruct.h
$(PSSRC)ivmspace.h:$(GLSRC)gxsync.h
+$(PSSRC)ivmspace.h:$(GLSRC)gxbitmap.h
$(PSSRC)ivmspace.h:$(GLSRC)scommon.h
-$(PSSRC)ivmspace.h:$(GLSRC)memento.h
-$(PSSRC)ivmspace.h:$(GLSRC)gscsel.h
$(PSSRC)ivmspace.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ivmspace.h:$(GLSRC)gsccolor.h
+$(PSSRC)ivmspace.h:$(GLSRC)gxarith.h
+$(PSSRC)ivmspace.h:$(GLSRC)gpsync.h
$(PSSRC)ivmspace.h:$(GLSRC)gsstype.h
$(PSSRC)ivmspace.h:$(GLSRC)gsmemory.h
-$(PSSRC)ivmspace.h:$(GLSRC)gpsync.h
$(PSSRC)ivmspace.h:$(GLSRC)gslibctx.h
-$(PSSRC)ivmspace.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ivmspace.h:$(GLSRC)gsalloc.h
-$(PSSRC)ivmspace.h:$(GLSRC)stdio_.h
$(PSSRC)ivmspace.h:$(GLSRC)gxcindex.h
-$(PSSRC)ivmspace.h:$(GLSRC)gsgstate.h
+$(PSSRC)ivmspace.h:$(GLSRC)stdio_.h
$(PSSRC)ivmspace.h:$(GLSRC)stdint_.h
$(PSSRC)ivmspace.h:$(GLSRC)gssprintf.h
-$(PSSRC)ivmspace.h:$(GLSRC)std.h
$(PSSRC)ivmspace.h:$(GLSRC)gstypes.h
+$(PSSRC)ivmspace.h:$(GLSRC)std.h
$(PSSRC)ivmspace.h:$(GLSRC)stdpre.h
$(PSSRC)ivmspace.h:$(GLGEN)arch.h
+$(PSSRC)ivmspace.h:$(GLSRC)gs_dll_call.h
$(PSSRC)opdef.h:$(PSSRC)iref.h
$(PSSRC)opdef.h:$(GLSRC)gxalloc.h
$(PSSRC)opdef.h:$(GLSRC)gxobj.h
$(PSSRC)opdef.h:$(GLSRC)gsnamecl.h
$(PSSRC)opdef.h:$(GLSRC)gxcspace.h
+$(PSSRC)opdef.h:$(GLSRC)gscsel.h
$(PSSRC)opdef.h:$(GLSRC)gsdcolor.h
$(PSSRC)opdef.h:$(GLSRC)gxfrac.h
$(PSSRC)opdef.h:$(GLSRC)gscms.h
-$(PSSRC)opdef.h:$(GLSRC)gscspace.h
$(PSSRC)opdef.h:$(GLSRC)gsdevice.h
-$(PSSRC)opdef.h:$(GLSRC)gxarith.h
-$(PSSRC)opdef.h:$(GLSRC)gxhttile.h
+$(PSSRC)opdef.h:$(GLSRC)gscspace.h
+$(PSSRC)opdef.h:$(GLSRC)gsgstate.h
$(PSSRC)opdef.h:$(GLSRC)gsiparam.h
-$(PSSRC)opdef.h:$(GLSRC)gxbitmap.h
$(PSSRC)opdef.h:$(GLSRC)gsmatrix.h
-$(PSSRC)opdef.h:$(GLSRC)gsrefct.h
+$(PSSRC)opdef.h:$(GLSRC)gxhttile.h
$(PSSRC)opdef.h:$(GLSRC)gsparam.h
-$(PSSRC)opdef.h:$(GLSRC)gsccolor.h
+$(PSSRC)opdef.h:$(GLSRC)gsrefct.h
+$(PSSRC)opdef.h:$(GLSRC)memento.h
$(PSSRC)opdef.h:$(GLSRC)gsstruct.h
$(PSSRC)opdef.h:$(GLSRC)gxsync.h
+$(PSSRC)opdef.h:$(GLSRC)gxbitmap.h
$(PSSRC)opdef.h:$(GLSRC)scommon.h
-$(PSSRC)opdef.h:$(GLSRC)memento.h
-$(PSSRC)opdef.h:$(GLSRC)gscsel.h
$(PSSRC)opdef.h:$(GLSRC)gsbitmap.h
+$(PSSRC)opdef.h:$(GLSRC)gsccolor.h
+$(PSSRC)opdef.h:$(GLSRC)gxarith.h
+$(PSSRC)opdef.h:$(GLSRC)gpsync.h
$(PSSRC)opdef.h:$(GLSRC)gsstype.h
$(PSSRC)opdef.h:$(GLSRC)gsmemory.h
-$(PSSRC)opdef.h:$(GLSRC)gpsync.h
$(PSSRC)opdef.h:$(GLSRC)gslibctx.h
-$(PSSRC)opdef.h:$(GLSRC)gs_dll_call.h
$(PSSRC)opdef.h:$(GLSRC)gsalloc.h
-$(PSSRC)opdef.h:$(GLSRC)stdio_.h
$(PSSRC)opdef.h:$(GLSRC)gxcindex.h
-$(PSSRC)opdef.h:$(GLSRC)gsgstate.h
+$(PSSRC)opdef.h:$(GLSRC)stdio_.h
$(PSSRC)opdef.h:$(GLSRC)stdint_.h
$(PSSRC)opdef.h:$(GLSRC)gssprintf.h
-$(PSSRC)opdef.h:$(GLSRC)std.h
$(PSSRC)opdef.h:$(GLSRC)gstypes.h
+$(PSSRC)opdef.h:$(GLSRC)std.h
$(PSSRC)opdef.h:$(GLSRC)stdpre.h
$(PSSRC)opdef.h:$(GLGEN)arch.h
+$(PSSRC)opdef.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ghost.h:$(GLSRC)gx.h
$(PSSRC)ghost.h:$(GLSRC)gdebug.h
$(PSSRC)ghost.h:$(PSSRC)iref.h
@@ -2499,43 +2499,43 @@ $(PSSRC)ghost.h:$(GLSRC)gxalloc.h
$(PSSRC)ghost.h:$(GLSRC)gxobj.h
$(PSSRC)ghost.h:$(GLSRC)gsnamecl.h
$(PSSRC)ghost.h:$(GLSRC)gxcspace.h
+$(PSSRC)ghost.h:$(GLSRC)gscsel.h
$(PSSRC)ghost.h:$(GLSRC)gsdcolor.h
$(PSSRC)ghost.h:$(GLSRC)gxfrac.h
$(PSSRC)ghost.h:$(GLSRC)gscms.h
-$(PSSRC)ghost.h:$(GLSRC)gscspace.h
$(PSSRC)ghost.h:$(GLSRC)gsdevice.h
-$(PSSRC)ghost.h:$(GLSRC)gxarith.h
-$(PSSRC)ghost.h:$(GLSRC)gxhttile.h
-$(PSSRC)ghost.h:$(GLSRC)gsiparam.h
+$(PSSRC)ghost.h:$(GLSRC)gscspace.h
+$(PSSRC)ghost.h:$(GLSRC)gsgstate.h
$(PSSRC)ghost.h:$(GLSRC)gsio.h
-$(PSSRC)ghost.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ghost.h:$(GLSRC)gsiparam.h
$(PSSRC)ghost.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ghost.h:$(GLSRC)gsrefct.h
+$(PSSRC)ghost.h:$(GLSRC)gxhttile.h
$(PSSRC)ghost.h:$(GLSRC)gsparam.h
-$(PSSRC)ghost.h:$(GLSRC)gsccolor.h
+$(PSSRC)ghost.h:$(GLSRC)gsrefct.h
+$(PSSRC)ghost.h:$(GLSRC)memento.h
$(PSSRC)ghost.h:$(GLSRC)gsstruct.h
-$(PSSRC)ghost.h:$(GLSRC)gxsync.h
$(PSSRC)ghost.h:$(GLSRC)gdbflags.h
+$(PSSRC)ghost.h:$(GLSRC)gxsync.h
$(PSSRC)ghost.h:$(GLSRC)gserrors.h
+$(PSSRC)ghost.h:$(GLSRC)gxbitmap.h
$(PSSRC)ghost.h:$(GLSRC)scommon.h
-$(PSSRC)ghost.h:$(GLSRC)memento.h
-$(PSSRC)ghost.h:$(GLSRC)gscsel.h
$(PSSRC)ghost.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ghost.h:$(GLSRC)gsccolor.h
+$(PSSRC)ghost.h:$(GLSRC)gxarith.h
+$(PSSRC)ghost.h:$(GLSRC)gpsync.h
$(PSSRC)ghost.h:$(GLSRC)gsstype.h
$(PSSRC)ghost.h:$(GLSRC)gsmemory.h
-$(PSSRC)ghost.h:$(GLSRC)gpsync.h
$(PSSRC)ghost.h:$(GLSRC)gslibctx.h
-$(PSSRC)ghost.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ghost.h:$(GLSRC)gsalloc.h
-$(PSSRC)ghost.h:$(GLSRC)stdio_.h
$(PSSRC)ghost.h:$(GLSRC)gxcindex.h
-$(PSSRC)ghost.h:$(GLSRC)gsgstate.h
+$(PSSRC)ghost.h:$(GLSRC)stdio_.h
$(PSSRC)ghost.h:$(GLSRC)stdint_.h
$(PSSRC)ghost.h:$(GLSRC)gssprintf.h
-$(PSSRC)ghost.h:$(GLSRC)std.h
$(PSSRC)ghost.h:$(GLSRC)gstypes.h
+$(PSSRC)ghost.h:$(GLSRC)std.h
$(PSSRC)ghost.h:$(GLSRC)stdpre.h
$(PSSRC)ghost.h:$(GLGEN)arch.h
+$(PSSRC)ghost.h:$(GLSRC)gs_dll_call.h
$(PSSRC)igc.h:$(PSSRC)istruct.h
$(PSSRC)igc.h:$(PSSRC)inames.h
$(PSSRC)igc.h:$(PSSRC)imemory.h
@@ -2546,40 +2546,40 @@ $(PSSRC)igc.h:$(GLSRC)gxalloc.h
$(PSSRC)igc.h:$(GLSRC)gxobj.h
$(PSSRC)igc.h:$(GLSRC)gsnamecl.h
$(PSSRC)igc.h:$(GLSRC)gxcspace.h
+$(PSSRC)igc.h:$(GLSRC)gscsel.h
$(PSSRC)igc.h:$(GLSRC)gsdcolor.h
$(PSSRC)igc.h:$(GLSRC)gxfrac.h
$(PSSRC)igc.h:$(GLSRC)gscms.h
-$(PSSRC)igc.h:$(GLSRC)gscspace.h
$(PSSRC)igc.h:$(GLSRC)gsdevice.h
-$(PSSRC)igc.h:$(GLSRC)gxarith.h
-$(PSSRC)igc.h:$(GLSRC)gxhttile.h
+$(PSSRC)igc.h:$(GLSRC)gscspace.h
+$(PSSRC)igc.h:$(GLSRC)gsgstate.h
$(PSSRC)igc.h:$(GLSRC)gsiparam.h
-$(PSSRC)igc.h:$(GLSRC)gxbitmap.h
$(PSSRC)igc.h:$(GLSRC)gsmatrix.h
-$(PSSRC)igc.h:$(GLSRC)gsrefct.h
+$(PSSRC)igc.h:$(GLSRC)gxhttile.h
$(PSSRC)igc.h:$(GLSRC)gsparam.h
-$(PSSRC)igc.h:$(GLSRC)gsccolor.h
+$(PSSRC)igc.h:$(GLSRC)gsrefct.h
+$(PSSRC)igc.h:$(GLSRC)memento.h
$(PSSRC)igc.h:$(GLSRC)gsstruct.h
$(PSSRC)igc.h:$(GLSRC)gxsync.h
+$(PSSRC)igc.h:$(GLSRC)gxbitmap.h
$(PSSRC)igc.h:$(GLSRC)scommon.h
-$(PSSRC)igc.h:$(GLSRC)memento.h
-$(PSSRC)igc.h:$(GLSRC)gscsel.h
$(PSSRC)igc.h:$(GLSRC)gsbitmap.h
+$(PSSRC)igc.h:$(GLSRC)gsccolor.h
+$(PSSRC)igc.h:$(GLSRC)gxarith.h
+$(PSSRC)igc.h:$(GLSRC)gpsync.h
$(PSSRC)igc.h:$(GLSRC)gsstype.h
$(PSSRC)igc.h:$(GLSRC)gsmemory.h
-$(PSSRC)igc.h:$(GLSRC)gpsync.h
$(PSSRC)igc.h:$(GLSRC)gslibctx.h
-$(PSSRC)igc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)igc.h:$(GLSRC)gsalloc.h
-$(PSSRC)igc.h:$(GLSRC)stdio_.h
$(PSSRC)igc.h:$(GLSRC)gxcindex.h
-$(PSSRC)igc.h:$(GLSRC)gsgstate.h
+$(PSSRC)igc.h:$(GLSRC)stdio_.h
$(PSSRC)igc.h:$(GLSRC)stdint_.h
$(PSSRC)igc.h:$(GLSRC)gssprintf.h
-$(PSSRC)igc.h:$(GLSRC)std.h
$(PSSRC)igc.h:$(GLSRC)gstypes.h
+$(PSSRC)igc.h:$(GLSRC)std.h
$(PSSRC)igc.h:$(GLSRC)stdpre.h
$(PSSRC)igc.h:$(GLGEN)arch.h
+$(PSSRC)igc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)imemory.h:$(PSSRC)ivmspace.h
$(PSSRC)imemory.h:$(PSSRC)iref.h
$(PSSRC)imemory.h:$(GLSRC)gsgc.h
@@ -2587,40 +2587,40 @@ $(PSSRC)imemory.h:$(GLSRC)gxalloc.h
$(PSSRC)imemory.h:$(GLSRC)gxobj.h
$(PSSRC)imemory.h:$(GLSRC)gsnamecl.h
$(PSSRC)imemory.h:$(GLSRC)gxcspace.h
+$(PSSRC)imemory.h:$(GLSRC)gscsel.h
$(PSSRC)imemory.h:$(GLSRC)gsdcolor.h
$(PSSRC)imemory.h:$(GLSRC)gxfrac.h
$(PSSRC)imemory.h:$(GLSRC)gscms.h
-$(PSSRC)imemory.h:$(GLSRC)gscspace.h
$(PSSRC)imemory.h:$(GLSRC)gsdevice.h
-$(PSSRC)imemory.h:$(GLSRC)gxarith.h
-$(PSSRC)imemory.h:$(GLSRC)gxhttile.h
+$(PSSRC)imemory.h:$(GLSRC)gscspace.h
+$(PSSRC)imemory.h:$(GLSRC)gsgstate.h
$(PSSRC)imemory.h:$(GLSRC)gsiparam.h
-$(PSSRC)imemory.h:$(GLSRC)gxbitmap.h
$(PSSRC)imemory.h:$(GLSRC)gsmatrix.h
-$(PSSRC)imemory.h:$(GLSRC)gsrefct.h
+$(PSSRC)imemory.h:$(GLSRC)gxhttile.h
$(PSSRC)imemory.h:$(GLSRC)gsparam.h
-$(PSSRC)imemory.h:$(GLSRC)gsccolor.h
+$(PSSRC)imemory.h:$(GLSRC)gsrefct.h
+$(PSSRC)imemory.h:$(GLSRC)memento.h
$(PSSRC)imemory.h:$(GLSRC)gsstruct.h
$(PSSRC)imemory.h:$(GLSRC)gxsync.h
+$(PSSRC)imemory.h:$(GLSRC)gxbitmap.h
$(PSSRC)imemory.h:$(GLSRC)scommon.h
-$(PSSRC)imemory.h:$(GLSRC)memento.h
-$(PSSRC)imemory.h:$(GLSRC)gscsel.h
$(PSSRC)imemory.h:$(GLSRC)gsbitmap.h
+$(PSSRC)imemory.h:$(GLSRC)gsccolor.h
+$(PSSRC)imemory.h:$(GLSRC)gxarith.h
+$(PSSRC)imemory.h:$(GLSRC)gpsync.h
$(PSSRC)imemory.h:$(GLSRC)gsstype.h
$(PSSRC)imemory.h:$(GLSRC)gsmemory.h
-$(PSSRC)imemory.h:$(GLSRC)gpsync.h
$(PSSRC)imemory.h:$(GLSRC)gslibctx.h
-$(PSSRC)imemory.h:$(GLSRC)gs_dll_call.h
$(PSSRC)imemory.h:$(GLSRC)gsalloc.h
-$(PSSRC)imemory.h:$(GLSRC)stdio_.h
$(PSSRC)imemory.h:$(GLSRC)gxcindex.h
-$(PSSRC)imemory.h:$(GLSRC)gsgstate.h
+$(PSSRC)imemory.h:$(GLSRC)stdio_.h
$(PSSRC)imemory.h:$(GLSRC)stdint_.h
$(PSSRC)imemory.h:$(GLSRC)gssprintf.h
-$(PSSRC)imemory.h:$(GLSRC)std.h
$(PSSRC)imemory.h:$(GLSRC)gstypes.h
+$(PSSRC)imemory.h:$(GLSRC)std.h
$(PSSRC)imemory.h:$(GLSRC)stdpre.h
$(PSSRC)imemory.h:$(GLGEN)arch.h
+$(PSSRC)imemory.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ialloc.h:$(PSSRC)imemory.h
$(PSSRC)ialloc.h:$(PSSRC)ivmspace.h
$(PSSRC)ialloc.h:$(PSSRC)iref.h
@@ -2629,40 +2629,40 @@ $(PSSRC)ialloc.h:$(GLSRC)gxalloc.h
$(PSSRC)ialloc.h:$(GLSRC)gxobj.h
$(PSSRC)ialloc.h:$(GLSRC)gsnamecl.h
$(PSSRC)ialloc.h:$(GLSRC)gxcspace.h
+$(PSSRC)ialloc.h:$(GLSRC)gscsel.h
$(PSSRC)ialloc.h:$(GLSRC)gsdcolor.h
$(PSSRC)ialloc.h:$(GLSRC)gxfrac.h
$(PSSRC)ialloc.h:$(GLSRC)gscms.h
-$(PSSRC)ialloc.h:$(GLSRC)gscspace.h
$(PSSRC)ialloc.h:$(GLSRC)gsdevice.h
-$(PSSRC)ialloc.h:$(GLSRC)gxarith.h
-$(PSSRC)ialloc.h:$(GLSRC)gxhttile.h
+$(PSSRC)ialloc.h:$(GLSRC)gscspace.h
+$(PSSRC)ialloc.h:$(GLSRC)gsgstate.h
$(PSSRC)ialloc.h:$(GLSRC)gsiparam.h
-$(PSSRC)ialloc.h:$(GLSRC)gxbitmap.h
$(PSSRC)ialloc.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ialloc.h:$(GLSRC)gsrefct.h
+$(PSSRC)ialloc.h:$(GLSRC)gxhttile.h
$(PSSRC)ialloc.h:$(GLSRC)gsparam.h
-$(PSSRC)ialloc.h:$(GLSRC)gsccolor.h
+$(PSSRC)ialloc.h:$(GLSRC)gsrefct.h
+$(PSSRC)ialloc.h:$(GLSRC)memento.h
$(PSSRC)ialloc.h:$(GLSRC)gsstruct.h
$(PSSRC)ialloc.h:$(GLSRC)gxsync.h
+$(PSSRC)ialloc.h:$(GLSRC)gxbitmap.h
$(PSSRC)ialloc.h:$(GLSRC)scommon.h
-$(PSSRC)ialloc.h:$(GLSRC)memento.h
-$(PSSRC)ialloc.h:$(GLSRC)gscsel.h
$(PSSRC)ialloc.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ialloc.h:$(GLSRC)gsccolor.h
+$(PSSRC)ialloc.h:$(GLSRC)gxarith.h
+$(PSSRC)ialloc.h:$(GLSRC)gpsync.h
$(PSSRC)ialloc.h:$(GLSRC)gsstype.h
$(PSSRC)ialloc.h:$(GLSRC)gsmemory.h
-$(PSSRC)ialloc.h:$(GLSRC)gpsync.h
$(PSSRC)ialloc.h:$(GLSRC)gslibctx.h
-$(PSSRC)ialloc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ialloc.h:$(GLSRC)gsalloc.h
-$(PSSRC)ialloc.h:$(GLSRC)stdio_.h
$(PSSRC)ialloc.h:$(GLSRC)gxcindex.h
-$(PSSRC)ialloc.h:$(GLSRC)gsgstate.h
+$(PSSRC)ialloc.h:$(GLSRC)stdio_.h
$(PSSRC)ialloc.h:$(GLSRC)stdint_.h
$(PSSRC)ialloc.h:$(GLSRC)gssprintf.h
-$(PSSRC)ialloc.h:$(GLSRC)std.h
$(PSSRC)ialloc.h:$(GLSRC)gstypes.h
+$(PSSRC)ialloc.h:$(GLSRC)std.h
$(PSSRC)ialloc.h:$(GLSRC)stdpre.h
$(PSSRC)ialloc.h:$(GLGEN)arch.h
+$(PSSRC)ialloc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iastruct.h:$(PSSRC)ialloc.h
$(PSSRC)iastruct.h:$(PSSRC)imemory.h
$(PSSRC)iastruct.h:$(PSSRC)ivmspace.h
@@ -2672,40 +2672,40 @@ $(PSSRC)iastruct.h:$(GLSRC)gxalloc.h
$(PSSRC)iastruct.h:$(GLSRC)gxobj.h
$(PSSRC)iastruct.h:$(GLSRC)gsnamecl.h
$(PSSRC)iastruct.h:$(GLSRC)gxcspace.h
+$(PSSRC)iastruct.h:$(GLSRC)gscsel.h
$(PSSRC)iastruct.h:$(GLSRC)gsdcolor.h
$(PSSRC)iastruct.h:$(GLSRC)gxfrac.h
$(PSSRC)iastruct.h:$(GLSRC)gscms.h
-$(PSSRC)iastruct.h:$(GLSRC)gscspace.h
$(PSSRC)iastruct.h:$(GLSRC)gsdevice.h
-$(PSSRC)iastruct.h:$(GLSRC)gxarith.h
-$(PSSRC)iastruct.h:$(GLSRC)gxhttile.h
+$(PSSRC)iastruct.h:$(GLSRC)gscspace.h
+$(PSSRC)iastruct.h:$(GLSRC)gsgstate.h
$(PSSRC)iastruct.h:$(GLSRC)gsiparam.h
-$(PSSRC)iastruct.h:$(GLSRC)gxbitmap.h
$(PSSRC)iastruct.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iastruct.h:$(GLSRC)gsrefct.h
+$(PSSRC)iastruct.h:$(GLSRC)gxhttile.h
$(PSSRC)iastruct.h:$(GLSRC)gsparam.h
-$(PSSRC)iastruct.h:$(GLSRC)gsccolor.h
+$(PSSRC)iastruct.h:$(GLSRC)gsrefct.h
+$(PSSRC)iastruct.h:$(GLSRC)memento.h
$(PSSRC)iastruct.h:$(GLSRC)gsstruct.h
$(PSSRC)iastruct.h:$(GLSRC)gxsync.h
+$(PSSRC)iastruct.h:$(GLSRC)gxbitmap.h
$(PSSRC)iastruct.h:$(GLSRC)scommon.h
-$(PSSRC)iastruct.h:$(GLSRC)memento.h
-$(PSSRC)iastruct.h:$(GLSRC)gscsel.h
$(PSSRC)iastruct.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iastruct.h:$(GLSRC)gsccolor.h
+$(PSSRC)iastruct.h:$(GLSRC)gxarith.h
+$(PSSRC)iastruct.h:$(GLSRC)gpsync.h
$(PSSRC)iastruct.h:$(GLSRC)gsstype.h
$(PSSRC)iastruct.h:$(GLSRC)gsmemory.h
-$(PSSRC)iastruct.h:$(GLSRC)gpsync.h
$(PSSRC)iastruct.h:$(GLSRC)gslibctx.h
-$(PSSRC)iastruct.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iastruct.h:$(GLSRC)gsalloc.h
-$(PSSRC)iastruct.h:$(GLSRC)stdio_.h
$(PSSRC)iastruct.h:$(GLSRC)gxcindex.h
-$(PSSRC)iastruct.h:$(GLSRC)gsgstate.h
+$(PSSRC)iastruct.h:$(GLSRC)stdio_.h
$(PSSRC)iastruct.h:$(GLSRC)stdint_.h
$(PSSRC)iastruct.h:$(GLSRC)gssprintf.h
-$(PSSRC)iastruct.h:$(GLSRC)std.h
$(PSSRC)iastruct.h:$(GLSRC)gstypes.h
+$(PSSRC)iastruct.h:$(GLSRC)std.h
$(PSSRC)iastruct.h:$(GLSRC)stdpre.h
$(PSSRC)iastruct.h:$(GLGEN)arch.h
+$(PSSRC)iastruct.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iastate.h:$(PSSRC)istruct.h
$(PSSRC)iastate.h:$(PSSRC)ialloc.h
$(PSSRC)iastate.h:$(PSSRC)imemory.h
@@ -2716,40 +2716,40 @@ $(PSSRC)iastate.h:$(GLSRC)gxalloc.h
$(PSSRC)iastate.h:$(GLSRC)gxobj.h
$(PSSRC)iastate.h:$(GLSRC)gsnamecl.h
$(PSSRC)iastate.h:$(GLSRC)gxcspace.h
+$(PSSRC)iastate.h:$(GLSRC)gscsel.h
$(PSSRC)iastate.h:$(GLSRC)gsdcolor.h
$(PSSRC)iastate.h:$(GLSRC)gxfrac.h
$(PSSRC)iastate.h:$(GLSRC)gscms.h
-$(PSSRC)iastate.h:$(GLSRC)gscspace.h
$(PSSRC)iastate.h:$(GLSRC)gsdevice.h
-$(PSSRC)iastate.h:$(GLSRC)gxarith.h
-$(PSSRC)iastate.h:$(GLSRC)gxhttile.h
+$(PSSRC)iastate.h:$(GLSRC)gscspace.h
+$(PSSRC)iastate.h:$(GLSRC)gsgstate.h
$(PSSRC)iastate.h:$(GLSRC)gsiparam.h
-$(PSSRC)iastate.h:$(GLSRC)gxbitmap.h
$(PSSRC)iastate.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iastate.h:$(GLSRC)gsrefct.h
+$(PSSRC)iastate.h:$(GLSRC)gxhttile.h
$(PSSRC)iastate.h:$(GLSRC)gsparam.h
-$(PSSRC)iastate.h:$(GLSRC)gsccolor.h
+$(PSSRC)iastate.h:$(GLSRC)gsrefct.h
+$(PSSRC)iastate.h:$(GLSRC)memento.h
$(PSSRC)iastate.h:$(GLSRC)gsstruct.h
$(PSSRC)iastate.h:$(GLSRC)gxsync.h
+$(PSSRC)iastate.h:$(GLSRC)gxbitmap.h
$(PSSRC)iastate.h:$(GLSRC)scommon.h
-$(PSSRC)iastate.h:$(GLSRC)memento.h
-$(PSSRC)iastate.h:$(GLSRC)gscsel.h
$(PSSRC)iastate.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iastate.h:$(GLSRC)gsccolor.h
+$(PSSRC)iastate.h:$(GLSRC)gxarith.h
+$(PSSRC)iastate.h:$(GLSRC)gpsync.h
$(PSSRC)iastate.h:$(GLSRC)gsstype.h
$(PSSRC)iastate.h:$(GLSRC)gsmemory.h
-$(PSSRC)iastate.h:$(GLSRC)gpsync.h
$(PSSRC)iastate.h:$(GLSRC)gslibctx.h
-$(PSSRC)iastate.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iastate.h:$(GLSRC)gsalloc.h
-$(PSSRC)iastate.h:$(GLSRC)stdio_.h
$(PSSRC)iastate.h:$(GLSRC)gxcindex.h
-$(PSSRC)iastate.h:$(GLSRC)gsgstate.h
+$(PSSRC)iastate.h:$(GLSRC)stdio_.h
$(PSSRC)iastate.h:$(GLSRC)stdint_.h
$(PSSRC)iastate.h:$(GLSRC)gssprintf.h
-$(PSSRC)iastate.h:$(GLSRC)std.h
$(PSSRC)iastate.h:$(GLSRC)gstypes.h
+$(PSSRC)iastate.h:$(GLSRC)std.h
$(PSSRC)iastate.h:$(GLSRC)stdpre.h
$(PSSRC)iastate.h:$(GLGEN)arch.h
+$(PSSRC)iastate.h:$(GLSRC)gs_dll_call.h
$(PSSRC)inamedef.h:$(PSSRC)isave.h
$(PSSRC)inamedef.h:$(PSSRC)inames.h
$(PSSRC)inamedef.h:$(PSSRC)idosave.h
@@ -2763,40 +2763,40 @@ $(PSSRC)inamedef.h:$(GLSRC)gxalloc.h
$(PSSRC)inamedef.h:$(GLSRC)gxobj.h
$(PSSRC)inamedef.h:$(GLSRC)gsnamecl.h
$(PSSRC)inamedef.h:$(GLSRC)gxcspace.h
+$(PSSRC)inamedef.h:$(GLSRC)gscsel.h
$(PSSRC)inamedef.h:$(GLSRC)gsdcolor.h
$(PSSRC)inamedef.h:$(GLSRC)gxfrac.h
$(PSSRC)inamedef.h:$(GLSRC)gscms.h
-$(PSSRC)inamedef.h:$(GLSRC)gscspace.h
$(PSSRC)inamedef.h:$(GLSRC)gsdevice.h
-$(PSSRC)inamedef.h:$(GLSRC)gxarith.h
-$(PSSRC)inamedef.h:$(GLSRC)gxhttile.h
+$(PSSRC)inamedef.h:$(GLSRC)gscspace.h
+$(PSSRC)inamedef.h:$(GLSRC)gsgstate.h
$(PSSRC)inamedef.h:$(GLSRC)gsiparam.h
-$(PSSRC)inamedef.h:$(GLSRC)gxbitmap.h
$(PSSRC)inamedef.h:$(GLSRC)gsmatrix.h
-$(PSSRC)inamedef.h:$(GLSRC)gsrefct.h
+$(PSSRC)inamedef.h:$(GLSRC)gxhttile.h
$(PSSRC)inamedef.h:$(GLSRC)gsparam.h
-$(PSSRC)inamedef.h:$(GLSRC)gsccolor.h
+$(PSSRC)inamedef.h:$(GLSRC)gsrefct.h
+$(PSSRC)inamedef.h:$(GLSRC)memento.h
$(PSSRC)inamedef.h:$(GLSRC)gsstruct.h
$(PSSRC)inamedef.h:$(GLSRC)gxsync.h
+$(PSSRC)inamedef.h:$(GLSRC)gxbitmap.h
$(PSSRC)inamedef.h:$(GLSRC)scommon.h
-$(PSSRC)inamedef.h:$(GLSRC)memento.h
-$(PSSRC)inamedef.h:$(GLSRC)gscsel.h
$(PSSRC)inamedef.h:$(GLSRC)gsbitmap.h
+$(PSSRC)inamedef.h:$(GLSRC)gsccolor.h
+$(PSSRC)inamedef.h:$(GLSRC)gxarith.h
+$(PSSRC)inamedef.h:$(GLSRC)gpsync.h
$(PSSRC)inamedef.h:$(GLSRC)gsstype.h
$(PSSRC)inamedef.h:$(GLSRC)gsmemory.h
-$(PSSRC)inamedef.h:$(GLSRC)gpsync.h
$(PSSRC)inamedef.h:$(GLSRC)gslibctx.h
-$(PSSRC)inamedef.h:$(GLSRC)gs_dll_call.h
$(PSSRC)inamedef.h:$(GLSRC)gsalloc.h
-$(PSSRC)inamedef.h:$(GLSRC)stdio_.h
$(PSSRC)inamedef.h:$(GLSRC)gxcindex.h
-$(PSSRC)inamedef.h:$(GLSRC)gsgstate.h
+$(PSSRC)inamedef.h:$(GLSRC)stdio_.h
$(PSSRC)inamedef.h:$(GLSRC)stdint_.h
$(PSSRC)inamedef.h:$(GLSRC)gssprintf.h
-$(PSSRC)inamedef.h:$(GLSRC)std.h
$(PSSRC)inamedef.h:$(GLSRC)gstypes.h
+$(PSSRC)inamedef.h:$(GLSRC)std.h
$(PSSRC)inamedef.h:$(GLSRC)stdpre.h
$(PSSRC)inamedef.h:$(GLGEN)arch.h
+$(PSSRC)inamedef.h:$(GLSRC)gs_dll_call.h
$(PSSRC)store.h:$(PSSRC)ialloc.h
$(PSSRC)store.h:$(PSSRC)idosave.h
$(PSSRC)store.h:$(PSSRC)imemory.h
@@ -2807,287 +2807,287 @@ $(PSSRC)store.h:$(GLSRC)gxalloc.h
$(PSSRC)store.h:$(GLSRC)gxobj.h
$(PSSRC)store.h:$(GLSRC)gsnamecl.h
$(PSSRC)store.h:$(GLSRC)gxcspace.h
+$(PSSRC)store.h:$(GLSRC)gscsel.h
$(PSSRC)store.h:$(GLSRC)gsdcolor.h
$(PSSRC)store.h:$(GLSRC)gxfrac.h
$(PSSRC)store.h:$(GLSRC)gscms.h
-$(PSSRC)store.h:$(GLSRC)gscspace.h
$(PSSRC)store.h:$(GLSRC)gsdevice.h
-$(PSSRC)store.h:$(GLSRC)gxarith.h
-$(PSSRC)store.h:$(GLSRC)gxhttile.h
+$(PSSRC)store.h:$(GLSRC)gscspace.h
+$(PSSRC)store.h:$(GLSRC)gsgstate.h
$(PSSRC)store.h:$(GLSRC)gsiparam.h
-$(PSSRC)store.h:$(GLSRC)gxbitmap.h
$(PSSRC)store.h:$(GLSRC)gsmatrix.h
-$(PSSRC)store.h:$(GLSRC)gsrefct.h
+$(PSSRC)store.h:$(GLSRC)gxhttile.h
$(PSSRC)store.h:$(GLSRC)gsparam.h
-$(PSSRC)store.h:$(GLSRC)gsccolor.h
+$(PSSRC)store.h:$(GLSRC)gsrefct.h
+$(PSSRC)store.h:$(GLSRC)memento.h
$(PSSRC)store.h:$(GLSRC)gsstruct.h
$(PSSRC)store.h:$(GLSRC)gxsync.h
+$(PSSRC)store.h:$(GLSRC)gxbitmap.h
$(PSSRC)store.h:$(GLSRC)scommon.h
-$(PSSRC)store.h:$(GLSRC)memento.h
-$(PSSRC)store.h:$(GLSRC)gscsel.h
$(PSSRC)store.h:$(GLSRC)gsbitmap.h
+$(PSSRC)store.h:$(GLSRC)gsccolor.h
+$(PSSRC)store.h:$(GLSRC)gxarith.h
+$(PSSRC)store.h:$(GLSRC)gpsync.h
$(PSSRC)store.h:$(GLSRC)gsstype.h
$(PSSRC)store.h:$(GLSRC)gsmemory.h
-$(PSSRC)store.h:$(GLSRC)gpsync.h
$(PSSRC)store.h:$(GLSRC)gslibctx.h
-$(PSSRC)store.h:$(GLSRC)gs_dll_call.h
$(PSSRC)store.h:$(GLSRC)gsalloc.h
-$(PSSRC)store.h:$(GLSRC)stdio_.h
$(PSSRC)store.h:$(GLSRC)gxcindex.h
-$(PSSRC)store.h:$(GLSRC)gsgstate.h
+$(PSSRC)store.h:$(GLSRC)stdio_.h
$(PSSRC)store.h:$(GLSRC)stdint_.h
$(PSSRC)store.h:$(GLSRC)gssprintf.h
-$(PSSRC)store.h:$(GLSRC)std.h
$(PSSRC)store.h:$(GLSRC)gstypes.h
+$(PSSRC)store.h:$(GLSRC)std.h
$(PSSRC)store.h:$(GLSRC)stdpre.h
$(PSSRC)store.h:$(GLGEN)arch.h
+$(PSSRC)store.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iplugin.h:$(PSSRC)iref.h
$(PSSRC)iplugin.h:$(GLSRC)gxalloc.h
$(PSSRC)iplugin.h:$(GLSRC)gxobj.h
$(PSSRC)iplugin.h:$(GLSRC)gsnamecl.h
$(PSSRC)iplugin.h:$(GLSRC)gxcspace.h
+$(PSSRC)iplugin.h:$(GLSRC)gscsel.h
$(PSSRC)iplugin.h:$(GLSRC)gsdcolor.h
$(PSSRC)iplugin.h:$(GLSRC)gxfrac.h
$(PSSRC)iplugin.h:$(GLSRC)gscms.h
-$(PSSRC)iplugin.h:$(GLSRC)gscspace.h
$(PSSRC)iplugin.h:$(GLSRC)gsdevice.h
-$(PSSRC)iplugin.h:$(GLSRC)gxarith.h
-$(PSSRC)iplugin.h:$(GLSRC)gxhttile.h
+$(PSSRC)iplugin.h:$(GLSRC)gscspace.h
+$(PSSRC)iplugin.h:$(GLSRC)gsgstate.h
$(PSSRC)iplugin.h:$(GLSRC)gsiparam.h
-$(PSSRC)iplugin.h:$(GLSRC)gxbitmap.h
$(PSSRC)iplugin.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iplugin.h:$(GLSRC)gsrefct.h
+$(PSSRC)iplugin.h:$(GLSRC)gxhttile.h
$(PSSRC)iplugin.h:$(GLSRC)gsparam.h
-$(PSSRC)iplugin.h:$(GLSRC)gsccolor.h
+$(PSSRC)iplugin.h:$(GLSRC)gsrefct.h
+$(PSSRC)iplugin.h:$(GLSRC)memento.h
$(PSSRC)iplugin.h:$(GLSRC)gsstruct.h
$(PSSRC)iplugin.h:$(GLSRC)gxsync.h
+$(PSSRC)iplugin.h:$(GLSRC)gxbitmap.h
$(PSSRC)iplugin.h:$(GLSRC)scommon.h
-$(PSSRC)iplugin.h:$(GLSRC)memento.h
-$(PSSRC)iplugin.h:$(GLSRC)gscsel.h
$(PSSRC)iplugin.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iplugin.h:$(GLSRC)gsccolor.h
+$(PSSRC)iplugin.h:$(GLSRC)gxarith.h
+$(PSSRC)iplugin.h:$(GLSRC)gpsync.h
$(PSSRC)iplugin.h:$(GLSRC)gsstype.h
$(PSSRC)iplugin.h:$(GLSRC)gsmemory.h
-$(PSSRC)iplugin.h:$(GLSRC)gpsync.h
$(PSSRC)iplugin.h:$(GLSRC)gslibctx.h
-$(PSSRC)iplugin.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iplugin.h:$(GLSRC)gsalloc.h
-$(PSSRC)iplugin.h:$(GLSRC)stdio_.h
$(PSSRC)iplugin.h:$(GLSRC)gxcindex.h
-$(PSSRC)iplugin.h:$(GLSRC)gsgstate.h
+$(PSSRC)iplugin.h:$(GLSRC)stdio_.h
$(PSSRC)iplugin.h:$(GLSRC)stdint_.h
$(PSSRC)iplugin.h:$(GLSRC)gssprintf.h
-$(PSSRC)iplugin.h:$(GLSRC)std.h
$(PSSRC)iplugin.h:$(GLSRC)gstypes.h
+$(PSSRC)iplugin.h:$(GLSRC)std.h
$(PSSRC)iplugin.h:$(GLSRC)stdpre.h
$(PSSRC)iplugin.h:$(GLGEN)arch.h
+$(PSSRC)iplugin.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifapi.h:$(PSSRC)iplugin.h
$(PSSRC)ifapi.h:$(GLSRC)gxfapi.h
$(PSSRC)ifapi.h:$(PSSRC)iref.h
$(PSSRC)ifapi.h:$(GLSRC)gxalloc.h
-$(PSSRC)ifapi.h:$(GLSRC)gstext.h
$(PSSRC)ifapi.h:$(GLSRC)gxobj.h
+$(PSSRC)ifapi.h:$(GLSRC)gstext.h
$(PSSRC)ifapi.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifapi.h:$(GLSRC)gxcspace.h
-$(PSSRC)ifapi.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifapi.h:$(GLSRC)gscsel.h
$(PSSRC)ifapi.h:$(GLSRC)gsfont.h
+$(PSSRC)ifapi.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifapi.h:$(GLSRC)gxpath.h
$(PSSRC)ifapi.h:$(GLSRC)gxfrac.h
$(PSSRC)ifapi.h:$(GLSRC)gscms.h
-$(PSSRC)ifapi.h:$(GLSRC)gscspace.h
-$(PSSRC)ifapi.h:$(GLSRC)gxpath.h
-$(PSSRC)ifapi.h:$(GLSRC)gsdevice.h
-$(PSSRC)ifapi.h:$(GLSRC)gxarith.h
-$(PSSRC)ifapi.h:$(GLSRC)gspenum.h
-$(PSSRC)ifapi.h:$(GLSRC)gxhttile.h
$(PSSRC)ifapi.h:$(GLSRC)gsrect.h
$(PSSRC)ifapi.h:$(GLSRC)gslparam.h
-$(PSSRC)ifapi.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifapi.h:$(GLSRC)gxbitmap.h
-$(PSSRC)ifapi.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifapi.h:$(GLSRC)gsdevice.h
$(PSSRC)ifapi.h:$(GLSRC)gscpm.h
+$(PSSRC)ifapi.h:$(GLSRC)gscspace.h
+$(PSSRC)ifapi.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifapi.h:$(GLSRC)gsiparam.h
$(PSSRC)ifapi.h:$(GLSRC)gxfixed.h
-$(PSSRC)ifapi.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifapi.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifapi.h:$(GLSRC)gspenum.h
+$(PSSRC)ifapi.h:$(GLSRC)gxhttile.h
$(PSSRC)ifapi.h:$(GLSRC)gsparam.h
+$(PSSRC)ifapi.h:$(GLSRC)gsrefct.h
$(PSSRC)ifapi.h:$(GLSRC)gp.h
-$(PSSRC)ifapi.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifapi.h:$(GLSRC)memento.h
+$(PSSRC)ifapi.h:$(GLSRC)memory_.h
$(PSSRC)ifapi.h:$(GLSRC)gsstruct.h
$(PSSRC)ifapi.h:$(GLSRC)gxsync.h
+$(PSSRC)ifapi.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifapi.h:$(GLSRC)srdline.h
$(PSSRC)ifapi.h:$(GLSRC)scommon.h
-$(PSSRC)ifapi.h:$(GLSRC)memento.h
-$(PSSRC)ifapi.h:$(GLSRC)gscsel.h
$(PSSRC)ifapi.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ifapi.h:$(GLSRC)gsstype.h
+$(PSSRC)ifapi.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifapi.h:$(GLSRC)gxarith.h
$(PSSRC)ifapi.h:$(GLSRC)stat_.h
-$(PSSRC)ifapi.h:$(GLSRC)gsmemory.h
$(PSSRC)ifapi.h:$(GLSRC)gpsync.h
-$(PSSRC)ifapi.h:$(GLSRC)memory_.h
+$(PSSRC)ifapi.h:$(GLSRC)gsstype.h
+$(PSSRC)ifapi.h:$(GLSRC)gsmemory.h
$(PSSRC)ifapi.h:$(GLSRC)gpgetenv.h
-$(PSSRC)ifapi.h:$(GLSRC)gslibctx.h
$(PSSRC)ifapi.h:$(GLSRC)gscdefs.h
-$(PSSRC)ifapi.h:$(GLSRC)gs_dll_call.h
+$(PSSRC)ifapi.h:$(GLSRC)gslibctx.h
$(PSSRC)ifapi.h:$(GLSRC)gsalloc.h
-$(PSSRC)ifapi.h:$(GLSRC)stdio_.h
$(PSSRC)ifapi.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifapi.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifapi.h:$(GLSRC)stdio_.h
+$(PSSRC)ifapi.h:$(GLSRC)gsccode.h
$(PSSRC)ifapi.h:$(GLSRC)stdint_.h
$(PSSRC)ifapi.h:$(GLSRC)gssprintf.h
-$(PSSRC)ifapi.h:$(GLSRC)gsccode.h
-$(PSSRC)ifapi.h:$(GLSRC)std.h
$(PSSRC)ifapi.h:$(GLSRC)gstypes.h
+$(PSSRC)ifapi.h:$(GLSRC)std.h
$(PSSRC)ifapi.h:$(GLSRC)stdpre.h
$(PSSRC)ifapi.h:$(GLGEN)arch.h
+$(PSSRC)ifapi.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zht2.h:$(GLSRC)gscspace.h
+$(PSSRC)zht2.h:$(GLSRC)gsgstate.h
$(PSSRC)zht2.h:$(GLSRC)gsiparam.h
-$(PSSRC)zht2.h:$(GLSRC)gxbitmap.h
$(PSSRC)zht2.h:$(GLSRC)gsmatrix.h
$(PSSRC)zht2.h:$(GLSRC)gsrefct.h
-$(PSSRC)zht2.h:$(GLSRC)gsccolor.h
-$(PSSRC)zht2.h:$(GLSRC)scommon.h
$(PSSRC)zht2.h:$(GLSRC)memento.h
+$(PSSRC)zht2.h:$(GLSRC)gxbitmap.h
+$(PSSRC)zht2.h:$(GLSRC)scommon.h
$(PSSRC)zht2.h:$(GLSRC)gsbitmap.h
+$(PSSRC)zht2.h:$(GLSRC)gsccolor.h
$(PSSRC)zht2.h:$(GLSRC)gsstype.h
$(PSSRC)zht2.h:$(GLSRC)gsmemory.h
$(PSSRC)zht2.h:$(GLSRC)gslibctx.h
-$(PSSRC)zht2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zht2.h:$(GLSRC)stdio_.h
-$(PSSRC)zht2.h:$(GLSRC)gsgstate.h
$(PSSRC)zht2.h:$(GLSRC)stdint_.h
$(PSSRC)zht2.h:$(GLSRC)gssprintf.h
-$(PSSRC)zht2.h:$(GLSRC)std.h
$(PSSRC)zht2.h:$(GLSRC)gstypes.h
+$(PSSRC)zht2.h:$(GLSRC)std.h
$(PSSRC)zht2.h:$(GLSRC)stdpre.h
$(PSSRC)zht2.h:$(GLGEN)arch.h
+$(PSSRC)zht2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gen_ordered.h:$(GLSRC)stdpre.h
$(PSSRC)zchar42.h:$(GLSRC)gxfapi.h
$(PSSRC)zchar42.h:$(PSSRC)iref.h
$(PSSRC)zchar42.h:$(GLSRC)gxalloc.h
-$(PSSRC)zchar42.h:$(GLSRC)gstext.h
$(PSSRC)zchar42.h:$(GLSRC)gxobj.h
+$(PSSRC)zchar42.h:$(GLSRC)gstext.h
$(PSSRC)zchar42.h:$(GLSRC)gsnamecl.h
$(PSSRC)zchar42.h:$(GLSRC)gxcspace.h
-$(PSSRC)zchar42.h:$(GLSRC)gsdcolor.h
+$(PSSRC)zchar42.h:$(GLSRC)gscsel.h
$(PSSRC)zchar42.h:$(GLSRC)gsfont.h
+$(PSSRC)zchar42.h:$(GLSRC)gsdcolor.h
+$(PSSRC)zchar42.h:$(GLSRC)gxpath.h
$(PSSRC)zchar42.h:$(GLSRC)gxfrac.h
$(PSSRC)zchar42.h:$(GLSRC)gscms.h
-$(PSSRC)zchar42.h:$(GLSRC)gscspace.h
-$(PSSRC)zchar42.h:$(GLSRC)gxpath.h
-$(PSSRC)zchar42.h:$(GLSRC)gsdevice.h
-$(PSSRC)zchar42.h:$(GLSRC)gxarith.h
-$(PSSRC)zchar42.h:$(GLSRC)gspenum.h
-$(PSSRC)zchar42.h:$(GLSRC)gxhttile.h
$(PSSRC)zchar42.h:$(GLSRC)gsrect.h
$(PSSRC)zchar42.h:$(GLSRC)gslparam.h
-$(PSSRC)zchar42.h:$(GLSRC)gsiparam.h
-$(PSSRC)zchar42.h:$(GLSRC)gxbitmap.h
-$(PSSRC)zchar42.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zchar42.h:$(GLSRC)gsdevice.h
$(PSSRC)zchar42.h:$(GLSRC)gscpm.h
+$(PSSRC)zchar42.h:$(GLSRC)gscspace.h
+$(PSSRC)zchar42.h:$(GLSRC)gsgstate.h
+$(PSSRC)zchar42.h:$(GLSRC)gsiparam.h
$(PSSRC)zchar42.h:$(GLSRC)gxfixed.h
-$(PSSRC)zchar42.h:$(GLSRC)gsrefct.h
+$(PSSRC)zchar42.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zchar42.h:$(GLSRC)gspenum.h
+$(PSSRC)zchar42.h:$(GLSRC)gxhttile.h
$(PSSRC)zchar42.h:$(GLSRC)gsparam.h
-$(PSSRC)zchar42.h:$(GLSRC)gsccolor.h
+$(PSSRC)zchar42.h:$(GLSRC)gsrefct.h
+$(PSSRC)zchar42.h:$(GLSRC)memento.h
$(PSSRC)zchar42.h:$(GLSRC)gsstruct.h
$(PSSRC)zchar42.h:$(GLSRC)gxsync.h
+$(PSSRC)zchar42.h:$(GLSRC)gxbitmap.h
$(PSSRC)zchar42.h:$(GLSRC)scommon.h
-$(PSSRC)zchar42.h:$(GLSRC)memento.h
-$(PSSRC)zchar42.h:$(GLSRC)gscsel.h
$(PSSRC)zchar42.h:$(GLSRC)gsbitmap.h
+$(PSSRC)zchar42.h:$(GLSRC)gsccolor.h
+$(PSSRC)zchar42.h:$(GLSRC)gxarith.h
+$(PSSRC)zchar42.h:$(GLSRC)gpsync.h
$(PSSRC)zchar42.h:$(GLSRC)gsstype.h
$(PSSRC)zchar42.h:$(GLSRC)gsmemory.h
-$(PSSRC)zchar42.h:$(GLSRC)gpsync.h
$(PSSRC)zchar42.h:$(GLSRC)gslibctx.h
-$(PSSRC)zchar42.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zchar42.h:$(GLSRC)gsalloc.h
-$(PSSRC)zchar42.h:$(GLSRC)stdio_.h
$(PSSRC)zchar42.h:$(GLSRC)gxcindex.h
-$(PSSRC)zchar42.h:$(GLSRC)gsgstate.h
+$(PSSRC)zchar42.h:$(GLSRC)stdio_.h
+$(PSSRC)zchar42.h:$(GLSRC)gsccode.h
$(PSSRC)zchar42.h:$(GLSRC)stdint_.h
$(PSSRC)zchar42.h:$(GLSRC)gssprintf.h
-$(PSSRC)zchar42.h:$(GLSRC)gsccode.h
-$(PSSRC)zchar42.h:$(GLSRC)std.h
$(PSSRC)zchar42.h:$(GLSRC)gstypes.h
+$(PSSRC)zchar42.h:$(GLSRC)std.h
$(PSSRC)zchar42.h:$(GLSRC)stdpre.h
$(PSSRC)zchar42.h:$(GLGEN)arch.h
+$(PSSRC)zchar42.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zfunc.h:$(PSSRC)iref.h
$(PSSRC)zfunc.h:$(GLSRC)gxalloc.h
$(PSSRC)zfunc.h:$(GLSRC)gxobj.h
$(PSSRC)zfunc.h:$(GLSRC)gsnamecl.h
-$(PSSRC)zfunc.h:$(GLSRC)gxcspace.h
$(PSSRC)zfunc.h:$(GLSRC)gsfunc.h
+$(PSSRC)zfunc.h:$(GLSRC)gxcspace.h
+$(PSSRC)zfunc.h:$(GLSRC)gscsel.h
$(PSSRC)zfunc.h:$(GLSRC)gsdcolor.h
$(PSSRC)zfunc.h:$(GLSRC)gxfrac.h
$(PSSRC)zfunc.h:$(GLSRC)gscms.h
-$(PSSRC)zfunc.h:$(GLSRC)gscspace.h
$(PSSRC)zfunc.h:$(GLSRC)gsdevice.h
-$(PSSRC)zfunc.h:$(GLSRC)gxarith.h
-$(PSSRC)zfunc.h:$(GLSRC)gxhttile.h
-$(PSSRC)zfunc.h:$(GLSRC)gsiparam.h
+$(PSSRC)zfunc.h:$(GLSRC)gscspace.h
+$(PSSRC)zfunc.h:$(GLSRC)gsgstate.h
$(PSSRC)zfunc.h:$(GLSRC)gsdsrc.h
-$(PSSRC)zfunc.h:$(GLSRC)gxbitmap.h
+$(PSSRC)zfunc.h:$(GLSRC)gsiparam.h
$(PSSRC)zfunc.h:$(GLSRC)gsmatrix.h
-$(PSSRC)zfunc.h:$(GLSRC)gsrefct.h
+$(PSSRC)zfunc.h:$(GLSRC)gxhttile.h
$(PSSRC)zfunc.h:$(GLSRC)gsparam.h
-$(PSSRC)zfunc.h:$(GLSRC)gsccolor.h
+$(PSSRC)zfunc.h:$(GLSRC)gsrefct.h
+$(PSSRC)zfunc.h:$(GLSRC)memento.h
$(PSSRC)zfunc.h:$(GLSRC)gsstruct.h
$(PSSRC)zfunc.h:$(GLSRC)gxsync.h
+$(PSSRC)zfunc.h:$(GLSRC)gxbitmap.h
$(PSSRC)zfunc.h:$(GLSRC)scommon.h
-$(PSSRC)zfunc.h:$(GLSRC)memento.h
-$(PSSRC)zfunc.h:$(GLSRC)gscsel.h
$(PSSRC)zfunc.h:$(GLSRC)gsbitmap.h
+$(PSSRC)zfunc.h:$(GLSRC)gsccolor.h
+$(PSSRC)zfunc.h:$(GLSRC)gxarith.h
+$(PSSRC)zfunc.h:$(GLSRC)gpsync.h
$(PSSRC)zfunc.h:$(GLSRC)gsstype.h
$(PSSRC)zfunc.h:$(GLSRC)gsmemory.h
-$(PSSRC)zfunc.h:$(GLSRC)gpsync.h
$(PSSRC)zfunc.h:$(GLSRC)gslibctx.h
-$(PSSRC)zfunc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zfunc.h:$(GLSRC)gsalloc.h
-$(PSSRC)zfunc.h:$(GLSRC)stdio_.h
$(PSSRC)zfunc.h:$(GLSRC)gxcindex.h
-$(PSSRC)zfunc.h:$(GLSRC)gsgstate.h
+$(PSSRC)zfunc.h:$(GLSRC)stdio_.h
$(PSSRC)zfunc.h:$(GLSRC)stdint_.h
$(PSSRC)zfunc.h:$(GLSRC)gssprintf.h
-$(PSSRC)zfunc.h:$(GLSRC)std.h
$(PSSRC)zfunc.h:$(GLSRC)gstypes.h
+$(PSSRC)zfunc.h:$(GLSRC)std.h
$(PSSRC)zfunc.h:$(GLSRC)stdpre.h
$(PSSRC)zfunc.h:$(GLGEN)arch.h
+$(PSSRC)zfunc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idparam.h:$(PSSRC)iref.h
$(PSSRC)idparam.h:$(GLSRC)gxalloc.h
$(PSSRC)idparam.h:$(GLSRC)gxobj.h
$(PSSRC)idparam.h:$(GLSRC)gsnamecl.h
$(PSSRC)idparam.h:$(GLSRC)gxcspace.h
-$(PSSRC)idparam.h:$(GLSRC)gsuid.h
+$(PSSRC)idparam.h:$(GLSRC)gscsel.h
$(PSSRC)idparam.h:$(GLSRC)gsdcolor.h
$(PSSRC)idparam.h:$(GLSRC)gxfrac.h
$(PSSRC)idparam.h:$(GLSRC)gscms.h
-$(PSSRC)idparam.h:$(GLSRC)gscspace.h
$(PSSRC)idparam.h:$(GLSRC)gsdevice.h
-$(PSSRC)idparam.h:$(GLSRC)gxarith.h
-$(PSSRC)idparam.h:$(GLSRC)gxhttile.h
+$(PSSRC)idparam.h:$(GLSRC)gscspace.h
+$(PSSRC)idparam.h:$(GLSRC)gsgstate.h
$(PSSRC)idparam.h:$(GLSRC)gsiparam.h
-$(PSSRC)idparam.h:$(GLSRC)gxbitmap.h
$(PSSRC)idparam.h:$(GLSRC)gsmatrix.h
-$(PSSRC)idparam.h:$(GLSRC)gsrefct.h
+$(PSSRC)idparam.h:$(GLSRC)gxhttile.h
$(PSSRC)idparam.h:$(GLSRC)gsparam.h
-$(PSSRC)idparam.h:$(GLSRC)gsccolor.h
+$(PSSRC)idparam.h:$(GLSRC)gsrefct.h
+$(PSSRC)idparam.h:$(GLSRC)memento.h
+$(PSSRC)idparam.h:$(GLSRC)gsuid.h
$(PSSRC)idparam.h:$(GLSRC)gsstruct.h
$(PSSRC)idparam.h:$(GLSRC)gxsync.h
+$(PSSRC)idparam.h:$(GLSRC)gxbitmap.h
$(PSSRC)idparam.h:$(GLSRC)scommon.h
-$(PSSRC)idparam.h:$(GLSRC)memento.h
-$(PSSRC)idparam.h:$(GLSRC)gscsel.h
$(PSSRC)idparam.h:$(GLSRC)gsbitmap.h
+$(PSSRC)idparam.h:$(GLSRC)gsccolor.h
+$(PSSRC)idparam.h:$(GLSRC)gxarith.h
+$(PSSRC)idparam.h:$(GLSRC)gpsync.h
$(PSSRC)idparam.h:$(GLSRC)gsstype.h
$(PSSRC)idparam.h:$(GLSRC)gsmemory.h
-$(PSSRC)idparam.h:$(GLSRC)gpsync.h
$(PSSRC)idparam.h:$(GLSRC)gslibctx.h
-$(PSSRC)idparam.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idparam.h:$(GLSRC)gsalloc.h
-$(PSSRC)idparam.h:$(GLSRC)stdio_.h
$(PSSRC)idparam.h:$(GLSRC)gxcindex.h
-$(PSSRC)idparam.h:$(GLSRC)gsgstate.h
+$(PSSRC)idparam.h:$(GLSRC)stdio_.h
$(PSSRC)idparam.h:$(GLSRC)stdint_.h
$(PSSRC)idparam.h:$(GLSRC)gssprintf.h
-$(PSSRC)idparam.h:$(GLSRC)std.h
$(PSSRC)idparam.h:$(GLSRC)gstypes.h
+$(PSSRC)idparam.h:$(GLSRC)std.h
$(PSSRC)idparam.h:$(GLSRC)stdpre.h
$(PSSRC)idparam.h:$(GLGEN)arch.h
+$(PSSRC)idparam.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ilevel.h:$(PSSRC)imemory.h
$(PSSRC)ilevel.h:$(PSSRC)ivmspace.h
$(PSSRC)ilevel.h:$(PSSRC)iref.h
@@ -3096,40 +3096,40 @@ $(PSSRC)ilevel.h:$(GLSRC)gxalloc.h
$(PSSRC)ilevel.h:$(GLSRC)gxobj.h
$(PSSRC)ilevel.h:$(GLSRC)gsnamecl.h
$(PSSRC)ilevel.h:$(GLSRC)gxcspace.h
+$(PSSRC)ilevel.h:$(GLSRC)gscsel.h
$(PSSRC)ilevel.h:$(GLSRC)gsdcolor.h
$(PSSRC)ilevel.h:$(GLSRC)gxfrac.h
$(PSSRC)ilevel.h:$(GLSRC)gscms.h
-$(PSSRC)ilevel.h:$(GLSRC)gscspace.h
$(PSSRC)ilevel.h:$(GLSRC)gsdevice.h
-$(PSSRC)ilevel.h:$(GLSRC)gxarith.h
-$(PSSRC)ilevel.h:$(GLSRC)gxhttile.h
+$(PSSRC)ilevel.h:$(GLSRC)gscspace.h
+$(PSSRC)ilevel.h:$(GLSRC)gsgstate.h
$(PSSRC)ilevel.h:$(GLSRC)gsiparam.h
-$(PSSRC)ilevel.h:$(GLSRC)gxbitmap.h
$(PSSRC)ilevel.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ilevel.h:$(GLSRC)gsrefct.h
+$(PSSRC)ilevel.h:$(GLSRC)gxhttile.h
$(PSSRC)ilevel.h:$(GLSRC)gsparam.h
-$(PSSRC)ilevel.h:$(GLSRC)gsccolor.h
+$(PSSRC)ilevel.h:$(GLSRC)gsrefct.h
+$(PSSRC)ilevel.h:$(GLSRC)memento.h
$(PSSRC)ilevel.h:$(GLSRC)gsstruct.h
$(PSSRC)ilevel.h:$(GLSRC)gxsync.h
+$(PSSRC)ilevel.h:$(GLSRC)gxbitmap.h
$(PSSRC)ilevel.h:$(GLSRC)scommon.h
-$(PSSRC)ilevel.h:$(GLSRC)memento.h
-$(PSSRC)ilevel.h:$(GLSRC)gscsel.h
$(PSSRC)ilevel.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ilevel.h:$(GLSRC)gsccolor.h
+$(PSSRC)ilevel.h:$(GLSRC)gxarith.h
+$(PSSRC)ilevel.h:$(GLSRC)gpsync.h
$(PSSRC)ilevel.h:$(GLSRC)gsstype.h
$(PSSRC)ilevel.h:$(GLSRC)gsmemory.h
-$(PSSRC)ilevel.h:$(GLSRC)gpsync.h
$(PSSRC)ilevel.h:$(GLSRC)gslibctx.h
-$(PSSRC)ilevel.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ilevel.h:$(GLSRC)gsalloc.h
-$(PSSRC)ilevel.h:$(GLSRC)stdio_.h
$(PSSRC)ilevel.h:$(GLSRC)gxcindex.h
-$(PSSRC)ilevel.h:$(GLSRC)gsgstate.h
+$(PSSRC)ilevel.h:$(GLSRC)stdio_.h
$(PSSRC)ilevel.h:$(GLSRC)stdint_.h
$(PSSRC)ilevel.h:$(GLSRC)gssprintf.h
-$(PSSRC)ilevel.h:$(GLSRC)std.h
$(PSSRC)ilevel.h:$(GLSRC)gstypes.h
+$(PSSRC)ilevel.h:$(GLSRC)std.h
$(PSSRC)ilevel.h:$(GLSRC)stdpre.h
$(PSSRC)ilevel.h:$(GLGEN)arch.h
+$(PSSRC)ilevel.h:$(GLSRC)gs_dll_call.h
$(PSSRC)interp.h:$(PSSRC)imemory.h
$(PSSRC)interp.h:$(PSSRC)ivmspace.h
$(PSSRC)interp.h:$(PSSRC)iref.h
@@ -3138,40 +3138,40 @@ $(PSSRC)interp.h:$(GLSRC)gxalloc.h
$(PSSRC)interp.h:$(GLSRC)gxobj.h
$(PSSRC)interp.h:$(GLSRC)gsnamecl.h
$(PSSRC)interp.h:$(GLSRC)gxcspace.h
+$(PSSRC)interp.h:$(GLSRC)gscsel.h
$(PSSRC)interp.h:$(GLSRC)gsdcolor.h
$(PSSRC)interp.h:$(GLSRC)gxfrac.h
$(PSSRC)interp.h:$(GLSRC)gscms.h
-$(PSSRC)interp.h:$(GLSRC)gscspace.h
$(PSSRC)interp.h:$(GLSRC)gsdevice.h
-$(PSSRC)interp.h:$(GLSRC)gxarith.h
-$(PSSRC)interp.h:$(GLSRC)gxhttile.h
+$(PSSRC)interp.h:$(GLSRC)gscspace.h
+$(PSSRC)interp.h:$(GLSRC)gsgstate.h
$(PSSRC)interp.h:$(GLSRC)gsiparam.h
-$(PSSRC)interp.h:$(GLSRC)gxbitmap.h
$(PSSRC)interp.h:$(GLSRC)gsmatrix.h
-$(PSSRC)interp.h:$(GLSRC)gsrefct.h
+$(PSSRC)interp.h:$(GLSRC)gxhttile.h
$(PSSRC)interp.h:$(GLSRC)gsparam.h
-$(PSSRC)interp.h:$(GLSRC)gsccolor.h
+$(PSSRC)interp.h:$(GLSRC)gsrefct.h
+$(PSSRC)interp.h:$(GLSRC)memento.h
$(PSSRC)interp.h:$(GLSRC)gsstruct.h
$(PSSRC)interp.h:$(GLSRC)gxsync.h
+$(PSSRC)interp.h:$(GLSRC)gxbitmap.h
$(PSSRC)interp.h:$(GLSRC)scommon.h
-$(PSSRC)interp.h:$(GLSRC)memento.h
-$(PSSRC)interp.h:$(GLSRC)gscsel.h
$(PSSRC)interp.h:$(GLSRC)gsbitmap.h
+$(PSSRC)interp.h:$(GLSRC)gsccolor.h
+$(PSSRC)interp.h:$(GLSRC)gxarith.h
+$(PSSRC)interp.h:$(GLSRC)gpsync.h
$(PSSRC)interp.h:$(GLSRC)gsstype.h
$(PSSRC)interp.h:$(GLSRC)gsmemory.h
-$(PSSRC)interp.h:$(GLSRC)gpsync.h
$(PSSRC)interp.h:$(GLSRC)gslibctx.h
-$(PSSRC)interp.h:$(GLSRC)gs_dll_call.h
$(PSSRC)interp.h:$(GLSRC)gsalloc.h
-$(PSSRC)interp.h:$(GLSRC)stdio_.h
$(PSSRC)interp.h:$(GLSRC)gxcindex.h
-$(PSSRC)interp.h:$(GLSRC)gsgstate.h
+$(PSSRC)interp.h:$(GLSRC)stdio_.h
$(PSSRC)interp.h:$(GLSRC)stdint_.h
$(PSSRC)interp.h:$(GLSRC)gssprintf.h
-$(PSSRC)interp.h:$(GLSRC)std.h
$(PSSRC)interp.h:$(GLSRC)gstypes.h
+$(PSSRC)interp.h:$(GLSRC)std.h
$(PSSRC)interp.h:$(GLSRC)stdpre.h
$(PSSRC)interp.h:$(GLGEN)arch.h
+$(PSSRC)interp.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iparam.h:$(PSSRC)isdata.h
$(PSSRC)iparam.h:$(PSSRC)imemory.h
$(PSSRC)iparam.h:$(PSSRC)ivmspace.h
@@ -3181,40 +3181,40 @@ $(PSSRC)iparam.h:$(GLSRC)gxalloc.h
$(PSSRC)iparam.h:$(GLSRC)gxobj.h
$(PSSRC)iparam.h:$(GLSRC)gsnamecl.h
$(PSSRC)iparam.h:$(GLSRC)gxcspace.h
+$(PSSRC)iparam.h:$(GLSRC)gscsel.h
$(PSSRC)iparam.h:$(GLSRC)gsdcolor.h
$(PSSRC)iparam.h:$(GLSRC)gxfrac.h
$(PSSRC)iparam.h:$(GLSRC)gscms.h
-$(PSSRC)iparam.h:$(GLSRC)gscspace.h
$(PSSRC)iparam.h:$(GLSRC)gsdevice.h
-$(PSSRC)iparam.h:$(GLSRC)gxarith.h
-$(PSSRC)iparam.h:$(GLSRC)gxhttile.h
+$(PSSRC)iparam.h:$(GLSRC)gscspace.h
+$(PSSRC)iparam.h:$(GLSRC)gsgstate.h
$(PSSRC)iparam.h:$(GLSRC)gsiparam.h
-$(PSSRC)iparam.h:$(GLSRC)gxbitmap.h
$(PSSRC)iparam.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iparam.h:$(GLSRC)gsrefct.h
+$(PSSRC)iparam.h:$(GLSRC)gxhttile.h
$(PSSRC)iparam.h:$(GLSRC)gsparam.h
-$(PSSRC)iparam.h:$(GLSRC)gsccolor.h
+$(PSSRC)iparam.h:$(GLSRC)gsrefct.h
+$(PSSRC)iparam.h:$(GLSRC)memento.h
$(PSSRC)iparam.h:$(GLSRC)gsstruct.h
$(PSSRC)iparam.h:$(GLSRC)gxsync.h
+$(PSSRC)iparam.h:$(GLSRC)gxbitmap.h
$(PSSRC)iparam.h:$(GLSRC)scommon.h
-$(PSSRC)iparam.h:$(GLSRC)memento.h
-$(PSSRC)iparam.h:$(GLSRC)gscsel.h
$(PSSRC)iparam.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iparam.h:$(GLSRC)gsccolor.h
+$(PSSRC)iparam.h:$(GLSRC)gxarith.h
+$(PSSRC)iparam.h:$(GLSRC)gpsync.h
$(PSSRC)iparam.h:$(GLSRC)gsstype.h
$(PSSRC)iparam.h:$(GLSRC)gsmemory.h
-$(PSSRC)iparam.h:$(GLSRC)gpsync.h
$(PSSRC)iparam.h:$(GLSRC)gslibctx.h
-$(PSSRC)iparam.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iparam.h:$(GLSRC)gsalloc.h
-$(PSSRC)iparam.h:$(GLSRC)stdio_.h
$(PSSRC)iparam.h:$(GLSRC)gxcindex.h
-$(PSSRC)iparam.h:$(GLSRC)gsgstate.h
+$(PSSRC)iparam.h:$(GLSRC)stdio_.h
$(PSSRC)iparam.h:$(GLSRC)stdint_.h
$(PSSRC)iparam.h:$(GLSRC)gssprintf.h
-$(PSSRC)iparam.h:$(GLSRC)std.h
$(PSSRC)iparam.h:$(GLSRC)gstypes.h
+$(PSSRC)iparam.h:$(GLSRC)std.h
$(PSSRC)iparam.h:$(GLSRC)stdpre.h
$(PSSRC)iparam.h:$(GLGEN)arch.h
+$(PSSRC)iparam.h:$(GLSRC)gs_dll_call.h
$(PSSRC)isdata.h:$(PSSRC)imemory.h
$(PSSRC)isdata.h:$(PSSRC)ivmspace.h
$(PSSRC)isdata.h:$(PSSRC)iref.h
@@ -3223,40 +3223,40 @@ $(PSSRC)isdata.h:$(GLSRC)gxalloc.h
$(PSSRC)isdata.h:$(GLSRC)gxobj.h
$(PSSRC)isdata.h:$(GLSRC)gsnamecl.h
$(PSSRC)isdata.h:$(GLSRC)gxcspace.h
+$(PSSRC)isdata.h:$(GLSRC)gscsel.h
$(PSSRC)isdata.h:$(GLSRC)gsdcolor.h
$(PSSRC)isdata.h:$(GLSRC)gxfrac.h
$(PSSRC)isdata.h:$(GLSRC)gscms.h
-$(PSSRC)isdata.h:$(GLSRC)gscspace.h
$(PSSRC)isdata.h:$(GLSRC)gsdevice.h
-$(PSSRC)isdata.h:$(GLSRC)gxarith.h
-$(PSSRC)isdata.h:$(GLSRC)gxhttile.h
+$(PSSRC)isdata.h:$(GLSRC)gscspace.h
+$(PSSRC)isdata.h:$(GLSRC)gsgstate.h
$(PSSRC)isdata.h:$(GLSRC)gsiparam.h
-$(PSSRC)isdata.h:$(GLSRC)gxbitmap.h
$(PSSRC)isdata.h:$(GLSRC)gsmatrix.h
-$(PSSRC)isdata.h:$(GLSRC)gsrefct.h
+$(PSSRC)isdata.h:$(GLSRC)gxhttile.h
$(PSSRC)isdata.h:$(GLSRC)gsparam.h
-$(PSSRC)isdata.h:$(GLSRC)gsccolor.h
+$(PSSRC)isdata.h:$(GLSRC)gsrefct.h
+$(PSSRC)isdata.h:$(GLSRC)memento.h
$(PSSRC)isdata.h:$(GLSRC)gsstruct.h
$(PSSRC)isdata.h:$(GLSRC)gxsync.h
+$(PSSRC)isdata.h:$(GLSRC)gxbitmap.h
$(PSSRC)isdata.h:$(GLSRC)scommon.h
-$(PSSRC)isdata.h:$(GLSRC)memento.h
-$(PSSRC)isdata.h:$(GLSRC)gscsel.h
$(PSSRC)isdata.h:$(GLSRC)gsbitmap.h
+$(PSSRC)isdata.h:$(GLSRC)gsccolor.h
+$(PSSRC)isdata.h:$(GLSRC)gxarith.h
+$(PSSRC)isdata.h:$(GLSRC)gpsync.h
$(PSSRC)isdata.h:$(GLSRC)gsstype.h
$(PSSRC)isdata.h:$(GLSRC)gsmemory.h
-$(PSSRC)isdata.h:$(GLSRC)gpsync.h
$(PSSRC)isdata.h:$(GLSRC)gslibctx.h
-$(PSSRC)isdata.h:$(GLSRC)gs_dll_call.h
$(PSSRC)isdata.h:$(GLSRC)gsalloc.h
-$(PSSRC)isdata.h:$(GLSRC)stdio_.h
$(PSSRC)isdata.h:$(GLSRC)gxcindex.h
-$(PSSRC)isdata.h:$(GLSRC)gsgstate.h
+$(PSSRC)isdata.h:$(GLSRC)stdio_.h
$(PSSRC)isdata.h:$(GLSRC)stdint_.h
$(PSSRC)isdata.h:$(GLSRC)gssprintf.h
-$(PSSRC)isdata.h:$(GLSRC)std.h
$(PSSRC)isdata.h:$(GLSRC)gstypes.h
+$(PSSRC)isdata.h:$(GLSRC)std.h
$(PSSRC)isdata.h:$(GLSRC)stdpre.h
$(PSSRC)isdata.h:$(GLGEN)arch.h
+$(PSSRC)isdata.h:$(GLSRC)gs_dll_call.h
$(PSSRC)istack.h:$(PSSRC)isdata.h
$(PSSRC)istack.h:$(PSSRC)imemory.h
$(PSSRC)istack.h:$(PSSRC)ivmspace.h
@@ -3266,237 +3266,237 @@ $(PSSRC)istack.h:$(GLSRC)gxalloc.h
$(PSSRC)istack.h:$(GLSRC)gxobj.h
$(PSSRC)istack.h:$(GLSRC)gsnamecl.h
$(PSSRC)istack.h:$(GLSRC)gxcspace.h
+$(PSSRC)istack.h:$(GLSRC)gscsel.h
$(PSSRC)istack.h:$(GLSRC)gsdcolor.h
$(PSSRC)istack.h:$(GLSRC)gxfrac.h
$(PSSRC)istack.h:$(GLSRC)gscms.h
-$(PSSRC)istack.h:$(GLSRC)gscspace.h
$(PSSRC)istack.h:$(GLSRC)gsdevice.h
-$(PSSRC)istack.h:$(GLSRC)gxarith.h
-$(PSSRC)istack.h:$(GLSRC)gxhttile.h
+$(PSSRC)istack.h:$(GLSRC)gscspace.h
+$(PSSRC)istack.h:$(GLSRC)gsgstate.h
$(PSSRC)istack.h:$(GLSRC)gsiparam.h
-$(PSSRC)istack.h:$(GLSRC)gxbitmap.h
$(PSSRC)istack.h:$(GLSRC)gsmatrix.h
-$(PSSRC)istack.h:$(GLSRC)gsrefct.h
+$(PSSRC)istack.h:$(GLSRC)gxhttile.h
$(PSSRC)istack.h:$(GLSRC)gsparam.h
-$(PSSRC)istack.h:$(GLSRC)gsccolor.h
+$(PSSRC)istack.h:$(GLSRC)gsrefct.h
+$(PSSRC)istack.h:$(GLSRC)memento.h
$(PSSRC)istack.h:$(GLSRC)gsstruct.h
$(PSSRC)istack.h:$(GLSRC)gxsync.h
+$(PSSRC)istack.h:$(GLSRC)gxbitmap.h
$(PSSRC)istack.h:$(GLSRC)scommon.h
-$(PSSRC)istack.h:$(GLSRC)memento.h
-$(PSSRC)istack.h:$(GLSRC)gscsel.h
$(PSSRC)istack.h:$(GLSRC)gsbitmap.h
+$(PSSRC)istack.h:$(GLSRC)gsccolor.h
+$(PSSRC)istack.h:$(GLSRC)gxarith.h
+$(PSSRC)istack.h:$(GLSRC)gpsync.h
$(PSSRC)istack.h:$(GLSRC)gsstype.h
$(PSSRC)istack.h:$(GLSRC)gsmemory.h
-$(PSSRC)istack.h:$(GLSRC)gpsync.h
$(PSSRC)istack.h:$(GLSRC)gslibctx.h
-$(PSSRC)istack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)istack.h:$(GLSRC)gsalloc.h
-$(PSSRC)istack.h:$(GLSRC)stdio_.h
$(PSSRC)istack.h:$(GLSRC)gxcindex.h
-$(PSSRC)istack.h:$(GLSRC)gsgstate.h
+$(PSSRC)istack.h:$(GLSRC)stdio_.h
$(PSSRC)istack.h:$(GLSRC)stdint_.h
$(PSSRC)istack.h:$(GLSRC)gssprintf.h
-$(PSSRC)istack.h:$(GLSRC)std.h
$(PSSRC)istack.h:$(GLSRC)gstypes.h
+$(PSSRC)istack.h:$(GLSRC)std.h
$(PSSRC)istack.h:$(GLSRC)stdpre.h
$(PSSRC)istack.h:$(GLGEN)arch.h
+$(PSSRC)istack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)istkparm.h:$(PSSRC)iref.h
$(PSSRC)istkparm.h:$(GLSRC)gxalloc.h
$(PSSRC)istkparm.h:$(GLSRC)gxobj.h
$(PSSRC)istkparm.h:$(GLSRC)gsnamecl.h
$(PSSRC)istkparm.h:$(GLSRC)gxcspace.h
+$(PSSRC)istkparm.h:$(GLSRC)gscsel.h
$(PSSRC)istkparm.h:$(GLSRC)gsdcolor.h
$(PSSRC)istkparm.h:$(GLSRC)gxfrac.h
$(PSSRC)istkparm.h:$(GLSRC)gscms.h
-$(PSSRC)istkparm.h:$(GLSRC)gscspace.h
$(PSSRC)istkparm.h:$(GLSRC)gsdevice.h
-$(PSSRC)istkparm.h:$(GLSRC)gxarith.h
-$(PSSRC)istkparm.h:$(GLSRC)gxhttile.h
+$(PSSRC)istkparm.h:$(GLSRC)gscspace.h
+$(PSSRC)istkparm.h:$(GLSRC)gsgstate.h
$(PSSRC)istkparm.h:$(GLSRC)gsiparam.h
-$(PSSRC)istkparm.h:$(GLSRC)gxbitmap.h
$(PSSRC)istkparm.h:$(GLSRC)gsmatrix.h
-$(PSSRC)istkparm.h:$(GLSRC)gsrefct.h
+$(PSSRC)istkparm.h:$(GLSRC)gxhttile.h
$(PSSRC)istkparm.h:$(GLSRC)gsparam.h
-$(PSSRC)istkparm.h:$(GLSRC)gsccolor.h
+$(PSSRC)istkparm.h:$(GLSRC)gsrefct.h
+$(PSSRC)istkparm.h:$(GLSRC)memento.h
$(PSSRC)istkparm.h:$(GLSRC)gsstruct.h
$(PSSRC)istkparm.h:$(GLSRC)gxsync.h
+$(PSSRC)istkparm.h:$(GLSRC)gxbitmap.h
$(PSSRC)istkparm.h:$(GLSRC)scommon.h
-$(PSSRC)istkparm.h:$(GLSRC)memento.h
-$(PSSRC)istkparm.h:$(GLSRC)gscsel.h
$(PSSRC)istkparm.h:$(GLSRC)gsbitmap.h
+$(PSSRC)istkparm.h:$(GLSRC)gsccolor.h
+$(PSSRC)istkparm.h:$(GLSRC)gxarith.h
+$(PSSRC)istkparm.h:$(GLSRC)gpsync.h
$(PSSRC)istkparm.h:$(GLSRC)gsstype.h
$(PSSRC)istkparm.h:$(GLSRC)gsmemory.h
-$(PSSRC)istkparm.h:$(GLSRC)gpsync.h
$(PSSRC)istkparm.h:$(GLSRC)gslibctx.h
-$(PSSRC)istkparm.h:$(GLSRC)gs_dll_call.h
$(PSSRC)istkparm.h:$(GLSRC)gsalloc.h
-$(PSSRC)istkparm.h:$(GLSRC)stdio_.h
$(PSSRC)istkparm.h:$(GLSRC)gxcindex.h
-$(PSSRC)istkparm.h:$(GLSRC)gsgstate.h
+$(PSSRC)istkparm.h:$(GLSRC)stdio_.h
$(PSSRC)istkparm.h:$(GLSRC)stdint_.h
$(PSSRC)istkparm.h:$(GLSRC)gssprintf.h
-$(PSSRC)istkparm.h:$(GLSRC)std.h
$(PSSRC)istkparm.h:$(GLSRC)gstypes.h
+$(PSSRC)istkparm.h:$(GLSRC)std.h
$(PSSRC)istkparm.h:$(GLSRC)stdpre.h
$(PSSRC)istkparm.h:$(GLGEN)arch.h
+$(PSSRC)istkparm.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iutil2.h:$(PSSRC)iref.h
$(PSSRC)iutil2.h:$(GLSRC)gxalloc.h
$(PSSRC)iutil2.h:$(GLSRC)gxobj.h
$(PSSRC)iutil2.h:$(GLSRC)gsnamecl.h
-$(PSSRC)iutil2.h:$(GLSRC)gxcspace.h
$(PSSRC)iutil2.h:$(GLSRC)gsfunc.h
+$(PSSRC)iutil2.h:$(GLSRC)gxcspace.h
+$(PSSRC)iutil2.h:$(GLSRC)gscsel.h
$(PSSRC)iutil2.h:$(GLSRC)gsdcolor.h
$(PSSRC)iutil2.h:$(GLSRC)gxfrac.h
$(PSSRC)iutil2.h:$(GLSRC)gscms.h
-$(PSSRC)iutil2.h:$(GLSRC)gscspace.h
$(PSSRC)iutil2.h:$(GLSRC)gsdevice.h
-$(PSSRC)iutil2.h:$(GLSRC)gxarith.h
-$(PSSRC)iutil2.h:$(GLSRC)gxhttile.h
-$(PSSRC)iutil2.h:$(GLSRC)gsiparam.h
+$(PSSRC)iutil2.h:$(GLSRC)gscspace.h
+$(PSSRC)iutil2.h:$(GLSRC)gsgstate.h
$(PSSRC)iutil2.h:$(GLSRC)gsdsrc.h
-$(PSSRC)iutil2.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iutil2.h:$(GLSRC)gsiparam.h
$(PSSRC)iutil2.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iutil2.h:$(GLSRC)gsrefct.h
+$(PSSRC)iutil2.h:$(GLSRC)gxhttile.h
$(PSSRC)iutil2.h:$(GLSRC)gsparam.h
-$(PSSRC)iutil2.h:$(GLSRC)gsccolor.h
+$(PSSRC)iutil2.h:$(GLSRC)gsrefct.h
+$(PSSRC)iutil2.h:$(GLSRC)memento.h
$(PSSRC)iutil2.h:$(GLSRC)gsstruct.h
$(PSSRC)iutil2.h:$(GLSRC)gxsync.h
+$(PSSRC)iutil2.h:$(GLSRC)gxbitmap.h
$(PSSRC)iutil2.h:$(GLSRC)scommon.h
-$(PSSRC)iutil2.h:$(GLSRC)memento.h
-$(PSSRC)iutil2.h:$(GLSRC)gscsel.h
$(PSSRC)iutil2.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iutil2.h:$(GLSRC)gsccolor.h
+$(PSSRC)iutil2.h:$(GLSRC)gxarith.h
+$(PSSRC)iutil2.h:$(GLSRC)gpsync.h
$(PSSRC)iutil2.h:$(GLSRC)gsstype.h
$(PSSRC)iutil2.h:$(GLSRC)gsmemory.h
-$(PSSRC)iutil2.h:$(GLSRC)gpsync.h
$(PSSRC)iutil2.h:$(GLSRC)gslibctx.h
-$(PSSRC)iutil2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iutil2.h:$(GLSRC)gsalloc.h
-$(PSSRC)iutil2.h:$(GLSRC)stdio_.h
$(PSSRC)iutil2.h:$(GLSRC)gxcindex.h
-$(PSSRC)iutil2.h:$(GLSRC)gsgstate.h
+$(PSSRC)iutil2.h:$(GLSRC)stdio_.h
$(PSSRC)iutil2.h:$(GLSRC)stdint_.h
$(PSSRC)iutil2.h:$(GLSRC)gssprintf.h
-$(PSSRC)iutil2.h:$(GLSRC)std.h
$(PSSRC)iutil2.h:$(GLSRC)gstypes.h
+$(PSSRC)iutil2.h:$(GLSRC)std.h
$(PSSRC)iutil2.h:$(GLSRC)stdpre.h
$(PSSRC)iutil2.h:$(GLGEN)arch.h
+$(PSSRC)iutil2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)oparc.h:$(PSSRC)iref.h
$(PSSRC)oparc.h:$(GLSRC)gxalloc.h
$(PSSRC)oparc.h:$(GLSRC)gxobj.h
$(PSSRC)oparc.h:$(GLSRC)gsnamecl.h
$(PSSRC)oparc.h:$(GLSRC)gxcspace.h
+$(PSSRC)oparc.h:$(GLSRC)gscsel.h
$(PSSRC)oparc.h:$(GLSRC)gsdcolor.h
$(PSSRC)oparc.h:$(GLSRC)gxfrac.h
$(PSSRC)oparc.h:$(GLSRC)gscms.h
-$(PSSRC)oparc.h:$(GLSRC)gscspace.h
$(PSSRC)oparc.h:$(GLSRC)gsdevice.h
-$(PSSRC)oparc.h:$(GLSRC)gxarith.h
-$(PSSRC)oparc.h:$(GLSRC)gxhttile.h
+$(PSSRC)oparc.h:$(GLSRC)gscspace.h
+$(PSSRC)oparc.h:$(GLSRC)gsgstate.h
$(PSSRC)oparc.h:$(GLSRC)gsiparam.h
-$(PSSRC)oparc.h:$(GLSRC)gxbitmap.h
$(PSSRC)oparc.h:$(GLSRC)gsmatrix.h
-$(PSSRC)oparc.h:$(GLSRC)gsrefct.h
+$(PSSRC)oparc.h:$(GLSRC)gxhttile.h
$(PSSRC)oparc.h:$(GLSRC)gsparam.h
-$(PSSRC)oparc.h:$(GLSRC)gsccolor.h
+$(PSSRC)oparc.h:$(GLSRC)gsrefct.h
+$(PSSRC)oparc.h:$(GLSRC)memento.h
$(PSSRC)oparc.h:$(GLSRC)gsstruct.h
$(PSSRC)oparc.h:$(GLSRC)gxsync.h
+$(PSSRC)oparc.h:$(GLSRC)gxbitmap.h
$(PSSRC)oparc.h:$(GLSRC)scommon.h
-$(PSSRC)oparc.h:$(GLSRC)memento.h
-$(PSSRC)oparc.h:$(GLSRC)gscsel.h
$(PSSRC)oparc.h:$(GLSRC)gsbitmap.h
+$(PSSRC)oparc.h:$(GLSRC)gsccolor.h
+$(PSSRC)oparc.h:$(GLSRC)gxarith.h
+$(PSSRC)oparc.h:$(GLSRC)gpsync.h
$(PSSRC)oparc.h:$(GLSRC)gsstype.h
$(PSSRC)oparc.h:$(GLSRC)gsmemory.h
-$(PSSRC)oparc.h:$(GLSRC)gpsync.h
$(PSSRC)oparc.h:$(GLSRC)gslibctx.h
-$(PSSRC)oparc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)oparc.h:$(GLSRC)gsalloc.h
-$(PSSRC)oparc.h:$(GLSRC)stdio_.h
$(PSSRC)oparc.h:$(GLSRC)gxcindex.h
-$(PSSRC)oparc.h:$(GLSRC)gsgstate.h
+$(PSSRC)oparc.h:$(GLSRC)stdio_.h
$(PSSRC)oparc.h:$(GLSRC)stdint_.h
$(PSSRC)oparc.h:$(GLSRC)gssprintf.h
-$(PSSRC)oparc.h:$(GLSRC)std.h
$(PSSRC)oparc.h:$(GLSRC)gstypes.h
+$(PSSRC)oparc.h:$(GLSRC)std.h
$(PSSRC)oparc.h:$(GLSRC)stdpre.h
$(PSSRC)oparc.h:$(GLGEN)arch.h
+$(PSSRC)oparc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)opcheck.h:$(PSSRC)iref.h
$(PSSRC)opcheck.h:$(GLSRC)gxalloc.h
$(PSSRC)opcheck.h:$(GLSRC)gxobj.h
$(PSSRC)opcheck.h:$(GLSRC)gsnamecl.h
$(PSSRC)opcheck.h:$(GLSRC)gxcspace.h
+$(PSSRC)opcheck.h:$(GLSRC)gscsel.h
$(PSSRC)opcheck.h:$(GLSRC)gsdcolor.h
$(PSSRC)opcheck.h:$(GLSRC)gxfrac.h
$(PSSRC)opcheck.h:$(GLSRC)gscms.h
-$(PSSRC)opcheck.h:$(GLSRC)gscspace.h
$(PSSRC)opcheck.h:$(GLSRC)gsdevice.h
-$(PSSRC)opcheck.h:$(GLSRC)gxarith.h
-$(PSSRC)opcheck.h:$(GLSRC)gxhttile.h
+$(PSSRC)opcheck.h:$(GLSRC)gscspace.h
+$(PSSRC)opcheck.h:$(GLSRC)gsgstate.h
$(PSSRC)opcheck.h:$(GLSRC)gsiparam.h
-$(PSSRC)opcheck.h:$(GLSRC)gxbitmap.h
$(PSSRC)opcheck.h:$(GLSRC)gsmatrix.h
-$(PSSRC)opcheck.h:$(GLSRC)gsrefct.h
+$(PSSRC)opcheck.h:$(GLSRC)gxhttile.h
$(PSSRC)opcheck.h:$(GLSRC)gsparam.h
-$(PSSRC)opcheck.h:$(GLSRC)gsccolor.h
+$(PSSRC)opcheck.h:$(GLSRC)gsrefct.h
+$(PSSRC)opcheck.h:$(GLSRC)memento.h
$(PSSRC)opcheck.h:$(GLSRC)gsstruct.h
$(PSSRC)opcheck.h:$(GLSRC)gxsync.h
+$(PSSRC)opcheck.h:$(GLSRC)gxbitmap.h
$(PSSRC)opcheck.h:$(GLSRC)scommon.h
-$(PSSRC)opcheck.h:$(GLSRC)memento.h
-$(PSSRC)opcheck.h:$(GLSRC)gscsel.h
$(PSSRC)opcheck.h:$(GLSRC)gsbitmap.h
+$(PSSRC)opcheck.h:$(GLSRC)gsccolor.h
+$(PSSRC)opcheck.h:$(GLSRC)gxarith.h
+$(PSSRC)opcheck.h:$(GLSRC)gpsync.h
$(PSSRC)opcheck.h:$(GLSRC)gsstype.h
$(PSSRC)opcheck.h:$(GLSRC)gsmemory.h
-$(PSSRC)opcheck.h:$(GLSRC)gpsync.h
$(PSSRC)opcheck.h:$(GLSRC)gslibctx.h
-$(PSSRC)opcheck.h:$(GLSRC)gs_dll_call.h
$(PSSRC)opcheck.h:$(GLSRC)gsalloc.h
-$(PSSRC)opcheck.h:$(GLSRC)stdio_.h
$(PSSRC)opcheck.h:$(GLSRC)gxcindex.h
-$(PSSRC)opcheck.h:$(GLSRC)gsgstate.h
+$(PSSRC)opcheck.h:$(GLSRC)stdio_.h
$(PSSRC)opcheck.h:$(GLSRC)stdint_.h
$(PSSRC)opcheck.h:$(GLSRC)gssprintf.h
-$(PSSRC)opcheck.h:$(GLSRC)std.h
$(PSSRC)opcheck.h:$(GLSRC)gstypes.h
+$(PSSRC)opcheck.h:$(GLSRC)std.h
$(PSSRC)opcheck.h:$(GLSRC)stdpre.h
$(PSSRC)opcheck.h:$(GLGEN)arch.h
+$(PSSRC)opcheck.h:$(GLSRC)gs_dll_call.h
$(PSSRC)opextern.h:$(PSSRC)iref.h
$(PSSRC)opextern.h:$(GLSRC)gxalloc.h
$(PSSRC)opextern.h:$(GLSRC)gxobj.h
$(PSSRC)opextern.h:$(GLSRC)gsnamecl.h
$(PSSRC)opextern.h:$(GLSRC)gxcspace.h
+$(PSSRC)opextern.h:$(GLSRC)gscsel.h
$(PSSRC)opextern.h:$(GLSRC)gsdcolor.h
$(PSSRC)opextern.h:$(GLSRC)gxfrac.h
$(PSSRC)opextern.h:$(GLSRC)gscms.h
-$(PSSRC)opextern.h:$(GLSRC)gscspace.h
$(PSSRC)opextern.h:$(GLSRC)gsdevice.h
-$(PSSRC)opextern.h:$(GLSRC)gxarith.h
-$(PSSRC)opextern.h:$(GLSRC)gxhttile.h
+$(PSSRC)opextern.h:$(GLSRC)gscspace.h
+$(PSSRC)opextern.h:$(GLSRC)gsgstate.h
$(PSSRC)opextern.h:$(GLSRC)gsiparam.h
-$(PSSRC)opextern.h:$(GLSRC)gxbitmap.h
$(PSSRC)opextern.h:$(GLSRC)gsmatrix.h
-$(PSSRC)opextern.h:$(GLSRC)gsrefct.h
+$(PSSRC)opextern.h:$(GLSRC)gxhttile.h
$(PSSRC)opextern.h:$(GLSRC)gsparam.h
-$(PSSRC)opextern.h:$(GLSRC)gsccolor.h
+$(PSSRC)opextern.h:$(GLSRC)gsrefct.h
+$(PSSRC)opextern.h:$(GLSRC)memento.h
$(PSSRC)opextern.h:$(GLSRC)gsstruct.h
$(PSSRC)opextern.h:$(GLSRC)gxsync.h
+$(PSSRC)opextern.h:$(GLSRC)gxbitmap.h
$(PSSRC)opextern.h:$(GLSRC)scommon.h
-$(PSSRC)opextern.h:$(GLSRC)memento.h
-$(PSSRC)opextern.h:$(GLSRC)gscsel.h
$(PSSRC)opextern.h:$(GLSRC)gsbitmap.h
+$(PSSRC)opextern.h:$(GLSRC)gsccolor.h
+$(PSSRC)opextern.h:$(GLSRC)gxarith.h
+$(PSSRC)opextern.h:$(GLSRC)gpsync.h
$(PSSRC)opextern.h:$(GLSRC)gsstype.h
$(PSSRC)opextern.h:$(GLSRC)gsmemory.h
-$(PSSRC)opextern.h:$(GLSRC)gpsync.h
$(PSSRC)opextern.h:$(GLSRC)gslibctx.h
-$(PSSRC)opextern.h:$(GLSRC)gs_dll_call.h
$(PSSRC)opextern.h:$(GLSRC)gsalloc.h
-$(PSSRC)opextern.h:$(GLSRC)stdio_.h
$(PSSRC)opextern.h:$(GLSRC)gxcindex.h
-$(PSSRC)opextern.h:$(GLSRC)gsgstate.h
+$(PSSRC)opextern.h:$(GLSRC)stdio_.h
$(PSSRC)opextern.h:$(GLSRC)stdint_.h
$(PSSRC)opextern.h:$(GLSRC)gssprintf.h
-$(PSSRC)opextern.h:$(GLSRC)std.h
$(PSSRC)opextern.h:$(GLSRC)gstypes.h
+$(PSSRC)opextern.h:$(GLSRC)std.h
$(PSSRC)opextern.h:$(GLSRC)stdpre.h
$(PSSRC)opextern.h:$(GLGEN)arch.h
+$(PSSRC)opextern.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idsdata.h:$(PSSRC)iddstack.h
$(PSSRC)idsdata.h:$(PSSRC)isdata.h
$(PSSRC)idsdata.h:$(PSSRC)imemory.h
@@ -3507,40 +3507,40 @@ $(PSSRC)idsdata.h:$(GLSRC)gxalloc.h
$(PSSRC)idsdata.h:$(GLSRC)gxobj.h
$(PSSRC)idsdata.h:$(GLSRC)gsnamecl.h
$(PSSRC)idsdata.h:$(GLSRC)gxcspace.h
+$(PSSRC)idsdata.h:$(GLSRC)gscsel.h
$(PSSRC)idsdata.h:$(GLSRC)gsdcolor.h
$(PSSRC)idsdata.h:$(GLSRC)gxfrac.h
$(PSSRC)idsdata.h:$(GLSRC)gscms.h
-$(PSSRC)idsdata.h:$(GLSRC)gscspace.h
$(PSSRC)idsdata.h:$(GLSRC)gsdevice.h
-$(PSSRC)idsdata.h:$(GLSRC)gxarith.h
-$(PSSRC)idsdata.h:$(GLSRC)gxhttile.h
+$(PSSRC)idsdata.h:$(GLSRC)gscspace.h
+$(PSSRC)idsdata.h:$(GLSRC)gsgstate.h
$(PSSRC)idsdata.h:$(GLSRC)gsiparam.h
-$(PSSRC)idsdata.h:$(GLSRC)gxbitmap.h
$(PSSRC)idsdata.h:$(GLSRC)gsmatrix.h
-$(PSSRC)idsdata.h:$(GLSRC)gsrefct.h
+$(PSSRC)idsdata.h:$(GLSRC)gxhttile.h
$(PSSRC)idsdata.h:$(GLSRC)gsparam.h
-$(PSSRC)idsdata.h:$(GLSRC)gsccolor.h
+$(PSSRC)idsdata.h:$(GLSRC)gsrefct.h
+$(PSSRC)idsdata.h:$(GLSRC)memento.h
$(PSSRC)idsdata.h:$(GLSRC)gsstruct.h
$(PSSRC)idsdata.h:$(GLSRC)gxsync.h
+$(PSSRC)idsdata.h:$(GLSRC)gxbitmap.h
$(PSSRC)idsdata.h:$(GLSRC)scommon.h
-$(PSSRC)idsdata.h:$(GLSRC)memento.h
-$(PSSRC)idsdata.h:$(GLSRC)gscsel.h
$(PSSRC)idsdata.h:$(GLSRC)gsbitmap.h
+$(PSSRC)idsdata.h:$(GLSRC)gsccolor.h
+$(PSSRC)idsdata.h:$(GLSRC)gxarith.h
+$(PSSRC)idsdata.h:$(GLSRC)gpsync.h
$(PSSRC)idsdata.h:$(GLSRC)gsstype.h
$(PSSRC)idsdata.h:$(GLSRC)gsmemory.h
-$(PSSRC)idsdata.h:$(GLSRC)gpsync.h
$(PSSRC)idsdata.h:$(GLSRC)gslibctx.h
-$(PSSRC)idsdata.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idsdata.h:$(GLSRC)gsalloc.h
-$(PSSRC)idsdata.h:$(GLSRC)stdio_.h
$(PSSRC)idsdata.h:$(GLSRC)gxcindex.h
-$(PSSRC)idsdata.h:$(GLSRC)gsgstate.h
+$(PSSRC)idsdata.h:$(GLSRC)stdio_.h
$(PSSRC)idsdata.h:$(GLSRC)stdint_.h
$(PSSRC)idsdata.h:$(GLSRC)gssprintf.h
-$(PSSRC)idsdata.h:$(GLSRC)std.h
$(PSSRC)idsdata.h:$(GLSRC)gstypes.h
+$(PSSRC)idsdata.h:$(GLSRC)std.h
$(PSSRC)idsdata.h:$(GLSRC)stdpre.h
$(PSSRC)idsdata.h:$(GLGEN)arch.h
+$(PSSRC)idsdata.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idstack.h:$(PSSRC)idsdata.h
$(PSSRC)idstack.h:$(PSSRC)iddstack.h
$(PSSRC)idstack.h:$(PSSRC)istack.h
@@ -3553,40 +3553,40 @@ $(PSSRC)idstack.h:$(GLSRC)gxalloc.h
$(PSSRC)idstack.h:$(GLSRC)gxobj.h
$(PSSRC)idstack.h:$(GLSRC)gsnamecl.h
$(PSSRC)idstack.h:$(GLSRC)gxcspace.h
+$(PSSRC)idstack.h:$(GLSRC)gscsel.h
$(PSSRC)idstack.h:$(GLSRC)gsdcolor.h
$(PSSRC)idstack.h:$(GLSRC)gxfrac.h
$(PSSRC)idstack.h:$(GLSRC)gscms.h
-$(PSSRC)idstack.h:$(GLSRC)gscspace.h
$(PSSRC)idstack.h:$(GLSRC)gsdevice.h
-$(PSSRC)idstack.h:$(GLSRC)gxarith.h
-$(PSSRC)idstack.h:$(GLSRC)gxhttile.h
+$(PSSRC)idstack.h:$(GLSRC)gscspace.h
+$(PSSRC)idstack.h:$(GLSRC)gsgstate.h
$(PSSRC)idstack.h:$(GLSRC)gsiparam.h
-$(PSSRC)idstack.h:$(GLSRC)gxbitmap.h
$(PSSRC)idstack.h:$(GLSRC)gsmatrix.h
-$(PSSRC)idstack.h:$(GLSRC)gsrefct.h
+$(PSSRC)idstack.h:$(GLSRC)gxhttile.h
$(PSSRC)idstack.h:$(GLSRC)gsparam.h
-$(PSSRC)idstack.h:$(GLSRC)gsccolor.h
+$(PSSRC)idstack.h:$(GLSRC)gsrefct.h
+$(PSSRC)idstack.h:$(GLSRC)memento.h
$(PSSRC)idstack.h:$(GLSRC)gsstruct.h
$(PSSRC)idstack.h:$(GLSRC)gxsync.h
+$(PSSRC)idstack.h:$(GLSRC)gxbitmap.h
$(PSSRC)idstack.h:$(GLSRC)scommon.h
-$(PSSRC)idstack.h:$(GLSRC)memento.h
-$(PSSRC)idstack.h:$(GLSRC)gscsel.h
$(PSSRC)idstack.h:$(GLSRC)gsbitmap.h
+$(PSSRC)idstack.h:$(GLSRC)gsccolor.h
+$(PSSRC)idstack.h:$(GLSRC)gxarith.h
+$(PSSRC)idstack.h:$(GLSRC)gpsync.h
$(PSSRC)idstack.h:$(GLSRC)gsstype.h
$(PSSRC)idstack.h:$(GLSRC)gsmemory.h
-$(PSSRC)idstack.h:$(GLSRC)gpsync.h
$(PSSRC)idstack.h:$(GLSRC)gslibctx.h
-$(PSSRC)idstack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idstack.h:$(GLSRC)gsalloc.h
-$(PSSRC)idstack.h:$(GLSRC)stdio_.h
$(PSSRC)idstack.h:$(GLSRC)gxcindex.h
-$(PSSRC)idstack.h:$(GLSRC)gsgstate.h
+$(PSSRC)idstack.h:$(GLSRC)stdio_.h
$(PSSRC)idstack.h:$(GLSRC)stdint_.h
$(PSSRC)idstack.h:$(GLSRC)gssprintf.h
-$(PSSRC)idstack.h:$(GLSRC)std.h
$(PSSRC)idstack.h:$(GLSRC)gstypes.h
+$(PSSRC)idstack.h:$(GLSRC)std.h
$(PSSRC)idstack.h:$(GLSRC)stdpre.h
$(PSSRC)idstack.h:$(GLGEN)arch.h
+$(PSSRC)idstack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iesdata.h:$(PSSRC)isdata.h
$(PSSRC)iesdata.h:$(PSSRC)imemory.h
$(PSSRC)iesdata.h:$(PSSRC)ivmspace.h
@@ -3596,40 +3596,40 @@ $(PSSRC)iesdata.h:$(GLSRC)gxalloc.h
$(PSSRC)iesdata.h:$(GLSRC)gxobj.h
$(PSSRC)iesdata.h:$(GLSRC)gsnamecl.h
$(PSSRC)iesdata.h:$(GLSRC)gxcspace.h
+$(PSSRC)iesdata.h:$(GLSRC)gscsel.h
$(PSSRC)iesdata.h:$(GLSRC)gsdcolor.h
$(PSSRC)iesdata.h:$(GLSRC)gxfrac.h
$(PSSRC)iesdata.h:$(GLSRC)gscms.h
-$(PSSRC)iesdata.h:$(GLSRC)gscspace.h
$(PSSRC)iesdata.h:$(GLSRC)gsdevice.h
-$(PSSRC)iesdata.h:$(GLSRC)gxarith.h
-$(PSSRC)iesdata.h:$(GLSRC)gxhttile.h
+$(PSSRC)iesdata.h:$(GLSRC)gscspace.h
+$(PSSRC)iesdata.h:$(GLSRC)gsgstate.h
$(PSSRC)iesdata.h:$(GLSRC)gsiparam.h
-$(PSSRC)iesdata.h:$(GLSRC)gxbitmap.h
$(PSSRC)iesdata.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iesdata.h:$(GLSRC)gsrefct.h
+$(PSSRC)iesdata.h:$(GLSRC)gxhttile.h
$(PSSRC)iesdata.h:$(GLSRC)gsparam.h
-$(PSSRC)iesdata.h:$(GLSRC)gsccolor.h
+$(PSSRC)iesdata.h:$(GLSRC)gsrefct.h
+$(PSSRC)iesdata.h:$(GLSRC)memento.h
$(PSSRC)iesdata.h:$(GLSRC)gsstruct.h
$(PSSRC)iesdata.h:$(GLSRC)gxsync.h
+$(PSSRC)iesdata.h:$(GLSRC)gxbitmap.h
$(PSSRC)iesdata.h:$(GLSRC)scommon.h
-$(PSSRC)iesdata.h:$(GLSRC)memento.h
-$(PSSRC)iesdata.h:$(GLSRC)gscsel.h
$(PSSRC)iesdata.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iesdata.h:$(GLSRC)gsccolor.h
+$(PSSRC)iesdata.h:$(GLSRC)gxarith.h
+$(PSSRC)iesdata.h:$(GLSRC)gpsync.h
$(PSSRC)iesdata.h:$(GLSRC)gsstype.h
$(PSSRC)iesdata.h:$(GLSRC)gsmemory.h
-$(PSSRC)iesdata.h:$(GLSRC)gpsync.h
$(PSSRC)iesdata.h:$(GLSRC)gslibctx.h
-$(PSSRC)iesdata.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iesdata.h:$(GLSRC)gsalloc.h
-$(PSSRC)iesdata.h:$(GLSRC)stdio_.h
$(PSSRC)iesdata.h:$(GLSRC)gxcindex.h
-$(PSSRC)iesdata.h:$(GLSRC)gsgstate.h
+$(PSSRC)iesdata.h:$(GLSRC)stdio_.h
$(PSSRC)iesdata.h:$(GLSRC)stdint_.h
$(PSSRC)iesdata.h:$(GLSRC)gssprintf.h
-$(PSSRC)iesdata.h:$(GLSRC)std.h
$(PSSRC)iesdata.h:$(GLSRC)gstypes.h
+$(PSSRC)iesdata.h:$(GLSRC)std.h
$(PSSRC)iesdata.h:$(GLSRC)stdpre.h
$(PSSRC)iesdata.h:$(GLGEN)arch.h
+$(PSSRC)iesdata.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iestack.h:$(PSSRC)iesdata.h
$(PSSRC)iestack.h:$(PSSRC)istack.h
$(PSSRC)iestack.h:$(PSSRC)isdata.h
@@ -3641,40 +3641,40 @@ $(PSSRC)iestack.h:$(GLSRC)gxalloc.h
$(PSSRC)iestack.h:$(GLSRC)gxobj.h
$(PSSRC)iestack.h:$(GLSRC)gsnamecl.h
$(PSSRC)iestack.h:$(GLSRC)gxcspace.h
+$(PSSRC)iestack.h:$(GLSRC)gscsel.h
$(PSSRC)iestack.h:$(GLSRC)gsdcolor.h
$(PSSRC)iestack.h:$(GLSRC)gxfrac.h
$(PSSRC)iestack.h:$(GLSRC)gscms.h
-$(PSSRC)iestack.h:$(GLSRC)gscspace.h
$(PSSRC)iestack.h:$(GLSRC)gsdevice.h
-$(PSSRC)iestack.h:$(GLSRC)gxarith.h
-$(PSSRC)iestack.h:$(GLSRC)gxhttile.h
+$(PSSRC)iestack.h:$(GLSRC)gscspace.h
+$(PSSRC)iestack.h:$(GLSRC)gsgstate.h
$(PSSRC)iestack.h:$(GLSRC)gsiparam.h
-$(PSSRC)iestack.h:$(GLSRC)gxbitmap.h
$(PSSRC)iestack.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iestack.h:$(GLSRC)gsrefct.h
+$(PSSRC)iestack.h:$(GLSRC)gxhttile.h
$(PSSRC)iestack.h:$(GLSRC)gsparam.h
-$(PSSRC)iestack.h:$(GLSRC)gsccolor.h
+$(PSSRC)iestack.h:$(GLSRC)gsrefct.h
+$(PSSRC)iestack.h:$(GLSRC)memento.h
$(PSSRC)iestack.h:$(GLSRC)gsstruct.h
$(PSSRC)iestack.h:$(GLSRC)gxsync.h
+$(PSSRC)iestack.h:$(GLSRC)gxbitmap.h
$(PSSRC)iestack.h:$(GLSRC)scommon.h
-$(PSSRC)iestack.h:$(GLSRC)memento.h
-$(PSSRC)iestack.h:$(GLSRC)gscsel.h
$(PSSRC)iestack.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iestack.h:$(GLSRC)gsccolor.h
+$(PSSRC)iestack.h:$(GLSRC)gxarith.h
+$(PSSRC)iestack.h:$(GLSRC)gpsync.h
$(PSSRC)iestack.h:$(GLSRC)gsstype.h
$(PSSRC)iestack.h:$(GLSRC)gsmemory.h
-$(PSSRC)iestack.h:$(GLSRC)gpsync.h
$(PSSRC)iestack.h:$(GLSRC)gslibctx.h
-$(PSSRC)iestack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iestack.h:$(GLSRC)gsalloc.h
-$(PSSRC)iestack.h:$(GLSRC)stdio_.h
$(PSSRC)iestack.h:$(GLSRC)gxcindex.h
-$(PSSRC)iestack.h:$(GLSRC)gsgstate.h
+$(PSSRC)iestack.h:$(GLSRC)stdio_.h
$(PSSRC)iestack.h:$(GLSRC)stdint_.h
$(PSSRC)iestack.h:$(GLSRC)gssprintf.h
-$(PSSRC)iestack.h:$(GLSRC)std.h
$(PSSRC)iestack.h:$(GLSRC)gstypes.h
+$(PSSRC)iestack.h:$(GLSRC)std.h
$(PSSRC)iestack.h:$(GLSRC)stdpre.h
$(PSSRC)iestack.h:$(GLGEN)arch.h
+$(PSSRC)iestack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iosdata.h:$(PSSRC)isdata.h
$(PSSRC)iosdata.h:$(PSSRC)imemory.h
$(PSSRC)iosdata.h:$(PSSRC)ivmspace.h
@@ -3684,40 +3684,40 @@ $(PSSRC)iosdata.h:$(GLSRC)gxalloc.h
$(PSSRC)iosdata.h:$(GLSRC)gxobj.h
$(PSSRC)iosdata.h:$(GLSRC)gsnamecl.h
$(PSSRC)iosdata.h:$(GLSRC)gxcspace.h
+$(PSSRC)iosdata.h:$(GLSRC)gscsel.h
$(PSSRC)iosdata.h:$(GLSRC)gsdcolor.h
$(PSSRC)iosdata.h:$(GLSRC)gxfrac.h
$(PSSRC)iosdata.h:$(GLSRC)gscms.h
-$(PSSRC)iosdata.h:$(GLSRC)gscspace.h
$(PSSRC)iosdata.h:$(GLSRC)gsdevice.h
-$(PSSRC)iosdata.h:$(GLSRC)gxarith.h
-$(PSSRC)iosdata.h:$(GLSRC)gxhttile.h
+$(PSSRC)iosdata.h:$(GLSRC)gscspace.h
+$(PSSRC)iosdata.h:$(GLSRC)gsgstate.h
$(PSSRC)iosdata.h:$(GLSRC)gsiparam.h
-$(PSSRC)iosdata.h:$(GLSRC)gxbitmap.h
$(PSSRC)iosdata.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iosdata.h:$(GLSRC)gsrefct.h
+$(PSSRC)iosdata.h:$(GLSRC)gxhttile.h
$(PSSRC)iosdata.h:$(GLSRC)gsparam.h
-$(PSSRC)iosdata.h:$(GLSRC)gsccolor.h
+$(PSSRC)iosdata.h:$(GLSRC)gsrefct.h
+$(PSSRC)iosdata.h:$(GLSRC)memento.h
$(PSSRC)iosdata.h:$(GLSRC)gsstruct.h
$(PSSRC)iosdata.h:$(GLSRC)gxsync.h
+$(PSSRC)iosdata.h:$(GLSRC)gxbitmap.h
$(PSSRC)iosdata.h:$(GLSRC)scommon.h
-$(PSSRC)iosdata.h:$(GLSRC)memento.h
-$(PSSRC)iosdata.h:$(GLSRC)gscsel.h
$(PSSRC)iosdata.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iosdata.h:$(GLSRC)gsccolor.h
+$(PSSRC)iosdata.h:$(GLSRC)gxarith.h
+$(PSSRC)iosdata.h:$(GLSRC)gpsync.h
$(PSSRC)iosdata.h:$(GLSRC)gsstype.h
$(PSSRC)iosdata.h:$(GLSRC)gsmemory.h
-$(PSSRC)iosdata.h:$(GLSRC)gpsync.h
$(PSSRC)iosdata.h:$(GLSRC)gslibctx.h
-$(PSSRC)iosdata.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iosdata.h:$(GLSRC)gsalloc.h
-$(PSSRC)iosdata.h:$(GLSRC)stdio_.h
$(PSSRC)iosdata.h:$(GLSRC)gxcindex.h
-$(PSSRC)iosdata.h:$(GLSRC)gsgstate.h
+$(PSSRC)iosdata.h:$(GLSRC)stdio_.h
$(PSSRC)iosdata.h:$(GLSRC)stdint_.h
$(PSSRC)iosdata.h:$(GLSRC)gssprintf.h
-$(PSSRC)iosdata.h:$(GLSRC)std.h
$(PSSRC)iosdata.h:$(GLSRC)gstypes.h
+$(PSSRC)iosdata.h:$(GLSRC)std.h
$(PSSRC)iosdata.h:$(GLSRC)stdpre.h
$(PSSRC)iosdata.h:$(GLGEN)arch.h
+$(PSSRC)iosdata.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iostack.h:$(PSSRC)istack.h
$(PSSRC)iostack.h:$(PSSRC)iosdata.h
$(PSSRC)iostack.h:$(PSSRC)isdata.h
@@ -3729,45 +3729,45 @@ $(PSSRC)iostack.h:$(GLSRC)gxalloc.h
$(PSSRC)iostack.h:$(GLSRC)gxobj.h
$(PSSRC)iostack.h:$(GLSRC)gsnamecl.h
$(PSSRC)iostack.h:$(GLSRC)gxcspace.h
+$(PSSRC)iostack.h:$(GLSRC)gscsel.h
$(PSSRC)iostack.h:$(GLSRC)gsdcolor.h
$(PSSRC)iostack.h:$(GLSRC)gxfrac.h
$(PSSRC)iostack.h:$(GLSRC)gscms.h
-$(PSSRC)iostack.h:$(GLSRC)gscspace.h
$(PSSRC)iostack.h:$(GLSRC)gsdevice.h
-$(PSSRC)iostack.h:$(GLSRC)gxarith.h
-$(PSSRC)iostack.h:$(GLSRC)gxhttile.h
+$(PSSRC)iostack.h:$(GLSRC)gscspace.h
+$(PSSRC)iostack.h:$(GLSRC)gsgstate.h
$(PSSRC)iostack.h:$(GLSRC)gsiparam.h
-$(PSSRC)iostack.h:$(GLSRC)gxbitmap.h
$(PSSRC)iostack.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iostack.h:$(GLSRC)gsrefct.h
+$(PSSRC)iostack.h:$(GLSRC)gxhttile.h
$(PSSRC)iostack.h:$(GLSRC)gsparam.h
-$(PSSRC)iostack.h:$(GLSRC)gsccolor.h
+$(PSSRC)iostack.h:$(GLSRC)gsrefct.h
+$(PSSRC)iostack.h:$(GLSRC)memento.h
$(PSSRC)iostack.h:$(GLSRC)gsstruct.h
$(PSSRC)iostack.h:$(GLSRC)gxsync.h
+$(PSSRC)iostack.h:$(GLSRC)gxbitmap.h
$(PSSRC)iostack.h:$(GLSRC)scommon.h
-$(PSSRC)iostack.h:$(GLSRC)memento.h
-$(PSSRC)iostack.h:$(GLSRC)gscsel.h
$(PSSRC)iostack.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iostack.h:$(GLSRC)gsccolor.h
+$(PSSRC)iostack.h:$(GLSRC)gxarith.h
+$(PSSRC)iostack.h:$(GLSRC)gpsync.h
$(PSSRC)iostack.h:$(GLSRC)gsstype.h
$(PSSRC)iostack.h:$(GLSRC)gsmemory.h
-$(PSSRC)iostack.h:$(GLSRC)gpsync.h
$(PSSRC)iostack.h:$(GLSRC)gslibctx.h
-$(PSSRC)iostack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iostack.h:$(GLSRC)gsalloc.h
-$(PSSRC)iostack.h:$(GLSRC)stdio_.h
$(PSSRC)iostack.h:$(GLSRC)gxcindex.h
-$(PSSRC)iostack.h:$(GLSRC)gsgstate.h
+$(PSSRC)iostack.h:$(GLSRC)stdio_.h
$(PSSRC)iostack.h:$(GLSRC)stdint_.h
$(PSSRC)iostack.h:$(GLSRC)gssprintf.h
-$(PSSRC)iostack.h:$(GLSRC)std.h
$(PSSRC)iostack.h:$(GLSRC)gstypes.h
+$(PSSRC)iostack.h:$(GLSRC)std.h
$(PSSRC)iostack.h:$(GLSRC)stdpre.h
$(PSSRC)iostack.h:$(GLGEN)arch.h
+$(PSSRC)iostack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icstate.h:$(PSSRC)idsdata.h
$(PSSRC)icstate.h:$(PSSRC)iesdata.h
$(PSSRC)icstate.h:$(PSSRC)interp.h
-$(PSSRC)icstate.h:$(PSSRC)opdef.h
$(PSSRC)icstate.h:$(PSSRC)files.h
+$(PSSRC)icstate.h:$(PSSRC)opdef.h
$(PSSRC)icstate.h:$(PSSRC)iddstack.h
$(PSSRC)icstate.h:$(PSSRC)store.h
$(PSSRC)icstate.h:$(PSSRC)iosdata.h
@@ -3784,53 +3784,53 @@ $(PSSRC)icstate.h:$(GLSRC)gsnamecl.h
$(PSSRC)icstate.h:$(GLSRC)stream.h
$(PSSRC)icstate.h:$(GLSRC)gxcspace.h
$(PSSRC)icstate.h:$(GLSRC)gxiodev.h
+$(PSSRC)icstate.h:$(GLSRC)gscsel.h
$(PSSRC)icstate.h:$(GLSRC)gsdcolor.h
$(PSSRC)icstate.h:$(GLSRC)gxfrac.h
$(PSSRC)icstate.h:$(GLSRC)gscms.h
-$(PSSRC)icstate.h:$(GLSRC)gscspace.h
$(PSSRC)icstate.h:$(GLSRC)gsdevice.h
-$(PSSRC)icstate.h:$(GLSRC)gxarith.h
-$(PSSRC)icstate.h:$(GLSRC)gxhttile.h
+$(PSSRC)icstate.h:$(GLSRC)gscspace.h
+$(PSSRC)icstate.h:$(GLSRC)gsgstate.h
$(PSSRC)icstate.h:$(GLSRC)gsiparam.h
-$(PSSRC)icstate.h:$(GLSRC)gxbitmap.h
$(PSSRC)icstate.h:$(GLSRC)gsmatrix.h
-$(PSSRC)icstate.h:$(GLSRC)gsrefct.h
+$(PSSRC)icstate.h:$(GLSRC)gxhttile.h
$(PSSRC)icstate.h:$(GLSRC)gsparam.h
+$(PSSRC)icstate.h:$(GLSRC)gsrefct.h
$(PSSRC)icstate.h:$(GLSRC)gp.h
-$(PSSRC)icstate.h:$(GLSRC)gsccolor.h
+$(PSSRC)icstate.h:$(GLSRC)memento.h
+$(PSSRC)icstate.h:$(GLSRC)memory_.h
$(PSSRC)icstate.h:$(GLSRC)gsstruct.h
$(PSSRC)icstate.h:$(GLSRC)gxsync.h
+$(PSSRC)icstate.h:$(GLSRC)gxbitmap.h
$(PSSRC)icstate.h:$(GLSRC)srdline.h
$(PSSRC)icstate.h:$(GLSRC)scommon.h
-$(PSSRC)icstate.h:$(GLSRC)memento.h
-$(PSSRC)icstate.h:$(GLSRC)gscsel.h
-$(PSSRC)icstate.h:$(GLSRC)gsbitmap.h
$(PSSRC)icstate.h:$(GLSRC)gsfname.h
-$(PSSRC)icstate.h:$(GLSRC)gsstype.h
+$(PSSRC)icstate.h:$(GLSRC)gsbitmap.h
+$(PSSRC)icstate.h:$(GLSRC)gsccolor.h
+$(PSSRC)icstate.h:$(GLSRC)gxarith.h
$(PSSRC)icstate.h:$(GLSRC)stat_.h
-$(PSSRC)icstate.h:$(GLSRC)gsmemory.h
$(PSSRC)icstate.h:$(GLSRC)gpsync.h
-$(PSSRC)icstate.h:$(GLSRC)memory_.h
+$(PSSRC)icstate.h:$(GLSRC)gsstype.h
+$(PSSRC)icstate.h:$(GLSRC)gsmemory.h
$(PSSRC)icstate.h:$(GLSRC)gpgetenv.h
-$(PSSRC)icstate.h:$(GLSRC)gslibctx.h
$(PSSRC)icstate.h:$(GLSRC)gscdefs.h
-$(PSSRC)icstate.h:$(GLSRC)gs_dll_call.h
+$(PSSRC)icstate.h:$(GLSRC)gslibctx.h
$(PSSRC)icstate.h:$(GLSRC)gsalloc.h
-$(PSSRC)icstate.h:$(GLSRC)stdio_.h
$(PSSRC)icstate.h:$(GLSRC)gxcindex.h
-$(PSSRC)icstate.h:$(GLSRC)gsgstate.h
+$(PSSRC)icstate.h:$(GLSRC)stdio_.h
$(PSSRC)icstate.h:$(GLSRC)stdint_.h
$(PSSRC)icstate.h:$(GLSRC)gssprintf.h
-$(PSSRC)icstate.h:$(GLSRC)std.h
$(PSSRC)icstate.h:$(GLSRC)gstypes.h
+$(PSSRC)icstate.h:$(GLSRC)std.h
$(PSSRC)icstate.h:$(GLSRC)stdpre.h
$(PSSRC)icstate.h:$(GLGEN)arch.h
+$(PSSRC)icstate.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iddict.h:$(PSSRC)icstate.h
$(PSSRC)iddict.h:$(PSSRC)idsdata.h
$(PSSRC)iddict.h:$(PSSRC)iesdata.h
$(PSSRC)iddict.h:$(PSSRC)interp.h
-$(PSSRC)iddict.h:$(PSSRC)opdef.h
$(PSSRC)iddict.h:$(PSSRC)files.h
+$(PSSRC)iddict.h:$(PSSRC)opdef.h
$(PSSRC)iddict.h:$(PSSRC)idict.h
$(PSSRC)iddict.h:$(PSSRC)iddstack.h
$(PSSRC)iddict.h:$(PSSRC)store.h
@@ -3848,54 +3848,54 @@ $(PSSRC)iddict.h:$(GLSRC)gsnamecl.h
$(PSSRC)iddict.h:$(GLSRC)stream.h
$(PSSRC)iddict.h:$(GLSRC)gxcspace.h
$(PSSRC)iddict.h:$(GLSRC)gxiodev.h
+$(PSSRC)iddict.h:$(GLSRC)gscsel.h
$(PSSRC)iddict.h:$(GLSRC)gsdcolor.h
$(PSSRC)iddict.h:$(GLSRC)gxfrac.h
$(PSSRC)iddict.h:$(GLSRC)gscms.h
-$(PSSRC)iddict.h:$(GLSRC)gscspace.h
$(PSSRC)iddict.h:$(GLSRC)gsdevice.h
-$(PSSRC)iddict.h:$(GLSRC)gxarith.h
-$(PSSRC)iddict.h:$(GLSRC)gxhttile.h
+$(PSSRC)iddict.h:$(GLSRC)gscspace.h
+$(PSSRC)iddict.h:$(GLSRC)gsgstate.h
$(PSSRC)iddict.h:$(GLSRC)gsiparam.h
-$(PSSRC)iddict.h:$(GLSRC)gxbitmap.h
$(PSSRC)iddict.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iddict.h:$(GLSRC)gsrefct.h
+$(PSSRC)iddict.h:$(GLSRC)gxhttile.h
$(PSSRC)iddict.h:$(GLSRC)gsparam.h
+$(PSSRC)iddict.h:$(GLSRC)gsrefct.h
$(PSSRC)iddict.h:$(GLSRC)gp.h
-$(PSSRC)iddict.h:$(GLSRC)gsccolor.h
+$(PSSRC)iddict.h:$(GLSRC)memento.h
+$(PSSRC)iddict.h:$(GLSRC)memory_.h
$(PSSRC)iddict.h:$(GLSRC)gsstruct.h
$(PSSRC)iddict.h:$(GLSRC)gxsync.h
+$(PSSRC)iddict.h:$(GLSRC)gxbitmap.h
$(PSSRC)iddict.h:$(GLSRC)srdline.h
$(PSSRC)iddict.h:$(GLSRC)scommon.h
-$(PSSRC)iddict.h:$(GLSRC)memento.h
-$(PSSRC)iddict.h:$(GLSRC)gscsel.h
-$(PSSRC)iddict.h:$(GLSRC)gsbitmap.h
$(PSSRC)iddict.h:$(GLSRC)gsfname.h
-$(PSSRC)iddict.h:$(GLSRC)gsstype.h
+$(PSSRC)iddict.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iddict.h:$(GLSRC)gsccolor.h
+$(PSSRC)iddict.h:$(GLSRC)gxarith.h
$(PSSRC)iddict.h:$(GLSRC)stat_.h
-$(PSSRC)iddict.h:$(GLSRC)gsmemory.h
$(PSSRC)iddict.h:$(GLSRC)gpsync.h
-$(PSSRC)iddict.h:$(GLSRC)memory_.h
+$(PSSRC)iddict.h:$(GLSRC)gsstype.h
+$(PSSRC)iddict.h:$(GLSRC)gsmemory.h
$(PSSRC)iddict.h:$(GLSRC)gpgetenv.h
-$(PSSRC)iddict.h:$(GLSRC)gslibctx.h
$(PSSRC)iddict.h:$(GLSRC)gscdefs.h
-$(PSSRC)iddict.h:$(GLSRC)gs_dll_call.h
+$(PSSRC)iddict.h:$(GLSRC)gslibctx.h
$(PSSRC)iddict.h:$(GLSRC)gsalloc.h
-$(PSSRC)iddict.h:$(GLSRC)stdio_.h
$(PSSRC)iddict.h:$(GLSRC)gxcindex.h
-$(PSSRC)iddict.h:$(GLSRC)gsgstate.h
+$(PSSRC)iddict.h:$(GLSRC)stdio_.h
$(PSSRC)iddict.h:$(GLSRC)stdint_.h
$(PSSRC)iddict.h:$(GLSRC)gssprintf.h
-$(PSSRC)iddict.h:$(GLSRC)std.h
$(PSSRC)iddict.h:$(GLSRC)gstypes.h
+$(PSSRC)iddict.h:$(GLSRC)std.h
$(PSSRC)iddict.h:$(GLSRC)stdpre.h
$(PSSRC)iddict.h:$(GLGEN)arch.h
+$(PSSRC)iddict.h:$(GLSRC)gs_dll_call.h
$(PSSRC)dstack.h:$(PSSRC)idstack.h
$(PSSRC)dstack.h:$(PSSRC)icstate.h
$(PSSRC)dstack.h:$(PSSRC)idsdata.h
$(PSSRC)dstack.h:$(PSSRC)iesdata.h
$(PSSRC)dstack.h:$(PSSRC)interp.h
-$(PSSRC)dstack.h:$(PSSRC)opdef.h
$(PSSRC)dstack.h:$(PSSRC)files.h
+$(PSSRC)dstack.h:$(PSSRC)opdef.h
$(PSSRC)dstack.h:$(PSSRC)iddstack.h
$(PSSRC)dstack.h:$(PSSRC)istack.h
$(PSSRC)dstack.h:$(PSSRC)store.h
@@ -3913,54 +3913,54 @@ $(PSSRC)dstack.h:$(GLSRC)gsnamecl.h
$(PSSRC)dstack.h:$(GLSRC)stream.h
$(PSSRC)dstack.h:$(GLSRC)gxcspace.h
$(PSSRC)dstack.h:$(GLSRC)gxiodev.h
+$(PSSRC)dstack.h:$(GLSRC)gscsel.h
$(PSSRC)dstack.h:$(GLSRC)gsdcolor.h
$(PSSRC)dstack.h:$(GLSRC)gxfrac.h
$(PSSRC)dstack.h:$(GLSRC)gscms.h
-$(PSSRC)dstack.h:$(GLSRC)gscspace.h
$(PSSRC)dstack.h:$(GLSRC)gsdevice.h
-$(PSSRC)dstack.h:$(GLSRC)gxarith.h
-$(PSSRC)dstack.h:$(GLSRC)gxhttile.h
+$(PSSRC)dstack.h:$(GLSRC)gscspace.h
+$(PSSRC)dstack.h:$(GLSRC)gsgstate.h
$(PSSRC)dstack.h:$(GLSRC)gsiparam.h
-$(PSSRC)dstack.h:$(GLSRC)gxbitmap.h
$(PSSRC)dstack.h:$(GLSRC)gsmatrix.h
-$(PSSRC)dstack.h:$(GLSRC)gsrefct.h
+$(PSSRC)dstack.h:$(GLSRC)gxhttile.h
$(PSSRC)dstack.h:$(GLSRC)gsparam.h
+$(PSSRC)dstack.h:$(GLSRC)gsrefct.h
$(PSSRC)dstack.h:$(GLSRC)gp.h
-$(PSSRC)dstack.h:$(GLSRC)gsccolor.h
+$(PSSRC)dstack.h:$(GLSRC)memento.h
+$(PSSRC)dstack.h:$(GLSRC)memory_.h
$(PSSRC)dstack.h:$(GLSRC)gsstruct.h
$(PSSRC)dstack.h:$(GLSRC)gxsync.h
+$(PSSRC)dstack.h:$(GLSRC)gxbitmap.h
$(PSSRC)dstack.h:$(GLSRC)srdline.h
$(PSSRC)dstack.h:$(GLSRC)scommon.h
-$(PSSRC)dstack.h:$(GLSRC)memento.h
-$(PSSRC)dstack.h:$(GLSRC)gscsel.h
-$(PSSRC)dstack.h:$(GLSRC)gsbitmap.h
$(PSSRC)dstack.h:$(GLSRC)gsfname.h
-$(PSSRC)dstack.h:$(GLSRC)gsstype.h
+$(PSSRC)dstack.h:$(GLSRC)gsbitmap.h
+$(PSSRC)dstack.h:$(GLSRC)gsccolor.h
+$(PSSRC)dstack.h:$(GLSRC)gxarith.h
$(PSSRC)dstack.h:$(GLSRC)stat_.h
-$(PSSRC)dstack.h:$(GLSRC)gsmemory.h
$(PSSRC)dstack.h:$(GLSRC)gpsync.h
-$(PSSRC)dstack.h:$(GLSRC)memory_.h
+$(PSSRC)dstack.h:$(GLSRC)gsstype.h
+$(PSSRC)dstack.h:$(GLSRC)gsmemory.h
$(PSSRC)dstack.h:$(GLSRC)gpgetenv.h
-$(PSSRC)dstack.h:$(GLSRC)gslibctx.h
$(PSSRC)dstack.h:$(GLSRC)gscdefs.h
-$(PSSRC)dstack.h:$(GLSRC)gs_dll_call.h
+$(PSSRC)dstack.h:$(GLSRC)gslibctx.h
$(PSSRC)dstack.h:$(GLSRC)gsalloc.h
-$(PSSRC)dstack.h:$(GLSRC)stdio_.h
$(PSSRC)dstack.h:$(GLSRC)gxcindex.h
-$(PSSRC)dstack.h:$(GLSRC)gsgstate.h
+$(PSSRC)dstack.h:$(GLSRC)stdio_.h
$(PSSRC)dstack.h:$(GLSRC)stdint_.h
$(PSSRC)dstack.h:$(GLSRC)gssprintf.h
-$(PSSRC)dstack.h:$(GLSRC)std.h
$(PSSRC)dstack.h:$(GLSRC)gstypes.h
+$(PSSRC)dstack.h:$(GLSRC)std.h
$(PSSRC)dstack.h:$(GLSRC)stdpre.h
$(PSSRC)dstack.h:$(GLGEN)arch.h
+$(PSSRC)dstack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)estack.h:$(PSSRC)iestack.h
$(PSSRC)estack.h:$(PSSRC)icstate.h
$(PSSRC)estack.h:$(PSSRC)idsdata.h
$(PSSRC)estack.h:$(PSSRC)iesdata.h
$(PSSRC)estack.h:$(PSSRC)interp.h
-$(PSSRC)estack.h:$(PSSRC)opdef.h
$(PSSRC)estack.h:$(PSSRC)files.h
+$(PSSRC)estack.h:$(PSSRC)opdef.h
$(PSSRC)estack.h:$(PSSRC)iddstack.h
$(PSSRC)estack.h:$(PSSRC)istack.h
$(PSSRC)estack.h:$(PSSRC)store.h
@@ -3978,54 +3978,54 @@ $(PSSRC)estack.h:$(GLSRC)gsnamecl.h
$(PSSRC)estack.h:$(GLSRC)stream.h
$(PSSRC)estack.h:$(GLSRC)gxcspace.h
$(PSSRC)estack.h:$(GLSRC)gxiodev.h
+$(PSSRC)estack.h:$(GLSRC)gscsel.h
$(PSSRC)estack.h:$(GLSRC)gsdcolor.h
$(PSSRC)estack.h:$(GLSRC)gxfrac.h
$(PSSRC)estack.h:$(GLSRC)gscms.h
-$(PSSRC)estack.h:$(GLSRC)gscspace.h
$(PSSRC)estack.h:$(GLSRC)gsdevice.h
-$(PSSRC)estack.h:$(GLSRC)gxarith.h
-$(PSSRC)estack.h:$(GLSRC)gxhttile.h
+$(PSSRC)estack.h:$(GLSRC)gscspace.h
+$(PSSRC)estack.h:$(GLSRC)gsgstate.h
$(PSSRC)estack.h:$(GLSRC)gsiparam.h
-$(PSSRC)estack.h:$(GLSRC)gxbitmap.h
$(PSSRC)estack.h:$(GLSRC)gsmatrix.h
-$(PSSRC)estack.h:$(GLSRC)gsrefct.h
+$(PSSRC)estack.h:$(GLSRC)gxhttile.h
$(PSSRC)estack.h:$(GLSRC)gsparam.h
+$(PSSRC)estack.h:$(GLSRC)gsrefct.h
$(PSSRC)estack.h:$(GLSRC)gp.h
-$(PSSRC)estack.h:$(GLSRC)gsccolor.h
+$(PSSRC)estack.h:$(GLSRC)memento.h
+$(PSSRC)estack.h:$(GLSRC)memory_.h
$(PSSRC)estack.h:$(GLSRC)gsstruct.h
$(PSSRC)estack.h:$(GLSRC)gxsync.h
+$(PSSRC)estack.h:$(GLSRC)gxbitmap.h
$(PSSRC)estack.h:$(GLSRC)srdline.h
$(PSSRC)estack.h:$(GLSRC)scommon.h
-$(PSSRC)estack.h:$(GLSRC)memento.h
-$(PSSRC)estack.h:$(GLSRC)gscsel.h
-$(PSSRC)estack.h:$(GLSRC)gsbitmap.h
$(PSSRC)estack.h:$(GLSRC)gsfname.h
-$(PSSRC)estack.h:$(GLSRC)gsstype.h
+$(PSSRC)estack.h:$(GLSRC)gsbitmap.h
+$(PSSRC)estack.h:$(GLSRC)gsccolor.h
+$(PSSRC)estack.h:$(GLSRC)gxarith.h
$(PSSRC)estack.h:$(GLSRC)stat_.h
-$(PSSRC)estack.h:$(GLSRC)gsmemory.h
$(PSSRC)estack.h:$(GLSRC)gpsync.h
-$(PSSRC)estack.h:$(GLSRC)memory_.h
+$(PSSRC)estack.h:$(GLSRC)gsstype.h
+$(PSSRC)estack.h:$(GLSRC)gsmemory.h
$(PSSRC)estack.h:$(GLSRC)gpgetenv.h
-$(PSSRC)estack.h:$(GLSRC)gslibctx.h
$(PSSRC)estack.h:$(GLSRC)gscdefs.h
-$(PSSRC)estack.h:$(GLSRC)gs_dll_call.h
+$(PSSRC)estack.h:$(GLSRC)gslibctx.h
$(PSSRC)estack.h:$(GLSRC)gsalloc.h
-$(PSSRC)estack.h:$(GLSRC)stdio_.h
$(PSSRC)estack.h:$(GLSRC)gxcindex.h
-$(PSSRC)estack.h:$(GLSRC)gsgstate.h
+$(PSSRC)estack.h:$(GLSRC)stdio_.h
$(PSSRC)estack.h:$(GLSRC)stdint_.h
$(PSSRC)estack.h:$(GLSRC)gssprintf.h
-$(PSSRC)estack.h:$(GLSRC)std.h
$(PSSRC)estack.h:$(GLSRC)gstypes.h
+$(PSSRC)estack.h:$(GLSRC)std.h
$(PSSRC)estack.h:$(GLSRC)stdpre.h
$(PSSRC)estack.h:$(GLGEN)arch.h
+$(PSSRC)estack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ostack.h:$(PSSRC)icstate.h
$(PSSRC)ostack.h:$(PSSRC)idsdata.h
$(PSSRC)ostack.h:$(PSSRC)iesdata.h
$(PSSRC)ostack.h:$(PSSRC)iostack.h
$(PSSRC)ostack.h:$(PSSRC)interp.h
-$(PSSRC)ostack.h:$(PSSRC)opdef.h
$(PSSRC)ostack.h:$(PSSRC)files.h
+$(PSSRC)ostack.h:$(PSSRC)opdef.h
$(PSSRC)ostack.h:$(PSSRC)iddstack.h
$(PSSRC)ostack.h:$(PSSRC)istack.h
$(PSSRC)ostack.h:$(PSSRC)store.h
@@ -4043,55 +4043,55 @@ $(PSSRC)ostack.h:$(GLSRC)gsnamecl.h
$(PSSRC)ostack.h:$(GLSRC)stream.h
$(PSSRC)ostack.h:$(GLSRC)gxcspace.h
$(PSSRC)ostack.h:$(GLSRC)gxiodev.h
+$(PSSRC)ostack.h:$(GLSRC)gscsel.h
$(PSSRC)ostack.h:$(GLSRC)gsdcolor.h
$(PSSRC)ostack.h:$(GLSRC)gxfrac.h
$(PSSRC)ostack.h:$(GLSRC)gscms.h
-$(PSSRC)ostack.h:$(GLSRC)gscspace.h
$(PSSRC)ostack.h:$(GLSRC)gsdevice.h
-$(PSSRC)ostack.h:$(GLSRC)gxarith.h
-$(PSSRC)ostack.h:$(GLSRC)gxhttile.h
+$(PSSRC)ostack.h:$(GLSRC)gscspace.h
+$(PSSRC)ostack.h:$(GLSRC)gsgstate.h
$(PSSRC)ostack.h:$(GLSRC)gsiparam.h
-$(PSSRC)ostack.h:$(GLSRC)gxbitmap.h
$(PSSRC)ostack.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ostack.h:$(GLSRC)gsrefct.h
+$(PSSRC)ostack.h:$(GLSRC)gxhttile.h
$(PSSRC)ostack.h:$(GLSRC)gsparam.h
+$(PSSRC)ostack.h:$(GLSRC)gsrefct.h
$(PSSRC)ostack.h:$(GLSRC)gp.h
-$(PSSRC)ostack.h:$(GLSRC)gsccolor.h
+$(PSSRC)ostack.h:$(GLSRC)memento.h
+$(PSSRC)ostack.h:$(GLSRC)memory_.h
$(PSSRC)ostack.h:$(GLSRC)gsstruct.h
$(PSSRC)ostack.h:$(GLSRC)gxsync.h
+$(PSSRC)ostack.h:$(GLSRC)gxbitmap.h
$(PSSRC)ostack.h:$(GLSRC)srdline.h
$(PSSRC)ostack.h:$(GLSRC)scommon.h
-$(PSSRC)ostack.h:$(GLSRC)memento.h
-$(PSSRC)ostack.h:$(GLSRC)gscsel.h
-$(PSSRC)ostack.h:$(GLSRC)gsbitmap.h
$(PSSRC)ostack.h:$(GLSRC)gsfname.h
-$(PSSRC)ostack.h:$(GLSRC)gsstype.h
+$(PSSRC)ostack.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ostack.h:$(GLSRC)gsccolor.h
+$(PSSRC)ostack.h:$(GLSRC)gxarith.h
$(PSSRC)ostack.h:$(GLSRC)stat_.h
-$(PSSRC)ostack.h:$(GLSRC)gsmemory.h
$(PSSRC)ostack.h:$(GLSRC)gpsync.h
-$(PSSRC)ostack.h:$(GLSRC)memory_.h
+$(PSSRC)ostack.h:$(GLSRC)gsstype.h
+$(PSSRC)ostack.h:$(GLSRC)gsmemory.h
$(PSSRC)ostack.h:$(GLSRC)gpgetenv.h
-$(PSSRC)ostack.h:$(GLSRC)gslibctx.h
$(PSSRC)ostack.h:$(GLSRC)gscdefs.h
-$(PSSRC)ostack.h:$(GLSRC)gs_dll_call.h
+$(PSSRC)ostack.h:$(GLSRC)gslibctx.h
$(PSSRC)ostack.h:$(GLSRC)gsalloc.h
-$(PSSRC)ostack.h:$(GLSRC)stdio_.h
$(PSSRC)ostack.h:$(GLSRC)gxcindex.h
-$(PSSRC)ostack.h:$(GLSRC)gsgstate.h
+$(PSSRC)ostack.h:$(GLSRC)stdio_.h
$(PSSRC)ostack.h:$(GLSRC)stdint_.h
$(PSSRC)ostack.h:$(GLSRC)gssprintf.h
-$(PSSRC)ostack.h:$(GLSRC)std.h
$(PSSRC)ostack.h:$(GLSRC)gstypes.h
+$(PSSRC)ostack.h:$(GLSRC)std.h
$(PSSRC)ostack.h:$(GLSRC)stdpre.h
$(PSSRC)ostack.h:$(GLGEN)arch.h
+$(PSSRC)ostack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)oper.h:$(PSSRC)ostack.h
$(PSSRC)oper.h:$(PSSRC)icstate.h
$(PSSRC)oper.h:$(PSSRC)idsdata.h
$(PSSRC)oper.h:$(PSSRC)iesdata.h
$(PSSRC)oper.h:$(PSSRC)iostack.h
$(PSSRC)oper.h:$(PSSRC)interp.h
-$(PSSRC)oper.h:$(PSSRC)opdef.h
$(PSSRC)oper.h:$(PSSRC)files.h
+$(PSSRC)oper.h:$(PSSRC)opdef.h
$(PSSRC)oper.h:$(PSSRC)iddstack.h
$(PSSRC)oper.h:$(PSSRC)istack.h
$(PSSRC)oper.h:$(PSSRC)store.h
@@ -4113,87 +4113,87 @@ $(PSSRC)oper.h:$(GLSRC)gsnamecl.h
$(PSSRC)oper.h:$(GLSRC)stream.h
$(PSSRC)oper.h:$(GLSRC)gxcspace.h
$(PSSRC)oper.h:$(GLSRC)gxiodev.h
+$(PSSRC)oper.h:$(GLSRC)gscsel.h
$(PSSRC)oper.h:$(GLSRC)gsdcolor.h
$(PSSRC)oper.h:$(GLSRC)gxfrac.h
$(PSSRC)oper.h:$(GLSRC)gscms.h
-$(PSSRC)oper.h:$(GLSRC)gscspace.h
$(PSSRC)oper.h:$(GLSRC)gsdevice.h
-$(PSSRC)oper.h:$(GLSRC)gxarith.h
-$(PSSRC)oper.h:$(GLSRC)gxhttile.h
+$(PSSRC)oper.h:$(GLSRC)gscspace.h
+$(PSSRC)oper.h:$(GLSRC)gsgstate.h
$(PSSRC)oper.h:$(GLSRC)gsiparam.h
-$(PSSRC)oper.h:$(GLSRC)gxbitmap.h
$(PSSRC)oper.h:$(GLSRC)gsmatrix.h
-$(PSSRC)oper.h:$(GLSRC)gsrefct.h
+$(PSSRC)oper.h:$(GLSRC)gxhttile.h
$(PSSRC)oper.h:$(GLSRC)gsparam.h
+$(PSSRC)oper.h:$(GLSRC)gsrefct.h
$(PSSRC)oper.h:$(GLSRC)gp.h
-$(PSSRC)oper.h:$(GLSRC)gsccolor.h
+$(PSSRC)oper.h:$(GLSRC)memento.h
+$(PSSRC)oper.h:$(GLSRC)memory_.h
$(PSSRC)oper.h:$(GLSRC)gsstruct.h
$(PSSRC)oper.h:$(GLSRC)gxsync.h
-$(PSSRC)oper.h:$(GLSRC)srdline.h
$(PSSRC)oper.h:$(GLSRC)gserrors.h
+$(PSSRC)oper.h:$(GLSRC)gxbitmap.h
+$(PSSRC)oper.h:$(GLSRC)srdline.h
$(PSSRC)oper.h:$(GLSRC)scommon.h
-$(PSSRC)oper.h:$(GLSRC)memento.h
-$(PSSRC)oper.h:$(GLSRC)gscsel.h
-$(PSSRC)oper.h:$(GLSRC)gsbitmap.h
$(PSSRC)oper.h:$(GLSRC)gsfname.h
-$(PSSRC)oper.h:$(GLSRC)gsstype.h
+$(PSSRC)oper.h:$(GLSRC)gsbitmap.h
+$(PSSRC)oper.h:$(GLSRC)gsccolor.h
+$(PSSRC)oper.h:$(GLSRC)gxarith.h
$(PSSRC)oper.h:$(GLSRC)stat_.h
-$(PSSRC)oper.h:$(GLSRC)gsmemory.h
$(PSSRC)oper.h:$(GLSRC)gpsync.h
-$(PSSRC)oper.h:$(GLSRC)memory_.h
+$(PSSRC)oper.h:$(GLSRC)gsstype.h
+$(PSSRC)oper.h:$(GLSRC)gsmemory.h
$(PSSRC)oper.h:$(GLSRC)gpgetenv.h
-$(PSSRC)oper.h:$(GLSRC)gslibctx.h
$(PSSRC)oper.h:$(GLSRC)gscdefs.h
-$(PSSRC)oper.h:$(GLSRC)gs_dll_call.h
+$(PSSRC)oper.h:$(GLSRC)gslibctx.h
$(PSSRC)oper.h:$(GLSRC)gsalloc.h
-$(PSSRC)oper.h:$(GLSRC)stdio_.h
$(PSSRC)oper.h:$(GLSRC)gxcindex.h
-$(PSSRC)oper.h:$(GLSRC)gsgstate.h
+$(PSSRC)oper.h:$(GLSRC)stdio_.h
$(PSSRC)oper.h:$(GLSRC)stdint_.h
$(PSSRC)oper.h:$(GLSRC)gssprintf.h
-$(PSSRC)oper.h:$(GLSRC)std.h
$(PSSRC)oper.h:$(GLSRC)gstypes.h
+$(PSSRC)oper.h:$(GLSRC)std.h
$(PSSRC)oper.h:$(GLSRC)stdpre.h
$(PSSRC)oper.h:$(GLGEN)arch.h
+$(PSSRC)oper.h:$(GLSRC)gs_dll_call.h
$(PSSRC)btoken.h:$(PSSRC)iref.h
$(PSSRC)btoken.h:$(GLSRC)gxalloc.h
$(PSSRC)btoken.h:$(GLSRC)gxobj.h
$(PSSRC)btoken.h:$(GLSRC)gsnamecl.h
$(PSSRC)btoken.h:$(GLSRC)gxcspace.h
+$(PSSRC)btoken.h:$(GLSRC)gscsel.h
$(PSSRC)btoken.h:$(GLSRC)gsdcolor.h
$(PSSRC)btoken.h:$(GLSRC)gxfrac.h
$(PSSRC)btoken.h:$(GLSRC)gscms.h
-$(PSSRC)btoken.h:$(GLSRC)gscspace.h
$(PSSRC)btoken.h:$(GLSRC)gsdevice.h
-$(PSSRC)btoken.h:$(GLSRC)gxarith.h
-$(PSSRC)btoken.h:$(GLSRC)gxhttile.h
+$(PSSRC)btoken.h:$(GLSRC)gscspace.h
+$(PSSRC)btoken.h:$(GLSRC)gsgstate.h
$(PSSRC)btoken.h:$(GLSRC)gsiparam.h
-$(PSSRC)btoken.h:$(GLSRC)gxbitmap.h
$(PSSRC)btoken.h:$(GLSRC)gsmatrix.h
-$(PSSRC)btoken.h:$(GLSRC)gsrefct.h
+$(PSSRC)btoken.h:$(GLSRC)gxhttile.h
$(PSSRC)btoken.h:$(GLSRC)gsparam.h
-$(PSSRC)btoken.h:$(GLSRC)gsccolor.h
+$(PSSRC)btoken.h:$(GLSRC)gsrefct.h
+$(PSSRC)btoken.h:$(GLSRC)memento.h
$(PSSRC)btoken.h:$(GLSRC)gsstruct.h
$(PSSRC)btoken.h:$(GLSRC)gxsync.h
+$(PSSRC)btoken.h:$(GLSRC)gxbitmap.h
$(PSSRC)btoken.h:$(GLSRC)scommon.h
-$(PSSRC)btoken.h:$(GLSRC)memento.h
-$(PSSRC)btoken.h:$(GLSRC)gscsel.h
$(PSSRC)btoken.h:$(GLSRC)gsbitmap.h
+$(PSSRC)btoken.h:$(GLSRC)gsccolor.h
+$(PSSRC)btoken.h:$(GLSRC)gxarith.h
+$(PSSRC)btoken.h:$(GLSRC)gpsync.h
$(PSSRC)btoken.h:$(GLSRC)gsstype.h
$(PSSRC)btoken.h:$(GLSRC)gsmemory.h
-$(PSSRC)btoken.h:$(GLSRC)gpsync.h
$(PSSRC)btoken.h:$(GLSRC)gslibctx.h
-$(PSSRC)btoken.h:$(GLSRC)gs_dll_call.h
$(PSSRC)btoken.h:$(GLSRC)gsalloc.h
-$(PSSRC)btoken.h:$(GLSRC)stdio_.h
$(PSSRC)btoken.h:$(GLSRC)gxcindex.h
-$(PSSRC)btoken.h:$(GLSRC)gsgstate.h
+$(PSSRC)btoken.h:$(GLSRC)stdio_.h
$(PSSRC)btoken.h:$(GLSRC)stdint_.h
$(PSSRC)btoken.h:$(GLSRC)gssprintf.h
-$(PSSRC)btoken.h:$(GLSRC)std.h
$(PSSRC)btoken.h:$(GLSRC)gstypes.h
+$(PSSRC)btoken.h:$(GLSRC)std.h
$(PSSRC)btoken.h:$(GLSRC)stdpre.h
$(PSSRC)btoken.h:$(GLGEN)arch.h
+$(PSSRC)btoken.h:$(GLSRC)gs_dll_call.h
$(PSSRC)files.h:$(PSSRC)store.h
$(PSSRC)files.h:$(PSSRC)ialloc.h
$(PSSRC)files.h:$(PSSRC)idosave.h
@@ -4207,63 +4207,63 @@ $(PSSRC)files.h:$(GLSRC)gsnamecl.h
$(PSSRC)files.h:$(GLSRC)stream.h
$(PSSRC)files.h:$(GLSRC)gxcspace.h
$(PSSRC)files.h:$(GLSRC)gxiodev.h
+$(PSSRC)files.h:$(GLSRC)gscsel.h
$(PSSRC)files.h:$(GLSRC)gsdcolor.h
$(PSSRC)files.h:$(GLSRC)gxfrac.h
$(PSSRC)files.h:$(GLSRC)gscms.h
-$(PSSRC)files.h:$(GLSRC)gscspace.h
$(PSSRC)files.h:$(GLSRC)gsdevice.h
-$(PSSRC)files.h:$(GLSRC)gxarith.h
-$(PSSRC)files.h:$(GLSRC)gxhttile.h
+$(PSSRC)files.h:$(GLSRC)gscspace.h
+$(PSSRC)files.h:$(GLSRC)gsgstate.h
$(PSSRC)files.h:$(GLSRC)gsiparam.h
-$(PSSRC)files.h:$(GLSRC)gxbitmap.h
$(PSSRC)files.h:$(GLSRC)gsmatrix.h
-$(PSSRC)files.h:$(GLSRC)gsrefct.h
+$(PSSRC)files.h:$(GLSRC)gxhttile.h
$(PSSRC)files.h:$(GLSRC)gsparam.h
+$(PSSRC)files.h:$(GLSRC)gsrefct.h
$(PSSRC)files.h:$(GLSRC)gp.h
-$(PSSRC)files.h:$(GLSRC)gsccolor.h
+$(PSSRC)files.h:$(GLSRC)memento.h
+$(PSSRC)files.h:$(GLSRC)memory_.h
$(PSSRC)files.h:$(GLSRC)gsstruct.h
$(PSSRC)files.h:$(GLSRC)gxsync.h
+$(PSSRC)files.h:$(GLSRC)gxbitmap.h
$(PSSRC)files.h:$(GLSRC)srdline.h
$(PSSRC)files.h:$(GLSRC)scommon.h
-$(PSSRC)files.h:$(GLSRC)memento.h
-$(PSSRC)files.h:$(GLSRC)gscsel.h
-$(PSSRC)files.h:$(GLSRC)gsbitmap.h
$(PSSRC)files.h:$(GLSRC)gsfname.h
-$(PSSRC)files.h:$(GLSRC)gsstype.h
+$(PSSRC)files.h:$(GLSRC)gsbitmap.h
+$(PSSRC)files.h:$(GLSRC)gsccolor.h
+$(PSSRC)files.h:$(GLSRC)gxarith.h
$(PSSRC)files.h:$(GLSRC)stat_.h
-$(PSSRC)files.h:$(GLSRC)gsmemory.h
$(PSSRC)files.h:$(GLSRC)gpsync.h
-$(PSSRC)files.h:$(GLSRC)memory_.h
+$(PSSRC)files.h:$(GLSRC)gsstype.h
+$(PSSRC)files.h:$(GLSRC)gsmemory.h
$(PSSRC)files.h:$(GLSRC)gpgetenv.h
-$(PSSRC)files.h:$(GLSRC)gslibctx.h
$(PSSRC)files.h:$(GLSRC)gscdefs.h
-$(PSSRC)files.h:$(GLSRC)gs_dll_call.h
+$(PSSRC)files.h:$(GLSRC)gslibctx.h
$(PSSRC)files.h:$(GLSRC)gsalloc.h
-$(PSSRC)files.h:$(GLSRC)stdio_.h
$(PSSRC)files.h:$(GLSRC)gxcindex.h
-$(PSSRC)files.h:$(GLSRC)gsgstate.h
+$(PSSRC)files.h:$(GLSRC)stdio_.h
$(PSSRC)files.h:$(GLSRC)stdint_.h
$(PSSRC)files.h:$(GLSRC)gssprintf.h
-$(PSSRC)files.h:$(GLSRC)std.h
$(PSSRC)files.h:$(GLSRC)gstypes.h
+$(PSSRC)files.h:$(GLSRC)std.h
$(PSSRC)files.h:$(GLSRC)stdpre.h
$(PSSRC)files.h:$(GLGEN)arch.h
+$(PSSRC)files.h:$(GLSRC)gs_dll_call.h
$(PSSRC)psapi.h:$(GLSRC)gsdevice.h
+$(PSSRC)psapi.h:$(GLSRC)gsgstate.h
$(PSSRC)psapi.h:$(GLSRC)gsmatrix.h
$(PSSRC)psapi.h:$(GLSRC)gsparam.h
$(PSSRC)psapi.h:$(GLSRC)scommon.h
$(PSSRC)psapi.h:$(GLSRC)gsstype.h
$(PSSRC)psapi.h:$(GLSRC)gsmemory.h
$(PSSRC)psapi.h:$(GLSRC)gslibctx.h
-$(PSSRC)psapi.h:$(GLSRC)gs_dll_call.h
$(PSSRC)psapi.h:$(GLSRC)stdio_.h
-$(PSSRC)psapi.h:$(GLSRC)gsgstate.h
$(PSSRC)psapi.h:$(GLSRC)stdint_.h
$(PSSRC)psapi.h:$(GLSRC)gssprintf.h
-$(PSSRC)psapi.h:$(GLSRC)std.h
$(PSSRC)psapi.h:$(GLSRC)gstypes.h
+$(PSSRC)psapi.h:$(GLSRC)std.h
$(PSSRC)psapi.h:$(GLSRC)stdpre.h
$(PSSRC)psapi.h:$(GLGEN)arch.h
+$(PSSRC)psapi.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ichar.h:$(PSSRC)iostack.h
$(PSSRC)ichar.h:$(PSSRC)istack.h
$(PSSRC)ichar.h:$(PSSRC)iosdata.h
@@ -4274,297 +4274,297 @@ $(PSSRC)ichar.h:$(PSSRC)ivmspace.h
$(PSSRC)ichar.h:$(PSSRC)iref.h
$(PSSRC)ichar.h:$(GLSRC)gsgc.h
$(PSSRC)ichar.h:$(GLSRC)gxalloc.h
-$(PSSRC)ichar.h:$(GLSRC)gstext.h
$(PSSRC)ichar.h:$(GLSRC)gxobj.h
+$(PSSRC)ichar.h:$(GLSRC)gstext.h
$(PSSRC)ichar.h:$(GLSRC)gsnamecl.h
$(PSSRC)ichar.h:$(GLSRC)gxcspace.h
-$(PSSRC)ichar.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ichar.h:$(GLSRC)gscsel.h
$(PSSRC)ichar.h:$(GLSRC)gsfont.h
+$(PSSRC)ichar.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ichar.h:$(GLSRC)gxpath.h
$(PSSRC)ichar.h:$(GLSRC)gxfrac.h
$(PSSRC)ichar.h:$(GLSRC)gscms.h
-$(PSSRC)ichar.h:$(GLSRC)gscspace.h
-$(PSSRC)ichar.h:$(GLSRC)gxpath.h
-$(PSSRC)ichar.h:$(GLSRC)gsdevice.h
-$(PSSRC)ichar.h:$(GLSRC)gxarith.h
-$(PSSRC)ichar.h:$(GLSRC)gspenum.h
-$(PSSRC)ichar.h:$(GLSRC)gxhttile.h
$(PSSRC)ichar.h:$(GLSRC)gsrect.h
$(PSSRC)ichar.h:$(GLSRC)gslparam.h
-$(PSSRC)ichar.h:$(GLSRC)gsiparam.h
-$(PSSRC)ichar.h:$(GLSRC)gxbitmap.h
-$(PSSRC)ichar.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ichar.h:$(GLSRC)gsdevice.h
$(PSSRC)ichar.h:$(GLSRC)gscpm.h
+$(PSSRC)ichar.h:$(GLSRC)gscspace.h
+$(PSSRC)ichar.h:$(GLSRC)gsgstate.h
+$(PSSRC)ichar.h:$(GLSRC)gsiparam.h
$(PSSRC)ichar.h:$(GLSRC)gxfixed.h
-$(PSSRC)ichar.h:$(GLSRC)gsrefct.h
+$(PSSRC)ichar.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ichar.h:$(GLSRC)gspenum.h
+$(PSSRC)ichar.h:$(GLSRC)gxhttile.h
$(PSSRC)ichar.h:$(GLSRC)gsparam.h
-$(PSSRC)ichar.h:$(GLSRC)gsccolor.h
+$(PSSRC)ichar.h:$(GLSRC)gsrefct.h
+$(PSSRC)ichar.h:$(GLSRC)memento.h
$(PSSRC)ichar.h:$(GLSRC)gsstruct.h
$(PSSRC)ichar.h:$(GLSRC)gxsync.h
+$(PSSRC)ichar.h:$(GLSRC)gxbitmap.h
$(PSSRC)ichar.h:$(GLSRC)scommon.h
-$(PSSRC)ichar.h:$(GLSRC)memento.h
-$(PSSRC)ichar.h:$(GLSRC)gscsel.h
$(PSSRC)ichar.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ichar.h:$(GLSRC)gsccolor.h
+$(PSSRC)ichar.h:$(GLSRC)gxarith.h
+$(PSSRC)ichar.h:$(GLSRC)gpsync.h
$(PSSRC)ichar.h:$(GLSRC)gsstype.h
$(PSSRC)ichar.h:$(GLSRC)gsmemory.h
-$(PSSRC)ichar.h:$(GLSRC)gpsync.h
$(PSSRC)ichar.h:$(GLSRC)gslibctx.h
-$(PSSRC)ichar.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ichar.h:$(GLSRC)gsalloc.h
-$(PSSRC)ichar.h:$(GLSRC)stdio_.h
$(PSSRC)ichar.h:$(GLSRC)gxcindex.h
-$(PSSRC)ichar.h:$(GLSRC)gsgstate.h
+$(PSSRC)ichar.h:$(GLSRC)stdio_.h
+$(PSSRC)ichar.h:$(GLSRC)gsccode.h
$(PSSRC)ichar.h:$(GLSRC)stdint_.h
$(PSSRC)ichar.h:$(GLSRC)gssprintf.h
-$(PSSRC)ichar.h:$(GLSRC)gsccode.h
-$(PSSRC)ichar.h:$(GLSRC)std.h
$(PSSRC)ichar.h:$(GLSRC)gstypes.h
+$(PSSRC)ichar.h:$(GLSRC)std.h
$(PSSRC)ichar.h:$(GLSRC)stdpre.h
$(PSSRC)ichar.h:$(GLGEN)arch.h
+$(PSSRC)ichar.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ichar1.h:$(GLSRC)gstype1.h
$(PSSRC)ichar1.h:$(GLSRC)gxfont.h
$(PSSRC)ichar1.h:$(GLSRC)gspath.h
-$(PSSRC)ichar1.h:$(GLSRC)gxmatrix.h
$(PSSRC)ichar1.h:$(GLSRC)gsgdata.h
-$(PSSRC)ichar1.h:$(GLSRC)gsgcache.h
+$(PSSRC)ichar1.h:$(GLSRC)gxmatrix.h
$(PSSRC)ichar1.h:$(GLSRC)gxfapi.h
-$(PSSRC)ichar1.h:$(GLSRC)gsnotify.h
$(PSSRC)ichar1.h:$(GLSRC)gsfcmap.h
$(PSSRC)ichar1.h:$(PSSRC)iref.h
$(PSSRC)ichar1.h:$(GLSRC)gxalloc.h
-$(PSSRC)ichar1.h:$(GLSRC)gstext.h
$(PSSRC)ichar1.h:$(GLSRC)gxobj.h
+$(PSSRC)ichar1.h:$(GLSRC)gstext.h
$(PSSRC)ichar1.h:$(GLSRC)gsnamecl.h
$(PSSRC)ichar1.h:$(GLSRC)gxcspace.h
-$(PSSRC)ichar1.h:$(GLSRC)gsuid.h
-$(PSSRC)ichar1.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ichar1.h:$(GLSRC)gscsel.h
$(PSSRC)ichar1.h:$(GLSRC)gsfont.h
-$(PSSRC)ichar1.h:$(GLSRC)gxftype.h
+$(PSSRC)ichar1.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ichar1.h:$(GLSRC)gxpath.h
$(PSSRC)ichar1.h:$(GLSRC)gxfrac.h
+$(PSSRC)ichar1.h:$(GLSRC)gxftype.h
$(PSSRC)ichar1.h:$(GLSRC)gscms.h
-$(PSSRC)ichar1.h:$(GLSRC)gscspace.h
-$(PSSRC)ichar1.h:$(GLSRC)gxpath.h
-$(PSSRC)ichar1.h:$(GLSRC)gsdevice.h
-$(PSSRC)ichar1.h:$(GLSRC)gxarith.h
-$(PSSRC)ichar1.h:$(GLSRC)gspenum.h
-$(PSSRC)ichar1.h:$(GLSRC)gxhttile.h
$(PSSRC)ichar1.h:$(GLSRC)gsrect.h
$(PSSRC)ichar1.h:$(GLSRC)gslparam.h
-$(PSSRC)ichar1.h:$(GLSRC)gsiparam.h
-$(PSSRC)ichar1.h:$(GLSRC)gxbitmap.h
-$(PSSRC)ichar1.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ichar1.h:$(GLSRC)gsdevice.h
$(PSSRC)ichar1.h:$(GLSRC)gscpm.h
+$(PSSRC)ichar1.h:$(GLSRC)gsgcache.h
+$(PSSRC)ichar1.h:$(GLSRC)gscspace.h
+$(PSSRC)ichar1.h:$(GLSRC)gsgstate.h
+$(PSSRC)ichar1.h:$(GLSRC)gsnotify.h
+$(PSSRC)ichar1.h:$(GLSRC)gsiparam.h
$(PSSRC)ichar1.h:$(GLSRC)gxfixed.h
-$(PSSRC)ichar1.h:$(GLSRC)gsrefct.h
+$(PSSRC)ichar1.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ichar1.h:$(GLSRC)gspenum.h
+$(PSSRC)ichar1.h:$(GLSRC)gxhttile.h
$(PSSRC)ichar1.h:$(GLSRC)gsparam.h
-$(PSSRC)ichar1.h:$(GLSRC)gsccolor.h
+$(PSSRC)ichar1.h:$(GLSRC)gsrefct.h
+$(PSSRC)ichar1.h:$(GLSRC)memento.h
+$(PSSRC)ichar1.h:$(GLSRC)gsuid.h
$(PSSRC)ichar1.h:$(GLSRC)gsstruct.h
$(PSSRC)ichar1.h:$(GLSRC)gxsync.h
+$(PSSRC)ichar1.h:$(GLSRC)gxbitmap.h
$(PSSRC)ichar1.h:$(GLSRC)scommon.h
-$(PSSRC)ichar1.h:$(GLSRC)memento.h
-$(PSSRC)ichar1.h:$(GLSRC)gscsel.h
$(PSSRC)ichar1.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ichar1.h:$(GLSRC)gsccolor.h
+$(PSSRC)ichar1.h:$(GLSRC)gxarith.h
+$(PSSRC)ichar1.h:$(GLSRC)gpsync.h
$(PSSRC)ichar1.h:$(GLSRC)gsstype.h
$(PSSRC)ichar1.h:$(GLSRC)gsmemory.h
-$(PSSRC)ichar1.h:$(GLSRC)gpsync.h
$(PSSRC)ichar1.h:$(GLSRC)gslibctx.h
-$(PSSRC)ichar1.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ichar1.h:$(GLSRC)gsalloc.h
-$(PSSRC)ichar1.h:$(GLSRC)stdio_.h
$(PSSRC)ichar1.h:$(GLSRC)gxcindex.h
-$(PSSRC)ichar1.h:$(GLSRC)gsgstate.h
+$(PSSRC)ichar1.h:$(GLSRC)stdio_.h
+$(PSSRC)ichar1.h:$(GLSRC)gsccode.h
$(PSSRC)ichar1.h:$(GLSRC)stdint_.h
$(PSSRC)ichar1.h:$(GLSRC)gssprintf.h
-$(PSSRC)ichar1.h:$(GLSRC)gsccode.h
-$(PSSRC)ichar1.h:$(GLSRC)std.h
$(PSSRC)ichar1.h:$(GLSRC)gstypes.h
+$(PSSRC)ichar1.h:$(GLSRC)std.h
$(PSSRC)ichar1.h:$(GLSRC)stdpre.h
$(PSSRC)ichar1.h:$(GLGEN)arch.h
+$(PSSRC)ichar1.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icharout.h:$(GLSRC)gsgdata.h
-$(PSSRC)icharout.h:$(GLSRC)gsgcache.h
$(PSSRC)icharout.h:$(GLSRC)gxfapi.h
$(PSSRC)icharout.h:$(PSSRC)iref.h
$(PSSRC)icharout.h:$(GLSRC)gxalloc.h
-$(PSSRC)icharout.h:$(GLSRC)gstext.h
$(PSSRC)icharout.h:$(GLSRC)gxobj.h
+$(PSSRC)icharout.h:$(GLSRC)gstext.h
$(PSSRC)icharout.h:$(GLSRC)gsnamecl.h
$(PSSRC)icharout.h:$(GLSRC)gxcspace.h
-$(PSSRC)icharout.h:$(GLSRC)gsdcolor.h
+$(PSSRC)icharout.h:$(GLSRC)gscsel.h
$(PSSRC)icharout.h:$(GLSRC)gsfont.h
+$(PSSRC)icharout.h:$(GLSRC)gsdcolor.h
+$(PSSRC)icharout.h:$(GLSRC)gxpath.h
$(PSSRC)icharout.h:$(GLSRC)gxfrac.h
$(PSSRC)icharout.h:$(GLSRC)gscms.h
-$(PSSRC)icharout.h:$(GLSRC)gscspace.h
-$(PSSRC)icharout.h:$(GLSRC)gxpath.h
-$(PSSRC)icharout.h:$(GLSRC)gsdevice.h
-$(PSSRC)icharout.h:$(GLSRC)gxarith.h
-$(PSSRC)icharout.h:$(GLSRC)gspenum.h
-$(PSSRC)icharout.h:$(GLSRC)gxhttile.h
$(PSSRC)icharout.h:$(GLSRC)gsrect.h
$(PSSRC)icharout.h:$(GLSRC)gslparam.h
-$(PSSRC)icharout.h:$(GLSRC)gsiparam.h
-$(PSSRC)icharout.h:$(GLSRC)gxbitmap.h
-$(PSSRC)icharout.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icharout.h:$(GLSRC)gsdevice.h
$(PSSRC)icharout.h:$(GLSRC)gscpm.h
+$(PSSRC)icharout.h:$(GLSRC)gsgcache.h
+$(PSSRC)icharout.h:$(GLSRC)gscspace.h
+$(PSSRC)icharout.h:$(GLSRC)gsgstate.h
+$(PSSRC)icharout.h:$(GLSRC)gsiparam.h
$(PSSRC)icharout.h:$(GLSRC)gxfixed.h
-$(PSSRC)icharout.h:$(GLSRC)gsrefct.h
+$(PSSRC)icharout.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icharout.h:$(GLSRC)gspenum.h
+$(PSSRC)icharout.h:$(GLSRC)gxhttile.h
$(PSSRC)icharout.h:$(GLSRC)gsparam.h
-$(PSSRC)icharout.h:$(GLSRC)gsccolor.h
+$(PSSRC)icharout.h:$(GLSRC)gsrefct.h
+$(PSSRC)icharout.h:$(GLSRC)memento.h
$(PSSRC)icharout.h:$(GLSRC)gsstruct.h
$(PSSRC)icharout.h:$(GLSRC)gxsync.h
+$(PSSRC)icharout.h:$(GLSRC)gxbitmap.h
$(PSSRC)icharout.h:$(GLSRC)scommon.h
-$(PSSRC)icharout.h:$(GLSRC)memento.h
-$(PSSRC)icharout.h:$(GLSRC)gscsel.h
$(PSSRC)icharout.h:$(GLSRC)gsbitmap.h
+$(PSSRC)icharout.h:$(GLSRC)gsccolor.h
+$(PSSRC)icharout.h:$(GLSRC)gxarith.h
+$(PSSRC)icharout.h:$(GLSRC)gpsync.h
$(PSSRC)icharout.h:$(GLSRC)gsstype.h
$(PSSRC)icharout.h:$(GLSRC)gsmemory.h
-$(PSSRC)icharout.h:$(GLSRC)gpsync.h
$(PSSRC)icharout.h:$(GLSRC)gslibctx.h
-$(PSSRC)icharout.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icharout.h:$(GLSRC)gsalloc.h
-$(PSSRC)icharout.h:$(GLSRC)stdio_.h
$(PSSRC)icharout.h:$(GLSRC)gxcindex.h
-$(PSSRC)icharout.h:$(GLSRC)gsgstate.h
+$(PSSRC)icharout.h:$(GLSRC)stdio_.h
+$(PSSRC)icharout.h:$(GLSRC)gsccode.h
$(PSSRC)icharout.h:$(GLSRC)stdint_.h
$(PSSRC)icharout.h:$(GLSRC)gssprintf.h
-$(PSSRC)icharout.h:$(GLSRC)gsccode.h
-$(PSSRC)icharout.h:$(GLSRC)std.h
$(PSSRC)icharout.h:$(GLSRC)gstypes.h
+$(PSSRC)icharout.h:$(GLSRC)std.h
$(PSSRC)icharout.h:$(GLSRC)stdpre.h
$(PSSRC)icharout.h:$(GLGEN)arch.h
+$(PSSRC)icharout.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icolor.h:$(PSSRC)iref.h
$(PSSRC)icolor.h:$(GLSRC)gxalloc.h
$(PSSRC)icolor.h:$(GLSRC)gxobj.h
$(PSSRC)icolor.h:$(GLSRC)gsnamecl.h
$(PSSRC)icolor.h:$(GLSRC)gxcspace.h
+$(PSSRC)icolor.h:$(GLSRC)gscsel.h
$(PSSRC)icolor.h:$(GLSRC)gsdcolor.h
$(PSSRC)icolor.h:$(GLSRC)gxfrac.h
+$(PSSRC)icolor.h:$(GLSRC)gxtmap.h
$(PSSRC)icolor.h:$(GLSRC)gscms.h
-$(PSSRC)icolor.h:$(GLSRC)gscspace.h
$(PSSRC)icolor.h:$(GLSRC)gsdevice.h
-$(PSSRC)icolor.h:$(GLSRC)gxarith.h
-$(PSSRC)icolor.h:$(GLSRC)gxhttile.h
+$(PSSRC)icolor.h:$(GLSRC)gscspace.h
+$(PSSRC)icolor.h:$(GLSRC)gsgstate.h
$(PSSRC)icolor.h:$(GLSRC)gsiparam.h
-$(PSSRC)icolor.h:$(GLSRC)gxbitmap.h
$(PSSRC)icolor.h:$(GLSRC)gsmatrix.h
-$(PSSRC)icolor.h:$(GLSRC)gsrefct.h
+$(PSSRC)icolor.h:$(GLSRC)gxhttile.h
$(PSSRC)icolor.h:$(GLSRC)gsparam.h
-$(PSSRC)icolor.h:$(GLSRC)gsccolor.h
+$(PSSRC)icolor.h:$(GLSRC)gsrefct.h
+$(PSSRC)icolor.h:$(GLSRC)memento.h
$(PSSRC)icolor.h:$(GLSRC)gsstruct.h
$(PSSRC)icolor.h:$(GLSRC)gxsync.h
+$(PSSRC)icolor.h:$(GLSRC)gxbitmap.h
$(PSSRC)icolor.h:$(GLSRC)scommon.h
-$(PSSRC)icolor.h:$(GLSRC)memento.h
-$(PSSRC)icolor.h:$(GLSRC)gscsel.h
$(PSSRC)icolor.h:$(GLSRC)gsbitmap.h
+$(PSSRC)icolor.h:$(GLSRC)gsccolor.h
+$(PSSRC)icolor.h:$(GLSRC)gxarith.h
+$(PSSRC)icolor.h:$(GLSRC)gpsync.h
$(PSSRC)icolor.h:$(GLSRC)gsstype.h
-$(PSSRC)icolor.h:$(GLSRC)gxtmap.h
$(PSSRC)icolor.h:$(GLSRC)gsmemory.h
-$(PSSRC)icolor.h:$(GLSRC)gpsync.h
$(PSSRC)icolor.h:$(GLSRC)gslibctx.h
-$(PSSRC)icolor.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icolor.h:$(GLSRC)gsalloc.h
-$(PSSRC)icolor.h:$(GLSRC)stdio_.h
$(PSSRC)icolor.h:$(GLSRC)gxcindex.h
-$(PSSRC)icolor.h:$(GLSRC)gsgstate.h
+$(PSSRC)icolor.h:$(GLSRC)stdio_.h
$(PSSRC)icolor.h:$(GLSRC)stdint_.h
$(PSSRC)icolor.h:$(GLSRC)gssprintf.h
-$(PSSRC)icolor.h:$(GLSRC)std.h
$(PSSRC)icolor.h:$(GLSRC)gstypes.h
+$(PSSRC)icolor.h:$(GLSRC)std.h
$(PSSRC)icolor.h:$(GLSRC)stdpre.h
$(PSSRC)icolor.h:$(GLGEN)arch.h
+$(PSSRC)icolor.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icremap.h:$(PSSRC)igstate.h
$(PSSRC)icremap.h:$(GLSRC)gsstate.h
$(PSSRC)icremap.h:$(GLSRC)gsovrc.h
$(PSSRC)icremap.h:$(GLSRC)gscolor.h
-$(PSSRC)icremap.h:$(GLSRC)gxcomp.h
$(PSSRC)icremap.h:$(GLSRC)gsline.h
+$(PSSRC)icremap.h:$(GLSRC)gxcomp.h
$(PSSRC)icremap.h:$(PSSRC)istruct.h
-$(PSSRC)icremap.h:$(GLSRC)gxbitfmt.h
$(PSSRC)icremap.h:$(PSSRC)imemory.h
-$(PSSRC)icremap.h:$(PSSRC)ivmspace.h
$(PSSRC)icremap.h:$(GLSRC)gsht.h
+$(PSSRC)icremap.h:$(PSSRC)ivmspace.h
$(PSSRC)icremap.h:$(PSSRC)iref.h
$(PSSRC)icremap.h:$(GLSRC)gsgc.h
$(PSSRC)icremap.h:$(GLSRC)gxalloc.h
$(PSSRC)icremap.h:$(GLSRC)gxobj.h
-$(PSSRC)icremap.h:$(GLSRC)gsnamecl.h
$(PSSRC)icremap.h:$(GLSRC)gxstate.h
+$(PSSRC)icremap.h:$(GLSRC)gsnamecl.h
$(PSSRC)icremap.h:$(GLSRC)gxcspace.h
+$(PSSRC)icremap.h:$(GLSRC)gscsel.h
$(PSSRC)icremap.h:$(GLSRC)gsdcolor.h
$(PSSRC)icremap.h:$(GLSRC)gxfrac.h
+$(PSSRC)icremap.h:$(GLSRC)gxtmap.h
$(PSSRC)icremap.h:$(GLSRC)gscms.h
-$(PSSRC)icremap.h:$(GLSRC)gscspace.h
-$(PSSRC)icremap.h:$(GLSRC)gsdevice.h
-$(PSSRC)icremap.h:$(GLSRC)gxarith.h
-$(PSSRC)icremap.h:$(GLSRC)gxhttile.h
$(PSSRC)icremap.h:$(GLSRC)gslparam.h
+$(PSSRC)icremap.h:$(GLSRC)gsdevice.h
+$(PSSRC)icremap.h:$(GLSRC)gxbitfmt.h
+$(PSSRC)icremap.h:$(GLSRC)gscpm.h
+$(PSSRC)icremap.h:$(GLSRC)gscspace.h
+$(PSSRC)icremap.h:$(GLSRC)gsgstate.h
$(PSSRC)icremap.h:$(GLSRC)gsiparam.h
-$(PSSRC)icremap.h:$(GLSRC)gxbitmap.h
+$(PSSRC)icremap.h:$(GLSRC)gscompt.h
$(PSSRC)icremap.h:$(GLSRC)gsmatrix.h
-$(PSSRC)icremap.h:$(GLSRC)gscpm.h
-$(PSSRC)icremap.h:$(GLSRC)gsrefct.h
+$(PSSRC)icremap.h:$(GLSRC)gxhttile.h
$(PSSRC)icremap.h:$(GLSRC)gsparam.h
-$(PSSRC)icremap.h:$(GLSRC)gsccolor.h
+$(PSSRC)icremap.h:$(GLSRC)gsrefct.h
+$(PSSRC)icremap.h:$(GLSRC)memento.h
$(PSSRC)icremap.h:$(GLSRC)gsstruct.h
$(PSSRC)icremap.h:$(GLSRC)gxsync.h
+$(PSSRC)icremap.h:$(GLSRC)gxbitmap.h
$(PSSRC)icremap.h:$(GLSRC)scommon.h
-$(PSSRC)icremap.h:$(GLSRC)memento.h
-$(PSSRC)icremap.h:$(GLSRC)gscsel.h
$(PSSRC)icremap.h:$(GLSRC)gsbitmap.h
+$(PSSRC)icremap.h:$(GLSRC)gsccolor.h
+$(PSSRC)icremap.h:$(GLSRC)gxarith.h
+$(PSSRC)icremap.h:$(GLSRC)gpsync.h
$(PSSRC)icremap.h:$(GLSRC)gsstype.h
-$(PSSRC)icremap.h:$(GLSRC)gxtmap.h
$(PSSRC)icremap.h:$(GLSRC)gsmemory.h
-$(PSSRC)icremap.h:$(GLSRC)gpsync.h
$(PSSRC)icremap.h:$(GLSRC)gslibctx.h
-$(PSSRC)icremap.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icremap.h:$(GLSRC)gsalloc.h
-$(PSSRC)icremap.h:$(GLSRC)stdio_.h
-$(PSSRC)icremap.h:$(GLSRC)gscompt.h
$(PSSRC)icremap.h:$(GLSRC)gxcindex.h
-$(PSSRC)icremap.h:$(GLSRC)gsgstate.h
+$(PSSRC)icremap.h:$(GLSRC)stdio_.h
$(PSSRC)icremap.h:$(GLSRC)stdint_.h
$(PSSRC)icremap.h:$(GLSRC)gssprintf.h
-$(PSSRC)icremap.h:$(GLSRC)std.h
$(PSSRC)icremap.h:$(GLSRC)gstypes.h
+$(PSSRC)icremap.h:$(GLSRC)std.h
$(PSSRC)icremap.h:$(GLSRC)stdpre.h
$(PSSRC)icremap.h:$(GLGEN)arch.h
+$(PSSRC)icremap.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icsmap.h:$(PSSRC)iref.h
$(PSSRC)icsmap.h:$(GLSRC)gxalloc.h
$(PSSRC)icsmap.h:$(GLSRC)gxobj.h
$(PSSRC)icsmap.h:$(GLSRC)gsnamecl.h
$(PSSRC)icsmap.h:$(GLSRC)gxcspace.h
+$(PSSRC)icsmap.h:$(GLSRC)gscsel.h
$(PSSRC)icsmap.h:$(GLSRC)gsdcolor.h
$(PSSRC)icsmap.h:$(GLSRC)gxfrac.h
$(PSSRC)icsmap.h:$(GLSRC)gscms.h
-$(PSSRC)icsmap.h:$(GLSRC)gscspace.h
$(PSSRC)icsmap.h:$(GLSRC)gsdevice.h
-$(PSSRC)icsmap.h:$(GLSRC)gxarith.h
-$(PSSRC)icsmap.h:$(GLSRC)gxhttile.h
+$(PSSRC)icsmap.h:$(GLSRC)gscspace.h
+$(PSSRC)icsmap.h:$(GLSRC)gsgstate.h
$(PSSRC)icsmap.h:$(GLSRC)gsiparam.h
-$(PSSRC)icsmap.h:$(GLSRC)gxbitmap.h
$(PSSRC)icsmap.h:$(GLSRC)gsmatrix.h
-$(PSSRC)icsmap.h:$(GLSRC)gsrefct.h
+$(PSSRC)icsmap.h:$(GLSRC)gxhttile.h
$(PSSRC)icsmap.h:$(GLSRC)gsparam.h
-$(PSSRC)icsmap.h:$(GLSRC)gsccolor.h
+$(PSSRC)icsmap.h:$(GLSRC)gsrefct.h
+$(PSSRC)icsmap.h:$(GLSRC)memento.h
$(PSSRC)icsmap.h:$(GLSRC)gsstruct.h
$(PSSRC)icsmap.h:$(GLSRC)gxsync.h
+$(PSSRC)icsmap.h:$(GLSRC)gxbitmap.h
$(PSSRC)icsmap.h:$(GLSRC)scommon.h
-$(PSSRC)icsmap.h:$(GLSRC)memento.h
-$(PSSRC)icsmap.h:$(GLSRC)gscsel.h
$(PSSRC)icsmap.h:$(GLSRC)gsbitmap.h
+$(PSSRC)icsmap.h:$(GLSRC)gsccolor.h
+$(PSSRC)icsmap.h:$(GLSRC)gxarith.h
+$(PSSRC)icsmap.h:$(GLSRC)gpsync.h
$(PSSRC)icsmap.h:$(GLSRC)gsstype.h
$(PSSRC)icsmap.h:$(GLSRC)gsmemory.h
-$(PSSRC)icsmap.h:$(GLSRC)gpsync.h
$(PSSRC)icsmap.h:$(GLSRC)gslibctx.h
-$(PSSRC)icsmap.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icsmap.h:$(GLSRC)gsalloc.h
-$(PSSRC)icsmap.h:$(GLSRC)stdio_.h
$(PSSRC)icsmap.h:$(GLSRC)gxcindex.h
-$(PSSRC)icsmap.h:$(GLSRC)gsgstate.h
+$(PSSRC)icsmap.h:$(GLSRC)stdio_.h
$(PSSRC)icsmap.h:$(GLSRC)stdint_.h
$(PSSRC)icsmap.h:$(GLSRC)gssprintf.h
-$(PSSRC)icsmap.h:$(GLSRC)std.h
$(PSSRC)icsmap.h:$(GLSRC)gstypes.h
+$(PSSRC)icsmap.h:$(GLSRC)std.h
$(PSSRC)icsmap.h:$(GLSRC)stdpre.h
$(PSSRC)icsmap.h:$(GLGEN)arch.h
+$(PSSRC)icsmap.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idisp.h:$(PSSRC)imain.h
$(PSSRC)idisp.h:$(GLSRC)gsexit.h
$(PSSRC)idisp.h:$(PSSRC)iref.h
@@ -4572,48 +4572,48 @@ $(PSSRC)idisp.h:$(GLSRC)gxalloc.h
$(PSSRC)idisp.h:$(GLSRC)gxobj.h
$(PSSRC)idisp.h:$(GLSRC)gsnamecl.h
$(PSSRC)idisp.h:$(GLSRC)gxcspace.h
+$(PSSRC)idisp.h:$(GLSRC)gscsel.h
$(PSSRC)idisp.h:$(GLSRC)gsdcolor.h
$(PSSRC)idisp.h:$(GLSRC)gxfrac.h
$(PSSRC)idisp.h:$(GLSRC)gscms.h
-$(PSSRC)idisp.h:$(GLSRC)gscspace.h
$(PSSRC)idisp.h:$(GLSRC)gsdevice.h
-$(PSSRC)idisp.h:$(GLSRC)gxarith.h
-$(PSSRC)idisp.h:$(GLSRC)gxhttile.h
+$(PSSRC)idisp.h:$(GLSRC)gscspace.h
+$(PSSRC)idisp.h:$(GLSRC)gsgstate.h
$(PSSRC)idisp.h:$(GLSRC)gsiparam.h
-$(PSSRC)idisp.h:$(GLSRC)gxbitmap.h
$(PSSRC)idisp.h:$(GLSRC)gsmatrix.h
-$(PSSRC)idisp.h:$(GLSRC)gsrefct.h
+$(PSSRC)idisp.h:$(GLSRC)gxhttile.h
$(PSSRC)idisp.h:$(GLSRC)gsparam.h
-$(PSSRC)idisp.h:$(GLSRC)gsccolor.h
+$(PSSRC)idisp.h:$(GLSRC)gsrefct.h
+$(PSSRC)idisp.h:$(GLSRC)memento.h
$(PSSRC)idisp.h:$(GLSRC)gsstruct.h
$(PSSRC)idisp.h:$(GLSRC)gxsync.h
+$(PSSRC)idisp.h:$(GLSRC)gxbitmap.h
$(PSSRC)idisp.h:$(GLSRC)scommon.h
-$(PSSRC)idisp.h:$(GLSRC)memento.h
-$(PSSRC)idisp.h:$(GLSRC)gscsel.h
$(PSSRC)idisp.h:$(GLSRC)gsbitmap.h
+$(PSSRC)idisp.h:$(GLSRC)gsccolor.h
+$(PSSRC)idisp.h:$(GLSRC)gxarith.h
+$(PSSRC)idisp.h:$(GLSRC)gpsync.h
$(PSSRC)idisp.h:$(GLSRC)gsstype.h
$(PSSRC)idisp.h:$(GLSRC)gsmemory.h
-$(PSSRC)idisp.h:$(GLSRC)gpsync.h
$(PSSRC)idisp.h:$(GLSRC)gslibctx.h
-$(PSSRC)idisp.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idisp.h:$(GLSRC)gsalloc.h
-$(PSSRC)idisp.h:$(GLSRC)stdio_.h
$(PSSRC)idisp.h:$(GLSRC)gxcindex.h
-$(PSSRC)idisp.h:$(GLSRC)gsgstate.h
+$(PSSRC)idisp.h:$(GLSRC)stdio_.h
$(PSSRC)idisp.h:$(GLSRC)stdint_.h
$(PSSRC)idisp.h:$(GLSRC)gssprintf.h
-$(PSSRC)idisp.h:$(GLSRC)std.h
$(PSSRC)idisp.h:$(GLSRC)gstypes.h
+$(PSSRC)idisp.h:$(GLSRC)std.h
$(PSSRC)idisp.h:$(GLSRC)stdpre.h
$(PSSRC)idisp.h:$(GLGEN)arch.h
+$(PSSRC)idisp.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifilter2.h:$(GLSRC)scfx.h
$(PSSRC)ifilter2.h:$(GLSRC)slzwx.h
$(PSSRC)ifilter2.h:$(GLSRC)spdiffx.h
$(PSSRC)ifilter2.h:$(GLSRC)spngpx.h
$(PSSRC)ifilter2.h:$(PSSRC)iostack.h
$(PSSRC)ifilter2.h:$(PSSRC)istack.h
-$(PSSRC)ifilter2.h:$(PSSRC)iosdata.h
$(PSSRC)ifilter2.h:$(GLSRC)shc.h
+$(PSSRC)ifilter2.h:$(PSSRC)iosdata.h
$(PSSRC)ifilter2.h:$(PSSRC)isdata.h
$(PSSRC)ifilter2.h:$(PSSRC)imemory.h
$(PSSRC)ifilter2.h:$(PSSRC)ivmspace.h
@@ -4623,99 +4623,99 @@ $(PSSRC)ifilter2.h:$(GLSRC)gxalloc.h
$(PSSRC)ifilter2.h:$(GLSRC)gxobj.h
$(PSSRC)ifilter2.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifilter2.h:$(GLSRC)gxcspace.h
+$(PSSRC)ifilter2.h:$(GLSRC)gscsel.h
$(PSSRC)ifilter2.h:$(GLSRC)gsdcolor.h
$(PSSRC)ifilter2.h:$(GLSRC)gxfrac.h
$(PSSRC)ifilter2.h:$(GLSRC)gscms.h
-$(PSSRC)ifilter2.h:$(GLSRC)gscspace.h
$(PSSRC)ifilter2.h:$(GLSRC)gsdevice.h
-$(PSSRC)ifilter2.h:$(GLSRC)gxarith.h
-$(PSSRC)ifilter2.h:$(GLSRC)gxhttile.h
+$(PSSRC)ifilter2.h:$(GLSRC)gscspace.h
+$(PSSRC)ifilter2.h:$(GLSRC)gsgstate.h
$(PSSRC)ifilter2.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifilter2.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifilter2.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifilter2.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifilter2.h:$(GLSRC)gxhttile.h
$(PSSRC)ifilter2.h:$(GLSRC)gsparam.h
-$(PSSRC)ifilter2.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifilter2.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifilter2.h:$(GLSRC)memento.h
$(PSSRC)ifilter2.h:$(GLSRC)gsstruct.h
$(PSSRC)ifilter2.h:$(GLSRC)gxsync.h
+$(PSSRC)ifilter2.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifilter2.h:$(GLSRC)scommon.h
-$(PSSRC)ifilter2.h:$(GLSRC)memento.h
-$(PSSRC)ifilter2.h:$(GLSRC)gscsel.h
$(PSSRC)ifilter2.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ifilter2.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifilter2.h:$(GLSRC)gxarith.h
+$(PSSRC)ifilter2.h:$(GLSRC)gpsync.h
$(PSSRC)ifilter2.h:$(GLSRC)gsstype.h
$(PSSRC)ifilter2.h:$(GLSRC)gsmemory.h
-$(PSSRC)ifilter2.h:$(GLSRC)gpsync.h
$(PSSRC)ifilter2.h:$(GLSRC)gslibctx.h
-$(PSSRC)ifilter2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifilter2.h:$(GLSRC)gsalloc.h
-$(PSSRC)ifilter2.h:$(GLSRC)stdio_.h
-$(PSSRC)ifilter2.h:$(GLSRC)gsbittab.h
$(PSSRC)ifilter2.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifilter2.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifilter2.h:$(GLSRC)stdio_.h
$(PSSRC)ifilter2.h:$(GLSRC)stdint_.h
$(PSSRC)ifilter2.h:$(GLSRC)gssprintf.h
-$(PSSRC)ifilter2.h:$(GLSRC)std.h
+$(PSSRC)ifilter2.h:$(GLSRC)gsbittab.h
$(PSSRC)ifilter2.h:$(GLSRC)gstypes.h
+$(PSSRC)ifilter2.h:$(GLSRC)std.h
$(PSSRC)ifilter2.h:$(GLSRC)stdpre.h
$(PSSRC)ifilter2.h:$(GLGEN)arch.h
+$(PSSRC)ifilter2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifont.h:$(GLSRC)gxfont.h
$(PSSRC)ifont.h:$(GLSRC)gspath.h
-$(PSSRC)ifont.h:$(GLSRC)gxmatrix.h
$(PSSRC)ifont.h:$(GLSRC)gsgdata.h
-$(PSSRC)ifont.h:$(GLSRC)gsgcache.h
+$(PSSRC)ifont.h:$(GLSRC)gxmatrix.h
$(PSSRC)ifont.h:$(GLSRC)gxfapi.h
-$(PSSRC)ifont.h:$(GLSRC)gsnotify.h
$(PSSRC)ifont.h:$(GLSRC)gsfcmap.h
$(PSSRC)ifont.h:$(PSSRC)iref.h
$(PSSRC)ifont.h:$(GLSRC)gxalloc.h
-$(PSSRC)ifont.h:$(GLSRC)gstext.h
$(PSSRC)ifont.h:$(GLSRC)gxobj.h
+$(PSSRC)ifont.h:$(GLSRC)gstext.h
$(PSSRC)ifont.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifont.h:$(GLSRC)gxcspace.h
-$(PSSRC)ifont.h:$(GLSRC)gsuid.h
-$(PSSRC)ifont.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifont.h:$(GLSRC)gscsel.h
$(PSSRC)ifont.h:$(GLSRC)gsfont.h
-$(PSSRC)ifont.h:$(GLSRC)gxftype.h
+$(PSSRC)ifont.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifont.h:$(GLSRC)gxpath.h
$(PSSRC)ifont.h:$(GLSRC)gxfrac.h
+$(PSSRC)ifont.h:$(GLSRC)gxftype.h
$(PSSRC)ifont.h:$(GLSRC)gscms.h
-$(PSSRC)ifont.h:$(GLSRC)gscspace.h
-$(PSSRC)ifont.h:$(GLSRC)gxpath.h
-$(PSSRC)ifont.h:$(GLSRC)gsdevice.h
-$(PSSRC)ifont.h:$(GLSRC)gxarith.h
-$(PSSRC)ifont.h:$(GLSRC)gspenum.h
-$(PSSRC)ifont.h:$(GLSRC)gxhttile.h
$(PSSRC)ifont.h:$(GLSRC)gsrect.h
$(PSSRC)ifont.h:$(GLSRC)gslparam.h
-$(PSSRC)ifont.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifont.h:$(GLSRC)gxbitmap.h
-$(PSSRC)ifont.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifont.h:$(GLSRC)gsdevice.h
$(PSSRC)ifont.h:$(GLSRC)gscpm.h
+$(PSSRC)ifont.h:$(GLSRC)gsgcache.h
+$(PSSRC)ifont.h:$(GLSRC)gscspace.h
+$(PSSRC)ifont.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifont.h:$(GLSRC)gsnotify.h
+$(PSSRC)ifont.h:$(GLSRC)gsiparam.h
$(PSSRC)ifont.h:$(GLSRC)gxfixed.h
-$(PSSRC)ifont.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifont.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifont.h:$(GLSRC)gspenum.h
+$(PSSRC)ifont.h:$(GLSRC)gxhttile.h
$(PSSRC)ifont.h:$(GLSRC)gsparam.h
-$(PSSRC)ifont.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifont.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifont.h:$(GLSRC)memento.h
+$(PSSRC)ifont.h:$(GLSRC)gsuid.h
$(PSSRC)ifont.h:$(GLSRC)gsstruct.h
$(PSSRC)ifont.h:$(GLSRC)gxsync.h
+$(PSSRC)ifont.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifont.h:$(GLSRC)scommon.h
-$(PSSRC)ifont.h:$(GLSRC)memento.h
-$(PSSRC)ifont.h:$(GLSRC)gscsel.h
$(PSSRC)ifont.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ifont.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifont.h:$(GLSRC)gxarith.h
+$(PSSRC)ifont.h:$(GLSRC)gpsync.h
$(PSSRC)ifont.h:$(GLSRC)gsstype.h
$(PSSRC)ifont.h:$(GLSRC)gsmemory.h
-$(PSSRC)ifont.h:$(GLSRC)gpsync.h
$(PSSRC)ifont.h:$(GLSRC)gslibctx.h
-$(PSSRC)ifont.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifont.h:$(GLSRC)gsalloc.h
-$(PSSRC)ifont.h:$(GLSRC)stdio_.h
$(PSSRC)ifont.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifont.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifont.h:$(GLSRC)stdio_.h
+$(PSSRC)ifont.h:$(GLSRC)gsccode.h
$(PSSRC)ifont.h:$(GLSRC)stdint_.h
$(PSSRC)ifont.h:$(GLSRC)gssprintf.h
-$(PSSRC)ifont.h:$(GLSRC)gsccode.h
-$(PSSRC)ifont.h:$(GLSRC)std.h
$(PSSRC)ifont.h:$(GLSRC)gstypes.h
+$(PSSRC)ifont.h:$(GLSRC)std.h
$(PSSRC)ifont.h:$(GLSRC)stdpre.h
$(PSSRC)ifont.h:$(GLGEN)arch.h
+$(PSSRC)ifont.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifont1.h:$(PSSRC)ichar1.h
$(PSSRC)ifont1.h:$(GLSRC)gxfont1.h
$(PSSRC)ifont1.h:$(PSSRC)bfont.h
@@ -4725,67 +4725,67 @@ $(PSSRC)ifont1.h:$(GLSRC)gxfont.h
$(PSSRC)ifont1.h:$(PSSRC)iostack.h
$(PSSRC)ifont1.h:$(GLSRC)gspath.h
$(PSSRC)ifont1.h:$(PSSRC)istack.h
-$(PSSRC)ifont1.h:$(GLSRC)gxmatrix.h
$(PSSRC)ifont1.h:$(GLSRC)gsgdata.h
$(PSSRC)ifont1.h:$(PSSRC)iosdata.h
-$(PSSRC)ifont1.h:$(GLSRC)gsgcache.h
+$(PSSRC)ifont1.h:$(GLSRC)gxmatrix.h
$(PSSRC)ifont1.h:$(GLSRC)gxfapi.h
-$(PSSRC)ifont1.h:$(GLSRC)gsnotify.h
-$(PSSRC)ifont1.h:$(GLSRC)gsfcmap.h
$(PSSRC)ifont1.h:$(PSSRC)isdata.h
$(PSSRC)ifont1.h:$(PSSRC)imemory.h
+$(PSSRC)ifont1.h:$(GLSRC)gsfcmap.h
$(PSSRC)ifont1.h:$(PSSRC)ivmspace.h
$(PSSRC)ifont1.h:$(PSSRC)iref.h
$(PSSRC)ifont1.h:$(GLSRC)gsgc.h
$(PSSRC)ifont1.h:$(GLSRC)gxalloc.h
-$(PSSRC)ifont1.h:$(GLSRC)gstext.h
$(PSSRC)ifont1.h:$(GLSRC)gxobj.h
+$(PSSRC)ifont1.h:$(GLSRC)gstext.h
$(PSSRC)ifont1.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifont1.h:$(GLSRC)gxcspace.h
-$(PSSRC)ifont1.h:$(GLSRC)gsuid.h
-$(PSSRC)ifont1.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifont1.h:$(GLSRC)gscsel.h
$(PSSRC)ifont1.h:$(GLSRC)gsfont.h
-$(PSSRC)ifont1.h:$(GLSRC)gxftype.h
+$(PSSRC)ifont1.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifont1.h:$(GLSRC)gxpath.h
$(PSSRC)ifont1.h:$(GLSRC)gxfrac.h
+$(PSSRC)ifont1.h:$(GLSRC)gxftype.h
$(PSSRC)ifont1.h:$(GLSRC)gscms.h
-$(PSSRC)ifont1.h:$(GLSRC)gscspace.h
-$(PSSRC)ifont1.h:$(GLSRC)gxpath.h
-$(PSSRC)ifont1.h:$(GLSRC)gsdevice.h
-$(PSSRC)ifont1.h:$(GLSRC)gxarith.h
-$(PSSRC)ifont1.h:$(GLSRC)gspenum.h
-$(PSSRC)ifont1.h:$(GLSRC)gxhttile.h
$(PSSRC)ifont1.h:$(GLSRC)gsrect.h
$(PSSRC)ifont1.h:$(GLSRC)gslparam.h
-$(PSSRC)ifont1.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifont1.h:$(GLSRC)gxbitmap.h
-$(PSSRC)ifont1.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifont1.h:$(GLSRC)gsdevice.h
$(PSSRC)ifont1.h:$(GLSRC)gscpm.h
+$(PSSRC)ifont1.h:$(GLSRC)gsgcache.h
+$(PSSRC)ifont1.h:$(GLSRC)gscspace.h
+$(PSSRC)ifont1.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifont1.h:$(GLSRC)gsnotify.h
+$(PSSRC)ifont1.h:$(GLSRC)gsiparam.h
$(PSSRC)ifont1.h:$(GLSRC)gxfixed.h
-$(PSSRC)ifont1.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifont1.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifont1.h:$(GLSRC)gspenum.h
+$(PSSRC)ifont1.h:$(GLSRC)gxhttile.h
$(PSSRC)ifont1.h:$(GLSRC)gsparam.h
-$(PSSRC)ifont1.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifont1.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifont1.h:$(GLSRC)memento.h
+$(PSSRC)ifont1.h:$(GLSRC)gsuid.h
$(PSSRC)ifont1.h:$(GLSRC)gsstruct.h
$(PSSRC)ifont1.h:$(GLSRC)gxsync.h
+$(PSSRC)ifont1.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifont1.h:$(GLSRC)scommon.h
-$(PSSRC)ifont1.h:$(GLSRC)memento.h
-$(PSSRC)ifont1.h:$(GLSRC)gscsel.h
$(PSSRC)ifont1.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ifont1.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifont1.h:$(GLSRC)gxarith.h
+$(PSSRC)ifont1.h:$(GLSRC)gpsync.h
$(PSSRC)ifont1.h:$(GLSRC)gsstype.h
$(PSSRC)ifont1.h:$(GLSRC)gsmemory.h
-$(PSSRC)ifont1.h:$(GLSRC)gpsync.h
$(PSSRC)ifont1.h:$(GLSRC)gslibctx.h
-$(PSSRC)ifont1.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifont1.h:$(GLSRC)gsalloc.h
-$(PSSRC)ifont1.h:$(GLSRC)stdio_.h
$(PSSRC)ifont1.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifont1.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifont1.h:$(GLSRC)stdio_.h
+$(PSSRC)ifont1.h:$(GLSRC)gsccode.h
$(PSSRC)ifont1.h:$(GLSRC)stdint_.h
$(PSSRC)ifont1.h:$(GLSRC)gssprintf.h
-$(PSSRC)ifont1.h:$(GLSRC)gsccode.h
-$(PSSRC)ifont1.h:$(GLSRC)std.h
$(PSSRC)ifont1.h:$(GLSRC)gstypes.h
+$(PSSRC)ifont1.h:$(GLSRC)std.h
$(PSSRC)ifont1.h:$(GLSRC)stdpre.h
$(PSSRC)ifont1.h:$(GLGEN)arch.h
+$(PSSRC)ifont1.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifont2.h:$(PSSRC)ifont1.h
$(PSSRC)ifont2.h:$(PSSRC)ichar1.h
$(PSSRC)ifont2.h:$(GLSRC)gxfont1.h
@@ -4796,67 +4796,67 @@ $(PSSRC)ifont2.h:$(GLSRC)gxfont.h
$(PSSRC)ifont2.h:$(PSSRC)iostack.h
$(PSSRC)ifont2.h:$(GLSRC)gspath.h
$(PSSRC)ifont2.h:$(PSSRC)istack.h
-$(PSSRC)ifont2.h:$(GLSRC)gxmatrix.h
$(PSSRC)ifont2.h:$(GLSRC)gsgdata.h
$(PSSRC)ifont2.h:$(PSSRC)iosdata.h
-$(PSSRC)ifont2.h:$(GLSRC)gsgcache.h
+$(PSSRC)ifont2.h:$(GLSRC)gxmatrix.h
$(PSSRC)ifont2.h:$(GLSRC)gxfapi.h
-$(PSSRC)ifont2.h:$(GLSRC)gsnotify.h
-$(PSSRC)ifont2.h:$(GLSRC)gsfcmap.h
$(PSSRC)ifont2.h:$(PSSRC)isdata.h
$(PSSRC)ifont2.h:$(PSSRC)imemory.h
+$(PSSRC)ifont2.h:$(GLSRC)gsfcmap.h
$(PSSRC)ifont2.h:$(PSSRC)ivmspace.h
$(PSSRC)ifont2.h:$(PSSRC)iref.h
$(PSSRC)ifont2.h:$(GLSRC)gsgc.h
$(PSSRC)ifont2.h:$(GLSRC)gxalloc.h
-$(PSSRC)ifont2.h:$(GLSRC)gstext.h
$(PSSRC)ifont2.h:$(GLSRC)gxobj.h
+$(PSSRC)ifont2.h:$(GLSRC)gstext.h
$(PSSRC)ifont2.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifont2.h:$(GLSRC)gxcspace.h
-$(PSSRC)ifont2.h:$(GLSRC)gsuid.h
-$(PSSRC)ifont2.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifont2.h:$(GLSRC)gscsel.h
$(PSSRC)ifont2.h:$(GLSRC)gsfont.h
-$(PSSRC)ifont2.h:$(GLSRC)gxftype.h
+$(PSSRC)ifont2.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifont2.h:$(GLSRC)gxpath.h
$(PSSRC)ifont2.h:$(GLSRC)gxfrac.h
+$(PSSRC)ifont2.h:$(GLSRC)gxftype.h
$(PSSRC)ifont2.h:$(GLSRC)gscms.h
-$(PSSRC)ifont2.h:$(GLSRC)gscspace.h
-$(PSSRC)ifont2.h:$(GLSRC)gxpath.h
-$(PSSRC)ifont2.h:$(GLSRC)gsdevice.h
-$(PSSRC)ifont2.h:$(GLSRC)gxarith.h
-$(PSSRC)ifont2.h:$(GLSRC)gspenum.h
-$(PSSRC)ifont2.h:$(GLSRC)gxhttile.h
$(PSSRC)ifont2.h:$(GLSRC)gsrect.h
$(PSSRC)ifont2.h:$(GLSRC)gslparam.h
-$(PSSRC)ifont2.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifont2.h:$(GLSRC)gxbitmap.h
-$(PSSRC)ifont2.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifont2.h:$(GLSRC)gsdevice.h
$(PSSRC)ifont2.h:$(GLSRC)gscpm.h
+$(PSSRC)ifont2.h:$(GLSRC)gsgcache.h
+$(PSSRC)ifont2.h:$(GLSRC)gscspace.h
+$(PSSRC)ifont2.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifont2.h:$(GLSRC)gsnotify.h
+$(PSSRC)ifont2.h:$(GLSRC)gsiparam.h
$(PSSRC)ifont2.h:$(GLSRC)gxfixed.h
-$(PSSRC)ifont2.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifont2.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifont2.h:$(GLSRC)gspenum.h
+$(PSSRC)ifont2.h:$(GLSRC)gxhttile.h
$(PSSRC)ifont2.h:$(GLSRC)gsparam.h
-$(PSSRC)ifont2.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifont2.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifont2.h:$(GLSRC)memento.h
+$(PSSRC)ifont2.h:$(GLSRC)gsuid.h
$(PSSRC)ifont2.h:$(GLSRC)gsstruct.h
$(PSSRC)ifont2.h:$(GLSRC)gxsync.h
+$(PSSRC)ifont2.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifont2.h:$(GLSRC)scommon.h
-$(PSSRC)ifont2.h:$(GLSRC)memento.h
-$(PSSRC)ifont2.h:$(GLSRC)gscsel.h
$(PSSRC)ifont2.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ifont2.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifont2.h:$(GLSRC)gxarith.h
+$(PSSRC)ifont2.h:$(GLSRC)gpsync.h
$(PSSRC)ifont2.h:$(GLSRC)gsstype.h
$(PSSRC)ifont2.h:$(GLSRC)gsmemory.h
-$(PSSRC)ifont2.h:$(GLSRC)gpsync.h
$(PSSRC)ifont2.h:$(GLSRC)gslibctx.h
-$(PSSRC)ifont2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifont2.h:$(GLSRC)gsalloc.h
-$(PSSRC)ifont2.h:$(GLSRC)stdio_.h
$(PSSRC)ifont2.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifont2.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifont2.h:$(GLSRC)stdio_.h
+$(PSSRC)ifont2.h:$(GLSRC)gsccode.h
$(PSSRC)ifont2.h:$(GLSRC)stdint_.h
$(PSSRC)ifont2.h:$(GLSRC)gssprintf.h
-$(PSSRC)ifont2.h:$(GLSRC)gsccode.h
-$(PSSRC)ifont2.h:$(GLSRC)std.h
$(PSSRC)ifont2.h:$(GLSRC)gstypes.h
+$(PSSRC)ifont2.h:$(GLSRC)std.h
$(PSSRC)ifont2.h:$(GLSRC)stdpre.h
$(PSSRC)ifont2.h:$(GLGEN)arch.h
+$(PSSRC)ifont2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifont42.h:$(PSSRC)bfont.h
$(PSSRC)ifont42.h:$(PSSRC)ifont.h
$(PSSRC)ifont42.h:$(GLSRC)gxfont42.h
@@ -4864,148 +4864,148 @@ $(PSSRC)ifont42.h:$(GLSRC)gxfont.h
$(PSSRC)ifont42.h:$(PSSRC)iostack.h
$(PSSRC)ifont42.h:$(GLSRC)gspath.h
$(PSSRC)ifont42.h:$(PSSRC)istack.h
-$(PSSRC)ifont42.h:$(GLSRC)gxmatrix.h
$(PSSRC)ifont42.h:$(GLSRC)gsgdata.h
$(PSSRC)ifont42.h:$(PSSRC)iosdata.h
-$(PSSRC)ifont42.h:$(GLSRC)gsgcache.h
+$(PSSRC)ifont42.h:$(GLSRC)gxmatrix.h
$(PSSRC)ifont42.h:$(GLSRC)gxfapi.h
-$(PSSRC)ifont42.h:$(GLSRC)gsnotify.h
-$(PSSRC)ifont42.h:$(GLSRC)gsfcmap.h
$(PSSRC)ifont42.h:$(PSSRC)isdata.h
$(PSSRC)ifont42.h:$(PSSRC)imemory.h
+$(PSSRC)ifont42.h:$(GLSRC)gsfcmap.h
$(PSSRC)ifont42.h:$(PSSRC)ivmspace.h
$(PSSRC)ifont42.h:$(PSSRC)iref.h
$(PSSRC)ifont42.h:$(GLSRC)gsgc.h
$(PSSRC)ifont42.h:$(GLSRC)gxalloc.h
-$(PSSRC)ifont42.h:$(GLSRC)gstext.h
$(PSSRC)ifont42.h:$(GLSRC)gxobj.h
+$(PSSRC)ifont42.h:$(GLSRC)gstext.h
$(PSSRC)ifont42.h:$(GLSRC)gsnamecl.h
-$(PSSRC)ifont42.h:$(GLSRC)gxfcache.h
$(PSSRC)ifont42.h:$(GLSRC)gxcspace.h
-$(PSSRC)ifont42.h:$(GLSRC)gsuid.h
-$(PSSRC)ifont42.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifont42.h:$(GLSRC)gscsel.h
+$(PSSRC)ifont42.h:$(GLSRC)gxfcache.h
$(PSSRC)ifont42.h:$(GLSRC)gsfont.h
-$(PSSRC)ifont42.h:$(GLSRC)gxftype.h
+$(PSSRC)ifont42.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifont42.h:$(GLSRC)gxbcache.h
+$(PSSRC)ifont42.h:$(GLSRC)gxpath.h
$(PSSRC)ifont42.h:$(GLSRC)gxfrac.h
+$(PSSRC)ifont42.h:$(GLSRC)gxftype.h
$(PSSRC)ifont42.h:$(GLSRC)gscms.h
-$(PSSRC)ifont42.h:$(GLSRC)gscspace.h
-$(PSSRC)ifont42.h:$(GLSRC)gxpath.h
-$(PSSRC)ifont42.h:$(GLSRC)gxbcache.h
-$(PSSRC)ifont42.h:$(GLSRC)gsdevice.h
-$(PSSRC)ifont42.h:$(GLSRC)gxarith.h
-$(PSSRC)ifont42.h:$(GLSRC)gspenum.h
-$(PSSRC)ifont42.h:$(GLSRC)gxhttile.h
$(PSSRC)ifont42.h:$(GLSRC)gsrect.h
$(PSSRC)ifont42.h:$(GLSRC)gslparam.h
+$(PSSRC)ifont42.h:$(GLSRC)gsdevice.h
+$(PSSRC)ifont42.h:$(GLSRC)gscpm.h
+$(PSSRC)ifont42.h:$(GLSRC)gsgcache.h
+$(PSSRC)ifont42.h:$(GLSRC)gscspace.h
+$(PSSRC)ifont42.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifont42.h:$(GLSRC)gsnotify.h
$(PSSRC)ifont42.h:$(GLSRC)gsxfont.h
$(PSSRC)ifont42.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifont42.h:$(GLSRC)gxbitmap.h
-$(PSSRC)ifont42.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifont42.h:$(GLSRC)gscpm.h
$(PSSRC)ifont42.h:$(GLSRC)gxfixed.h
-$(PSSRC)ifont42.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifont42.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifont42.h:$(GLSRC)gspenum.h
+$(PSSRC)ifont42.h:$(GLSRC)gxhttile.h
$(PSSRC)ifont42.h:$(GLSRC)gsparam.h
-$(PSSRC)ifont42.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifont42.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifont42.h:$(GLSRC)memento.h
+$(PSSRC)ifont42.h:$(GLSRC)gsuid.h
$(PSSRC)ifont42.h:$(GLSRC)gsstruct.h
$(PSSRC)ifont42.h:$(GLSRC)gxsync.h
+$(PSSRC)ifont42.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifont42.h:$(GLSRC)scommon.h
-$(PSSRC)ifont42.h:$(GLSRC)memento.h
-$(PSSRC)ifont42.h:$(GLSRC)gscsel.h
$(PSSRC)ifont42.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ifont42.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifont42.h:$(GLSRC)gxarith.h
+$(PSSRC)ifont42.h:$(GLSRC)gpsync.h
$(PSSRC)ifont42.h:$(GLSRC)gsstype.h
$(PSSRC)ifont42.h:$(GLSRC)gsmemory.h
-$(PSSRC)ifont42.h:$(GLSRC)gpsync.h
$(PSSRC)ifont42.h:$(GLSRC)gslibctx.h
-$(PSSRC)ifont42.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifont42.h:$(GLSRC)gsalloc.h
-$(PSSRC)ifont42.h:$(GLSRC)stdio_.h
$(PSSRC)ifont42.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifont42.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifont42.h:$(GLSRC)stdio_.h
+$(PSSRC)ifont42.h:$(GLSRC)gsccode.h
$(PSSRC)ifont42.h:$(GLSRC)stdint_.h
$(PSSRC)ifont42.h:$(GLSRC)gssprintf.h
-$(PSSRC)ifont42.h:$(GLSRC)gsccode.h
-$(PSSRC)ifont42.h:$(GLSRC)std.h
$(PSSRC)ifont42.h:$(GLSRC)gstypes.h
+$(PSSRC)ifont42.h:$(GLSRC)std.h
$(PSSRC)ifont42.h:$(GLSRC)stdpre.h
$(PSSRC)ifont42.h:$(GLGEN)arch.h
+$(PSSRC)ifont42.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifrpred.h:$(PSSRC)iref.h
$(PSSRC)ifrpred.h:$(GLSRC)gxalloc.h
$(PSSRC)ifrpred.h:$(GLSRC)gxobj.h
$(PSSRC)ifrpred.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifrpred.h:$(GLSRC)gxcspace.h
+$(PSSRC)ifrpred.h:$(GLSRC)gscsel.h
$(PSSRC)ifrpred.h:$(GLSRC)gsdcolor.h
$(PSSRC)ifrpred.h:$(GLSRC)gxfrac.h
$(PSSRC)ifrpred.h:$(GLSRC)gscms.h
-$(PSSRC)ifrpred.h:$(GLSRC)gscspace.h
$(PSSRC)ifrpred.h:$(GLSRC)gsdevice.h
-$(PSSRC)ifrpred.h:$(GLSRC)gxarith.h
-$(PSSRC)ifrpred.h:$(GLSRC)gxhttile.h
+$(PSSRC)ifrpred.h:$(GLSRC)gscspace.h
+$(PSSRC)ifrpred.h:$(GLSRC)gsgstate.h
$(PSSRC)ifrpred.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifrpred.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifrpred.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifrpred.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifrpred.h:$(GLSRC)gxhttile.h
$(PSSRC)ifrpred.h:$(GLSRC)gsparam.h
-$(PSSRC)ifrpred.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifrpred.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifrpred.h:$(GLSRC)memento.h
$(PSSRC)ifrpred.h:$(GLSRC)gsstruct.h
$(PSSRC)ifrpred.h:$(GLSRC)gxsync.h
+$(PSSRC)ifrpred.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifrpred.h:$(GLSRC)scommon.h
-$(PSSRC)ifrpred.h:$(GLSRC)memento.h
-$(PSSRC)ifrpred.h:$(GLSRC)gscsel.h
$(PSSRC)ifrpred.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ifrpred.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifrpred.h:$(GLSRC)gxarith.h
+$(PSSRC)ifrpred.h:$(GLSRC)gpsync.h
$(PSSRC)ifrpred.h:$(GLSRC)gsstype.h
$(PSSRC)ifrpred.h:$(GLSRC)gsmemory.h
-$(PSSRC)ifrpred.h:$(GLSRC)gpsync.h
$(PSSRC)ifrpred.h:$(GLSRC)gslibctx.h
-$(PSSRC)ifrpred.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifrpred.h:$(GLSRC)gsalloc.h
-$(PSSRC)ifrpred.h:$(GLSRC)stdio_.h
$(PSSRC)ifrpred.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifrpred.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifrpred.h:$(GLSRC)stdio_.h
$(PSSRC)ifrpred.h:$(GLSRC)stdint_.h
$(PSSRC)ifrpred.h:$(GLSRC)gssprintf.h
-$(PSSRC)ifrpred.h:$(GLSRC)std.h
$(PSSRC)ifrpred.h:$(GLSRC)gstypes.h
+$(PSSRC)ifrpred.h:$(GLSRC)std.h
$(PSSRC)ifrpred.h:$(GLSRC)stdpre.h
$(PSSRC)ifrpred.h:$(GLGEN)arch.h
+$(PSSRC)ifrpred.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifwpred.h:$(PSSRC)iref.h
$(PSSRC)ifwpred.h:$(GLSRC)gxalloc.h
$(PSSRC)ifwpred.h:$(GLSRC)gxobj.h
$(PSSRC)ifwpred.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifwpred.h:$(GLSRC)gxcspace.h
+$(PSSRC)ifwpred.h:$(GLSRC)gscsel.h
$(PSSRC)ifwpred.h:$(GLSRC)gsdcolor.h
$(PSSRC)ifwpred.h:$(GLSRC)gxfrac.h
$(PSSRC)ifwpred.h:$(GLSRC)gscms.h
-$(PSSRC)ifwpred.h:$(GLSRC)gscspace.h
$(PSSRC)ifwpred.h:$(GLSRC)gsdevice.h
-$(PSSRC)ifwpred.h:$(GLSRC)gxarith.h
-$(PSSRC)ifwpred.h:$(GLSRC)gxhttile.h
+$(PSSRC)ifwpred.h:$(GLSRC)gscspace.h
+$(PSSRC)ifwpred.h:$(GLSRC)gsgstate.h
$(PSSRC)ifwpred.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifwpred.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifwpred.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifwpred.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifwpred.h:$(GLSRC)gxhttile.h
$(PSSRC)ifwpred.h:$(GLSRC)gsparam.h
-$(PSSRC)ifwpred.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifwpred.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifwpred.h:$(GLSRC)memento.h
$(PSSRC)ifwpred.h:$(GLSRC)gsstruct.h
$(PSSRC)ifwpred.h:$(GLSRC)gxsync.h
+$(PSSRC)ifwpred.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifwpred.h:$(GLSRC)scommon.h
-$(PSSRC)ifwpred.h:$(GLSRC)memento.h
-$(PSSRC)ifwpred.h:$(GLSRC)gscsel.h
$(PSSRC)ifwpred.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ifwpred.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifwpred.h:$(GLSRC)gxarith.h
+$(PSSRC)ifwpred.h:$(GLSRC)gpsync.h
$(PSSRC)ifwpred.h:$(GLSRC)gsstype.h
$(PSSRC)ifwpred.h:$(GLSRC)gsmemory.h
-$(PSSRC)ifwpred.h:$(GLSRC)gpsync.h
$(PSSRC)ifwpred.h:$(GLSRC)gslibctx.h
-$(PSSRC)ifwpred.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifwpred.h:$(GLSRC)gsalloc.h
-$(PSSRC)ifwpred.h:$(GLSRC)stdio_.h
$(PSSRC)ifwpred.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifwpred.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifwpred.h:$(GLSRC)stdio_.h
$(PSSRC)ifwpred.h:$(GLSRC)stdint_.h
$(PSSRC)ifwpred.h:$(GLSRC)gssprintf.h
-$(PSSRC)ifwpred.h:$(GLSRC)std.h
$(PSSRC)ifwpred.h:$(GLSRC)gstypes.h
+$(PSSRC)ifwpred.h:$(GLSRC)std.h
$(PSSRC)ifwpred.h:$(GLSRC)stdpre.h
$(PSSRC)ifwpred.h:$(GLGEN)arch.h
+$(PSSRC)ifwpred.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iht.h:$(GLSRC)gxht.h
$(PSSRC)iht.h:$(GLSRC)gxhttype.h
$(PSSRC)iht.h:$(GLSRC)gsht1.h
@@ -5014,88 +5014,88 @@ $(PSSRC)iht.h:$(PSSRC)istack.h
$(PSSRC)iht.h:$(PSSRC)iosdata.h
$(PSSRC)iht.h:$(PSSRC)isdata.h
$(PSSRC)iht.h:$(PSSRC)imemory.h
-$(PSSRC)iht.h:$(PSSRC)ivmspace.h
$(PSSRC)iht.h:$(GLSRC)gsht.h
+$(PSSRC)iht.h:$(PSSRC)ivmspace.h
$(PSSRC)iht.h:$(PSSRC)iref.h
$(PSSRC)iht.h:$(GLSRC)gsgc.h
$(PSSRC)iht.h:$(GLSRC)gxalloc.h
$(PSSRC)iht.h:$(GLSRC)gxobj.h
$(PSSRC)iht.h:$(GLSRC)gsnamecl.h
$(PSSRC)iht.h:$(GLSRC)gxcspace.h
+$(PSSRC)iht.h:$(GLSRC)gscsel.h
$(PSSRC)iht.h:$(GLSRC)gsdcolor.h
$(PSSRC)iht.h:$(GLSRC)gxfrac.h
+$(PSSRC)iht.h:$(GLSRC)gxtmap.h
$(PSSRC)iht.h:$(GLSRC)gscms.h
-$(PSSRC)iht.h:$(GLSRC)gscspace.h
$(PSSRC)iht.h:$(GLSRC)gsdevice.h
-$(PSSRC)iht.h:$(GLSRC)gxarith.h
-$(PSSRC)iht.h:$(GLSRC)gxhttile.h
+$(PSSRC)iht.h:$(GLSRC)gscspace.h
+$(PSSRC)iht.h:$(GLSRC)gsgstate.h
$(PSSRC)iht.h:$(GLSRC)gsiparam.h
-$(PSSRC)iht.h:$(GLSRC)gxbitmap.h
$(PSSRC)iht.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iht.h:$(GLSRC)gsrefct.h
+$(PSSRC)iht.h:$(GLSRC)gxhttile.h
$(PSSRC)iht.h:$(GLSRC)gsparam.h
-$(PSSRC)iht.h:$(GLSRC)gsccolor.h
+$(PSSRC)iht.h:$(GLSRC)gsrefct.h
+$(PSSRC)iht.h:$(GLSRC)memento.h
$(PSSRC)iht.h:$(GLSRC)gsstruct.h
$(PSSRC)iht.h:$(GLSRC)gxsync.h
+$(PSSRC)iht.h:$(GLSRC)gxbitmap.h
$(PSSRC)iht.h:$(GLSRC)scommon.h
-$(PSSRC)iht.h:$(GLSRC)memento.h
-$(PSSRC)iht.h:$(GLSRC)gscsel.h
$(PSSRC)iht.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iht.h:$(GLSRC)gsccolor.h
+$(PSSRC)iht.h:$(GLSRC)gxarith.h
+$(PSSRC)iht.h:$(GLSRC)gpsync.h
$(PSSRC)iht.h:$(GLSRC)gsstype.h
-$(PSSRC)iht.h:$(GLSRC)gxtmap.h
$(PSSRC)iht.h:$(GLSRC)gsmemory.h
-$(PSSRC)iht.h:$(GLSRC)gpsync.h
$(PSSRC)iht.h:$(GLSRC)gslibctx.h
-$(PSSRC)iht.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iht.h:$(GLSRC)gsalloc.h
-$(PSSRC)iht.h:$(GLSRC)stdio_.h
$(PSSRC)iht.h:$(GLSRC)gxcindex.h
-$(PSSRC)iht.h:$(GLSRC)gsgstate.h
+$(PSSRC)iht.h:$(GLSRC)stdio_.h
$(PSSRC)iht.h:$(GLSRC)stdint_.h
$(PSSRC)iht.h:$(GLSRC)gssprintf.h
-$(PSSRC)iht.h:$(GLSRC)std.h
$(PSSRC)iht.h:$(GLSRC)gstypes.h
+$(PSSRC)iht.h:$(GLSRC)std.h
$(PSSRC)iht.h:$(GLSRC)stdpre.h
$(PSSRC)iht.h:$(GLGEN)arch.h
+$(PSSRC)iht.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iimage.h:$(PSSRC)iref.h
$(PSSRC)iimage.h:$(GLSRC)gxalloc.h
$(PSSRC)iimage.h:$(GLSRC)gxobj.h
$(PSSRC)iimage.h:$(GLSRC)gsnamecl.h
$(PSSRC)iimage.h:$(GLSRC)gxcspace.h
+$(PSSRC)iimage.h:$(GLSRC)gscsel.h
$(PSSRC)iimage.h:$(GLSRC)gsdcolor.h
$(PSSRC)iimage.h:$(GLSRC)gxfrac.h
$(PSSRC)iimage.h:$(GLSRC)gscms.h
-$(PSSRC)iimage.h:$(GLSRC)gscspace.h
$(PSSRC)iimage.h:$(GLSRC)gsdevice.h
-$(PSSRC)iimage.h:$(GLSRC)gxarith.h
-$(PSSRC)iimage.h:$(GLSRC)gxhttile.h
+$(PSSRC)iimage.h:$(GLSRC)gscspace.h
+$(PSSRC)iimage.h:$(GLSRC)gsgstate.h
$(PSSRC)iimage.h:$(GLSRC)gsiparam.h
-$(PSSRC)iimage.h:$(GLSRC)gxbitmap.h
$(PSSRC)iimage.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iimage.h:$(GLSRC)gsrefct.h
+$(PSSRC)iimage.h:$(GLSRC)gxhttile.h
$(PSSRC)iimage.h:$(GLSRC)gsparam.h
-$(PSSRC)iimage.h:$(GLSRC)gsccolor.h
+$(PSSRC)iimage.h:$(GLSRC)gsrefct.h
+$(PSSRC)iimage.h:$(GLSRC)memento.h
$(PSSRC)iimage.h:$(GLSRC)gsstruct.h
$(PSSRC)iimage.h:$(GLSRC)gxsync.h
+$(PSSRC)iimage.h:$(GLSRC)gxbitmap.h
$(PSSRC)iimage.h:$(GLSRC)scommon.h
-$(PSSRC)iimage.h:$(GLSRC)memento.h
-$(PSSRC)iimage.h:$(GLSRC)gscsel.h
$(PSSRC)iimage.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iimage.h:$(GLSRC)gsccolor.h
+$(PSSRC)iimage.h:$(GLSRC)gxarith.h
+$(PSSRC)iimage.h:$(GLSRC)gpsync.h
$(PSSRC)iimage.h:$(GLSRC)gsstype.h
$(PSSRC)iimage.h:$(GLSRC)gsmemory.h
-$(PSSRC)iimage.h:$(GLSRC)gpsync.h
$(PSSRC)iimage.h:$(GLSRC)gslibctx.h
-$(PSSRC)iimage.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iimage.h:$(GLSRC)gsalloc.h
-$(PSSRC)iimage.h:$(GLSRC)stdio_.h
$(PSSRC)iimage.h:$(GLSRC)gxcindex.h
-$(PSSRC)iimage.h:$(GLSRC)gsgstate.h
+$(PSSRC)iimage.h:$(GLSRC)stdio_.h
$(PSSRC)iimage.h:$(GLSRC)stdint_.h
$(PSSRC)iimage.h:$(GLSRC)gssprintf.h
-$(PSSRC)iimage.h:$(GLSRC)std.h
$(PSSRC)iimage.h:$(GLSRC)gstypes.h
+$(PSSRC)iimage.h:$(GLSRC)std.h
$(PSSRC)iimage.h:$(GLSRC)stdpre.h
$(PSSRC)iimage.h:$(GLGEN)arch.h
+$(PSSRC)iimage.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iinit.h:$(PSSRC)imemory.h
$(PSSRC)iinit.h:$(PSSRC)ivmspace.h
$(PSSRC)iinit.h:$(PSSRC)iref.h
@@ -5104,80 +5104,80 @@ $(PSSRC)iinit.h:$(GLSRC)gxalloc.h
$(PSSRC)iinit.h:$(GLSRC)gxobj.h
$(PSSRC)iinit.h:$(GLSRC)gsnamecl.h
$(PSSRC)iinit.h:$(GLSRC)gxcspace.h
+$(PSSRC)iinit.h:$(GLSRC)gscsel.h
$(PSSRC)iinit.h:$(GLSRC)gsdcolor.h
$(PSSRC)iinit.h:$(GLSRC)gxfrac.h
$(PSSRC)iinit.h:$(GLSRC)gscms.h
-$(PSSRC)iinit.h:$(GLSRC)gscspace.h
$(PSSRC)iinit.h:$(GLSRC)gsdevice.h
-$(PSSRC)iinit.h:$(GLSRC)gxarith.h
-$(PSSRC)iinit.h:$(GLSRC)gxhttile.h
+$(PSSRC)iinit.h:$(GLSRC)gscspace.h
+$(PSSRC)iinit.h:$(GLSRC)gsgstate.h
$(PSSRC)iinit.h:$(GLSRC)gsiparam.h
-$(PSSRC)iinit.h:$(GLSRC)gxbitmap.h
$(PSSRC)iinit.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iinit.h:$(GLSRC)gsrefct.h
+$(PSSRC)iinit.h:$(GLSRC)gxhttile.h
$(PSSRC)iinit.h:$(GLSRC)gsparam.h
-$(PSSRC)iinit.h:$(GLSRC)gsccolor.h
+$(PSSRC)iinit.h:$(GLSRC)gsrefct.h
+$(PSSRC)iinit.h:$(GLSRC)memento.h
$(PSSRC)iinit.h:$(GLSRC)gsstruct.h
$(PSSRC)iinit.h:$(GLSRC)gxsync.h
+$(PSSRC)iinit.h:$(GLSRC)gxbitmap.h
$(PSSRC)iinit.h:$(GLSRC)scommon.h
-$(PSSRC)iinit.h:$(GLSRC)memento.h
-$(PSSRC)iinit.h:$(GLSRC)gscsel.h
$(PSSRC)iinit.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iinit.h:$(GLSRC)gsccolor.h
+$(PSSRC)iinit.h:$(GLSRC)gxarith.h
+$(PSSRC)iinit.h:$(GLSRC)gpsync.h
$(PSSRC)iinit.h:$(GLSRC)gsstype.h
$(PSSRC)iinit.h:$(GLSRC)gsmemory.h
-$(PSSRC)iinit.h:$(GLSRC)gpsync.h
$(PSSRC)iinit.h:$(GLSRC)gslibctx.h
-$(PSSRC)iinit.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iinit.h:$(GLSRC)gsalloc.h
-$(PSSRC)iinit.h:$(GLSRC)stdio_.h
$(PSSRC)iinit.h:$(GLSRC)gxcindex.h
-$(PSSRC)iinit.h:$(GLSRC)gsgstate.h
+$(PSSRC)iinit.h:$(GLSRC)stdio_.h
$(PSSRC)iinit.h:$(GLSRC)stdint_.h
$(PSSRC)iinit.h:$(GLSRC)gssprintf.h
-$(PSSRC)iinit.h:$(GLSRC)std.h
$(PSSRC)iinit.h:$(GLSRC)gstypes.h
+$(PSSRC)iinit.h:$(GLSRC)std.h
$(PSSRC)iinit.h:$(GLSRC)stdpre.h
$(PSSRC)iinit.h:$(GLGEN)arch.h
+$(PSSRC)iinit.h:$(GLSRC)gs_dll_call.h
$(PSSRC)imain.h:$(GLSRC)gsexit.h
$(PSSRC)imain.h:$(PSSRC)iref.h
$(PSSRC)imain.h:$(GLSRC)gxalloc.h
$(PSSRC)imain.h:$(GLSRC)gxobj.h
$(PSSRC)imain.h:$(GLSRC)gsnamecl.h
$(PSSRC)imain.h:$(GLSRC)gxcspace.h
+$(PSSRC)imain.h:$(GLSRC)gscsel.h
$(PSSRC)imain.h:$(GLSRC)gsdcolor.h
$(PSSRC)imain.h:$(GLSRC)gxfrac.h
$(PSSRC)imain.h:$(GLSRC)gscms.h
-$(PSSRC)imain.h:$(GLSRC)gscspace.h
$(PSSRC)imain.h:$(GLSRC)gsdevice.h
-$(PSSRC)imain.h:$(GLSRC)gxarith.h
-$(PSSRC)imain.h:$(GLSRC)gxhttile.h
+$(PSSRC)imain.h:$(GLSRC)gscspace.h
+$(PSSRC)imain.h:$(GLSRC)gsgstate.h
$(PSSRC)imain.h:$(GLSRC)gsiparam.h
-$(PSSRC)imain.h:$(GLSRC)gxbitmap.h
$(PSSRC)imain.h:$(GLSRC)gsmatrix.h
-$(PSSRC)imain.h:$(GLSRC)gsrefct.h
+$(PSSRC)imain.h:$(GLSRC)gxhttile.h
$(PSSRC)imain.h:$(GLSRC)gsparam.h
-$(PSSRC)imain.h:$(GLSRC)gsccolor.h
+$(PSSRC)imain.h:$(GLSRC)gsrefct.h
+$(PSSRC)imain.h:$(GLSRC)memento.h
$(PSSRC)imain.h:$(GLSRC)gsstruct.h
$(PSSRC)imain.h:$(GLSRC)gxsync.h
+$(PSSRC)imain.h:$(GLSRC)gxbitmap.h
$(PSSRC)imain.h:$(GLSRC)scommon.h
-$(PSSRC)imain.h:$(GLSRC)memento.h
-$(PSSRC)imain.h:$(GLSRC)gscsel.h
$(PSSRC)imain.h:$(GLSRC)gsbitmap.h
+$(PSSRC)imain.h:$(GLSRC)gsccolor.h
+$(PSSRC)imain.h:$(GLSRC)gxarith.h
+$(PSSRC)imain.h:$(GLSRC)gpsync.h
$(PSSRC)imain.h:$(GLSRC)gsstype.h
$(PSSRC)imain.h:$(GLSRC)gsmemory.h
-$(PSSRC)imain.h:$(GLSRC)gpsync.h
$(PSSRC)imain.h:$(GLSRC)gslibctx.h
-$(PSSRC)imain.h:$(GLSRC)gs_dll_call.h
$(PSSRC)imain.h:$(GLSRC)gsalloc.h
-$(PSSRC)imain.h:$(GLSRC)stdio_.h
$(PSSRC)imain.h:$(GLSRC)gxcindex.h
-$(PSSRC)imain.h:$(GLSRC)gsgstate.h
+$(PSSRC)imain.h:$(GLSRC)stdio_.h
$(PSSRC)imain.h:$(GLSRC)stdint_.h
$(PSSRC)imain.h:$(GLSRC)gssprintf.h
-$(PSSRC)imain.h:$(GLSRC)std.h
$(PSSRC)imain.h:$(GLSRC)gstypes.h
+$(PSSRC)imain.h:$(GLSRC)std.h
$(PSSRC)imain.h:$(GLSRC)stdpre.h
$(PSSRC)imain.h:$(GLGEN)arch.h
+$(PSSRC)imain.h:$(GLSRC)gs_dll_call.h
$(PSSRC)imainarg.h:$(PSSRC)imain.h
$(PSSRC)imainarg.h:$(GLSRC)gsexit.h
$(PSSRC)imainarg.h:$(PSSRC)iref.h
@@ -5185,40 +5185,40 @@ $(PSSRC)imainarg.h:$(GLSRC)gxalloc.h
$(PSSRC)imainarg.h:$(GLSRC)gxobj.h
$(PSSRC)imainarg.h:$(GLSRC)gsnamecl.h
$(PSSRC)imainarg.h:$(GLSRC)gxcspace.h
+$(PSSRC)imainarg.h:$(GLSRC)gscsel.h
$(PSSRC)imainarg.h:$(GLSRC)gsdcolor.h
$(PSSRC)imainarg.h:$(GLSRC)gxfrac.h
$(PSSRC)imainarg.h:$(GLSRC)gscms.h
-$(PSSRC)imainarg.h:$(GLSRC)gscspace.h
$(PSSRC)imainarg.h:$(GLSRC)gsdevice.h
-$(PSSRC)imainarg.h:$(GLSRC)gxarith.h
-$(PSSRC)imainarg.h:$(GLSRC)gxhttile.h
+$(PSSRC)imainarg.h:$(GLSRC)gscspace.h
+$(PSSRC)imainarg.h:$(GLSRC)gsgstate.h
$(PSSRC)imainarg.h:$(GLSRC)gsiparam.h
-$(PSSRC)imainarg.h:$(GLSRC)gxbitmap.h
$(PSSRC)imainarg.h:$(GLSRC)gsmatrix.h
-$(PSSRC)imainarg.h:$(GLSRC)gsrefct.h
+$(PSSRC)imainarg.h:$(GLSRC)gxhttile.h
$(PSSRC)imainarg.h:$(GLSRC)gsparam.h
-$(PSSRC)imainarg.h:$(GLSRC)gsccolor.h
+$(PSSRC)imainarg.h:$(GLSRC)gsrefct.h
+$(PSSRC)imainarg.h:$(GLSRC)memento.h
$(PSSRC)imainarg.h:$(GLSRC)gsstruct.h
$(PSSRC)imainarg.h:$(GLSRC)gxsync.h
+$(PSSRC)imainarg.h:$(GLSRC)gxbitmap.h
$(PSSRC)imainarg.h:$(GLSRC)scommon.h
-$(PSSRC)imainarg.h:$(GLSRC)memento.h
-$(PSSRC)imainarg.h:$(GLSRC)gscsel.h
$(PSSRC)imainarg.h:$(GLSRC)gsbitmap.h
+$(PSSRC)imainarg.h:$(GLSRC)gsccolor.h
+$(PSSRC)imainarg.h:$(GLSRC)gxarith.h
+$(PSSRC)imainarg.h:$(GLSRC)gpsync.h
$(PSSRC)imainarg.h:$(GLSRC)gsstype.h
$(PSSRC)imainarg.h:$(GLSRC)gsmemory.h
-$(PSSRC)imainarg.h:$(GLSRC)gpsync.h
$(PSSRC)imainarg.h:$(GLSRC)gslibctx.h
-$(PSSRC)imainarg.h:$(GLSRC)gs_dll_call.h
$(PSSRC)imainarg.h:$(GLSRC)gsalloc.h
-$(PSSRC)imainarg.h:$(GLSRC)stdio_.h
$(PSSRC)imainarg.h:$(GLSRC)gxcindex.h
-$(PSSRC)imainarg.h:$(GLSRC)gsgstate.h
+$(PSSRC)imainarg.h:$(GLSRC)stdio_.h
$(PSSRC)imainarg.h:$(GLSRC)stdint_.h
$(PSSRC)imainarg.h:$(GLSRC)gssprintf.h
-$(PSSRC)imainarg.h:$(GLSRC)std.h
$(PSSRC)imainarg.h:$(GLSRC)gstypes.h
+$(PSSRC)imainarg.h:$(GLSRC)std.h
$(PSSRC)imainarg.h:$(GLSRC)stdpre.h
$(PSSRC)imainarg.h:$(GLGEN)arch.h
+$(PSSRC)imainarg.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iminst.h:$(PSSRC)imain.h
$(PSSRC)iminst.h:$(GLSRC)gsexit.h
$(PSSRC)iminst.h:$(PSSRC)iref.h
@@ -5226,40 +5226,40 @@ $(PSSRC)iminst.h:$(GLSRC)gxalloc.h
$(PSSRC)iminst.h:$(GLSRC)gxobj.h
$(PSSRC)iminst.h:$(GLSRC)gsnamecl.h
$(PSSRC)iminst.h:$(GLSRC)gxcspace.h
+$(PSSRC)iminst.h:$(GLSRC)gscsel.h
$(PSSRC)iminst.h:$(GLSRC)gsdcolor.h
$(PSSRC)iminst.h:$(GLSRC)gxfrac.h
$(PSSRC)iminst.h:$(GLSRC)gscms.h
-$(PSSRC)iminst.h:$(GLSRC)gscspace.h
$(PSSRC)iminst.h:$(GLSRC)gsdevice.h
-$(PSSRC)iminst.h:$(GLSRC)gxarith.h
-$(PSSRC)iminst.h:$(GLSRC)gxhttile.h
+$(PSSRC)iminst.h:$(GLSRC)gscspace.h
+$(PSSRC)iminst.h:$(GLSRC)gsgstate.h
$(PSSRC)iminst.h:$(GLSRC)gsiparam.h
-$(PSSRC)iminst.h:$(GLSRC)gxbitmap.h
$(PSSRC)iminst.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iminst.h:$(GLSRC)gsrefct.h
+$(PSSRC)iminst.h:$(GLSRC)gxhttile.h
$(PSSRC)iminst.h:$(GLSRC)gsparam.h
-$(PSSRC)iminst.h:$(GLSRC)gsccolor.h
+$(PSSRC)iminst.h:$(GLSRC)gsrefct.h
+$(PSSRC)iminst.h:$(GLSRC)memento.h
$(PSSRC)iminst.h:$(GLSRC)gsstruct.h
$(PSSRC)iminst.h:$(GLSRC)gxsync.h
+$(PSSRC)iminst.h:$(GLSRC)gxbitmap.h
$(PSSRC)iminst.h:$(GLSRC)scommon.h
-$(PSSRC)iminst.h:$(GLSRC)memento.h
-$(PSSRC)iminst.h:$(GLSRC)gscsel.h
$(PSSRC)iminst.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iminst.h:$(GLSRC)gsccolor.h
+$(PSSRC)iminst.h:$(GLSRC)gxarith.h
+$(PSSRC)iminst.h:$(GLSRC)gpsync.h
$(PSSRC)iminst.h:$(GLSRC)gsstype.h
$(PSSRC)iminst.h:$(GLSRC)gsmemory.h
-$(PSSRC)iminst.h:$(GLSRC)gpsync.h
$(PSSRC)iminst.h:$(GLSRC)gslibctx.h
-$(PSSRC)iminst.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iminst.h:$(GLSRC)gsalloc.h
-$(PSSRC)iminst.h:$(GLSRC)stdio_.h
$(PSSRC)iminst.h:$(GLSRC)gxcindex.h
-$(PSSRC)iminst.h:$(GLSRC)gsgstate.h
+$(PSSRC)iminst.h:$(GLSRC)stdio_.h
$(PSSRC)iminst.h:$(GLSRC)stdint_.h
$(PSSRC)iminst.h:$(GLSRC)gssprintf.h
-$(PSSRC)iminst.h:$(GLSRC)std.h
$(PSSRC)iminst.h:$(GLSRC)gstypes.h
+$(PSSRC)iminst.h:$(GLSRC)std.h
$(PSSRC)iminst.h:$(GLSRC)stdpre.h
$(PSSRC)iminst.h:$(GLGEN)arch.h
+$(PSSRC)iminst.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iparray.h:$(PSSRC)isdata.h
$(PSSRC)iparray.h:$(PSSRC)imemory.h
$(PSSRC)iparray.h:$(PSSRC)ivmspace.h
@@ -5269,40 +5269,40 @@ $(PSSRC)iparray.h:$(GLSRC)gxalloc.h
$(PSSRC)iparray.h:$(GLSRC)gxobj.h
$(PSSRC)iparray.h:$(GLSRC)gsnamecl.h
$(PSSRC)iparray.h:$(GLSRC)gxcspace.h
+$(PSSRC)iparray.h:$(GLSRC)gscsel.h
$(PSSRC)iparray.h:$(GLSRC)gsdcolor.h
$(PSSRC)iparray.h:$(GLSRC)gxfrac.h
$(PSSRC)iparray.h:$(GLSRC)gscms.h
-$(PSSRC)iparray.h:$(GLSRC)gscspace.h
$(PSSRC)iparray.h:$(GLSRC)gsdevice.h
-$(PSSRC)iparray.h:$(GLSRC)gxarith.h
-$(PSSRC)iparray.h:$(GLSRC)gxhttile.h
+$(PSSRC)iparray.h:$(GLSRC)gscspace.h
+$(PSSRC)iparray.h:$(GLSRC)gsgstate.h
$(PSSRC)iparray.h:$(GLSRC)gsiparam.h
-$(PSSRC)iparray.h:$(GLSRC)gxbitmap.h
$(PSSRC)iparray.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iparray.h:$(GLSRC)gsrefct.h
+$(PSSRC)iparray.h:$(GLSRC)gxhttile.h
$(PSSRC)iparray.h:$(GLSRC)gsparam.h
-$(PSSRC)iparray.h:$(GLSRC)gsccolor.h
+$(PSSRC)iparray.h:$(GLSRC)gsrefct.h
+$(PSSRC)iparray.h:$(GLSRC)memento.h
$(PSSRC)iparray.h:$(GLSRC)gsstruct.h
$(PSSRC)iparray.h:$(GLSRC)gxsync.h
+$(PSSRC)iparray.h:$(GLSRC)gxbitmap.h
$(PSSRC)iparray.h:$(GLSRC)scommon.h
-$(PSSRC)iparray.h:$(GLSRC)memento.h
-$(PSSRC)iparray.h:$(GLSRC)gscsel.h
$(PSSRC)iparray.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iparray.h:$(GLSRC)gsccolor.h
+$(PSSRC)iparray.h:$(GLSRC)gxarith.h
+$(PSSRC)iparray.h:$(GLSRC)gpsync.h
$(PSSRC)iparray.h:$(GLSRC)gsstype.h
$(PSSRC)iparray.h:$(GLSRC)gsmemory.h
-$(PSSRC)iparray.h:$(GLSRC)gpsync.h
$(PSSRC)iparray.h:$(GLSRC)gslibctx.h
-$(PSSRC)iparray.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iparray.h:$(GLSRC)gsalloc.h
-$(PSSRC)iparray.h:$(GLSRC)stdio_.h
$(PSSRC)iparray.h:$(GLSRC)gxcindex.h
-$(PSSRC)iparray.h:$(GLSRC)gsgstate.h
+$(PSSRC)iparray.h:$(GLSRC)stdio_.h
$(PSSRC)iparray.h:$(GLSRC)stdint_.h
$(PSSRC)iparray.h:$(GLSRC)gssprintf.h
-$(PSSRC)iparray.h:$(GLSRC)std.h
$(PSSRC)iparray.h:$(GLSRC)gstypes.h
+$(PSSRC)iparray.h:$(GLSRC)std.h
$(PSSRC)iparray.h:$(GLSRC)stdpre.h
$(PSSRC)iparray.h:$(GLGEN)arch.h
+$(PSSRC)iparray.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iscanbin.h:$(PSSRC)iscan.h
$(PSSRC)iscanbin.h:$(PSSRC)iref.h
$(PSSRC)iscanbin.h:$(GLSRC)sa85x.h
@@ -5314,40 +5314,40 @@ $(PSSRC)iscanbin.h:$(GLSRC)gxalloc.h
$(PSSRC)iscanbin.h:$(GLSRC)gxobj.h
$(PSSRC)iscanbin.h:$(GLSRC)gsnamecl.h
$(PSSRC)iscanbin.h:$(GLSRC)gxcspace.h
+$(PSSRC)iscanbin.h:$(GLSRC)gscsel.h
$(PSSRC)iscanbin.h:$(GLSRC)gsdcolor.h
$(PSSRC)iscanbin.h:$(GLSRC)gxfrac.h
$(PSSRC)iscanbin.h:$(GLSRC)gscms.h
-$(PSSRC)iscanbin.h:$(GLSRC)gscspace.h
$(PSSRC)iscanbin.h:$(GLSRC)gsdevice.h
-$(PSSRC)iscanbin.h:$(GLSRC)gxarith.h
-$(PSSRC)iscanbin.h:$(GLSRC)gxhttile.h
+$(PSSRC)iscanbin.h:$(GLSRC)gscspace.h
+$(PSSRC)iscanbin.h:$(GLSRC)gsgstate.h
$(PSSRC)iscanbin.h:$(GLSRC)gsiparam.h
-$(PSSRC)iscanbin.h:$(GLSRC)gxbitmap.h
$(PSSRC)iscanbin.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iscanbin.h:$(GLSRC)gsrefct.h
+$(PSSRC)iscanbin.h:$(GLSRC)gxhttile.h
$(PSSRC)iscanbin.h:$(GLSRC)gsparam.h
-$(PSSRC)iscanbin.h:$(GLSRC)gsccolor.h
+$(PSSRC)iscanbin.h:$(GLSRC)gsrefct.h
+$(PSSRC)iscanbin.h:$(GLSRC)memento.h
$(PSSRC)iscanbin.h:$(GLSRC)gsstruct.h
$(PSSRC)iscanbin.h:$(GLSRC)gxsync.h
+$(PSSRC)iscanbin.h:$(GLSRC)gxbitmap.h
$(PSSRC)iscanbin.h:$(GLSRC)scommon.h
-$(PSSRC)iscanbin.h:$(GLSRC)memento.h
-$(PSSRC)iscanbin.h:$(GLSRC)gscsel.h
$(PSSRC)iscanbin.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iscanbin.h:$(GLSRC)gsccolor.h
+$(PSSRC)iscanbin.h:$(GLSRC)gxarith.h
+$(PSSRC)iscanbin.h:$(GLSRC)gpsync.h
$(PSSRC)iscanbin.h:$(GLSRC)gsstype.h
$(PSSRC)iscanbin.h:$(GLSRC)gsmemory.h
-$(PSSRC)iscanbin.h:$(GLSRC)gpsync.h
$(PSSRC)iscanbin.h:$(GLSRC)gslibctx.h
-$(PSSRC)iscanbin.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iscanbin.h:$(GLSRC)gsalloc.h
-$(PSSRC)iscanbin.h:$(GLSRC)stdio_.h
$(PSSRC)iscanbin.h:$(GLSRC)gxcindex.h
-$(PSSRC)iscanbin.h:$(GLSRC)gsgstate.h
+$(PSSRC)iscanbin.h:$(GLSRC)stdio_.h
$(PSSRC)iscanbin.h:$(GLSRC)stdint_.h
$(PSSRC)iscanbin.h:$(GLSRC)gssprintf.h
-$(PSSRC)iscanbin.h:$(GLSRC)std.h
$(PSSRC)iscanbin.h:$(GLSRC)gstypes.h
+$(PSSRC)iscanbin.h:$(GLSRC)std.h
$(PSSRC)iscanbin.h:$(GLSRC)stdpre.h
$(PSSRC)iscanbin.h:$(GLGEN)arch.h
+$(PSSRC)iscanbin.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iscannum.h:$(PSSRC)imemory.h
$(PSSRC)iscannum.h:$(PSSRC)ivmspace.h
$(PSSRC)iscannum.h:$(PSSRC)iref.h
@@ -5356,40 +5356,40 @@ $(PSSRC)iscannum.h:$(GLSRC)gxalloc.h
$(PSSRC)iscannum.h:$(GLSRC)gxobj.h
$(PSSRC)iscannum.h:$(GLSRC)gsnamecl.h
$(PSSRC)iscannum.h:$(GLSRC)gxcspace.h
+$(PSSRC)iscannum.h:$(GLSRC)gscsel.h
$(PSSRC)iscannum.h:$(GLSRC)gsdcolor.h
$(PSSRC)iscannum.h:$(GLSRC)gxfrac.h
$(PSSRC)iscannum.h:$(GLSRC)gscms.h
-$(PSSRC)iscannum.h:$(GLSRC)gscspace.h
$(PSSRC)iscannum.h:$(GLSRC)gsdevice.h
-$(PSSRC)iscannum.h:$(GLSRC)gxarith.h
-$(PSSRC)iscannum.h:$(GLSRC)gxhttile.h
+$(PSSRC)iscannum.h:$(GLSRC)gscspace.h
+$(PSSRC)iscannum.h:$(GLSRC)gsgstate.h
$(PSSRC)iscannum.h:$(GLSRC)gsiparam.h
-$(PSSRC)iscannum.h:$(GLSRC)gxbitmap.h
$(PSSRC)iscannum.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iscannum.h:$(GLSRC)gsrefct.h
+$(PSSRC)iscannum.h:$(GLSRC)gxhttile.h
$(PSSRC)iscannum.h:$(GLSRC)gsparam.h
-$(PSSRC)iscannum.h:$(GLSRC)gsccolor.h
+$(PSSRC)iscannum.h:$(GLSRC)gsrefct.h
+$(PSSRC)iscannum.h:$(GLSRC)memento.h
$(PSSRC)iscannum.h:$(GLSRC)gsstruct.h
$(PSSRC)iscannum.h:$(GLSRC)gxsync.h
+$(PSSRC)iscannum.h:$(GLSRC)gxbitmap.h
$(PSSRC)iscannum.h:$(GLSRC)scommon.h
-$(PSSRC)iscannum.h:$(GLSRC)memento.h
-$(PSSRC)iscannum.h:$(GLSRC)gscsel.h
$(PSSRC)iscannum.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iscannum.h:$(GLSRC)gsccolor.h
+$(PSSRC)iscannum.h:$(GLSRC)gxarith.h
+$(PSSRC)iscannum.h:$(GLSRC)gpsync.h
$(PSSRC)iscannum.h:$(GLSRC)gsstype.h
$(PSSRC)iscannum.h:$(GLSRC)gsmemory.h
-$(PSSRC)iscannum.h:$(GLSRC)gpsync.h
$(PSSRC)iscannum.h:$(GLSRC)gslibctx.h
-$(PSSRC)iscannum.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iscannum.h:$(GLSRC)gsalloc.h
-$(PSSRC)iscannum.h:$(GLSRC)stdio_.h
$(PSSRC)iscannum.h:$(GLSRC)gxcindex.h
-$(PSSRC)iscannum.h:$(GLSRC)gsgstate.h
+$(PSSRC)iscannum.h:$(GLSRC)stdio_.h
$(PSSRC)iscannum.h:$(GLSRC)stdint_.h
$(PSSRC)iscannum.h:$(GLSRC)gssprintf.h
-$(PSSRC)iscannum.h:$(GLSRC)std.h
$(PSSRC)iscannum.h:$(GLSRC)gstypes.h
+$(PSSRC)iscannum.h:$(GLSRC)std.h
$(PSSRC)iscannum.h:$(GLSRC)stdpre.h
$(PSSRC)iscannum.h:$(GLGEN)arch.h
+$(PSSRC)iscannum.h:$(GLSRC)gs_dll_call.h
$(PSSRC)istream.h:$(PSSRC)imemory.h
$(PSSRC)istream.h:$(PSSRC)ivmspace.h
$(PSSRC)istream.h:$(PSSRC)iref.h
@@ -5398,40 +5398,40 @@ $(PSSRC)istream.h:$(GLSRC)gxalloc.h
$(PSSRC)istream.h:$(GLSRC)gxobj.h
$(PSSRC)istream.h:$(GLSRC)gsnamecl.h
$(PSSRC)istream.h:$(GLSRC)gxcspace.h
+$(PSSRC)istream.h:$(GLSRC)gscsel.h
$(PSSRC)istream.h:$(GLSRC)gsdcolor.h
$(PSSRC)istream.h:$(GLSRC)gxfrac.h
$(PSSRC)istream.h:$(GLSRC)gscms.h
-$(PSSRC)istream.h:$(GLSRC)gscspace.h
$(PSSRC)istream.h:$(GLSRC)gsdevice.h
-$(PSSRC)istream.h:$(GLSRC)gxarith.h
-$(PSSRC)istream.h:$(GLSRC)gxhttile.h
+$(PSSRC)istream.h:$(GLSRC)gscspace.h
+$(PSSRC)istream.h:$(GLSRC)gsgstate.h
$(PSSRC)istream.h:$(GLSRC)gsiparam.h
-$(PSSRC)istream.h:$(GLSRC)gxbitmap.h
$(PSSRC)istream.h:$(GLSRC)gsmatrix.h
-$(PSSRC)istream.h:$(GLSRC)gsrefct.h
+$(PSSRC)istream.h:$(GLSRC)gxhttile.h
$(PSSRC)istream.h:$(GLSRC)gsparam.h
-$(PSSRC)istream.h:$(GLSRC)gsccolor.h
+$(PSSRC)istream.h:$(GLSRC)gsrefct.h
+$(PSSRC)istream.h:$(GLSRC)memento.h
$(PSSRC)istream.h:$(GLSRC)gsstruct.h
$(PSSRC)istream.h:$(GLSRC)gxsync.h
+$(PSSRC)istream.h:$(GLSRC)gxbitmap.h
$(PSSRC)istream.h:$(GLSRC)scommon.h
-$(PSSRC)istream.h:$(GLSRC)memento.h
-$(PSSRC)istream.h:$(GLSRC)gscsel.h
$(PSSRC)istream.h:$(GLSRC)gsbitmap.h
+$(PSSRC)istream.h:$(GLSRC)gsccolor.h
+$(PSSRC)istream.h:$(GLSRC)gxarith.h
+$(PSSRC)istream.h:$(GLSRC)gpsync.h
$(PSSRC)istream.h:$(GLSRC)gsstype.h
$(PSSRC)istream.h:$(GLSRC)gsmemory.h
-$(PSSRC)istream.h:$(GLSRC)gpsync.h
$(PSSRC)istream.h:$(GLSRC)gslibctx.h
-$(PSSRC)istream.h:$(GLSRC)gs_dll_call.h
$(PSSRC)istream.h:$(GLSRC)gsalloc.h
-$(PSSRC)istream.h:$(GLSRC)stdio_.h
$(PSSRC)istream.h:$(GLSRC)gxcindex.h
-$(PSSRC)istream.h:$(GLSRC)gsgstate.h
+$(PSSRC)istream.h:$(GLSRC)stdio_.h
$(PSSRC)istream.h:$(GLSRC)stdint_.h
$(PSSRC)istream.h:$(GLSRC)gssprintf.h
-$(PSSRC)istream.h:$(GLSRC)std.h
$(PSSRC)istream.h:$(GLSRC)gstypes.h
+$(PSSRC)istream.h:$(GLSRC)std.h
$(PSSRC)istream.h:$(GLSRC)stdpre.h
$(PSSRC)istream.h:$(GLGEN)arch.h
+$(PSSRC)istream.h:$(GLSRC)gs_dll_call.h
$(PSSRC)itoken.h:$(PSSRC)iscan.h
$(PSSRC)itoken.h:$(PSSRC)iref.h
$(PSSRC)itoken.h:$(GLSRC)sa85x.h
@@ -5443,40 +5443,40 @@ $(PSSRC)itoken.h:$(GLSRC)gxalloc.h
$(PSSRC)itoken.h:$(GLSRC)gxobj.h
$(PSSRC)itoken.h:$(GLSRC)gsnamecl.h
$(PSSRC)itoken.h:$(GLSRC)gxcspace.h
+$(PSSRC)itoken.h:$(GLSRC)gscsel.h
$(PSSRC)itoken.h:$(GLSRC)gsdcolor.h
$(PSSRC)itoken.h:$(GLSRC)gxfrac.h
$(PSSRC)itoken.h:$(GLSRC)gscms.h
-$(PSSRC)itoken.h:$(GLSRC)gscspace.h
$(PSSRC)itoken.h:$(GLSRC)gsdevice.h
-$(PSSRC)itoken.h:$(GLSRC)gxarith.h
-$(PSSRC)itoken.h:$(GLSRC)gxhttile.h
+$(PSSRC)itoken.h:$(GLSRC)gscspace.h
+$(PSSRC)itoken.h:$(GLSRC)gsgstate.h
$(PSSRC)itoken.h:$(GLSRC)gsiparam.h
-$(PSSRC)itoken.h:$(GLSRC)gxbitmap.h
$(PSSRC)itoken.h:$(GLSRC)gsmatrix.h
-$(PSSRC)itoken.h:$(GLSRC)gsrefct.h
+$(PSSRC)itoken.h:$(GLSRC)gxhttile.h
$(PSSRC)itoken.h:$(GLSRC)gsparam.h
-$(PSSRC)itoken.h:$(GLSRC)gsccolor.h
+$(PSSRC)itoken.h:$(GLSRC)gsrefct.h
+$(PSSRC)itoken.h:$(GLSRC)memento.h
$(PSSRC)itoken.h:$(GLSRC)gsstruct.h
$(PSSRC)itoken.h:$(GLSRC)gxsync.h
+$(PSSRC)itoken.h:$(GLSRC)gxbitmap.h
$(PSSRC)itoken.h:$(GLSRC)scommon.h
-$(PSSRC)itoken.h:$(GLSRC)memento.h
-$(PSSRC)itoken.h:$(GLSRC)gscsel.h
$(PSSRC)itoken.h:$(GLSRC)gsbitmap.h
+$(PSSRC)itoken.h:$(GLSRC)gsccolor.h
+$(PSSRC)itoken.h:$(GLSRC)gxarith.h
+$(PSSRC)itoken.h:$(GLSRC)gpsync.h
$(PSSRC)itoken.h:$(GLSRC)gsstype.h
$(PSSRC)itoken.h:$(GLSRC)gsmemory.h
-$(PSSRC)itoken.h:$(GLSRC)gpsync.h
$(PSSRC)itoken.h:$(GLSRC)gslibctx.h
-$(PSSRC)itoken.h:$(GLSRC)gs_dll_call.h
$(PSSRC)itoken.h:$(GLSRC)gsalloc.h
-$(PSSRC)itoken.h:$(GLSRC)stdio_.h
$(PSSRC)itoken.h:$(GLSRC)gxcindex.h
-$(PSSRC)itoken.h:$(GLSRC)gsgstate.h
+$(PSSRC)itoken.h:$(GLSRC)stdio_.h
$(PSSRC)itoken.h:$(GLSRC)stdint_.h
$(PSSRC)itoken.h:$(GLSRC)gssprintf.h
-$(PSSRC)itoken.h:$(GLSRC)std.h
$(PSSRC)itoken.h:$(GLSRC)gstypes.h
+$(PSSRC)itoken.h:$(GLSRC)std.h
$(PSSRC)itoken.h:$(GLSRC)stdpre.h
$(PSSRC)itoken.h:$(GLGEN)arch.h
+$(PSSRC)itoken.h:$(GLSRC)gs_dll_call.h
$(PSSRC)main.h:$(PSSRC)iminst.h
$(PSSRC)main.h:$(PSSRC)imain.h
$(PSSRC)main.h:$(GLSRC)gsexit.h
@@ -5486,124 +5486,124 @@ $(PSSRC)main.h:$(GLSRC)gxobj.h
$(PSSRC)main.h:$(GLSRC)gsnamecl.h
$(PSSRC)main.h:$(PSSRC)iapi.h
$(PSSRC)main.h:$(GLSRC)gxcspace.h
+$(PSSRC)main.h:$(GLSRC)gscsel.h
$(PSSRC)main.h:$(GLSRC)gsdcolor.h
$(PSSRC)main.h:$(GLSRC)gxfrac.h
$(PSSRC)main.h:$(GLSRC)gscms.h
-$(PSSRC)main.h:$(GLSRC)gscspace.h
$(PSSRC)main.h:$(GLSRC)gsdevice.h
-$(PSSRC)main.h:$(GLSRC)gxarith.h
-$(PSSRC)main.h:$(GLSRC)gxhttile.h
+$(PSSRC)main.h:$(GLSRC)gscspace.h
+$(PSSRC)main.h:$(GLSRC)gsgstate.h
$(PSSRC)main.h:$(GLSRC)gsiparam.h
-$(PSSRC)main.h:$(GLSRC)gxbitmap.h
$(PSSRC)main.h:$(GLSRC)gsmatrix.h
-$(PSSRC)main.h:$(GLSRC)gsrefct.h
+$(PSSRC)main.h:$(GLSRC)gxhttile.h
$(PSSRC)main.h:$(GLSRC)gsparam.h
-$(PSSRC)main.h:$(GLSRC)gsccolor.h
+$(PSSRC)main.h:$(GLSRC)gsrefct.h
+$(PSSRC)main.h:$(GLSRC)memento.h
$(PSSRC)main.h:$(GLSRC)gsstruct.h
$(PSSRC)main.h:$(GLSRC)gxsync.h
+$(PSSRC)main.h:$(GLSRC)gxbitmap.h
$(PSSRC)main.h:$(GLSRC)scommon.h
-$(PSSRC)main.h:$(GLSRC)memento.h
-$(PSSRC)main.h:$(GLSRC)gscsel.h
$(PSSRC)main.h:$(GLSRC)gsbitmap.h
+$(PSSRC)main.h:$(GLSRC)gsccolor.h
+$(PSSRC)main.h:$(GLSRC)gxarith.h
+$(PSSRC)main.h:$(GLSRC)gpsync.h
$(PSSRC)main.h:$(GLSRC)gsstype.h
$(PSSRC)main.h:$(GLSRC)gsmemory.h
-$(PSSRC)main.h:$(GLSRC)gpsync.h
$(PSSRC)main.h:$(GLSRC)gslibctx.h
-$(PSSRC)main.h:$(GLSRC)gs_dll_call.h
$(PSSRC)main.h:$(GLSRC)gsalloc.h
-$(PSSRC)main.h:$(GLSRC)stdio_.h
$(PSSRC)main.h:$(GLSRC)gxcindex.h
-$(PSSRC)main.h:$(GLSRC)gsgstate.h
+$(PSSRC)main.h:$(GLSRC)stdio_.h
$(PSSRC)main.h:$(GLSRC)stdint_.h
$(PSSRC)main.h:$(GLSRC)gssprintf.h
-$(PSSRC)main.h:$(GLSRC)std.h
$(PSSRC)main.h:$(GLSRC)gstypes.h
+$(PSSRC)main.h:$(GLSRC)std.h
$(PSSRC)main.h:$(GLSRC)stdpre.h
$(PSSRC)main.h:$(GLGEN)arch.h
+$(PSSRC)main.h:$(GLSRC)gs_dll_call.h
$(GLSRC)smtf.h:$(GLSRC)scommon.h
$(GLSRC)smtf.h:$(GLSRC)gsstype.h
$(GLSRC)smtf.h:$(GLSRC)gsmemory.h
$(GLSRC)smtf.h:$(GLSRC)gslibctx.h
-$(GLSRC)smtf.h:$(GLSRC)gs_dll_call.h
$(GLSRC)smtf.h:$(GLSRC)stdio_.h
$(GLSRC)smtf.h:$(GLSRC)stdint_.h
$(GLSRC)smtf.h:$(GLSRC)gssprintf.h
-$(GLSRC)smtf.h:$(GLSRC)std.h
$(GLSRC)smtf.h:$(GLSRC)gstypes.h
+$(GLSRC)smtf.h:$(GLSRC)std.h
$(GLSRC)smtf.h:$(GLSRC)stdpre.h
$(GLSRC)smtf.h:$(GLGEN)arch.h
+$(GLSRC)smtf.h:$(GLSRC)gs_dll_call.h
$(PSSRC)bfont.h:$(PSSRC)ifont.h
$(PSSRC)bfont.h:$(GLSRC)gxfont.h
$(PSSRC)bfont.h:$(PSSRC)iostack.h
$(PSSRC)bfont.h:$(GLSRC)gspath.h
$(PSSRC)bfont.h:$(PSSRC)istack.h
-$(PSSRC)bfont.h:$(GLSRC)gxmatrix.h
$(PSSRC)bfont.h:$(GLSRC)gsgdata.h
$(PSSRC)bfont.h:$(PSSRC)iosdata.h
-$(PSSRC)bfont.h:$(GLSRC)gsgcache.h
+$(PSSRC)bfont.h:$(GLSRC)gxmatrix.h
$(PSSRC)bfont.h:$(GLSRC)gxfapi.h
-$(PSSRC)bfont.h:$(GLSRC)gsnotify.h
-$(PSSRC)bfont.h:$(GLSRC)gsfcmap.h
$(PSSRC)bfont.h:$(PSSRC)isdata.h
$(PSSRC)bfont.h:$(PSSRC)imemory.h
+$(PSSRC)bfont.h:$(GLSRC)gsfcmap.h
$(PSSRC)bfont.h:$(PSSRC)ivmspace.h
$(PSSRC)bfont.h:$(PSSRC)iref.h
$(PSSRC)bfont.h:$(GLSRC)gsgc.h
$(PSSRC)bfont.h:$(GLSRC)gxalloc.h
-$(PSSRC)bfont.h:$(GLSRC)gstext.h
$(PSSRC)bfont.h:$(GLSRC)gxobj.h
+$(PSSRC)bfont.h:$(GLSRC)gstext.h
$(PSSRC)bfont.h:$(GLSRC)gsnamecl.h
$(PSSRC)bfont.h:$(GLSRC)gxcspace.h
-$(PSSRC)bfont.h:$(GLSRC)gsuid.h
-$(PSSRC)bfont.h:$(GLSRC)gsdcolor.h
+$(PSSRC)bfont.h:$(GLSRC)gscsel.h
$(PSSRC)bfont.h:$(GLSRC)gsfont.h
-$(PSSRC)bfont.h:$(GLSRC)gxftype.h
+$(PSSRC)bfont.h:$(GLSRC)gsdcolor.h
+$(PSSRC)bfont.h:$(GLSRC)gxpath.h
$(PSSRC)bfont.h:$(GLSRC)gxfrac.h
+$(PSSRC)bfont.h:$(GLSRC)gxftype.h
$(PSSRC)bfont.h:$(GLSRC)gscms.h
-$(PSSRC)bfont.h:$(GLSRC)gscspace.h
-$(PSSRC)bfont.h:$(GLSRC)gxpath.h
-$(PSSRC)bfont.h:$(GLSRC)gsdevice.h
-$(PSSRC)bfont.h:$(GLSRC)gxarith.h
-$(PSSRC)bfont.h:$(GLSRC)gspenum.h
-$(PSSRC)bfont.h:$(GLSRC)gxhttile.h
$(PSSRC)bfont.h:$(GLSRC)gsrect.h
$(PSSRC)bfont.h:$(GLSRC)gslparam.h
-$(PSSRC)bfont.h:$(GLSRC)gsiparam.h
-$(PSSRC)bfont.h:$(GLSRC)gxbitmap.h
-$(PSSRC)bfont.h:$(GLSRC)gsmatrix.h
+$(PSSRC)bfont.h:$(GLSRC)gsdevice.h
$(PSSRC)bfont.h:$(GLSRC)gscpm.h
+$(PSSRC)bfont.h:$(GLSRC)gsgcache.h
+$(PSSRC)bfont.h:$(GLSRC)gscspace.h
+$(PSSRC)bfont.h:$(GLSRC)gsgstate.h
+$(PSSRC)bfont.h:$(GLSRC)gsnotify.h
+$(PSSRC)bfont.h:$(GLSRC)gsiparam.h
$(PSSRC)bfont.h:$(GLSRC)gxfixed.h
-$(PSSRC)bfont.h:$(GLSRC)gsrefct.h
+$(PSSRC)bfont.h:$(GLSRC)gsmatrix.h
+$(PSSRC)bfont.h:$(GLSRC)gspenum.h
+$(PSSRC)bfont.h:$(GLSRC)gxhttile.h
$(PSSRC)bfont.h:$(GLSRC)gsparam.h
-$(PSSRC)bfont.h:$(GLSRC)gsccolor.h
+$(PSSRC)bfont.h:$(GLSRC)gsrefct.h
+$(PSSRC)bfont.h:$(GLSRC)memento.h
+$(PSSRC)bfont.h:$(GLSRC)gsuid.h
$(PSSRC)bfont.h:$(GLSRC)gsstruct.h
$(PSSRC)bfont.h:$(GLSRC)gxsync.h
+$(PSSRC)bfont.h:$(GLSRC)gxbitmap.h
$(PSSRC)bfont.h:$(GLSRC)scommon.h
-$(PSSRC)bfont.h:$(GLSRC)memento.h
-$(PSSRC)bfont.h:$(GLSRC)gscsel.h
$(PSSRC)bfont.h:$(GLSRC)gsbitmap.h
+$(PSSRC)bfont.h:$(GLSRC)gsccolor.h
+$(PSSRC)bfont.h:$(GLSRC)gxarith.h
+$(PSSRC)bfont.h:$(GLSRC)gpsync.h
$(PSSRC)bfont.h:$(GLSRC)gsstype.h
$(PSSRC)bfont.h:$(GLSRC)gsmemory.h
-$(PSSRC)bfont.h:$(GLSRC)gpsync.h
$(PSSRC)bfont.h:$(GLSRC)gslibctx.h
-$(PSSRC)bfont.h:$(GLSRC)gs_dll_call.h
$(PSSRC)bfont.h:$(GLSRC)gsalloc.h
-$(PSSRC)bfont.h:$(GLSRC)stdio_.h
$(PSSRC)bfont.h:$(GLSRC)gxcindex.h
-$(PSSRC)bfont.h:$(GLSRC)gsgstate.h
+$(PSSRC)bfont.h:$(GLSRC)stdio_.h
+$(PSSRC)bfont.h:$(GLSRC)gsccode.h
$(PSSRC)bfont.h:$(GLSRC)stdint_.h
$(PSSRC)bfont.h:$(GLSRC)gssprintf.h
-$(PSSRC)bfont.h:$(GLSRC)gsccode.h
-$(PSSRC)bfont.h:$(GLSRC)std.h
$(PSSRC)bfont.h:$(GLSRC)gstypes.h
+$(PSSRC)bfont.h:$(GLSRC)std.h
$(PSSRC)bfont.h:$(GLSRC)stdpre.h
$(PSSRC)bfont.h:$(GLGEN)arch.h
+$(PSSRC)bfont.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icontext.h:$(PSSRC)icstate.h
$(PSSRC)icontext.h:$(PSSRC)idsdata.h
$(PSSRC)icontext.h:$(PSSRC)iesdata.h
$(PSSRC)icontext.h:$(PSSRC)interp.h
-$(PSSRC)icontext.h:$(PSSRC)opdef.h
$(PSSRC)icontext.h:$(PSSRC)files.h
+$(PSSRC)icontext.h:$(PSSRC)opdef.h
$(PSSRC)icontext.h:$(PSSRC)iddstack.h
$(PSSRC)icontext.h:$(PSSRC)store.h
$(PSSRC)icontext.h:$(PSSRC)iosdata.h
@@ -5620,47 +5620,47 @@ $(PSSRC)icontext.h:$(GLSRC)gsnamecl.h
$(PSSRC)icontext.h:$(GLSRC)stream.h
$(PSSRC)icontext.h:$(GLSRC)gxcspace.h
$(PSSRC)icontext.h:$(GLSRC)gxiodev.h
+$(PSSRC)icontext.h:$(GLSRC)gscsel.h
$(PSSRC)icontext.h:$(GLSRC)gsdcolor.h
$(PSSRC)icontext.h:$(GLSRC)gxfrac.h
$(PSSRC)icontext.h:$(GLSRC)gscms.h
-$(PSSRC)icontext.h:$(GLSRC)gscspace.h
$(PSSRC)icontext.h:$(GLSRC)gsdevice.h
-$(PSSRC)icontext.h:$(GLSRC)gxarith.h
-$(PSSRC)icontext.h:$(GLSRC)gxhttile.h
+$(PSSRC)icontext.h:$(GLSRC)gscspace.h
+$(PSSRC)icontext.h:$(GLSRC)gsgstate.h
$(PSSRC)icontext.h:$(GLSRC)gsiparam.h
-$(PSSRC)icontext.h:$(GLSRC)gxbitmap.h
$(PSSRC)icontext.h:$(GLSRC)gsmatrix.h
-$(PSSRC)icontext.h:$(GLSRC)gsrefct.h
+$(PSSRC)icontext.h:$(GLSRC)gxhttile.h
$(PSSRC)icontext.h:$(GLSRC)gsparam.h
+$(PSSRC)icontext.h:$(GLSRC)gsrefct.h
$(PSSRC)icontext.h:$(GLSRC)gp.h
-$(PSSRC)icontext.h:$(GLSRC)gsccolor.h
+$(PSSRC)icontext.h:$(GLSRC)memento.h
+$(PSSRC)icontext.h:$(GLSRC)memory_.h
$(PSSRC)icontext.h:$(GLSRC)gsstruct.h
$(PSSRC)icontext.h:$(GLSRC)gxsync.h
+$(PSSRC)icontext.h:$(GLSRC)gxbitmap.h
$(PSSRC)icontext.h:$(GLSRC)srdline.h
$(PSSRC)icontext.h:$(GLSRC)scommon.h
-$(PSSRC)icontext.h:$(GLSRC)memento.h
-$(PSSRC)icontext.h:$(GLSRC)gscsel.h
-$(PSSRC)icontext.h:$(GLSRC)gsbitmap.h
$(PSSRC)icontext.h:$(GLSRC)gsfname.h
-$(PSSRC)icontext.h:$(GLSRC)gsstype.h
+$(PSSRC)icontext.h:$(GLSRC)gsbitmap.h
+$(PSSRC)icontext.h:$(GLSRC)gsccolor.h
+$(PSSRC)icontext.h:$(GLSRC)gxarith.h
$(PSSRC)icontext.h:$(GLSRC)stat_.h
-$(PSSRC)icontext.h:$(GLSRC)gsmemory.h
$(PSSRC)icontext.h:$(GLSRC)gpsync.h
-$(PSSRC)icontext.h:$(GLSRC)memory_.h
+$(PSSRC)icontext.h:$(GLSRC)gsstype.h
+$(PSSRC)icontext.h:$(GLSRC)gsmemory.h
$(PSSRC)icontext.h:$(GLSRC)gpgetenv.h
-$(PSSRC)icontext.h:$(GLSRC)gslibctx.h
$(PSSRC)icontext.h:$(GLSRC)gscdefs.h
-$(PSSRC)icontext.h:$(GLSRC)gs_dll_call.h
+$(PSSRC)icontext.h:$(GLSRC)gslibctx.h
$(PSSRC)icontext.h:$(GLSRC)gsalloc.h
-$(PSSRC)icontext.h:$(GLSRC)stdio_.h
$(PSSRC)icontext.h:$(GLSRC)gxcindex.h
-$(PSSRC)icontext.h:$(GLSRC)gsgstate.h
+$(PSSRC)icontext.h:$(GLSRC)stdio_.h
$(PSSRC)icontext.h:$(GLSRC)stdint_.h
$(PSSRC)icontext.h:$(GLSRC)gssprintf.h
-$(PSSRC)icontext.h:$(GLSRC)std.h
$(PSSRC)icontext.h:$(GLSRC)gstypes.h
+$(PSSRC)icontext.h:$(GLSRC)std.h
$(PSSRC)icontext.h:$(GLSRC)stdpre.h
$(PSSRC)icontext.h:$(GLGEN)arch.h
+$(PSSRC)icontext.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifilter.h:$(PSSRC)istream.h
$(PSSRC)ifilter.h:$(PSSRC)imemory.h
$(PSSRC)ifilter.h:$(PSSRC)ivmspace.h
@@ -5670,95 +5670,95 @@ $(PSSRC)ifilter.h:$(GLSRC)gxalloc.h
$(PSSRC)ifilter.h:$(GLSRC)gxobj.h
$(PSSRC)ifilter.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifilter.h:$(GLSRC)gxcspace.h
+$(PSSRC)ifilter.h:$(GLSRC)gscsel.h
$(PSSRC)ifilter.h:$(GLSRC)gsdcolor.h
$(PSSRC)ifilter.h:$(GLSRC)gxfrac.h
$(PSSRC)ifilter.h:$(GLSRC)gscms.h
-$(PSSRC)ifilter.h:$(GLSRC)gscspace.h
$(PSSRC)ifilter.h:$(GLSRC)gsdevice.h
-$(PSSRC)ifilter.h:$(GLSRC)gxarith.h
-$(PSSRC)ifilter.h:$(GLSRC)gxhttile.h
+$(PSSRC)ifilter.h:$(GLSRC)gscspace.h
+$(PSSRC)ifilter.h:$(GLSRC)gsgstate.h
$(PSSRC)ifilter.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifilter.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifilter.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifilter.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifilter.h:$(GLSRC)gxhttile.h
$(PSSRC)ifilter.h:$(GLSRC)gsparam.h
-$(PSSRC)ifilter.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifilter.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifilter.h:$(GLSRC)memento.h
$(PSSRC)ifilter.h:$(GLSRC)gsstruct.h
$(PSSRC)ifilter.h:$(GLSRC)gxsync.h
+$(PSSRC)ifilter.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifilter.h:$(GLSRC)scommon.h
-$(PSSRC)ifilter.h:$(GLSRC)memento.h
-$(PSSRC)ifilter.h:$(GLSRC)gscsel.h
$(PSSRC)ifilter.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ifilter.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifilter.h:$(GLSRC)gxarith.h
+$(PSSRC)ifilter.h:$(GLSRC)gpsync.h
$(PSSRC)ifilter.h:$(GLSRC)gsstype.h
$(PSSRC)ifilter.h:$(GLSRC)gsmemory.h
-$(PSSRC)ifilter.h:$(GLSRC)gpsync.h
$(PSSRC)ifilter.h:$(GLSRC)gslibctx.h
-$(PSSRC)ifilter.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifilter.h:$(GLSRC)gsalloc.h
-$(PSSRC)ifilter.h:$(GLSRC)stdio_.h
$(PSSRC)ifilter.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifilter.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifilter.h:$(GLSRC)stdio_.h
$(PSSRC)ifilter.h:$(GLSRC)stdint_.h
$(PSSRC)ifilter.h:$(GLSRC)gssprintf.h
-$(PSSRC)ifilter.h:$(GLSRC)std.h
$(PSSRC)ifilter.h:$(GLSRC)gstypes.h
+$(PSSRC)ifilter.h:$(GLSRC)std.h
$(PSSRC)ifilter.h:$(GLSRC)stdpre.h
$(PSSRC)ifilter.h:$(GLGEN)arch.h
+$(PSSRC)ifilter.h:$(GLSRC)gs_dll_call.h
$(PSSRC)igstate.h:$(GLSRC)gsstate.h
$(PSSRC)igstate.h:$(GLSRC)gsovrc.h
$(PSSRC)igstate.h:$(GLSRC)gscolor.h
-$(PSSRC)igstate.h:$(GLSRC)gxcomp.h
$(PSSRC)igstate.h:$(GLSRC)gsline.h
+$(PSSRC)igstate.h:$(GLSRC)gxcomp.h
$(PSSRC)igstate.h:$(PSSRC)istruct.h
-$(PSSRC)igstate.h:$(GLSRC)gxbitfmt.h
$(PSSRC)igstate.h:$(PSSRC)imemory.h
-$(PSSRC)igstate.h:$(PSSRC)ivmspace.h
$(PSSRC)igstate.h:$(GLSRC)gsht.h
+$(PSSRC)igstate.h:$(PSSRC)ivmspace.h
$(PSSRC)igstate.h:$(PSSRC)iref.h
$(PSSRC)igstate.h:$(GLSRC)gsgc.h
$(PSSRC)igstate.h:$(GLSRC)gxalloc.h
$(PSSRC)igstate.h:$(GLSRC)gxobj.h
-$(PSSRC)igstate.h:$(GLSRC)gsnamecl.h
$(PSSRC)igstate.h:$(GLSRC)gxstate.h
+$(PSSRC)igstate.h:$(GLSRC)gsnamecl.h
$(PSSRC)igstate.h:$(GLSRC)gxcspace.h
+$(PSSRC)igstate.h:$(GLSRC)gscsel.h
$(PSSRC)igstate.h:$(GLSRC)gsdcolor.h
$(PSSRC)igstate.h:$(GLSRC)gxfrac.h
+$(PSSRC)igstate.h:$(GLSRC)gxtmap.h
$(PSSRC)igstate.h:$(GLSRC)gscms.h
-$(PSSRC)igstate.h:$(GLSRC)gscspace.h
-$(PSSRC)igstate.h:$(GLSRC)gsdevice.h
-$(PSSRC)igstate.h:$(GLSRC)gxarith.h
-$(PSSRC)igstate.h:$(GLSRC)gxhttile.h
$(PSSRC)igstate.h:$(GLSRC)gslparam.h
+$(PSSRC)igstate.h:$(GLSRC)gsdevice.h
+$(PSSRC)igstate.h:$(GLSRC)gxbitfmt.h
+$(PSSRC)igstate.h:$(GLSRC)gscpm.h
+$(PSSRC)igstate.h:$(GLSRC)gscspace.h
+$(PSSRC)igstate.h:$(GLSRC)gsgstate.h
$(PSSRC)igstate.h:$(GLSRC)gsiparam.h
-$(PSSRC)igstate.h:$(GLSRC)gxbitmap.h
+$(PSSRC)igstate.h:$(GLSRC)gscompt.h
$(PSSRC)igstate.h:$(GLSRC)gsmatrix.h
-$(PSSRC)igstate.h:$(GLSRC)gscpm.h
-$(PSSRC)igstate.h:$(GLSRC)gsrefct.h
+$(PSSRC)igstate.h:$(GLSRC)gxhttile.h
$(PSSRC)igstate.h:$(GLSRC)gsparam.h
-$(PSSRC)igstate.h:$(GLSRC)gsccolor.h
+$(PSSRC)igstate.h:$(GLSRC)gsrefct.h
+$(PSSRC)igstate.h:$(GLSRC)memento.h
$(PSSRC)igstate.h:$(GLSRC)gsstruct.h
$(PSSRC)igstate.h:$(GLSRC)gxsync.h
+$(PSSRC)igstate.h:$(GLSRC)gxbitmap.h
$(PSSRC)igstate.h:$(GLSRC)scommon.h
-$(PSSRC)igstate.h:$(GLSRC)memento.h
-$(PSSRC)igstate.h:$(GLSRC)gscsel.h
$(PSSRC)igstate.h:$(GLSRC)gsbitmap.h
+$(PSSRC)igstate.h:$(GLSRC)gsccolor.h
+$(PSSRC)igstate.h:$(GLSRC)gxarith.h
+$(PSSRC)igstate.h:$(GLSRC)gpsync.h
$(PSSRC)igstate.h:$(GLSRC)gsstype.h
-$(PSSRC)igstate.h:$(GLSRC)gxtmap.h
$(PSSRC)igstate.h:$(GLSRC)gsmemory.h
-$(PSSRC)igstate.h:$(GLSRC)gpsync.h
$(PSSRC)igstate.h:$(GLSRC)gslibctx.h
-$(PSSRC)igstate.h:$(GLSRC)gs_dll_call.h
$(PSSRC)igstate.h:$(GLSRC)gsalloc.h
-$(PSSRC)igstate.h:$(GLSRC)stdio_.h
-$(PSSRC)igstate.h:$(GLSRC)gscompt.h
$(PSSRC)igstate.h:$(GLSRC)gxcindex.h
-$(PSSRC)igstate.h:$(GLSRC)gsgstate.h
+$(PSSRC)igstate.h:$(GLSRC)stdio_.h
$(PSSRC)igstate.h:$(GLSRC)stdint_.h
$(PSSRC)igstate.h:$(GLSRC)gssprintf.h
-$(PSSRC)igstate.h:$(GLSRC)std.h
$(PSSRC)igstate.h:$(GLSRC)gstypes.h
+$(PSSRC)igstate.h:$(GLSRC)std.h
$(PSSRC)igstate.h:$(GLSRC)stdpre.h
$(PSSRC)igstate.h:$(GLGEN)arch.h
+$(PSSRC)igstate.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iscan.h:$(PSSRC)iref.h
$(PSSRC)iscan.h:$(GLSRC)sa85x.h
$(PSSRC)iscan.h:$(GLSRC)sa85d.h
@@ -5769,236 +5769,236 @@ $(PSSRC)iscan.h:$(GLSRC)gxalloc.h
$(PSSRC)iscan.h:$(GLSRC)gxobj.h
$(PSSRC)iscan.h:$(GLSRC)gsnamecl.h
$(PSSRC)iscan.h:$(GLSRC)gxcspace.h
+$(PSSRC)iscan.h:$(GLSRC)gscsel.h
$(PSSRC)iscan.h:$(GLSRC)gsdcolor.h
$(PSSRC)iscan.h:$(GLSRC)gxfrac.h
$(PSSRC)iscan.h:$(GLSRC)gscms.h
-$(PSSRC)iscan.h:$(GLSRC)gscspace.h
$(PSSRC)iscan.h:$(GLSRC)gsdevice.h
-$(PSSRC)iscan.h:$(GLSRC)gxarith.h
-$(PSSRC)iscan.h:$(GLSRC)gxhttile.h
+$(PSSRC)iscan.h:$(GLSRC)gscspace.h
+$(PSSRC)iscan.h:$(GLSRC)gsgstate.h
$(PSSRC)iscan.h:$(GLSRC)gsiparam.h
-$(PSSRC)iscan.h:$(GLSRC)gxbitmap.h
$(PSSRC)iscan.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iscan.h:$(GLSRC)gsrefct.h
+$(PSSRC)iscan.h:$(GLSRC)gxhttile.h
$(PSSRC)iscan.h:$(GLSRC)gsparam.h
-$(PSSRC)iscan.h:$(GLSRC)gsccolor.h
+$(PSSRC)iscan.h:$(GLSRC)gsrefct.h
+$(PSSRC)iscan.h:$(GLSRC)memento.h
$(PSSRC)iscan.h:$(GLSRC)gsstruct.h
$(PSSRC)iscan.h:$(GLSRC)gxsync.h
+$(PSSRC)iscan.h:$(GLSRC)gxbitmap.h
$(PSSRC)iscan.h:$(GLSRC)scommon.h
-$(PSSRC)iscan.h:$(GLSRC)memento.h
-$(PSSRC)iscan.h:$(GLSRC)gscsel.h
$(PSSRC)iscan.h:$(GLSRC)gsbitmap.h
+$(PSSRC)iscan.h:$(GLSRC)gsccolor.h
+$(PSSRC)iscan.h:$(GLSRC)gxarith.h
+$(PSSRC)iscan.h:$(GLSRC)gpsync.h
$(PSSRC)iscan.h:$(GLSRC)gsstype.h
$(PSSRC)iscan.h:$(GLSRC)gsmemory.h
-$(PSSRC)iscan.h:$(GLSRC)gpsync.h
$(PSSRC)iscan.h:$(GLSRC)gslibctx.h
-$(PSSRC)iscan.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iscan.h:$(GLSRC)gsalloc.h
-$(PSSRC)iscan.h:$(GLSRC)stdio_.h
$(PSSRC)iscan.h:$(GLSRC)gxcindex.h
-$(PSSRC)iscan.h:$(GLSRC)gsgstate.h
+$(PSSRC)iscan.h:$(GLSRC)stdio_.h
$(PSSRC)iscan.h:$(GLSRC)stdint_.h
$(PSSRC)iscan.h:$(GLSRC)gssprintf.h
-$(PSSRC)iscan.h:$(GLSRC)std.h
$(PSSRC)iscan.h:$(GLSRC)gstypes.h
+$(PSSRC)iscan.h:$(GLSRC)std.h
$(PSSRC)iscan.h:$(GLSRC)stdpre.h
$(PSSRC)iscan.h:$(GLGEN)arch.h
+$(PSSRC)iscan.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zfile.h:$(PSSRC)iref.h
$(PSSRC)zfile.h:$(GLSRC)gxalloc.h
$(PSSRC)zfile.h:$(GLSRC)gxobj.h
$(PSSRC)zfile.h:$(GLSRC)gsnamecl.h
$(PSSRC)zfile.h:$(GLSRC)gxcspace.h
+$(PSSRC)zfile.h:$(GLSRC)gscsel.h
$(PSSRC)zfile.h:$(GLSRC)gsdcolor.h
$(PSSRC)zfile.h:$(GLSRC)gxfrac.h
$(PSSRC)zfile.h:$(GLSRC)gscms.h
-$(PSSRC)zfile.h:$(GLSRC)gscspace.h
$(PSSRC)zfile.h:$(GLSRC)gsdevice.h
-$(PSSRC)zfile.h:$(GLSRC)gxarith.h
-$(PSSRC)zfile.h:$(GLSRC)gxhttile.h
+$(PSSRC)zfile.h:$(GLSRC)gscspace.h
+$(PSSRC)zfile.h:$(GLSRC)gsgstate.h
$(PSSRC)zfile.h:$(GLSRC)gsiparam.h
-$(PSSRC)zfile.h:$(GLSRC)gxbitmap.h
$(PSSRC)zfile.h:$(GLSRC)gsmatrix.h
-$(PSSRC)zfile.h:$(GLSRC)gsrefct.h
+$(PSSRC)zfile.h:$(GLSRC)gxhttile.h
$(PSSRC)zfile.h:$(GLSRC)gsparam.h
-$(PSSRC)zfile.h:$(GLSRC)gsccolor.h
+$(PSSRC)zfile.h:$(GLSRC)gsrefct.h
+$(PSSRC)zfile.h:$(GLSRC)memento.h
$(PSSRC)zfile.h:$(GLSRC)gsstruct.h
$(PSSRC)zfile.h:$(GLSRC)gxsync.h
+$(PSSRC)zfile.h:$(GLSRC)gxbitmap.h
$(PSSRC)zfile.h:$(GLSRC)scommon.h
-$(PSSRC)zfile.h:$(GLSRC)memento.h
-$(PSSRC)zfile.h:$(GLSRC)gscsel.h
-$(PSSRC)zfile.h:$(GLSRC)gsbitmap.h
$(PSSRC)zfile.h:$(GLSRC)gsfname.h
+$(PSSRC)zfile.h:$(GLSRC)gsbitmap.h
+$(PSSRC)zfile.h:$(GLSRC)gsccolor.h
+$(PSSRC)zfile.h:$(GLSRC)gxarith.h
+$(PSSRC)zfile.h:$(GLSRC)gpsync.h
$(PSSRC)zfile.h:$(GLSRC)gsstype.h
$(PSSRC)zfile.h:$(GLSRC)gsmemory.h
-$(PSSRC)zfile.h:$(GLSRC)gpsync.h
$(PSSRC)zfile.h:$(GLSRC)gslibctx.h
-$(PSSRC)zfile.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zfile.h:$(GLSRC)gsalloc.h
-$(PSSRC)zfile.h:$(GLSRC)stdio_.h
$(PSSRC)zfile.h:$(GLSRC)gxcindex.h
-$(PSSRC)zfile.h:$(GLSRC)gsgstate.h
+$(PSSRC)zfile.h:$(GLSRC)stdio_.h
$(PSSRC)zfile.h:$(GLSRC)stdint_.h
$(PSSRC)zfile.h:$(GLSRC)gssprintf.h
-$(PSSRC)zfile.h:$(GLSRC)std.h
$(PSSRC)zfile.h:$(GLSRC)gstypes.h
+$(PSSRC)zfile.h:$(GLSRC)std.h
$(PSSRC)zfile.h:$(GLSRC)stdpre.h
$(PSSRC)zfile.h:$(GLGEN)arch.h
+$(PSSRC)zfile.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ibnum.h:$(PSSRC)iref.h
$(PSSRC)ibnum.h:$(GLSRC)gxalloc.h
$(PSSRC)ibnum.h:$(GLSRC)gxobj.h
$(PSSRC)ibnum.h:$(GLSRC)gsnamecl.h
$(PSSRC)ibnum.h:$(GLSRC)gxcspace.h
+$(PSSRC)ibnum.h:$(GLSRC)gscsel.h
$(PSSRC)ibnum.h:$(GLSRC)gsdcolor.h
$(PSSRC)ibnum.h:$(GLSRC)gxfrac.h
$(PSSRC)ibnum.h:$(GLSRC)gscms.h
-$(PSSRC)ibnum.h:$(GLSRC)gscspace.h
$(PSSRC)ibnum.h:$(GLSRC)gsdevice.h
-$(PSSRC)ibnum.h:$(GLSRC)gxarith.h
-$(PSSRC)ibnum.h:$(GLSRC)gxhttile.h
+$(PSSRC)ibnum.h:$(GLSRC)gscspace.h
+$(PSSRC)ibnum.h:$(GLSRC)gsgstate.h
$(PSSRC)ibnum.h:$(GLSRC)gsiparam.h
-$(PSSRC)ibnum.h:$(GLSRC)gxbitmap.h
$(PSSRC)ibnum.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ibnum.h:$(GLSRC)gsrefct.h
+$(PSSRC)ibnum.h:$(GLSRC)gxhttile.h
$(PSSRC)ibnum.h:$(GLSRC)gsparam.h
-$(PSSRC)ibnum.h:$(GLSRC)gsccolor.h
+$(PSSRC)ibnum.h:$(GLSRC)gsrefct.h
+$(PSSRC)ibnum.h:$(GLSRC)memento.h
$(PSSRC)ibnum.h:$(GLSRC)gsstruct.h
$(PSSRC)ibnum.h:$(GLSRC)gxsync.h
+$(PSSRC)ibnum.h:$(GLSRC)gxbitmap.h
$(PSSRC)ibnum.h:$(GLSRC)scommon.h
-$(PSSRC)ibnum.h:$(GLSRC)memento.h
-$(PSSRC)ibnum.h:$(GLSRC)gscsel.h
$(PSSRC)ibnum.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ibnum.h:$(GLSRC)gsccolor.h
+$(PSSRC)ibnum.h:$(GLSRC)gxarith.h
+$(PSSRC)ibnum.h:$(GLSRC)gpsync.h
$(PSSRC)ibnum.h:$(GLSRC)gsstype.h
$(PSSRC)ibnum.h:$(GLSRC)gsmemory.h
-$(PSSRC)ibnum.h:$(GLSRC)gpsync.h
$(PSSRC)ibnum.h:$(GLSRC)gslibctx.h
-$(PSSRC)ibnum.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ibnum.h:$(GLSRC)gsalloc.h
-$(PSSRC)ibnum.h:$(GLSRC)stdio_.h
$(PSSRC)ibnum.h:$(GLSRC)gxcindex.h
-$(PSSRC)ibnum.h:$(GLSRC)gsgstate.h
+$(PSSRC)ibnum.h:$(GLSRC)stdio_.h
$(PSSRC)ibnum.h:$(GLSRC)stdint_.h
$(PSSRC)ibnum.h:$(GLSRC)gssprintf.h
-$(PSSRC)ibnum.h:$(GLSRC)std.h
$(PSSRC)ibnum.h:$(GLSRC)gstypes.h
+$(PSSRC)ibnum.h:$(GLSRC)std.h
$(PSSRC)ibnum.h:$(GLSRC)stdpre.h
$(PSSRC)ibnum.h:$(GLGEN)arch.h
+$(PSSRC)ibnum.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zcolor.h:$(PSSRC)iref.h
$(PSSRC)zcolor.h:$(GLSRC)gxalloc.h
$(PSSRC)zcolor.h:$(GLSRC)gxobj.h
$(PSSRC)zcolor.h:$(GLSRC)gsnamecl.h
$(PSSRC)zcolor.h:$(GLSRC)gxcspace.h
+$(PSSRC)zcolor.h:$(GLSRC)gscsel.h
$(PSSRC)zcolor.h:$(GLSRC)gsdcolor.h
$(PSSRC)zcolor.h:$(GLSRC)gxfrac.h
$(PSSRC)zcolor.h:$(GLSRC)gscms.h
-$(PSSRC)zcolor.h:$(GLSRC)gscspace.h
$(PSSRC)zcolor.h:$(GLSRC)gsdevice.h
-$(PSSRC)zcolor.h:$(GLSRC)gxarith.h
-$(PSSRC)zcolor.h:$(GLSRC)gxhttile.h
+$(PSSRC)zcolor.h:$(GLSRC)gscspace.h
+$(PSSRC)zcolor.h:$(GLSRC)gsgstate.h
$(PSSRC)zcolor.h:$(GLSRC)gsiparam.h
-$(PSSRC)zcolor.h:$(GLSRC)gxbitmap.h
$(PSSRC)zcolor.h:$(GLSRC)gsmatrix.h
-$(PSSRC)zcolor.h:$(GLSRC)gsrefct.h
+$(PSSRC)zcolor.h:$(GLSRC)gxhttile.h
$(PSSRC)zcolor.h:$(GLSRC)gsparam.h
-$(PSSRC)zcolor.h:$(GLSRC)gsccolor.h
+$(PSSRC)zcolor.h:$(GLSRC)gsrefct.h
+$(PSSRC)zcolor.h:$(GLSRC)memento.h
$(PSSRC)zcolor.h:$(GLSRC)gsstruct.h
$(PSSRC)zcolor.h:$(GLSRC)gxsync.h
+$(PSSRC)zcolor.h:$(GLSRC)gxbitmap.h
$(PSSRC)zcolor.h:$(GLSRC)scommon.h
-$(PSSRC)zcolor.h:$(GLSRC)memento.h
-$(PSSRC)zcolor.h:$(GLSRC)gscsel.h
$(PSSRC)zcolor.h:$(GLSRC)gsbitmap.h
+$(PSSRC)zcolor.h:$(GLSRC)gsccolor.h
+$(PSSRC)zcolor.h:$(GLSRC)gxarith.h
+$(PSSRC)zcolor.h:$(GLSRC)gpsync.h
$(PSSRC)zcolor.h:$(GLSRC)gsstype.h
$(PSSRC)zcolor.h:$(GLSRC)gsmemory.h
-$(PSSRC)zcolor.h:$(GLSRC)gpsync.h
$(PSSRC)zcolor.h:$(GLSRC)gslibctx.h
-$(PSSRC)zcolor.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zcolor.h:$(GLSRC)gsalloc.h
-$(PSSRC)zcolor.h:$(GLSRC)stdio_.h
$(PSSRC)zcolor.h:$(GLSRC)gxcindex.h
-$(PSSRC)zcolor.h:$(GLSRC)gsgstate.h
+$(PSSRC)zcolor.h:$(GLSRC)stdio_.h
$(PSSRC)zcolor.h:$(GLSRC)stdint_.h
$(PSSRC)zcolor.h:$(GLSRC)gssprintf.h
-$(PSSRC)zcolor.h:$(GLSRC)std.h
$(PSSRC)zcolor.h:$(GLSRC)gstypes.h
+$(PSSRC)zcolor.h:$(GLSRC)std.h
$(PSSRC)zcolor.h:$(GLSRC)stdpre.h
$(PSSRC)zcolor.h:$(GLGEN)arch.h
+$(PSSRC)zcolor.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zcie.h:$(PSSRC)iref.h
$(PSSRC)zcie.h:$(GLSRC)gxalloc.h
$(PSSRC)zcie.h:$(GLSRC)gxobj.h
$(PSSRC)zcie.h:$(GLSRC)gsnamecl.h
$(PSSRC)zcie.h:$(GLSRC)gxcspace.h
+$(PSSRC)zcie.h:$(GLSRC)gscsel.h
$(PSSRC)zcie.h:$(GLSRC)gsdcolor.h
$(PSSRC)zcie.h:$(GLSRC)gxfrac.h
$(PSSRC)zcie.h:$(GLSRC)gscms.h
-$(PSSRC)zcie.h:$(GLSRC)gscspace.h
$(PSSRC)zcie.h:$(GLSRC)gsdevice.h
-$(PSSRC)zcie.h:$(GLSRC)gxarith.h
-$(PSSRC)zcie.h:$(GLSRC)gxhttile.h
+$(PSSRC)zcie.h:$(GLSRC)gscspace.h
+$(PSSRC)zcie.h:$(GLSRC)gsgstate.h
$(PSSRC)zcie.h:$(GLSRC)gsiparam.h
-$(PSSRC)zcie.h:$(GLSRC)gxbitmap.h
$(PSSRC)zcie.h:$(GLSRC)gsmatrix.h
-$(PSSRC)zcie.h:$(GLSRC)gsrefct.h
+$(PSSRC)zcie.h:$(GLSRC)gxhttile.h
$(PSSRC)zcie.h:$(GLSRC)gsparam.h
-$(PSSRC)zcie.h:$(GLSRC)gsccolor.h
+$(PSSRC)zcie.h:$(GLSRC)gsrefct.h
+$(PSSRC)zcie.h:$(GLSRC)memento.h
$(PSSRC)zcie.h:$(GLSRC)gsstruct.h
$(PSSRC)zcie.h:$(GLSRC)gxsync.h
+$(PSSRC)zcie.h:$(GLSRC)gxbitmap.h
$(PSSRC)zcie.h:$(GLSRC)scommon.h
-$(PSSRC)zcie.h:$(GLSRC)memento.h
-$(PSSRC)zcie.h:$(GLSRC)gscsel.h
$(PSSRC)zcie.h:$(GLSRC)gsbitmap.h
+$(PSSRC)zcie.h:$(GLSRC)gsccolor.h
+$(PSSRC)zcie.h:$(GLSRC)gxarith.h
+$(PSSRC)zcie.h:$(GLSRC)gpsync.h
$(PSSRC)zcie.h:$(GLSRC)gsstype.h
$(PSSRC)zcie.h:$(GLSRC)gsmemory.h
-$(PSSRC)zcie.h:$(GLSRC)gpsync.h
$(PSSRC)zcie.h:$(GLSRC)gslibctx.h
-$(PSSRC)zcie.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zcie.h:$(GLSRC)gsalloc.h
-$(PSSRC)zcie.h:$(GLSRC)stdio_.h
$(PSSRC)zcie.h:$(GLSRC)gxcindex.h
-$(PSSRC)zcie.h:$(GLSRC)gsgstate.h
+$(PSSRC)zcie.h:$(GLSRC)stdio_.h
$(PSSRC)zcie.h:$(GLSRC)stdint_.h
$(PSSRC)zcie.h:$(GLSRC)gssprintf.h
-$(PSSRC)zcie.h:$(GLSRC)std.h
$(PSSRC)zcie.h:$(GLSRC)gstypes.h
+$(PSSRC)zcie.h:$(GLSRC)std.h
$(PSSRC)zcie.h:$(GLSRC)stdpre.h
$(PSSRC)zcie.h:$(GLGEN)arch.h
+$(PSSRC)zcie.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zicc.h:$(PSSRC)iref.h
$(PSSRC)zicc.h:$(GLSRC)gxalloc.h
$(PSSRC)zicc.h:$(GLSRC)gxobj.h
$(PSSRC)zicc.h:$(GLSRC)gsnamecl.h
$(PSSRC)zicc.h:$(GLSRC)gxcspace.h
+$(PSSRC)zicc.h:$(GLSRC)gscsel.h
$(PSSRC)zicc.h:$(GLSRC)gsdcolor.h
$(PSSRC)zicc.h:$(GLSRC)gxfrac.h
$(PSSRC)zicc.h:$(GLSRC)gscms.h
-$(PSSRC)zicc.h:$(GLSRC)gscspace.h
$(PSSRC)zicc.h:$(GLSRC)gsdevice.h
-$(PSSRC)zicc.h:$(GLSRC)gxarith.h
-$(PSSRC)zicc.h:$(GLSRC)gxhttile.h
+$(PSSRC)zicc.h:$(GLSRC)gscspace.h
+$(PSSRC)zicc.h:$(GLSRC)gsgstate.h
$(PSSRC)zicc.h:$(GLSRC)gsiparam.h
-$(PSSRC)zicc.h:$(GLSRC)gxbitmap.h
$(PSSRC)zicc.h:$(GLSRC)gsmatrix.h
-$(PSSRC)zicc.h:$(GLSRC)gsrefct.h
+$(PSSRC)zicc.h:$(GLSRC)gxhttile.h
$(PSSRC)zicc.h:$(GLSRC)gsparam.h
-$(PSSRC)zicc.h:$(GLSRC)gsccolor.h
+$(PSSRC)zicc.h:$(GLSRC)gsrefct.h
+$(PSSRC)zicc.h:$(GLSRC)memento.h
$(PSSRC)zicc.h:$(GLSRC)gsstruct.h
$(PSSRC)zicc.h:$(GLSRC)gxsync.h
+$(PSSRC)zicc.h:$(GLSRC)gxbitmap.h
$(PSSRC)zicc.h:$(GLSRC)scommon.h
-$(PSSRC)zicc.h:$(GLSRC)memento.h
-$(PSSRC)zicc.h:$(GLSRC)gscsel.h
$(PSSRC)zicc.h:$(GLSRC)gsbitmap.h
+$(PSSRC)zicc.h:$(GLSRC)gsccolor.h
+$(PSSRC)zicc.h:$(GLSRC)gxarith.h
+$(PSSRC)zicc.h:$(GLSRC)gpsync.h
$(PSSRC)zicc.h:$(GLSRC)gsstype.h
$(PSSRC)zicc.h:$(GLSRC)gsmemory.h
-$(PSSRC)zicc.h:$(GLSRC)gpsync.h
$(PSSRC)zicc.h:$(GLSRC)gslibctx.h
-$(PSSRC)zicc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zicc.h:$(GLSRC)gsalloc.h
-$(PSSRC)zicc.h:$(GLSRC)stdio_.h
$(PSSRC)zicc.h:$(GLSRC)gxcindex.h
-$(PSSRC)zicc.h:$(GLSRC)gsgstate.h
+$(PSSRC)zicc.h:$(GLSRC)stdio_.h
$(PSSRC)zicc.h:$(GLSRC)stdint_.h
$(PSSRC)zicc.h:$(GLSRC)gssprintf.h
-$(PSSRC)zicc.h:$(GLSRC)std.h
$(PSSRC)zicc.h:$(GLSRC)gstypes.h
+$(PSSRC)zicc.h:$(GLSRC)std.h
$(PSSRC)zicc.h:$(GLSRC)stdpre.h
$(PSSRC)zicc.h:$(GLGEN)arch.h
+$(PSSRC)zicc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zfrsd.h:$(PSSRC)iostack.h
$(PSSRC)zfrsd.h:$(PSSRC)istack.h
$(PSSRC)zfrsd.h:$(PSSRC)iosdata.h
@@ -6011,161 +6011,161 @@ $(PSSRC)zfrsd.h:$(GLSRC)gxalloc.h
$(PSSRC)zfrsd.h:$(GLSRC)gxobj.h
$(PSSRC)zfrsd.h:$(GLSRC)gsnamecl.h
$(PSSRC)zfrsd.h:$(GLSRC)gxcspace.h
+$(PSSRC)zfrsd.h:$(GLSRC)gscsel.h
$(PSSRC)zfrsd.h:$(GLSRC)gsdcolor.h
$(PSSRC)zfrsd.h:$(GLSRC)gxfrac.h
$(PSSRC)zfrsd.h:$(GLSRC)gscms.h
-$(PSSRC)zfrsd.h:$(GLSRC)gscspace.h
$(PSSRC)zfrsd.h:$(GLSRC)gsdevice.h
-$(PSSRC)zfrsd.h:$(GLSRC)gxarith.h
-$(PSSRC)zfrsd.h:$(GLSRC)gxhttile.h
+$(PSSRC)zfrsd.h:$(GLSRC)gscspace.h
+$(PSSRC)zfrsd.h:$(GLSRC)gsgstate.h
$(PSSRC)zfrsd.h:$(GLSRC)gsiparam.h
-$(PSSRC)zfrsd.h:$(GLSRC)gxbitmap.h
$(PSSRC)zfrsd.h:$(GLSRC)gsmatrix.h
-$(PSSRC)zfrsd.h:$(GLSRC)gsrefct.h
+$(PSSRC)zfrsd.h:$(GLSRC)gxhttile.h
$(PSSRC)zfrsd.h:$(GLSRC)gsparam.h
-$(PSSRC)zfrsd.h:$(GLSRC)gsccolor.h
+$(PSSRC)zfrsd.h:$(GLSRC)gsrefct.h
+$(PSSRC)zfrsd.h:$(GLSRC)memento.h
$(PSSRC)zfrsd.h:$(GLSRC)gsstruct.h
$(PSSRC)zfrsd.h:$(GLSRC)gxsync.h
+$(PSSRC)zfrsd.h:$(GLSRC)gxbitmap.h
$(PSSRC)zfrsd.h:$(GLSRC)scommon.h
-$(PSSRC)zfrsd.h:$(GLSRC)memento.h
-$(PSSRC)zfrsd.h:$(GLSRC)gscsel.h
$(PSSRC)zfrsd.h:$(GLSRC)gsbitmap.h
+$(PSSRC)zfrsd.h:$(GLSRC)gsccolor.h
+$(PSSRC)zfrsd.h:$(GLSRC)gxarith.h
+$(PSSRC)zfrsd.h:$(GLSRC)gpsync.h
$(PSSRC)zfrsd.h:$(GLSRC)gsstype.h
$(PSSRC)zfrsd.h:$(GLSRC)gsmemory.h
-$(PSSRC)zfrsd.h:$(GLSRC)gpsync.h
$(PSSRC)zfrsd.h:$(GLSRC)gslibctx.h
-$(PSSRC)zfrsd.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zfrsd.h:$(GLSRC)gsalloc.h
-$(PSSRC)zfrsd.h:$(GLSRC)stdio_.h
$(PSSRC)zfrsd.h:$(GLSRC)gxcindex.h
-$(PSSRC)zfrsd.h:$(GLSRC)gsgstate.h
+$(PSSRC)zfrsd.h:$(GLSRC)stdio_.h
$(PSSRC)zfrsd.h:$(GLSRC)stdint_.h
$(PSSRC)zfrsd.h:$(GLSRC)gssprintf.h
-$(PSSRC)zfrsd.h:$(GLSRC)std.h
$(PSSRC)zfrsd.h:$(GLSRC)gstypes.h
+$(PSSRC)zfrsd.h:$(GLSRC)std.h
$(PSSRC)zfrsd.h:$(GLSRC)stdpre.h
$(PSSRC)zfrsd.h:$(GLGEN)arch.h
+$(PSSRC)zfrsd.h:$(GLSRC)gs_dll_call.h
$(PSSRC)dscparse.h:$(GLSRC)stdpre.h
$(PSSRC)ifunc.h:$(PSSRC)iref.h
$(PSSRC)ifunc.h:$(GLSRC)gxalloc.h
$(PSSRC)ifunc.h:$(GLSRC)gxobj.h
$(PSSRC)ifunc.h:$(GLSRC)gsnamecl.h
-$(PSSRC)ifunc.h:$(GLSRC)gxcspace.h
$(PSSRC)ifunc.h:$(GLSRC)gsfunc.h
+$(PSSRC)ifunc.h:$(GLSRC)gxcspace.h
+$(PSSRC)ifunc.h:$(GLSRC)gscsel.h
$(PSSRC)ifunc.h:$(GLSRC)gsdcolor.h
$(PSSRC)ifunc.h:$(GLSRC)gxfrac.h
$(PSSRC)ifunc.h:$(GLSRC)gscms.h
-$(PSSRC)ifunc.h:$(GLSRC)gscspace.h
$(PSSRC)ifunc.h:$(GLSRC)gsdevice.h
-$(PSSRC)ifunc.h:$(GLSRC)gxarith.h
-$(PSSRC)ifunc.h:$(GLSRC)gxhttile.h
-$(PSSRC)ifunc.h:$(GLSRC)gsiparam.h
+$(PSSRC)ifunc.h:$(GLSRC)gscspace.h
+$(PSSRC)ifunc.h:$(GLSRC)gsgstate.h
$(PSSRC)ifunc.h:$(GLSRC)gsdsrc.h
-$(PSSRC)ifunc.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifunc.h:$(GLSRC)gsiparam.h
$(PSSRC)ifunc.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifunc.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifunc.h:$(GLSRC)gxhttile.h
$(PSSRC)ifunc.h:$(GLSRC)gsparam.h
-$(PSSRC)ifunc.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifunc.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifunc.h:$(GLSRC)memento.h
$(PSSRC)ifunc.h:$(GLSRC)gsstruct.h
$(PSSRC)ifunc.h:$(GLSRC)gxsync.h
+$(PSSRC)ifunc.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifunc.h:$(GLSRC)scommon.h
-$(PSSRC)ifunc.h:$(GLSRC)memento.h
-$(PSSRC)ifunc.h:$(GLSRC)gscsel.h
$(PSSRC)ifunc.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ifunc.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifunc.h:$(GLSRC)gxarith.h
+$(PSSRC)ifunc.h:$(GLSRC)gpsync.h
$(PSSRC)ifunc.h:$(GLSRC)gsstype.h
$(PSSRC)ifunc.h:$(GLSRC)gsmemory.h
-$(PSSRC)ifunc.h:$(GLSRC)gpsync.h
$(PSSRC)ifunc.h:$(GLSRC)gslibctx.h
-$(PSSRC)ifunc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifunc.h:$(GLSRC)gsalloc.h
-$(PSSRC)ifunc.h:$(GLSRC)stdio_.h
$(PSSRC)ifunc.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifunc.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifunc.h:$(GLSRC)stdio_.h
$(PSSRC)ifunc.h:$(GLSRC)stdint_.h
$(PSSRC)ifunc.h:$(GLSRC)gssprintf.h
-$(PSSRC)ifunc.h:$(GLSRC)std.h
$(PSSRC)ifunc.h:$(GLSRC)gstypes.h
+$(PSSRC)ifunc.h:$(GLSRC)std.h
$(PSSRC)ifunc.h:$(GLSRC)stdpre.h
$(PSSRC)ifunc.h:$(GLGEN)arch.h
+$(PSSRC)ifunc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ivmem2.h:$(PSSRC)iref.h
$(PSSRC)ivmem2.h:$(GLSRC)gxalloc.h
$(PSSRC)ivmem2.h:$(GLSRC)gxobj.h
$(PSSRC)ivmem2.h:$(GLSRC)gsnamecl.h
$(PSSRC)ivmem2.h:$(GLSRC)gxcspace.h
+$(PSSRC)ivmem2.h:$(GLSRC)gscsel.h
$(PSSRC)ivmem2.h:$(GLSRC)gsdcolor.h
$(PSSRC)ivmem2.h:$(GLSRC)gxfrac.h
$(PSSRC)ivmem2.h:$(GLSRC)gscms.h
-$(PSSRC)ivmem2.h:$(GLSRC)gscspace.h
$(PSSRC)ivmem2.h:$(GLSRC)gsdevice.h
-$(PSSRC)ivmem2.h:$(GLSRC)gxarith.h
-$(PSSRC)ivmem2.h:$(GLSRC)gxhttile.h
+$(PSSRC)ivmem2.h:$(GLSRC)gscspace.h
+$(PSSRC)ivmem2.h:$(GLSRC)gsgstate.h
$(PSSRC)ivmem2.h:$(GLSRC)gsiparam.h
-$(PSSRC)ivmem2.h:$(GLSRC)gxbitmap.h
$(PSSRC)ivmem2.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ivmem2.h:$(GLSRC)gsrefct.h
+$(PSSRC)ivmem2.h:$(GLSRC)gxhttile.h
$(PSSRC)ivmem2.h:$(GLSRC)gsparam.h
-$(PSSRC)ivmem2.h:$(GLSRC)gsccolor.h
+$(PSSRC)ivmem2.h:$(GLSRC)gsrefct.h
+$(PSSRC)ivmem2.h:$(GLSRC)memento.h
$(PSSRC)ivmem2.h:$(GLSRC)gsstruct.h
$(PSSRC)ivmem2.h:$(GLSRC)gxsync.h
+$(PSSRC)ivmem2.h:$(GLSRC)gxbitmap.h
$(PSSRC)ivmem2.h:$(GLSRC)scommon.h
-$(PSSRC)ivmem2.h:$(GLSRC)memento.h
-$(PSSRC)ivmem2.h:$(GLSRC)gscsel.h
$(PSSRC)ivmem2.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ivmem2.h:$(GLSRC)gsccolor.h
+$(PSSRC)ivmem2.h:$(GLSRC)gxarith.h
+$(PSSRC)ivmem2.h:$(GLSRC)gpsync.h
$(PSSRC)ivmem2.h:$(GLSRC)gsstype.h
$(PSSRC)ivmem2.h:$(GLSRC)gsmemory.h
-$(PSSRC)ivmem2.h:$(GLSRC)gpsync.h
$(PSSRC)ivmem2.h:$(GLSRC)gslibctx.h
-$(PSSRC)ivmem2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ivmem2.h:$(GLSRC)gsalloc.h
-$(PSSRC)ivmem2.h:$(GLSRC)stdio_.h
$(PSSRC)ivmem2.h:$(GLSRC)gxcindex.h
-$(PSSRC)ivmem2.h:$(GLSRC)gsgstate.h
+$(PSSRC)ivmem2.h:$(GLSRC)stdio_.h
$(PSSRC)ivmem2.h:$(GLSRC)stdint_.h
$(PSSRC)ivmem2.h:$(GLSRC)gssprintf.h
-$(PSSRC)ivmem2.h:$(GLSRC)std.h
$(PSSRC)ivmem2.h:$(GLSRC)gstypes.h
+$(PSSRC)ivmem2.h:$(GLSRC)std.h
$(PSSRC)ivmem2.h:$(GLSRC)stdpre.h
$(PSSRC)ivmem2.h:$(GLGEN)arch.h
-$(PSSRC)icid.h:$(GLSRC)gxcid.h
+$(PSSRC)ivmem2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icid.h:$(PSSRC)iref.h
$(PSSRC)icid.h:$(GLSRC)gxalloc.h
$(PSSRC)icid.h:$(GLSRC)gxobj.h
$(PSSRC)icid.h:$(GLSRC)gsnamecl.h
$(PSSRC)icid.h:$(GLSRC)gxcspace.h
+$(PSSRC)icid.h:$(GLSRC)gscsel.h
$(PSSRC)icid.h:$(GLSRC)gsdcolor.h
$(PSSRC)icid.h:$(GLSRC)gxfrac.h
$(PSSRC)icid.h:$(GLSRC)gscms.h
-$(PSSRC)icid.h:$(GLSRC)gscspace.h
$(PSSRC)icid.h:$(GLSRC)gsdevice.h
-$(PSSRC)icid.h:$(GLSRC)gxarith.h
-$(PSSRC)icid.h:$(GLSRC)gxhttile.h
+$(PSSRC)icid.h:$(GLSRC)gscspace.h
+$(PSSRC)icid.h:$(GLSRC)gsgstate.h
+$(PSSRC)icid.h:$(GLSRC)gxcid.h
$(PSSRC)icid.h:$(GLSRC)gsiparam.h
-$(PSSRC)icid.h:$(GLSRC)gxbitmap.h
$(PSSRC)icid.h:$(GLSRC)gsmatrix.h
-$(PSSRC)icid.h:$(GLSRC)gsrefct.h
+$(PSSRC)icid.h:$(GLSRC)gxhttile.h
$(PSSRC)icid.h:$(GLSRC)gsparam.h
-$(PSSRC)icid.h:$(GLSRC)gsccolor.h
+$(PSSRC)icid.h:$(GLSRC)gsrefct.h
+$(PSSRC)icid.h:$(GLSRC)memento.h
$(PSSRC)icid.h:$(GLSRC)gsstruct.h
$(PSSRC)icid.h:$(GLSRC)gxsync.h
+$(PSSRC)icid.h:$(GLSRC)gxbitmap.h
$(PSSRC)icid.h:$(GLSRC)scommon.h
-$(PSSRC)icid.h:$(GLSRC)memento.h
-$(PSSRC)icid.h:$(GLSRC)gscsel.h
$(PSSRC)icid.h:$(GLSRC)gsbitmap.h
+$(PSSRC)icid.h:$(GLSRC)gsccolor.h
+$(PSSRC)icid.h:$(GLSRC)gxarith.h
+$(PSSRC)icid.h:$(GLSRC)gpsync.h
$(PSSRC)icid.h:$(GLSRC)gsstype.h
$(PSSRC)icid.h:$(GLSRC)gsmemory.h
-$(PSSRC)icid.h:$(GLSRC)gpsync.h
$(PSSRC)icid.h:$(GLSRC)gslibctx.h
-$(PSSRC)icid.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icid.h:$(GLSRC)gsalloc.h
-$(PSSRC)icid.h:$(GLSRC)stdio_.h
$(PSSRC)icid.h:$(GLSRC)gxcindex.h
-$(PSSRC)icid.h:$(GLSRC)gsgstate.h
+$(PSSRC)icid.h:$(GLSRC)stdio_.h
$(PSSRC)icid.h:$(GLSRC)stdint_.h
$(PSSRC)icid.h:$(GLSRC)gssprintf.h
-$(PSSRC)icid.h:$(GLSRC)std.h
$(PSSRC)icid.h:$(GLSRC)gstypes.h
+$(PSSRC)icid.h:$(GLSRC)std.h
$(PSSRC)icid.h:$(GLSRC)stdpre.h
$(PSSRC)icid.h:$(GLGEN)arch.h
+$(PSSRC)icid.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifcid.h:$(GLSRC)gxfcid.h
$(PSSRC)ifcid.h:$(PSSRC)icid.h
$(PSSRC)ifcid.h:$(GLSRC)gstype1.h
@@ -6174,259 +6174,294 @@ $(PSSRC)ifcid.h:$(GLSRC)gxfont.h
$(PSSRC)ifcid.h:$(PSSRC)iostack.h
$(PSSRC)ifcid.h:$(GLSRC)gspath.h
$(PSSRC)ifcid.h:$(PSSRC)istack.h
-$(PSSRC)ifcid.h:$(GLSRC)gxcid.h
-$(PSSRC)ifcid.h:$(GLSRC)gxmatrix.h
$(PSSRC)ifcid.h:$(GLSRC)gsgdata.h
$(PSSRC)ifcid.h:$(PSSRC)iosdata.h
-$(PSSRC)ifcid.h:$(GLSRC)gsgcache.h
+$(PSSRC)ifcid.h:$(GLSRC)gxmatrix.h
$(PSSRC)ifcid.h:$(GLSRC)gxfapi.h
-$(PSSRC)ifcid.h:$(GLSRC)gsnotify.h
-$(PSSRC)ifcid.h:$(GLSRC)gsfcmap.h
$(PSSRC)ifcid.h:$(PSSRC)isdata.h
$(PSSRC)ifcid.h:$(PSSRC)imemory.h
+$(PSSRC)ifcid.h:$(GLSRC)gsfcmap.h
$(PSSRC)ifcid.h:$(PSSRC)ivmspace.h
$(PSSRC)ifcid.h:$(PSSRC)iref.h
$(PSSRC)ifcid.h:$(GLSRC)gsgc.h
$(PSSRC)ifcid.h:$(GLSRC)gxalloc.h
-$(PSSRC)ifcid.h:$(GLSRC)gstext.h
$(PSSRC)ifcid.h:$(GLSRC)gxobj.h
+$(PSSRC)ifcid.h:$(GLSRC)gstext.h
$(PSSRC)ifcid.h:$(GLSRC)gsnamecl.h
-$(PSSRC)ifcid.h:$(GLSRC)gxfcache.h
$(PSSRC)ifcid.h:$(GLSRC)gxcspace.h
-$(PSSRC)ifcid.h:$(GLSRC)gsuid.h
-$(PSSRC)ifcid.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifcid.h:$(GLSRC)gscsel.h
+$(PSSRC)ifcid.h:$(GLSRC)gxfcache.h
$(PSSRC)ifcid.h:$(GLSRC)gsfont.h
-$(PSSRC)ifcid.h:$(GLSRC)gxftype.h
+$(PSSRC)ifcid.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifcid.h:$(GLSRC)gxbcache.h
+$(PSSRC)ifcid.h:$(GLSRC)gxpath.h
$(PSSRC)ifcid.h:$(GLSRC)gxfrac.h
+$(PSSRC)ifcid.h:$(GLSRC)gxftype.h
$(PSSRC)ifcid.h:$(GLSRC)gscms.h
-$(PSSRC)ifcid.h:$(GLSRC)gscspace.h
-$(PSSRC)ifcid.h:$(GLSRC)gxpath.h
-$(PSSRC)ifcid.h:$(GLSRC)gxbcache.h
-$(PSSRC)ifcid.h:$(GLSRC)gsdevice.h
-$(PSSRC)ifcid.h:$(GLSRC)gxarith.h
-$(PSSRC)ifcid.h:$(GLSRC)gspenum.h
-$(PSSRC)ifcid.h:$(GLSRC)gxhttile.h
$(PSSRC)ifcid.h:$(GLSRC)gsrect.h
$(PSSRC)ifcid.h:$(GLSRC)gslparam.h
+$(PSSRC)ifcid.h:$(GLSRC)gsdevice.h
+$(PSSRC)ifcid.h:$(GLSRC)gscpm.h
+$(PSSRC)ifcid.h:$(GLSRC)gsgcache.h
+$(PSSRC)ifcid.h:$(GLSRC)gscspace.h
+$(PSSRC)ifcid.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifcid.h:$(GLSRC)gsnotify.h
$(PSSRC)ifcid.h:$(GLSRC)gsxfont.h
+$(PSSRC)ifcid.h:$(GLSRC)gxcid.h
$(PSSRC)ifcid.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifcid.h:$(GLSRC)gxbitmap.h
-$(PSSRC)ifcid.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifcid.h:$(GLSRC)gscpm.h
$(PSSRC)ifcid.h:$(GLSRC)gxfixed.h
-$(PSSRC)ifcid.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifcid.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifcid.h:$(GLSRC)gspenum.h
+$(PSSRC)ifcid.h:$(GLSRC)gxhttile.h
$(PSSRC)ifcid.h:$(GLSRC)gsparam.h
-$(PSSRC)ifcid.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifcid.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifcid.h:$(GLSRC)memento.h
+$(PSSRC)ifcid.h:$(GLSRC)gsuid.h
$(PSSRC)ifcid.h:$(GLSRC)gsstruct.h
$(PSSRC)ifcid.h:$(GLSRC)gxsync.h
+$(PSSRC)ifcid.h:$(GLSRC)gxbitmap.h
$(PSSRC)ifcid.h:$(GLSRC)scommon.h
-$(PSSRC)ifcid.h:$(GLSRC)memento.h
-$(PSSRC)ifcid.h:$(GLSRC)gscsel.h
$(PSSRC)ifcid.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ifcid.h:$(GLSRC)gsccolor.h
+$(PSSRC)ifcid.h:$(GLSRC)gxarith.h
+$(PSSRC)ifcid.h:$(GLSRC)gpsync.h
$(PSSRC)ifcid.h:$(GLSRC)gsstype.h
$(PSSRC)ifcid.h:$(GLSRC)gsmemory.h
-$(PSSRC)ifcid.h:$(GLSRC)gpsync.h
$(PSSRC)ifcid.h:$(GLSRC)gslibctx.h
-$(PSSRC)ifcid.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifcid.h:$(GLSRC)gsalloc.h
-$(PSSRC)ifcid.h:$(GLSRC)stdio_.h
$(PSSRC)ifcid.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifcid.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifcid.h:$(GLSRC)stdio_.h
+$(PSSRC)ifcid.h:$(GLSRC)gsccode.h
$(PSSRC)ifcid.h:$(GLSRC)stdint_.h
$(PSSRC)ifcid.h:$(GLSRC)gssprintf.h
-$(PSSRC)ifcid.h:$(GLSRC)gsccode.h
-$(PSSRC)ifcid.h:$(GLSRC)std.h
$(PSSRC)ifcid.h:$(GLSRC)gstypes.h
+$(PSSRC)ifcid.h:$(GLSRC)std.h
$(PSSRC)ifcid.h:$(GLSRC)stdpre.h
$(PSSRC)ifcid.h:$(GLGEN)arch.h
+$(PSSRC)ifcid.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icie.h:$(PSSRC)igstate.h
$(PSSRC)icie.h:$(GLSRC)gsstate.h
$(PSSRC)icie.h:$(GLSRC)gsovrc.h
$(PSSRC)icie.h:$(GLSRC)gscolor.h
-$(PSSRC)icie.h:$(GLSRC)gxcomp.h
$(PSSRC)icie.h:$(GLSRC)gsline.h
+$(PSSRC)icie.h:$(GLSRC)gxcomp.h
$(PSSRC)icie.h:$(PSSRC)istruct.h
-$(PSSRC)icie.h:$(GLSRC)gxbitfmt.h
$(PSSRC)icie.h:$(PSSRC)imemory.h
-$(PSSRC)icie.h:$(PSSRC)ivmspace.h
$(PSSRC)icie.h:$(GLSRC)gsht.h
+$(PSSRC)icie.h:$(PSSRC)ivmspace.h
$(PSSRC)icie.h:$(PSSRC)iref.h
$(PSSRC)icie.h:$(GLSRC)gsgc.h
-$(PSSRC)icie.h:$(GLSRC)gxalloc.h
$(PSSRC)icie.h:$(GLSRC)gscie.h
+$(PSSRC)icie.h:$(GLSRC)gxalloc.h
$(PSSRC)icie.h:$(GLSRC)gxobj.h
-$(PSSRC)icie.h:$(GLSRC)gsnamecl.h
$(PSSRC)icie.h:$(GLSRC)gxstate.h
+$(PSSRC)icie.h:$(GLSRC)gsnamecl.h
$(PSSRC)icie.h:$(GLSRC)gxcspace.h
$(PSSRC)icie.h:$(GLSRC)gxctable.h
+$(PSSRC)icie.h:$(GLSRC)gscsel.h
$(PSSRC)icie.h:$(GLSRC)gsdcolor.h
$(PSSRC)icie.h:$(GLSRC)gxfrac.h
+$(PSSRC)icie.h:$(GLSRC)gxtmap.h
$(PSSRC)icie.h:$(GLSRC)gscms.h
-$(PSSRC)icie.h:$(GLSRC)gscspace.h
-$(PSSRC)icie.h:$(GLSRC)gsdevice.h
-$(PSSRC)icie.h:$(GLSRC)gxarith.h
-$(PSSRC)icie.h:$(GLSRC)gxhttile.h
$(PSSRC)icie.h:$(GLSRC)gslparam.h
-$(PSSRC)icie.h:$(GLSRC)gsiparam.h
-$(PSSRC)icie.h:$(GLSRC)gxbitmap.h
-$(PSSRC)icie.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icie.h:$(GLSRC)gsdevice.h
+$(PSSRC)icie.h:$(GLSRC)gxbitfmt.h
$(PSSRC)icie.h:$(GLSRC)gscpm.h
+$(PSSRC)icie.h:$(GLSRC)gscspace.h
+$(PSSRC)icie.h:$(GLSRC)gsgstate.h
+$(PSSRC)icie.h:$(GLSRC)gsiparam.h
$(PSSRC)icie.h:$(GLSRC)gxfixed.h
-$(PSSRC)icie.h:$(GLSRC)gsrefct.h
+$(PSSRC)icie.h:$(GLSRC)gscompt.h
+$(PSSRC)icie.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icie.h:$(GLSRC)gxhttile.h
$(PSSRC)icie.h:$(GLSRC)gsparam.h
-$(PSSRC)icie.h:$(GLSRC)gsccolor.h
+$(PSSRC)icie.h:$(GLSRC)gsrefct.h
+$(PSSRC)icie.h:$(GLSRC)memento.h
$(PSSRC)icie.h:$(GLSRC)gsstruct.h
$(PSSRC)icie.h:$(GLSRC)gxsync.h
+$(PSSRC)icie.h:$(GLSRC)gxbitmap.h
$(PSSRC)icie.h:$(GLSRC)scommon.h
-$(PSSRC)icie.h:$(GLSRC)memento.h
-$(PSSRC)icie.h:$(GLSRC)gscsel.h
$(PSSRC)icie.h:$(GLSRC)gsbitmap.h
+$(PSSRC)icie.h:$(GLSRC)gsccolor.h
+$(PSSRC)icie.h:$(GLSRC)gxarith.h
+$(PSSRC)icie.h:$(GLSRC)gpsync.h
$(PSSRC)icie.h:$(GLSRC)gsstype.h
-$(PSSRC)icie.h:$(GLSRC)gxtmap.h
$(PSSRC)icie.h:$(GLSRC)gsmemory.h
-$(PSSRC)icie.h:$(GLSRC)gpsync.h
$(PSSRC)icie.h:$(GLSRC)gslibctx.h
-$(PSSRC)icie.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icie.h:$(GLSRC)gsalloc.h
-$(PSSRC)icie.h:$(GLSRC)stdio_.h
-$(PSSRC)icie.h:$(GLSRC)gscompt.h
$(PSSRC)icie.h:$(GLSRC)gxcindex.h
-$(PSSRC)icie.h:$(GLSRC)gsgstate.h
+$(PSSRC)icie.h:$(GLSRC)stdio_.h
$(PSSRC)icie.h:$(GLSRC)stdint_.h
$(PSSRC)icie.h:$(GLSRC)gssprintf.h
-$(PSSRC)icie.h:$(GLSRC)std.h
$(PSSRC)icie.h:$(GLSRC)gstypes.h
+$(PSSRC)icie.h:$(GLSRC)std.h
$(PSSRC)icie.h:$(GLSRC)stdpre.h
$(PSSRC)icie.h:$(GLGEN)arch.h
+$(PSSRC)icie.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ipcolor.h:$(PSSRC)iref.h
$(PSSRC)ipcolor.h:$(GLSRC)gxalloc.h
$(PSSRC)ipcolor.h:$(GLSRC)gxobj.h
$(PSSRC)ipcolor.h:$(GLSRC)gsnamecl.h
$(PSSRC)ipcolor.h:$(GLSRC)gxcspace.h
+$(PSSRC)ipcolor.h:$(GLSRC)gscsel.h
$(PSSRC)ipcolor.h:$(GLSRC)gsdcolor.h
$(PSSRC)ipcolor.h:$(GLSRC)gxfrac.h
$(PSSRC)ipcolor.h:$(GLSRC)gscms.h
-$(PSSRC)ipcolor.h:$(GLSRC)gscspace.h
$(PSSRC)ipcolor.h:$(GLSRC)gsdevice.h
-$(PSSRC)ipcolor.h:$(GLSRC)gxarith.h
-$(PSSRC)ipcolor.h:$(GLSRC)gxhttile.h
+$(PSSRC)ipcolor.h:$(GLSRC)gscspace.h
+$(PSSRC)ipcolor.h:$(GLSRC)gsgstate.h
$(PSSRC)ipcolor.h:$(GLSRC)gsiparam.h
-$(PSSRC)ipcolor.h:$(GLSRC)gxbitmap.h
$(PSSRC)ipcolor.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ipcolor.h:$(GLSRC)gsrefct.h
+$(PSSRC)ipcolor.h:$(GLSRC)gxhttile.h
$(PSSRC)ipcolor.h:$(GLSRC)gsparam.h
-$(PSSRC)ipcolor.h:$(GLSRC)gsccolor.h
+$(PSSRC)ipcolor.h:$(GLSRC)gsrefct.h
+$(PSSRC)ipcolor.h:$(GLSRC)memento.h
$(PSSRC)ipcolor.h:$(GLSRC)gsstruct.h
$(PSSRC)ipcolor.h:$(GLSRC)gxsync.h
+$(PSSRC)ipcolor.h:$(GLSRC)gxbitmap.h
$(PSSRC)ipcolor.h:$(GLSRC)scommon.h
-$(PSSRC)ipcolor.h:$(GLSRC)memento.h
-$(PSSRC)ipcolor.h:$(GLSRC)gscsel.h
$(PSSRC)ipcolor.h:$(GLSRC)gsbitmap.h
+$(PSSRC)ipcolor.h:$(GLSRC)gsccolor.h
+$(PSSRC)ipcolor.h:$(GLSRC)gxarith.h
+$(PSSRC)ipcolor.h:$(GLSRC)gpsync.h
$(PSSRC)ipcolor.h:$(GLSRC)gsstype.h
$(PSSRC)ipcolor.h:$(GLSRC)gsmemory.h
-$(PSSRC)ipcolor.h:$(GLSRC)gpsync.h
$(PSSRC)ipcolor.h:$(GLSRC)gslibctx.h
-$(PSSRC)ipcolor.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ipcolor.h:$(GLSRC)gsalloc.h
-$(PSSRC)ipcolor.h:$(GLSRC)stdio_.h
$(PSSRC)ipcolor.h:$(GLSRC)gxcindex.h
-$(PSSRC)ipcolor.h:$(GLSRC)gsgstate.h
+$(PSSRC)ipcolor.h:$(GLSRC)stdio_.h
$(PSSRC)ipcolor.h:$(GLSRC)stdint_.h
$(PSSRC)ipcolor.h:$(GLSRC)gssprintf.h
-$(PSSRC)ipcolor.h:$(GLSRC)std.h
$(PSSRC)ipcolor.h:$(GLSRC)gstypes.h
+$(PSSRC)ipcolor.h:$(GLSRC)std.h
$(PSSRC)ipcolor.h:$(GLSRC)stdpre.h
$(PSSRC)ipcolor.h:$(GLGEN)arch.h
+$(PSSRC)ipcolor.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsform1.h:$(GLSRC)gxpath.h
-$(GLSRC)gsform1.h:$(GLSRC)gspenum.h
$(GLSRC)gsform1.h:$(GLSRC)gsrect.h
$(GLSRC)gsform1.h:$(GLSRC)gslparam.h
-$(GLSRC)gsform1.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsform1.h:$(GLSRC)gscpm.h
+$(GLSRC)gsform1.h:$(GLSRC)gsgstate.h
$(GLSRC)gsform1.h:$(GLSRC)gxfixed.h
+$(GLSRC)gsform1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsform1.h:$(GLSRC)gspenum.h
$(GLSRC)gsform1.h:$(GLSRC)scommon.h
$(GLSRC)gsform1.h:$(GLSRC)gsstype.h
$(GLSRC)gsform1.h:$(GLSRC)gsmemory.h
$(GLSRC)gsform1.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsform1.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsform1.h:$(GLSRC)stdio_.h
-$(GLSRC)gsform1.h:$(GLSRC)gsgstate.h
$(GLSRC)gsform1.h:$(GLSRC)stdint_.h
$(GLSRC)gsform1.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsform1.h:$(GLSRC)std.h
$(GLSRC)gsform1.h:$(GLSRC)gstypes.h
+$(GLSRC)gsform1.h:$(GLSRC)std.h
$(GLSRC)gsform1.h:$(GLSRC)stdpre.h
$(GLSRC)gsform1.h:$(GLGEN)arch.h
+$(GLSRC)gsform1.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxclist.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxgstate.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gstrans.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gdevp14.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxline.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)math_.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcolor2.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxpcolor.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxdevmem.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gdevdevn.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsequivc.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxclipsr.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxdevbuf.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxdcolor.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxband.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxblend.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gscolor2.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxmatrix.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxdevice.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcpath.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxdevcli.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxpcache.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsptype1.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gscie.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxstate.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxfcache.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsmalloc.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcspace.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxctable.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsuid.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsimage.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxdda.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsfont.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxftype.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxiclass.h
$(DEVSRC)gdevdsp2.h:$(DEVSRC)gdevdsp.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsdevice.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxbitfmt.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxstdio.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsdsrc.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsio.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsiparam.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxclio.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxhttile.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsrefct.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gp.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)memento.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsuid.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)vmsmath.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)srdline.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)scommon.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)memento.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsfname.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsbitmap.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxarith.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)stat_.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gpgetenv.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gscdefs.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsccode.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)std.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)std.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevdsp2.h:$(GLGEN)arch.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gs_dll_call.h
diff --git a/psi/interp.c b/psi/interp.c
index 3ac5c70c..730ddf16 100644
--- a/psi/interp.c
+++ b/psi/interp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -1043,9 +1043,9 @@ interp(i_ctx_t **pi_ctx_p /* context for execution, updated if resched */,
osp = iosp;
esp = iesp;
- dmlprintf5(imemory, "d%u,e%u<%u>0x%lx(%d): ",
+ dmlprintf5(imemory, "d%u,e%u<%u>"PRI_INTPTR"(%d): ",
ref_stack_count(&d_stack), ref_stack_count(&e_stack),
- ref_stack_count(&o_stack), (ulong)IREF, icount);
+ ref_stack_count(&o_stack), (intptr_t)IREF, icount);
debug_print_ref(imemory, IREF);
if (iosp >= osbot) {
dmputs(imemory, " // ");
diff --git a/psi/interp.h b/psi/interp.h
index 7f986df0..ba552eb4 100644
--- a/psi/interp.h
+++ b/psi/interp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iosdata.h b/psi/iosdata.h
index 734dd3ed..e171a0b1 100644
--- a/psi/iosdata.h
+++ b/psi/iosdata.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iostack.h b/psi/iostack.h
index 7ed37b51..ebf4ff5a 100644
--- a/psi/iostack.h
+++ b/psi/iostack.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ipacked.h b/psi/ipacked.h
index a7b0aee5..e0ff8878 100644
--- a/psi/ipacked.h
+++ b/psi/ipacked.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iparam.c b/psi/iparam.c
index 3106f412..0a7651b7 100644
--- a/psi/iparam.c
+++ b/psi/iparam.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -222,8 +222,17 @@ ref_param_write_typed(gs_param_list * plist, gs_param_name pkey,
make_int(&value, pvalue->value.i);
break;
case gs_param_type_long:
+ /* FIXME: Rangecheck? */
make_int(&value, pvalue->value.l);
break;
+ case gs_param_type_size_t:
+ /* FIXME: Rangecheck? */
+ make_int(&value, pvalue->value.z);
+ break;
+ case gs_param_type_i64:
+ /* FIXME: Rangecheck? */
+ make_int(&value, pvalue->value.i64);
+ break;
case gs_param_type_float:
make_real(&value, pvalue->value.f);
break;
@@ -782,8 +791,8 @@ ref_param_read_typed(gs_param_list * plist, gs_param_name pkey,
}
return 0;
case t_integer:
- pvalue->type = gs_param_type_long;
- pvalue->value.l = loc.pvalue->value.intval;
+ pvalue->type = gs_param_type_i64;
+ pvalue->value.i64 = loc.pvalue->value.intval;
return 0;
case t_name:
pvalue->type = gs_param_type_name;
diff --git a/psi/iparam.h b/psi/iparam.h
index 526ddd83..5050ab44 100644
--- a/psi/iparam.h
+++ b/psi/iparam.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iparray.h b/psi/iparray.h
index 53dd3840..35c43db7 100644
--- a/psi/iparray.h
+++ b/psi/iparray.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ipcolor.h b/psi/ipcolor.h
index 6de10569..7ed8590b 100644
--- a/psi/ipcolor.h
+++ b/psi/ipcolor.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iplugin.c b/psi/iplugin.c
index 074e1fde..fa2b8cc5 100644
--- a/psi/iplugin.c
+++ b/psi/iplugin.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iplugin.h b/psi/iplugin.h
index ab6f8711..d6e7a6aa 100644
--- a/psi/iplugin.h
+++ b/psi/iplugin.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ireclaim.c b/psi/ireclaim.c
index f28b1b39..8a3aedc8 100644
--- a/psi/ireclaim.c
+++ b/psi/ireclaim.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -83,7 +83,7 @@ ireclaim(gs_dual_memory_t * dmem, int space)
ialloc_set_limit(mem);
if (space < 0) {
gs_memory_status_t stats;
- ulong allocated;
+ size_t allocated;
/* If the ammount still allocated after the GC is complete */
/* exceeds the max_vm setting, then return a VMerror */
@@ -141,7 +141,9 @@ gs_vmreclaim(gs_dual_memory_t *dmem, bool global)
) {
gs_ref_memory_t *mem = dmem->spaces_indexed[i];
- if (mem == 0 || (i > 0 && mem == dmem->spaces_indexed[i - 1]))
+ /* Always safe to substract 1 from i here, as i is always at
+ * least i_vm_system (1) or i_vm_local (2). */
+ if (mem == 0 || (mem == dmem->spaces_indexed[i - 1]))
continue;
if (mem->stable_memory != (gs_memory_t *)mem)
ialloc_gc_prepare((gs_ref_memory_t *)mem->stable_memory);
diff --git a/psi/iref.h b/psi/iref.h
index 0493f550..a9765a1a 100644
--- a/psi/iref.h
+++ b/psi/iref.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/isave.c b/psi/isave.c
index b1d0c7fc..8f67cc71 100644
--- a/psi/isave.c
+++ b/psi/isave.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -153,8 +153,8 @@ static const long min_inner_clump_space = sizeof(clump_head_t) + 500;
static void
print_save(const char *str, uint spacen, const alloc_save_t *sav)
{
- if_debug5('u', "[u]%s space %u 0x%lx: cdata = 0x%lx, id = %lu\n",\
- str, spacen, (ulong)sav, (ulong)sav->client_data, (ulong)sav->id);
+ if_debug5('u', "[u]%s space %u "PRI_INTPTR": cdata = "PRI_INTPTR", id = %lu\n",\
+ str, spacen, (intptr_t)sav, (intptr_t)sav->client_data, (ulong)sav->id);
}
/* A link to igcref.c . */
@@ -240,7 +240,7 @@ gs_private_st_complex_only(st_alloc_change, alloc_change_t, "alloc_change",
static void
alloc_save_print(const gs_memory_t *mem, alloc_change_t * cp, bool print_current)
{
- dmprintf2(mem, " 0x%lx: 0x%lx: ", (ulong) cp, (ulong) cp->where);
+ dmprintf2(mem, " "PRI_INTPTR"x: "PRI_INTPTR": ", (intptr_t) cp, (intptr_t) cp->where);
if (r_is_packed(&cp->contents)) {
if (print_current)
dmprintf2(mem, "saved=%x cur=%x\n", *(ref_packed *) & cp->contents,
@@ -428,8 +428,8 @@ alloc_save_space(gs_ref_memory_t * mem, gs_dual_memory_t * dmem, ulong sid)
break; /* maybe should fail */
alloc_init_clump(inner, cp->cbot, cp->ctop, cp->sreloc != 0, cp);
alloc_link_clump(inner, mem);
- if_debug2m('u', (gs_memory_t *)mem, "[u]inner clump: cbot=0x%lx ctop=0x%lx\n",
- (ulong) inner->cbot, (ulong) inner->ctop);
+ if_debug2m('u', (gs_memory_t *)mem, "[u]inner clump: cbot="PRI_INTPTR" ctop="PRI_INTPTR"\n",
+ (intptr_t) inner->cbot, (intptr_t) inner->ctop);
if (cp == save_mem.cc)
new_cc = inner;
}
@@ -439,8 +439,8 @@ alloc_save_space(gs_ref_memory_t * mem, gs_dual_memory_t * dmem, ulong sid)
save = gs_alloc_struct((gs_memory_t *) mem, alloc_save_t,
&st_alloc_save, "alloc_save_space(save)");
- if_debug2m('u', (gs_memory_t *)mem, "[u]save space %u at 0x%lx\n",
- mem->space, (ulong) save);
+ if_debug2m('u', (gs_memory_t *)mem, "[u]save space %u at "PRI_INTPTR"\n",
+ mem->space, (intptr_t) save);
if (save == 0) {
/* Free the inner clump structures. This is the easiest way. */
restore_free(mem);
@@ -454,8 +454,8 @@ alloc_save_space(gs_ref_memory_t * mem, gs_dual_memory_t * dmem, ulong sid)
save->is_current = (dmem->current == mem);
save->id = sid;
mem->saved = save;
- if_debug2m('u', (gs_memory_t *)mem, "[u%u]file_save 0x%lx\n",
- mem->space, (ulong) mem->streams);
+ if_debug2m('u', (gs_memory_t *)mem, "[u%u]file_save "PRI_INTPTR"\n",
+ mem->space, (intptr_t) mem->streams);
mem->streams = 0;
mem->total_scanned = 0;
mem->total_scanned_after_compacting = 0;
@@ -487,8 +487,8 @@ alloc_save_change_in(gs_ref_memory_t *mem, const ref * pcont,
else if (r_is_struct(pcont))
cp->offset = (byte *) where - (byte *) pcont->value.pstruct;
else {
- lprintf3("Bad type %u for save! pcont = 0x%lx, where = 0x%lx\n",
- r_type(pcont), (ulong) pcont, (ulong) where);
+ lprintf3("Bad type %u for save! pcont = "PRI_INTPTR", where = "PRI_INTPTR"\n",
+ r_type(pcont), (intptr_t) pcont, (intptr_t) where);
gs_abort((const gs_memory_t *)mem);
}
if (r_is_packed(where))
@@ -625,8 +625,8 @@ alloc_is_since_save(const void *vptr, const alloc_save_t * save)
const char *const ptr = (const char *)vptr;
register gs_ref_memory_t *mem = save->space_local;
- if_debug2m('U', (gs_memory_t *)mem, "[U]is_since_save 0x%lx, 0x%lx:\n",
- (ulong) ptr, (ulong) save);
+ if_debug2m('U', (gs_memory_t *)mem, "[U]is_since_save "PRI_INTPTR", "PRI_INTPTR":\n",
+ (intptr_t) ptr, (intptr_t) save);
if (mem->saved == 0) { /* This is a special case, the final 'restore' from */
/* alloc_restore_all. */
return true;
@@ -634,12 +634,12 @@ alloc_is_since_save(const void *vptr, const alloc_save_t * save)
/* Check against clumps allocated since the save. */
/* (There may have been intermediate saves as well.) */
for (;; mem = &mem->saved->state) {
- if_debug1m('U', (gs_memory_t *)mem, "[U]checking mem=0x%lx\n", (ulong) mem);
+ if_debug1m('U', (gs_memory_t *)mem, "[U]checking mem="PRI_INTPTR"\n", (intptr_t) mem);
if (ptr_is_within_mem_clumps(ptr, mem)) {
if_debug0m('U', (gs_memory_t *)mem, "[U+]found\n");
return true;
}
- if_debug1m('U', (gs_memory_t *)mem, "[U-]not in any chunks belonging to 0x%lx\n", (ulong) mem);
+ if_debug1m('U', (gs_memory_t *)mem, "[U-]not in any chunks belonging to "PRI_INTPTR"\n", (intptr_t) mem);
if (mem->saved == save) { /* We've checked all the more recent saves, */
/* must be OK. */
break;
@@ -657,7 +657,7 @@ alloc_is_since_save(const void *vptr, const alloc_save_t * save)
(mem = save->space_global) != save->space_local &&
save->space_global->num_contexts == 1
) {
- if_debug1m('U', (gs_memory_t *)mem, "[U]checking global mem=0x%lx\n", (ulong) mem);
+ if_debug1m('U', (gs_memory_t *)mem, "[U]checking global mem="PRI_INTPTR"\n", (intptr_t) mem);
if (ptr_is_within_mem_clumps(ptr, mem)) {
if_debug0m('U', (gs_memory_t *)mem, "[U+] found\n");
return true;
@@ -948,9 +948,9 @@ restore_finalize(gs_ref_memory_t * mem)
struct_proc_finalize((*finalize)) =
pre->o_type->finalize;
if (finalize != 0) {
- if_debug2m('u', (gs_memory_t *)mem, "[u]restore finalizing %s 0x%lx\n",
+ if_debug2m('u', (gs_memory_t *)mem, "[u]restore finalizing %s "PRI_INTPTR"\n",
struct_type_name_string(pre->o_type),
- (ulong) (pre + 1));
+ (intptr_t) (pre + 1));
(*finalize) ((gs_memory_t *) mem, pre + 1);
}
END_OBJECTS_SCAN
@@ -966,9 +966,9 @@ restore_resources(alloc_save_t * sprev, gs_ref_memory_t * mem)
#ifdef DEBUG
if (mem) {
/* Note restoring of the file list. */
- if_debug4m('u', (gs_memory_t *)mem, "[u%u]file_restore 0x%lx => 0x%lx for 0x%lx\n",
- mem->space, (ulong)mem->streams,
- (ulong)sprev->state.streams, (ulong) sprev);
+ if_debug4m('u', (gs_memory_t *)mem, "[u%u]file_restore "PRI_INTPTR" => "PRI_INTPTR" for "PRI_INTPTR"\n",
+ mem->space, (intptr_t)mem->streams,
+ (intptr_t)sprev->state.streams, (intptr_t)sprev);
}
#endif
@@ -1142,7 +1142,7 @@ forget_changes(gs_ref_memory_t * mem)
for (; chp; chp = next) {
ref_packed *prp = chp->where;
- if_debug1m('U', (gs_memory_t *)mem, "[U]forgetting change 0x%lx\n", (ulong) chp);
+ if_debug1m('U', (gs_memory_t *)mem, "[U]forgetting change "PRI_INTPTR"\n", (intptr_t) chp);
if (chp->offset == AC_OFFSET_ALLOCATED)
DO_NOTHING;
else
@@ -1161,9 +1161,9 @@ file_forget_save(gs_ref_memory_t * mem)
stream *streams = mem->streams;
stream *saved_streams = save->state.streams;
- if_debug4m('u', (gs_memory_t *)mem, "[u%d]file_forget_save 0x%lx + 0x%lx for 0x%lx\n",
- mem->space, (ulong) streams, (ulong) saved_streams,
- (ulong) save);
+ if_debug4m('u', (gs_memory_t *)mem, "[u%d]file_forget_save "PRI_INTPTR" + "PRI_INTPTR" for "PRI_INTPTR"\n",
+ mem->space, (intptr_t) streams, (intptr_t) saved_streams,
+ (intptr_t) save);
if (streams == 0)
mem->streams = saved_streams;
else if (saved_streams != 0) {
@@ -1278,8 +1278,8 @@ save_set_new(gs_ref_memory_t * mem, bool to_new, bool set_limit, ulong *pscanned
SCAN_CLUMP_OBJECTS(cp)
DO_ALL
- if_debug3m('U', (gs_memory_t *)mem, "[U]set_new scan(0x%lx(%u), %d)\n",
- (ulong) pre, size, to_new);
+ if_debug3m('U', (gs_memory_t *)mem, "[U]set_new scan("PRI_INTPTR"(%u), %d)\n",
+ (intptr_t) pre, size, to_new);
if (pre->o_type == &st_refs) {
/* These are refs, scan them. */
ref_packed *prp = (ref_packed *) (pre + 1);
@@ -1388,8 +1388,8 @@ save_set_new_changes(gs_ref_memory_t * mem, bool to_new, bool set_limit)
} else {
ref_packed *prp = chp->where;
- if_debug3m('U', (gs_memory_t *)mem, "[U]set_new 0x%lx: (0x%lx, %d)\n",
- (ulong)chp, (ulong)prp, new);
+ if_debug3m('U', (gs_memory_t *)mem, "[U]set_new "PRI_INTPTR": ("PRI_INTPTR", %d)\n",
+ (intptr_t)chp, (intptr_t)prp, new);
if (!r_is_packed(prp)) {
ref *const rp = (ref *) prp;
diff --git a/psi/isave.h b/psi/isave.h
index f96c367a..beb40ba8 100644
--- a/psi/isave.h
+++ b/psi/isave.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iscan.c b/psi/iscan.c
index e5956e1b..dc14072e 100644
--- a/psi/iscan.c
+++ b/psi/iscan.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -535,6 +535,16 @@ gs_scan_token(i_ctx_t *i_ctx_p, ref * pref, scanner_state * pstate)
return_error(gs_error_Fatal);
}
}
+ else {
+ /* We *may* use these in the event of returning to this function after
+ * a interruption, but not every code path below sets them. Set them
+ * to sane values here for safety. We can write the contents of sstate
+ * (back) to pstate before returning.
+ */
+ sstate.s_da.base = sstate.s_da.next = &(sstate.s_da.buf[0]);
+ sstate.s_da.limit = sstate.s_da.next;
+ sstate.s_da.is_dynamic = false;
+ }
/* Fetch any state variables that are relevant even if */
/* sstate.s_scan_type == scanning_none. */
sstate.s_pstack = pstate->s_pstack;
@@ -581,6 +591,10 @@ gs_scan_token(i_ctx_t *i_ctx_p, ref * pref, scanner_state * pstate)
s_A85D_init_inline(&sstate.s_ss.a85d);
sstate.s_ss.st.templat = &s_A85D_template;
sstate.s_ss.a85d.require_eod = true;
+ /* If this is an inline ASCII string, interpret it normally, throw an error
+ * if it fails rather than ignoring it as PDF (Acrobat) does.
+ */
+ sstate.s_ss.a85d.pdf_rules = false;
goto str;
}
sputback_inline(s, sptr, endptr);
diff --git a/psi/iscan.h b/psi/iscan.h
index b78d17ed..f05266a7 100644
--- a/psi/iscan.h
+++ b/psi/iscan.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iscanbin.c b/psi/iscanbin.c
index 8fd6a0a5..5d1802c7 100644
--- a/psi/iscanbin.c
+++ b/psi/iscanbin.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iscanbin.h b/psi/iscanbin.h
index 2020651d..08bc9f7e 100644
--- a/psi/iscanbin.h
+++ b/psi/iscanbin.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iscannum.c b/psi/iscannum.c
index de5f5211..71081b8f 100644
--- a/psi/iscannum.c
+++ b/psi/iscannum.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -353,14 +353,12 @@ fe:
while (exp10 > NUM_POWERS_10)
dval *= powers_10[NUM_POWERS_10],
exp10 -= NUM_POWERS_10;
- if (exp10 > 0)
- dval *= powers_10[exp10];
+ dval *= powers_10[exp10];
} else if (exp10 < 0) {
while (exp10 < -NUM_POWERS_10)
dval /= powers_10[NUM_POWERS_10],
exp10 += NUM_POWERS_10;
- if (exp10 < 0)
- dval /= powers_10[-exp10];
+ dval /= powers_10[-exp10];
}
/*
* Check for an out-of-range result. Currently we don't check for
diff --git a/psi/iscannum.h b/psi/iscannum.h
index 00ec3813..b4a88299 100644
--- a/psi/iscannum.h
+++ b/psi/iscannum.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/isdata.h b/psi/isdata.h
index eb1ae73a..f4687da9 100644
--- a/psi/isdata.h
+++ b/psi/isdata.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/isstate.h b/psi/isstate.h
index 8116ca4b..222cc8a8 100644
--- a/psi/isstate.h
+++ b/psi/isstate.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/istack.c b/psi/istack.c
index f113c3c7..9ec6be0d 100644
--- a/psi/istack.c
+++ b/psi/istack.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/istack.h b/psi/istack.h
index 7c33844e..813ed777 100644
--- a/psi/istack.h
+++ b/psi/istack.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/istkparm.h b/psi/istkparm.h
index 20322f2c..e254bda0 100644
--- a/psi/istkparm.h
+++ b/psi/istkparm.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/istream.h b/psi/istream.h
index 8a2a9077..0604728e 100644
--- a/psi/istream.h
+++ b/psi/istream.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/istruct.h b/psi/istruct.h
index c7f9b572..3fe8f545 100644
--- a/psi/istruct.h
+++ b/psi/istruct.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/itoken.h b/psi/itoken.h
index cb84891f..40f1c40e 100644
--- a/psi/itoken.h
+++ b/psi/itoken.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iutil.c b/psi/iutil.c
index 55d0e521..b7de0536 100644
--- a/psi/iutil.c
+++ b/psi/iutil.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -531,7 +531,7 @@ other:
break;
}
/* Internal operator, no name. */
- gs_sprintf(buf, "@0x%lx", (ulong) op->value.opproc);
+ gs_sprintf(buf, "@"PRI_INTPTR, (intptr_t) op->value.opproc);
break;
}
case t_real:
diff --git a/psi/iutil.h b/psi/iutil.h
index 722b3251..2253c8f5 100644
--- a/psi/iutil.h
+++ b/psi/iutil.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iutil2.c b/psi/iutil2.c
index 650899ea..276a73aa 100644
--- a/psi/iutil2.c
+++ b/psi/iutil2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/iutil2.h b/psi/iutil2.h
index d59582dc..7326106f 100644
--- a/psi/iutil2.h
+++ b/psi/iutil2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ivmem2.h b/psi/ivmem2.h
index be1126e5..4b1f43e5 100644
--- a/psi/ivmem2.h
+++ b/psi/ivmem2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -23,6 +23,6 @@
/* Exported by zvmem2.c for zusparam.c */
int set_vm_reclaim(i_ctx_t *, long);
-int set_vm_threshold(i_ctx_t *, long);
+int set_vm_threshold(i_ctx_t *, int64_t);
#endif /* ivmem2_INCLUDED */
diff --git a/psi/ivmspace.h b/psi/ivmspace.h
index 9e364c0d..7faf247e 100644
--- a/psi/ivmspace.h
+++ b/psi/ivmspace.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/main.h b/psi/main.h
index 1bff625d..00f08e36 100644
--- a/psi/main.h
+++ b/psi/main.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/mkfilelt.cpp b/psi/mkfilelt.cpp
index 0d6aae55..31b632bf 100644
--- a/psi/mkfilelt.cpp
+++ b/psi/mkfilelt.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/msvc.mak b/psi/msvc.mak
index c5c3b464..a66f85f6 100644
--- a/psi/msvc.mak
+++ b/psi/msvc.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -48,7 +48,7 @@ DEBUGSYM=1
DEBUG=0
!endif
!ifndef TDEBUG
-TDEBUG=0
+TDEBUG=1
!endif
!ifndef DEBUGSYM
DEBUGSYM=1
@@ -620,13 +620,9 @@ WITH_CUPS=0
# Define the directory where the FreeType2 library sources are stored.
# See freetype.mak for more information.
-
-!ifdef UFST_BRIDGE
-!if "$(UFST_BRIDGE)"=="1"
-FT_BRIDGE=0
-!endif
-!endif
-
+# Note that FT_BRIDGE=1 is now the only support configuration for anything
+# other than testing purposes (even when UFST_BRIDGE=1 - we require Freetype
+# for embedded/downloaded fonts.
!ifndef FT_BRIDGE
FT_BRIDGE=1
!endif
@@ -683,6 +679,19 @@ JBIG2_LIB=luratech
!endif
!endif
+!if exist("leptonica")
+LEPTONICADIR=leptonica
+!endif
+!if exist("tesseract")
+TESSERACTDIR=tesseract
+TESSCXXFLAGS=-DHAVE_AVX -DHAVE_AVX2 -DHAVE_SSE4_1 -DHAVE_FMA -D__AVX__ -D__AVX2__ -D__FMA__ -D__SSE4_1__ /EHsc /std:c++17
+!endif
+!if defined(TESSERACTDIR) && defined(LEPTONICADIR)
+OCR_VERSION=1
+!else
+OCR_VERSION=0
+!endif
+
!ifndef JBIG2_LIB
JBIG2_LIB=jbig2dec
!endif
@@ -973,6 +982,25 @@ MS_TOOLSET_VERSION=14.24.28315
MSVC_VERSION=16
MS_TOOLSET_VERSION=14.24.28316
!endif
+!if "$(_NMAKE_VER)" == "14.25.28614.0"
+# VS2019 (Toolset v142 - update)
+MSVC_VERSION=16
+MS_TOOLSET_VERSION=14.25.28614
+!endif
+!if "$(_NMAKE_VER)" == "14.26.28805.0"
+# VS2019 (Toolset v142 - update)
+MSVC_VERSION=16
+MS_TOOLSET_VERSION=14.26.28805
+!endif
+!if "$(_NMAKE_VER)" == "14.26.28806.0"
+# VS2019 (Toolset v142 - update)
+MSVC_VERSION=16
+MS_TOOLSET_VERSION=14.26.28806
+!endif
+!if "$(_NMAKE_VER)" == "14.27.29111.0"
+# VS2019 (Toolset v142)
+MSVC_VERSION=16
+!endif
!endif
!ifndef MSVC_VERSION
@@ -1634,6 +1662,10 @@ DEVICE_DEVS16=$(DEVICE_DEVS16) $(DD)cups.dev
!if "$(WITH_URF)" == "1"
DEVICE_DEVS16=$(DEVICE_DEVS16) $(DD)urfgray.dev $(DD)urfrgb.dev $(DD)urfcmyk.dev
!endif
+!if "$(OCR_VERSION)" == "0"
+!else
+DEVICE_DEVS16=$(DEVICE_DEVS16) $(DD)ocr.dev $(DD)hocr.dev $(DD)pdfocr8.dev $(DD)pdfocr24.dev $(DD)pdfocr32.dev
+!endif
# Overflow for DEVS3,4,5,6,9
DEVICE_DEVS17=$(DD)ljet3.dev $(DD)ljet3d.dev $(DD)ljet4.dev $(DD)ljet4d.dev
DEVICE_DEVS18=$(DD)pj.dev $(DD)pjxl.dev $(DD)pjxl300.dev $(DD)jetp3852.dev $(DD)r4081.dev
@@ -1702,6 +1734,7 @@ BEGINFILES2=$(BEGINFILES2) $(BSCFILE)
!include $(GLSRCDIR)\msvctail.mak
!include $(PSSRCDIR)\winint.mak
+
# ----------------------------- Main program ------------------------------ #
GSCONSOLE_XE=$(BINDIR)\$(GSCONSOLE).exe
diff --git a/psi/msvc32.mak b/psi/msvc32.mak
index 8b628a47..7a324e47 100644
--- a/psi/msvc32.mak
+++ b/psi/msvc32.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/psi/msvc64.mak b/psi/msvc64.mak
index 40047c38..0e93f6ff 100644
--- a/psi/msvc64.mak
+++ b/psi/msvc64.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/psi/nsisinst.nsi b/psi/nsisinst.nsi
index 5c272552..717bc8cb 100644
--- a/psi/nsisinst.nsi
+++ b/psi/nsisinst.nsi
@@ -1,4 +1,4 @@
-; Copyright (C) 2001-2019 Artifex Software, Inc.
+; Copyright (C) 2001-2020 Artifex Software, Inc.
; All Rights Reserved.
;
; This software is provided AS-IS with no warranty, either express or
diff --git a/psi/oparc.h b/psi/oparc.h
index a4bd3eba..e169fbce 100644
--- a/psi/oparc.h
+++ b/psi/oparc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/opcheck.h b/psi/opcheck.h
index 7498180e..c2a69e22 100644
--- a/psi/opcheck.h
+++ b/psi/opcheck.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/opdef.h b/psi/opdef.h
index 070d1f06..e9d42a2a 100644
--- a/psi/opdef.h
+++ b/psi/opdef.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/oper.h b/psi/oper.h
index 691ee539..fd01b46c 100644
--- a/psi/oper.h
+++ b/psi/oper.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/opextern.h b/psi/opextern.h
index 109cdb82..b76dabc9 100644
--- a/psi/opextern.h
+++ b/psi/opextern.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/os2.mak b/psi/os2.mak
index 12e08246..2f3e619d 100644
--- a/psi/os2.mak
+++ b/psi/os2.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ostack.h b/psi/ostack.h
index 35665d21..22acfbc3 100644
--- a/psi/ostack.h
+++ b/psi/ostack.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/psapi.c b/psi/psapi.c
index b3300815..c74934a8 100644
--- a/psi/psapi.c
+++ b/psi/psapi.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -37,6 +37,7 @@
#include "store.h"
#include "iname.h"
#include "interp.h"
+#include "gxgstate.h"
#ifndef GS_THREADSAFE
/* Number of threads to allow per process. Unless GS_THREADSAFE is defined
@@ -98,16 +99,15 @@ psapi_new_instance(gs_lib_ctx_t **pinstance,
return gs_error_Fatal;
}
mem->gs_lib_ctx->top_of_system = (void*) minst;
- mem->gs_lib_ctx->core->caller_handle = caller_handle;
+ mem->gs_lib_ctx->core->default_caller_handle = caller_handle;
mem->gs_lib_ctx->core->custom_color_callback = NULL;
#ifdef METRO
- mem->gs_lib_ctx->core->stdin_fn = metro_stdin;
- mem->gs_lib_ctx->core->stdout_fn = metro_stdout;
- mem->gs_lib_ctx->core->stderr_fn = metro_stderr;
-#else
- mem->gs_lib_ctx->core->stdin_fn = NULL;
- mem->gs_lib_ctx->core->stdout_fn = NULL;
- mem->gs_lib_ctx->core->stderr_fn = NULL;
+ if (mem->gs_lib_ctx->core->stdin_fn == NULL)
+ mem->gs_lib_ctx->core->stdin_fn = metro_stdin;
+ if (mem->gs_lib_ctx->core->stdout_fn == NULL)
+ mem->gs_lib_ctx->core->stdout_fn = metro_stdout;
+ if (mem->gs_lib_ctx->core->stderr_fn == NULL)
+ mem->gs_lib_ctx->core->stderr_fn = metro_stderr;
#endif
mem->gs_lib_ctx->core->poll_fn = NULL;
@@ -139,13 +139,21 @@ psapi_delete_instance(gs_lib_ctx_t *ctx)
mem = (gs_memory_t *)(ctx->memory);
minst = get_minst_from_memory(ctx->memory);
- ctx->core->caller_handle = NULL;
+ ctx->core->default_caller_handle = NULL;
ctx->core->stdin_fn = NULL;
ctx->core->stdout_fn = NULL;
ctx->core->stderr_fn = NULL;
ctx->core->poll_fn = NULL;
minst->display = NULL;
+ if (minst->param_list) {
+ gs_c_param_list_release(minst->param_list);
+ gs_free_object(minst->heap, minst->param_list, "psapi_delete_instance");
+ }
+
+ gs_c_param_list_release(&minst->enum_params);
+ gs_free_object(minst->heap, minst->enum_keybuf, "psapi_delete_instance");
+
gs_free_object(mem, minst, "init_main_instance");
/* Release the memory (frees up everything) */
@@ -291,58 +299,32 @@ psapi_init_with_args2(gs_lib_ctx_t *ctx)
}
int
+psapi_set_device_param(gs_lib_ctx_t *ctx,
+ gs_param_list *plist)
+{
+ gs_main_instance *minst = get_minst_from_memory(ctx->memory);
+
+ return gs_putdeviceparams(minst->i_ctx_p->pgs->device, plist);
+}
+
+int
+psapi_get_device_params(gs_lib_ctx_t *ctx,
+ gs_param_list *plist)
+{
+ gs_main_instance *minst = get_minst_from_memory(ctx->memory);
+
+ if (minst->i_ctx_p->pgs->device == NULL)
+ return 0;
+ return gs_getdeviceparams(minst->i_ctx_p->pgs->device, plist);
+}
+
+int
psapi_set_param(gs_lib_ctx_t *ctx,
- psapi_sptype type,
- const char *param,
- const void *val)
+ gs_param_list *plist)
{
gs_main_instance *minst = get_minst_from_memory(ctx->memory);
- ref value;
- int code = 0;
- i_ctx_t *i_ctx_p = minst->i_ctx_p;
- uint space = icurrent_space;
-
- ialloc_set_space(idmemory, avm_system);
- switch (type) {
- case psapi_spt_null:
- make_null(&value);
- break;
- case psapi_spt_bool:
- if (val)
- make_true(&value);
- else
- make_false(&value);
- break;
- case psapi_spt_int:
- make_int(&value, *(int *)val);
- break;
- case psapi_spt_float:
- make_real(&value, *(float *)val);
- break;
- case psapi_spt_string:
- if (val == NULL)
- make_empty_string(&value, a_readonly);
- else {
- size_t len = strlen(val);
- byte *body = ialloc_string(len, "-s");
-
- if (body == NULL)
- return gs_error_Fatal;
- memcpy(body, val, len);
- make_const_string(&value, a_readonly | avm_system, len, body);
- }
- break;
- case psapi_spt_name:
- code = name_ref(ctx->memory, val, strlen(val), &value, 1);
- break;
- default:
- break;
- }
- ialloc_set_space(idmemory, space);
- /* Enter the name in systemdict. */
- i_initial_enter_name_copy(minst->i_ctx_p, param, &value);
- return code;
+ return gs_main_set_language_param(minst, plist);
}
int
@@ -365,12 +347,23 @@ psapi_run_string_begin(gs_lib_ctx_t *ctx,
int user_errors,
int *pexit_code)
{
+ gs_main_instance *minst;
+ int code;
+
if (ctx == NULL)
return gs_error_Fatal;
+ minst = get_minst_from_memory(ctx->memory);
+
+ if (minst->mid_run_string == 1)
+ return -1;
+ minst->mid_run_string = 1;
+
+ code = gs_main_run_string_begin(minst, user_errors, pexit_code,
+ &(minst->error_object));
+ if (code < 0)
+ minst->mid_run_string = 0;
- return gs_main_run_string_begin(get_minst_from_memory(ctx->memory),
- user_errors, pexit_code,
- &(get_minst_from_memory(ctx->memory)->error_object));
+ return code;
}
int
@@ -380,12 +373,20 @@ psapi_run_string_continue(gs_lib_ctx_t *ctx,
int user_errors,
int *pexit_code)
{
+ gs_main_instance *minst;
+ int code;
+
if (ctx == NULL)
return gs_error_Fatal;
+ minst = get_minst_from_memory(ctx->memory);
- return gs_main_run_string_continue(get_minst_from_memory(ctx->memory),
- str, length, user_errors, pexit_code,
- &(get_minst_from_memory(ctx->memory)->error_object));
+ code = gs_main_run_string_continue(minst, str, length, user_errors,
+ pexit_code,
+ &(minst->error_object));
+ if (code < 0)
+ minst->mid_run_string = 0;
+
+ return code;
}
uint
@@ -402,12 +403,18 @@ psapi_run_string_end(gs_lib_ctx_t *ctx,
int user_errors,
int *pexit_code)
{
+ int code;
+ gs_main_instance *minst;
+
if (ctx == NULL)
return gs_error_Fatal;
+ minst = get_minst_from_memory(ctx->memory);
+
+ code = gs_main_run_string_end(minst, user_errors, pexit_code,
+ &(minst->error_object));
- return gs_main_run_string_end(get_minst_from_memory(ctx->memory),
- user_errors, pexit_code,
- &(get_minst_from_memory(ctx->memory)->error_object));
+ minst->mid_run_string = 0;
+ return code;
}
int
@@ -454,6 +461,9 @@ psapi_run_file(gs_lib_ctx_t *ctx,
return gs_error_Fatal;
minst = get_minst_from_memory(ctx->memory);
+ if (minst->mid_run_string == 1)
+ return -1;
+
/* Convert the file_name to utf8 */
if (minst->get_codepoint) {
len = 1;
diff --git a/psi/psapi.h b/psi/psapi.h
index 74375d9b..5e38ce41 100644
--- a/psi/psapi.h
+++ b/psi/psapi.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -57,20 +57,17 @@ psapi_init_with_args01(gs_lib_ctx_t *instance,
int
psapi_init_with_args2(gs_lib_ctx_t *instance);
-typedef enum {
- psapi_spt_invalid = -1,
- psapi_spt_null = 0, /* void * is NULL */
- psapi_spt_bool = 1, /* void * is NULL (false) or non-NULL (true) */
- psapi_spt_int = 2, /* void * is a pointer to an int */
- psapi_spt_float = 3, /* void * is a float * */
- psapi_spt_name = 4, /* void * is a char * */
- psapi_spt_string = 5 /* void * is a char * */
-} psapi_sptype;
int
psapi_set_param(gs_lib_ctx_t *ctx,
- psapi_sptype type,
- const char *param,
- const void *val);
+ gs_param_list *plist);
+
+int
+psapi_set_device_param(gs_lib_ctx_t *ctx,
+ gs_param_list *plist);
+
+int
+psapi_get_device_params(gs_lib_ctx_t *ctx,
+ gs_param_list *plist);
int
psapi_add_path(gs_lib_ctx_t *ctx,
diff --git a/psi/psromfs.mak b/psi/psromfs.mak
index 0721c144..d000a9af 100644
--- a/psi/psromfs.mak
+++ b/psi/psromfs.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/psi/store.h b/psi/store.h
index 3bed0e9f..fd7dc793 100644
--- a/psi/store.h
+++ b/psi/store.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -75,23 +75,12 @@
*/
#define ref_assign_inline(pto,pfrom)\
(*(pto) = *(pfrom))
-#ifdef __TURBOC__
- /*
- * Move the data in two 32-bit chunks, because
- * otherwise the compiler calls SCOPY@.
- * The cast to void is to discourage the compiler from
- * wanting to deliver the value of the expression.
- */
-# define ref_assign(pto,pfrom)\
- discard(ref_assign_inline(pto, pfrom))
-#else
- /*
- * Trust the compiler and hope for the best.
- * The MIPS compiler doesn't like the cast to void.
- */
-# define ref_assign(pto,pfrom)\
- (*(pto) = *(pfrom))
-#endif
+
+/* This used to be different from above, for the benefit of TURBO C
+ * But we no longer support TURBO C, so....
+ */
+#define ref_assign(pto,pfrom)\
+ ref_assign_inline(pto,pfrom)
#define ialloc_new_mask (idmemory->new_mask)
/*
diff --git a/psi/zalg.c b/psi/zalg.c
index 2e86dc0e..88e8e408 100644
--- a/psi/zalg.c
+++ b/psi/zalg.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zarith.c b/psi/zarith.c
index fce9686e..61132cf5 100644
--- a/psi/zarith.c
+++ b/psi/zarith.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -148,6 +148,14 @@ zdiv(i_ctx_t *i_ctx_p)
break;
case t_integer:
result = (double)op1->value.intval / op->value.realval;
+#ifdef HAVE_ISINF
+ if (isinf(result))
+ return_error(gs_error_undefinedresult);
+#endif
+#ifdef HAVE_ISNAN
+ if (isnan(result))
+ return_error(gs_error_undefinedresult);
+#endif
make_real(op1, result);
}
break;
diff --git a/psi/zarray.c b/psi/zarray.c
index c4500654..42c873f4 100644
--- a/psi/zarray.c
+++ b/psi/zarray.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zbfont.c b/psi/zbfont.c
index abc03aa0..49b4efe6 100644
--- a/psi/zbfont.c
+++ b/psi/zbfont.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zbseq.c b/psi/zbseq.c
index 2310810e..a8812377 100644
--- a/psi/zbseq.c
+++ b/psi/zbseq.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zcfont.c b/psi/zcfont.c
index dcaf76c5..709ab489 100644
--- a/psi/zcfont.c
+++ b/psi/zcfont.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zchar.c b/psi/zchar.c
index d7545a3f..9ef52493 100644
--- a/psi/zchar.c
+++ b/psi/zchar.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -819,7 +819,6 @@ op_show_continue_dispatch(i_ctx_t *i_ctx_p, int npop, int code)
ref cnref;
op_proc_t cont = op_show_continue, exec_cont = 0;
gs_glyph glyph = penum->returned.current_glyph;
- int code;
pop(npop);
op = osp;
diff --git a/psi/zchar1.c b/psi/zchar1.c
index 5d519785..d8304b5c 100644
--- a/psi/zchar1.c
+++ b/psi/zchar1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zchar2.c b/psi/zchar2.c
index 8a53c601..e46263d5 100644
--- a/psi/zchar2.c
+++ b/psi/zchar2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zchar32.c b/psi/zchar32.c
index a71766d4..387d989a 100644
--- a/psi/zchar32.c
+++ b/psi/zchar32.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zchar42.c b/psi/zchar42.c
index 906b3185..cb635827 100644
--- a/psi/zchar42.c
+++ b/psi/zchar42.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zchar42.h b/psi/zchar42.h
index e0c0e19f..00e0aefa 100644
--- a/psi/zchar42.h
+++ b/psi/zchar42.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zcharout.c b/psi/zcharout.c
index c1537281..31007d8a 100644
--- a/psi/zcharout.c
+++ b/psi/zcharout.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zcharx.c b/psi/zcharx.c
index 8b9dee0f..73b997f4 100644
--- a/psi/zcharx.c
+++ b/psi/zcharx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zcid.c b/psi/zcid.c
index 40baa420..3c2d9af4 100644
--- a/psi/zcid.c
+++ b/psi/zcid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zcie.c b/psi/zcie.c
index 64050249..0e1c266b 100644
--- a/psi/zcie.c
+++ b/psi/zcie.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -837,8 +837,8 @@ cie_cache_finish_store(i_ctx_t *i_ctx_p, bool replicate)
pcache = (cie_cache_floats *) (r_ptr(esp - 1, char) + esp->value.intval);
pcache->params.is_identity = false; /* cache_set_linear computes this */
- if_debug3m('c', imemory, "[c]cache 0x%lx base=%g, factor=%g:\n",
- (ulong) pcache, pcache->params.base, pcache->params.factor);
+ if_debug3m('c', imemory, "[c]cache "PRI_INTPTR" base=%g, factor=%g:\n",
+ (intptr_t) pcache, pcache->params.base, pcache->params.factor);
if (replicate ||
(code = float_params(op, gx_cie_cache_size, &pcache->values[0])) < 0
) {
@@ -974,8 +974,8 @@ cie_create_icc(i_ctx_t *i_ctx_p)
pcache = (cie_cache_floats *) (r_ptr(esp - 1, char) + esp->value.intval);
pcache->params.is_identity = false; /* cache_set_linear computes this */
- if_debug3m('c', imemory, "[c]icc_sample_proc 0x%lx base=%g, factor=%g:\n",
- (ulong) pcache, pcache->params.base, pcache->params.factor);
+ if_debug3m('c', imemory, "[c]icc_sample_proc "PRI_INTPTR" base=%g, factor=%g:\n",
+ (intptr_t) pcache, pcache->params.base, pcache->params.factor);
if ((code = float_params(op, gx_cie_cache_size, &pcache->values[0])) < 0) {
/* We might have underflowed the current stack block. */
/* Handle the parameters one-by-one. */
diff --git a/psi/zcie.h b/psi/zcie.h
index c1c3400d..fdfcfcf5 100644
--- a/psi/zcie.h
+++ b/psi/zcie.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zcolor.c b/psi/zcolor.c
index 373bc06b..0ddc15f4 100644
--- a/psi/zcolor.c
+++ b/psi/zcolor.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -1842,9 +1842,6 @@ static int comparearrays(i_ctx_t * i_ctx_p, ref *m1, ref *m2)
if (r_type(&ref1) != r_type(&ref2))
return 0;
- code = r_type(&ref1);
- if (code < 0)
- return code;
switch(r_type(&ref1)) {
case t_null:
break;
@@ -1944,9 +1941,6 @@ static int hasharray(i_ctx_t * i_ctx_p, ref *m1, gs_md5_state_t *md5)
if (code < 0)
return 0;
- code = r_type(&ref1);
- if (code < 0)
- return code;
switch(r_type(&ref1)) {
case t_null:
break;
@@ -3485,8 +3479,7 @@ static int setseparationspace(i_ctx_t * i_ctx_p, ref *sepspace, int *stage, int
if (code < 0)
return code;
istate->colorspace[0].procs.special.separation.tint_transform = proc;
- if (code >= 0)
- code = gs_cspace_set_sepr_function(pcs, pfn);
+ code = gs_cspace_set_sepr_function(pcs, pfn);
if (code >= 0)
code = gs_setcolorspace(igs, pcs);
/* release reference from construction */
@@ -4201,8 +4194,7 @@ static int setdevicenspace(i_ctx_t * i_ctx_p, ref *devicenspace, int *stage, int
if (code < 0)
return code;
istate->colorspace[0].procs.special.separation.tint_transform = proc;
- if (code >= 0)
- code = gs_cspace_set_sepr_function(pcs, pfn);
+ code = gs_cspace_set_sepr_function(pcs, pfn);
if (code >= 0)
code = gs_setcolorspace(igs, pcs);
/* release reference from construction */
@@ -6771,11 +6763,9 @@ currentbasecolor_cont(i_ctx_t *i_ctx_p)
/* Completed that space, increment the 'depth' */
make_int(&ep[-2], ++depth);
}
- if (code <= 0) {
- /* Remove our next continuation and our data */
- esp -= 7;
- code = o_pop_estack;
- }
+ /* Remove our next continuation and our data */
+ esp -= 7;
+ code = o_pop_estack;
return code;
}
diff --git a/psi/zcolor.h b/psi/zcolor.h
index d33d2232..ab910da2 100644
--- a/psi/zcolor.h
+++ b/psi/zcolor.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zcolor1.c b/psi/zcolor1.c
index 82f177cf..66238165 100644
--- a/psi/zcolor1.c
+++ b/psi/zcolor1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zcolor2.c b/psi/zcolor2.c
index 75b991c7..acd96648 100644
--- a/psi/zcolor2.c
+++ b/psi/zcolor2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zcolor3.c b/psi/zcolor3.c
index eaa41cc4..82ac958f 100644
--- a/psi/zcolor3.c
+++ b/psi/zcolor3.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zcontrol.c b/psi/zcontrol.c
index 8f7f6d01..460a8a19 100644
--- a/psi/zcontrol.c
+++ b/psi/zcontrol.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -308,7 +308,7 @@ zfor(i_ctx_t *i_ctx_p)
make_int(ep - 2, op[-1].value.intval);
break;
case t_real:
- make_int(ep - 2, (long)op[-1].value.realval);
+ make_int(ep - 2, (ps_int)op[-1].value.realval);
break;
default:
return_op_typecheck(op - 1);
@@ -339,7 +339,7 @@ for_pos_int_continue(i_ctx_t *i_ctx_p)
{
os_ptr op = osp;
register es_ptr ep = esp;
- int var = ep[-3].value.intval;
+ ps_int var = ep[-3].value.intval;
if (var > ep[-1].value.intval) {
esp -= 5; /* pop everything */
@@ -358,7 +358,7 @@ for_neg_int_continue(i_ctx_t *i_ctx_p)
{
os_ptr op = osp;
register es_ptr ep = esp;
- int var = ep[-3].value.intval;
+ ps_int var = ep[-3].value.intval;
if (var < ep[-1].value.intval) {
esp -= 5; /* pop everything */
@@ -864,8 +864,8 @@ zcurrentfile(i_ctx_t *i_ctx_p)
ref *efp = zget_current_file(i_ctx_p);
if (esfile != efp) {
- lprintf2("currentfile: esfile=0x%lx, efp=0x%lx\n",
- (ulong) esfile, (ulong) efp);
+ lprintf2("currentfile: esfile="PRI_INTPTR", efp="PRI_INTPTR"\n",
+ (intptr_t) esfile, (intptr_t) efp);
ref_assign(op, efp);
} else
#endif
diff --git a/psi/zcrd.c b/psi/zcrd.c
index c51b5897..117da1b9 100644
--- a/psi/zcrd.c
+++ b/psi/zcrd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zcsindex.c b/psi/zcsindex.c
index d7cd6ad7..a8340b49 100644
--- a/psi/zcsindex.c
+++ b/psi/zcsindex.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zcspixel.c b/psi/zcspixel.c
index c9f5b88d..f72c0d83 100644
--- a/psi/zcspixel.c
+++ b/psi/zcspixel.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zcssepr.c b/psi/zcssepr.c
index 80535acf..bb9075bf 100644
--- a/psi/zcssepr.c
+++ b/psi/zcssepr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zdevcal.c b/psi/zdevcal.c
index 8d81b49b..f3803d1d 100644
--- a/psi/zdevcal.c
+++ b/psi/zdevcal.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zdevice.c b/psi/zdevice.c
index cb980aee..6cc7aab1 100644
--- a/psi/zdevice.c
+++ b/psi/zdevice.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zdevice2.c b/psi/zdevice2.c
index f75ca6bc..53374c2d 100644
--- a/psi/zdevice2.c
+++ b/psi/zdevice2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zdfilter.c b/psi/zdfilter.c
index c2bf6892..7ef53122 100644
--- a/psi/zdfilter.c
+++ b/psi/zdfilter.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zdict.c b/psi/zdict.c
index 48fcc003..efea18e7 100644
--- a/psi/zdict.c
+++ b/psi/zdict.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zdouble.c b/psi/zdouble.c
index cdd69b30..d06d39de 100644
--- a/psi/zdouble.c
+++ b/psi/zdouble.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zdps1.c b/psi/zdps1.c
index 8ee9cc6e..2d81ad72 100644
--- a/psi/zdps1.c
+++ b/psi/zdps1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zdscpars.c b/psi/zdscpars.c
index 913e6282..8a8ef130 100644
--- a/psi/zdscpars.c
+++ b/psi/zdscpars.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfaes.c b/psi/zfaes.c
index 0c4b887d..fe47cd35 100644
--- a/psi/zfaes.c
+++ b/psi/zfaes.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfapi.c b/psi/zfapi.c
index 63dfa946..19043b84 100644
--- a/psi/zfapi.c
+++ b/psi/zfapi.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -80,7 +80,7 @@ struct sfnts_reader_s
long index;
uint offset;
uint length;
- bool error;
+ int error;
byte(*rbyte) (sfnts_reader *r);
ushort(*rword) (sfnts_reader *r);
ulong(*rlong) (sfnts_reader *r);
@@ -94,19 +94,15 @@ sfnts_next_elem(sfnts_reader *r)
ref s;
int code;
- if (r->error)
+ if (r->error < 0)
return;
do {
r->index++;
code = array_get(r->memory, r->sfnts, r->index, &s);
- if (code == gs_error_rangecheck) {
- r->error |= 2;
- }
- else if (code < 0) {
- r->error |= 1;
- }
- if (r->error)
- return;
+ if (code < 0) {
+ r->error = code;
+ return;
+ }
r->p = s.value.const_bytes;
r->length = r_size(&s) & ~(uint) 1; /* See Adobe Technical Note # 5012, section 4.2. */
} while (r->length == 0);
@@ -118,7 +114,7 @@ sfnts_reader_rbyte_inline(sfnts_reader *r)
{
if (r->offset >= r->length)
sfnts_next_elem(r);
- return (r->error ? 0 : r->p[r->offset++]);
+ return ((r->error < 0) ? 0 : r->p[r->offset++]);
}
static byte
@@ -164,7 +160,7 @@ sfnts_reader_rstring(sfnts_reader *r, byte *v, int length)
if (length <= 0)
return (0);
- while (!r->error) {
+ while (r->error >= 0) {
int l = min(length, r->length - r->offset);
memcpy(v, r->p + r->offset, l);
@@ -185,7 +181,7 @@ sfnts_reader_seek(sfnts_reader *r, ulong pos)
r->index = -1;
sfnts_next_elem(r);
- while (skipped + r->length < pos && !r->error) {
+ while (skipped + r->length < pos && r->error >= 0) {
skipped += r->length;
sfnts_next_elem(r);
}
@@ -201,10 +197,10 @@ sfnts_reader_init(sfnts_reader *r, ref *pdr)
r->rstring = sfnts_reader_rstring;
r->seek = sfnts_reader_seek;
r->index = -1;
- r->error = false;
+ r->error = 0;
if (r_type(pdr) != t_dictionary ||
dict_find_string(pdr, "sfnts", &r->sfnts) <= 0)
- r->error = true;
+ r->error = gs_error_undefined;
sfnts_next_elem(r);
}
@@ -284,7 +280,7 @@ sfnt_copy_table(sfnts_reader *r, sfnts_writer *w, int length)
{
byte buf[1024];
- while (length > 0 && !r->error) {
+ while (length > 0 && r->error >= 0) {
int l = min(length, sizeof(buf));
(void)r->rstring(r, buf, l);
@@ -293,7 +289,7 @@ sfnt_copy_table(sfnts_reader *r, sfnts_writer *w, int length)
}
}
-static ulong
+static int
sfnts_copy_except_glyf(sfnts_reader *r, sfnts_writer *w)
{ /* Note : TTC is not supported and probably is unuseful for Type 42. */
/* This skips glyf, loca and cmap from copying. */
@@ -310,12 +306,21 @@ sfnts_copy_except_glyf(sfnts_reader *r, sfnts_writer *w)
ulong size_new = 12;
r->rword(r); /* searchRange */
+ if (r->error < 0)
+ return r->error;
+
r->rword(r); /* entrySelector */
+ if (r->error < 0)
+ return r->error;
+
r->rword(r); /* rangeShift */
- for (i = 0; i < num_tables; i++) {
- if (r->error)
- return 0;
+ if (r->error < 0)
+ return r->error;
+
+ for (i = 0; i < num_tables && r->error >= 0; i++) {
(void)r->rstring(r, tables[i].tag, 4);
+ if (r->error < 0)
+ continue;
tables[i].checkSum = r->rlong(r);
tables[i].offset = r->rlong(r);
tables[i].length = r->rlong(r);
@@ -326,10 +331,12 @@ sfnts_copy_except_glyf(sfnts_reader *r, sfnts_writer *w)
(tables[i].length + alignment - 1) / alignment * alignment;
}
}
+ if (r->error < 0)
+ return r->error;
size_new += num_tables_new * 16;
- if (w == 0)
+ if (w == 0) {
return size_new;
-
+ }
searchRange = v = num_tables_new * 16;
for (i = 0; v; i++) {
v >>= 1;
@@ -352,33 +359,39 @@ sfnts_copy_except_glyf(sfnts_reader *r, sfnts_writer *w)
w->wlong(w, tables[i].length);
}
}
- for (i = 0; i < num_tables; i++) {
+ for (i = 0; i < num_tables && r->error >= 0; i++) {
if (sfnts_need_copy_table(tables[i].tag)) {
int k = tables[i].length;
r->seek(r, tables[i].offset);
- if (r->error)
- return 0;
- if (w->p - w->buf != tables[i].offset_new + num_tables_new * 16)
- return 0; /* the algorithm consistency check */
+
+ if (w->p - w->buf != tables[i].offset_new + num_tables_new * 16) {
+ r->error = gs_error_invalidfont; /* the algorithm consistency check */
+ continue;
+ }
sfnt_copy_table(r, w, tables[i].length);
for (; k & (alignment - 1); k++)
w->wbyte(w, 0);
}
}
+ if (r->error < 0)
+ return r->error;
+
return (size_new);
}
-static ulong
-true_type_size(ref *pdr)
+static int
+true_type_size(ref *pdr, unsigned long int *length)
{
sfnts_reader r;
sfnts_reader_init(&r, pdr);
- return (sfnts_copy_except_glyf(&r, 0));
+ *length = sfnts_copy_except_glyf(&r, 0);
+
+ return r.error;
}
-static ushort
+static int
FAPI_FF_serialize_tt_font(gs_fapi_font *ff, void *buf, int buf_size)
{
ref *pdr = pfont_dict(((gs_font_base *) ff->client_font_data2));
@@ -388,9 +401,7 @@ FAPI_FF_serialize_tt_font(gs_fapi_font *ff, void *buf, int buf_size)
w.buf_size = buf_size;
w.buf = w.p = buf;
sfnts_reader_init(&r, pdr);
- if (!sfnts_copy_except_glyf(&r, &w))
- return (1);
- return (r.error);
+ return sfnts_copy_except_glyf(&r, &w);
}
static inline ushort
@@ -404,108 +415,150 @@ float_to_ushort(float v)
* here. Better, for example, for BlendDesignMap which is an array, of arrays, of arrays of
* numbers.
*/
-static ushort
-FAPI_FF_get_word(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index)
+static int
+FAPI_FF_get_word(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index, unsigned short *ret)
{
gs_font_type1 *pfont = (gs_font_type1 *) ff->client_font_data;
ref *pdr = pfont_dict(((gs_font_base *) ff->client_font_data2));
+ int code = 0;
switch ((int)var_id) {
case gs_fapi_font_feature_Weight:
- return 0; /* wrong */
+ *ret = 0; /* wrong */
+ break;
case gs_fapi_font_feature_ItalicAngle:
- return 0; /* wrong */
+ *ret = 0; /* wrong */
+ break;
case gs_fapi_font_feature_IsFixedPitch:
- return 0; /* wrong */
+ *ret = 0; /* wrong */
+ break;
case gs_fapi_font_feature_UnderLinePosition:
- return 0; /* wrong */
+ *ret = 0; /* wrong */
+ break;
case gs_fapi_font_feature_UnderlineThickness:
- return 0; /* wrong */
+ *ret = 0; /* wrong */
+ break;
case gs_fapi_font_feature_FontType:
- return (pfont->FontType == 2 ? 2 : 1);
+ *ret = (pfont->FontType == 2 ? 2 : 1);
+ break;
case gs_fapi_font_feature_FontBBox:
switch (index) {
case 0:
- return ((ushort) pfont->FontBBox.p.x);
+ *ret = ((ushort) pfont->FontBBox.p.x);
+ break;
case 1:
- return ((ushort) pfont->FontBBox.p.y);
+ *ret = ((ushort) pfont->FontBBox.p.y);
+ break;
case 2:
- return ((ushort) pfont->FontBBox.q.x);
+ *ret = ((ushort) pfont->FontBBox.q.x);
+ break;
case 3:
- return ((ushort) pfont->FontBBox.q.y);
+ *ret = ((ushort) pfont->FontBBox.q.y);
+ break;
+ default:
+ code = gs_note_error(gs_error_rangecheck);
}
- return 0;
+ break;
case gs_fapi_font_feature_BlueValues_count:
- return (pfont->data.BlueValues.count);
+ *ret = pfont->data.BlueValues.count;
+ break;
case gs_fapi_font_feature_BlueValues:
- return (float_to_ushort(pfont->data.BlueValues.values[index]));
+ *ret = (float_to_ushort(pfont->data.BlueValues.values[index]));
+ break;
case gs_fapi_font_feature_OtherBlues_count:
- return (pfont->data.OtherBlues.count);
+ *ret = pfont->data.OtherBlues.count;
+ break;
case gs_fapi_font_feature_OtherBlues:
- return (float_to_ushort(pfont->data.OtherBlues.values[index]));
+ *ret = (float_to_ushort(pfont->data.OtherBlues.values[index]));
+ break;
case gs_fapi_font_feature_FamilyBlues_count:
- return (pfont->data.FamilyBlues.count);
+ *ret = pfont->data.FamilyBlues.count;
+ break;
case gs_fapi_font_feature_FamilyBlues:
- return (float_to_ushort(pfont->data.FamilyBlues.values[index]));
+ *ret = (float_to_ushort(pfont->data.FamilyBlues.values[index]));
+ break;
case gs_fapi_font_feature_FamilyOtherBlues_count:
- return (pfont->data.FamilyOtherBlues.count);
+ *ret = pfont->data.FamilyOtherBlues.count;
+ break;
case gs_fapi_font_feature_FamilyOtherBlues:
- return (float_to_ushort
- (pfont->data.FamilyOtherBlues.values[index]));
+ *ret = (float_to_ushort(pfont->data.FamilyOtherBlues.values[index]));
+ break;
case gs_fapi_font_feature_BlueShift:
- return (float_to_ushort(pfont->data.BlueShift));
+ *ret = float_to_ushort(pfont->data.BlueShift);
+ break;
case gs_fapi_font_feature_BlueFuzz:
- return (float_to_ushort(pfont->data.BlueShift));
+ *ret = float_to_ushort(pfont->data.BlueShift);
+ break;
case gs_fapi_font_feature_StdHW:
- return (pfont->data.StdHW.count == 0 ? 0 : float_to_ushort(pfont->data.StdHW.values[0])); /* UFST bug ? */
+ *ret = (pfont->data.StdHW.count == 0 ? 0 : float_to_ushort(pfont->data.StdHW.values[0])); /* UFST bug ? */
+ break;
case gs_fapi_font_feature_StdVW:
- return (pfont->data.StdVW.count == 0 ? 0 : float_to_ushort(pfont->data.StdVW.values[0])); /* UFST bug ? */
+ *ret = (pfont->data.StdVW.count == 0 ? 0 : float_to_ushort(pfont->data.StdVW.values[0])); /* UFST bug ? */
+ break;
case gs_fapi_font_feature_StemSnapH_count:
- return (pfont->data.StemSnapH.count);
+ *ret = pfont->data.StemSnapH.count;
+ break;
case gs_fapi_font_feature_StemSnapH:
- return (float_to_ushort(pfont->data.StemSnapH.values[index]));
+ *ret = float_to_ushort(pfont->data.StemSnapH.values[index]);
+ break;
case gs_fapi_font_feature_StemSnapV_count:
- return (pfont->data.StemSnapV.count);
+ *ret = pfont->data.StemSnapV.count;
+ break;
case gs_fapi_font_feature_StemSnapV:
- return (float_to_ushort(pfont->data.StemSnapV.values[index]));
+ *ret = float_to_ushort(pfont->data.StemSnapV.values[index]);
+ break;
case gs_fapi_font_feature_ForceBold:
- return (pfont->data.ForceBold);
+ *ret = pfont->data.ForceBold;
+ break;
case gs_fapi_font_feature_LanguageGroup:
- return (pfont->data.LanguageGroup);
+ *ret = pfont->data.LanguageGroup;
+ break;
case gs_fapi_font_feature_lenIV:
- return (ff->need_decrypt ? 0 : pfont->data.lenIV);
+ *ret = ff->need_decrypt ? 0 : pfont->data.lenIV;
+ break;
case gs_fapi_font_feature_GlobalSubrs_count:
{
ref *Private, *GlobalSubrs;
if (pfont->FontType == ft_encrypted2) {
- if (dict_find_string(pdr, "Private", &Private) <= 0)
- return 0;
- if (dict_find_string(Private, "GlobalSubrs", &GlobalSubrs)
- <= 0)
- return 0;;
- return (r_size(GlobalSubrs));
+ if (dict_find_string(pdr, "Private", &Private) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Private, "GlobalSubrs", &GlobalSubrs) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = r_size(GlobalSubrs);
+ break;
}
- /* Since we don't have an error return capability, use as unlikely a value as possible */
- return (65535);
+ *ret = 0;
+ break;
}
case gs_fapi_font_feature_Subrs_count:
{
ref *Private, *Subrs;
- if (dict_find_string(pdr, "Private", &Private) <= 0)
- return 0;
- if (dict_find_string(Private, "Subrs", &Subrs) <= 0)
- return 0;
- return (r_size(Subrs));
+ if (dict_find_string(pdr, "Private", &Private) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Private, "Subrs", &Subrs) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = r_size(Subrs);
+ break;
}
case gs_fapi_font_feature_CharStrings_count:
{
ref *CharStrings;
if (dict_find_string(pdr, "CharStrings", &CharStrings) <= 0)
- return 0;
- return (dict_maxlength(CharStrings));
+ *ret = 0;
+ else
+ *ret = dict_maxlength(CharStrings);
+ break;
}
/* Multiple Master specific */
case gs_fapi_font_feature_DollarBlend:
@@ -513,75 +566,109 @@ FAPI_FF_get_word(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index)
ref *DBlend;
if (dict_find_string(pdr, "$Blend", &DBlend) <= 0)
- return 0;
- return 1;
+ *ret = 0;
+ else
+ *ret = 1;
+ break;
}
case gs_fapi_font_feature_BlendAxisTypes_count:
{
ref *Info, *Axes;
- if (dict_find_string(pdr, "FontInfo", &Info) <= 0)
- return 0;
- if (dict_find_string(Info, "BlendAxisTypes", &Axes) <= 0)
- return 0;
- return (r_size(Axes));
+ if (dict_find_string(pdr, "FontInfo", &Info) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Info, "BlendAxisTypes", &Axes) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = r_size(Axes);
+ break;
}
case gs_fapi_font_feature_BlendFontInfo_count:
{
ref *Info, *FontInfo;
- if (dict_find_string(pdr, "Blend", &Info) <= 0)
- return 0;
- if (dict_find_string(Info, "FontInfo", &FontInfo) <= 0)
- return 0;
- return (dict_length(FontInfo));
+ if (dict_find_string(pdr, "Blend", &Info) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Info, "FontInfo", &FontInfo) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = dict_length(FontInfo);
+ break;
}
case gs_fapi_font_feature_BlendPrivate_count:
{
ref *Info, *Private;
- if (dict_find_string(pdr, "Blend", &Info) <= 0)
- return 0;
- if (dict_find_string(Info, "Private", &Private) <= 0)
- return 0;
- return (dict_length(Private));
+ if (dict_find_string(pdr, "Blend", &Info) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Info, "Private", &Private) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = dict_length(Private);
+ break;
}
case gs_fapi_font_feature_WeightVector_count:
{
- return pfont->data.WeightVector.count;
+ *ret = pfont->data.WeightVector.count;
+ break;
}
case gs_fapi_font_feature_BlendDesignPositionsArrays_count:
{
ref *Info, *Array;
- if (dict_find_string(pdr, "FontInfo", &Info) <= 0)
- return 0;
- if (dict_find_string(Info, "BlendDesignPositions", &Array) <=
- 0)
- return 0;
- return (r_size(Array));
+ if (dict_find_string(pdr, "FontInfo", &Info) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Info, "BlendDesignPositions", &Array) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = r_size(Array);
+ break;
}
case gs_fapi_font_feature_BlendDesignMapArrays_count:
{
ref *Info, *Array;
- if (dict_find_string(pdr, "FontInfo", &Info) <= 0)
- return 0;
- if (dict_find_string(Info, "BlendDesignMap", &Array) <= 0)
- return 0;
- return (r_size(Array));
+ if (dict_find_string(pdr, "FontInfo", &Info) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Info, "BlendDesignMap", &Array) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = r_size(Array);
+ break;
}
case gs_fapi_font_feature_BlendDesignMapSubArrays_count:
{
ref *Info, *Array, SubArray;
- if (dict_find_string(pdr, "FontInfo", &Info) <= 0)
- return 0;
- if (dict_find_string(Info, "BlendDesignMap", &Array) <= 0)
- return 0;
- if (array_get(ff->memory, Array, index, &SubArray) < 0)
- return 0;
- return (r_size(&SubArray));
+ if (dict_find_string(pdr, "FontInfo", &Info) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Info, "BlendDesignMap", &Array) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, Array, index, &SubArray) < 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = r_size(&SubArray);
+ break;
}
case gs_fapi_font_feature_DollarBlend_length:
{
@@ -589,11 +676,15 @@ FAPI_FF_get_word(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index)
int i, length = 0;
char Buffer[32];
- if (dict_find_string(pdr, "$Blend", &DBlend) <= 0)
- return 0;
+ if (dict_find_string(pdr, "$Blend", &DBlend) <= 0) {
+ *ret = 0;
+ break;
+ }
for (i = 0; i < r_size(DBlend); i++) {
- if (array_get(ff->memory, DBlend, i, &Element) < 0)
- return 0;
+ if (array_get(ff->memory, DBlend, i, &Element) < 0) {
+ *ret = 0;
+ break;
+ }
switch (r_btype(&Element)) {
case t_name:
name_string_ref(ff->memory, &Element, &string);
@@ -619,433 +710,681 @@ FAPI_FF_get_word(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index)
break;
}
}
- return length;
+ *ret = length;
+ break;
}
case gs_fapi_font_feature_BlendFontBBox_length:
{
ref *Blend, *bfbbox;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
- if (dict_find_string(Blend, "FontBBox", &bfbbox) <= 0)
- return 0;
- return ((ushort)r_size(bfbbox));
+ if (dict_find_string(Blend, "FontBBox", &bfbbox) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(bfbbox);
+ break;
}
case gs_fapi_font_feature_BlendFontBBox:
{
ref *Blend, *bfbbox, subbfbbox, val;
int aind, ind;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "FontBBox", &bfbbox) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "FontBBox", &bfbbox) <= 0) {
+ *ret = 0;
+ break;
+ }
ind = index % 4;
aind = (index - ind) /4;
- if (array_get(ff->memory, bfbbox, aind, &subbfbbox) < 0)
- return 0;
- if (array_get(ff->memory, &subbfbbox, ind, &val) < 0)
- return 0;
+ if (array_get(ff->memory, bfbbox, aind, &subbfbbox) < 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, &subbfbbox, ind, &val) < 0) {
+ *ret = 0;
+ break;
+ }
- return (ushort)val.value.intval;
+ *ret = (ushort)val.value.intval;
+ break;
}
case gs_fapi_font_feature_BlendBlueValues_length:
{
ref *Priv, *Blend, *bbv;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "BlueValues", &bbv) <= 0)
- return 0;
- return ((ushort)r_size(bbv));
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "BlueValues", &bbv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(bbv);
+ break;
}
case gs_fapi_font_feature_BlendBlueValues_count:
{
ref *Priv, *Blend, *bbv, sub;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "BlueValues", &bbv) <= 0)
- return 0;
- if (array_get(ff->memory, bbv, index, &sub) < 0)
- return 0;
- return ((ushort)r_size(&sub));
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "BlueValues", &bbv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, bbv, index, &sub) < 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(&sub);
+ break;
}
case gs_fapi_font_feature_BlendBlueValues:
{
ref *Priv, *Blend, *bbv, sub, r;
int aind = 0;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "BlueValues", &bbv) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "BlueValues", &bbv) <= 0) {
+ *ret = 0;
+ break;
+ }
while (1) {
- if (array_get(ff->memory, bbv, aind++, &sub) < 0)
- return 0;
+ if ((code = array_get(ff->memory, bbv, aind++, &sub)) < 0) {
+ *ret = 0;
+ break;
+ }
if (index - (int)r_size(&sub) < 0) {
break;
}
index -= r_size(&sub);
}
- if (array_get(ff->memory, &sub, index, &r) < 0)
- return 0;
+ if (code < 0)
+ break;
+
+ if (array_get(ff->memory, &sub, index, &r) < 0) {
+ *ret = 0;
+ break;
+ }
- return ((ushort)r.value.intval);
+ *ret = (ushort)r.value.intval;
+ break;
}
case gs_fapi_font_feature_BlendOtherBlues_length:
{
ref *Priv, *Blend, *bob;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "OtherBlues", &bob) <= 0)
- return 0;
- return ((ushort)r_size(bob));
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "OtherBlues", &bob) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(bob);
+ break;
}
case gs_fapi_font_feature_BlendOtherBlues_count:
{
ref *Priv, *Blend, *bob, sub;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "OtherBlues", &bob) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "OtherBlues", &bob) <= 0) {
+ *ret = 0;
+ break;
+ }
- if (array_get(ff->memory, bob, index, &sub) < 0)
- return 0;
- return ((ushort)r_size(&sub));
+ if (array_get(ff->memory, bob, index, &sub) < 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(&sub);
+ break;
}
case gs_fapi_font_feature_BlendOtherBlues:
{
ref *Priv, *Blend, *bob, sub, r;
int aind = 0;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "OtherBlues", &bob) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "OtherBlues", &bob) <= 0) {
+ *ret = 0;
+ break;
+ }
while (1) {
- if (array_get(ff->memory, bob, aind++, &sub) < 0)
- return 0;
+ if ((code = array_get(ff->memory, bob, aind++, &sub)) < 0)
+ break;
if (index - (int)r_size(&sub) < 0) {
break;
}
index -= r_size(&sub);
}
- if (array_get(ff->memory, &sub, index, &r) < 0)
- return 0;
+ if (code < 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, &sub, index, &r) < 0) {
+ *ret = 0;
+ break;
+ }
- return ((ushort)r.value.intval);
+ *ret = (ushort)r.value.intval;
+ break;
}
case gs_fapi_font_feature_BlendBlueScale_count:
{
ref *Priv, *Blend, *bbs;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "BlueScale", &bbs) <= 0)
- return 0;
- return ((ushort)r_size(bbs));
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "BlueScale", &bbs) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(bbs);
+ break;
}
case gs_fapi_font_feature_BlendBlueShift_count:
{
ref *Priv, *Blend, *bbs;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "BlueShift", &bbs) <= 0)
- return 0;
- return ((ushort)r_size(bbs));
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "BlueShift", &bbs) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(bbs);
+ break;
}
case gs_fapi_font_feature_BlendBlueShift:
{
ref *Priv, *Blend, *bbs, r;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "BlueShift", &bbs) <= 0)
- return 0;
- if (array_get(ff->memory, bbs, index, &r) < 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "BlueShift", &bbs) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, bbs, index, &r) < 0) {
+ *ret = 0;
+ break;
+ }
- return ((ushort)r.value.intval);
+ *ret = (ushort)r.value.intval;
+ break;
}
case gs_fapi_font_feature_BlendBlueFuzz_count:
{
ref *Priv, *Blend, *bbf;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "BlueFuzz", &bbf) <= 0)
- return 0;
- return ((ushort)r_size(bbf));
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "BlueFuzz", &bbf) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(bbf);
+ break;
}
case gs_fapi_font_feature_BlendBlueFuzz:
{
ref *Priv, *Blend, *bbf, r;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "BlueFuzz", &bbf) <= 0)
- return 0;
- if (array_get(ff->memory, bbf, index, &r) < 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "BlueFuzz", &bbf) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, bbf, index, &r) < 0) {
+ *ret = 0;
+ break;
+ }
- return ((ushort)r.value.intval);
+ *ret = (ushort)r.value.intval;
+ break;
}
case gs_fapi_font_feature_BlendForceBold_count:
{
ref *Priv, *Blend, *bfb;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "ForceBold", &bfb) <= 0)
- return 0;
- return ((ushort)r_size(bfb));
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "ForceBold", &bfb) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(bfb);
+ break;
}
case gs_fapi_font_feature_BlendForceBold:
{
ref *Priv, *Blend, *bfb, r;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "BlueFuzz", &bfb) <= 0)
- return 0;
- if (array_get(ff->memory, bfb, index, &r) < 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "BlueFuzz", &bfb) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, bfb, index, &r) < 0) {
+ *ret = 0;
+ break;
+ }
- return ((ushort)r.value.boolval);
+ *ret = (ushort)r.value.boolval;
}
case gs_fapi_font_feature_BlendStdHW_length:
{
ref *Priv, *Blend, *stdhw;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "StdHW", &stdhw) <= 0)
- return 0;
- return ((ushort)r_size(stdhw));
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "StdHW", &stdhw) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(stdhw);
+ break;
}
case gs_fapi_font_feature_BlendStdHW_count:
{
ref *Priv, *Blend, *stdhw, sub;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "StdHW", &stdhw) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "StdHW", &stdhw) <= 0) {
+ *ret = 0;
+ break;
+ }
- if (array_get(ff->memory, stdhw, index, &sub) < 0)
- return 0;
- return ((ushort)r_size(&sub));
+ if (array_get(ff->memory, stdhw, index, &sub) < 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(&sub);
+ break;
}
case gs_fapi_font_feature_BlendStdHW:
{
ref *Priv, *Blend, *stdhw, sub, r;
int aind = 0;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "StdHW", &stdhw) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "StdHW", &stdhw) <= 0) {
+ *ret = 0;
+ break;
+ }
while (1) {
- if (array_get(ff->memory, stdhw, aind++, &sub) < 0)
- return 0;
+ if ((code = array_get(ff->memory, stdhw, aind++, &sub)) < 0)
+ break;
if (index - (int)r_size(&sub) < 0) {
break;
}
index -= r_size(&sub);
}
- if (array_get(ff->memory, &sub, index, &r) < 0)
- return 0;
+ if (code < 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, &sub, index, &r) < 0) {
+ *ret = 0;
+ break;
+ }
- return ((ushort)r.value.intval);
+ *ret = (ushort)r.value.intval;
+ break;
}
case gs_fapi_font_feature_BlendStdVW_length:
{
ref *Priv, *Blend, *stdvw;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "StdVW", &stdvw) <= 0)
- return 0;
- return ((ushort)r_size(stdvw));
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "StdVW", &stdvw) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(stdvw);
+ break;
}
case gs_fapi_font_feature_BlendStdVW_count:
{
ref *Priv, *Blend, *stdvw, sub;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "StdVW", &stdvw) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
- if (array_get(ff->memory, stdvw, index, &sub) < 0)
- return 0;
- return ((ushort)r_size(&sub));
+ if (dict_find_string(Priv, "StdVW", &stdvw) <= 0) {
+ *ret = 0;
+ break;
+ }
+
+ if (array_get(ff->memory, stdvw, index, &sub) < 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(&sub);
+ break;
}
case gs_fapi_font_feature_BlendStdVW:
{
ref *Priv, *Blend, *stdvw, sub, r;
int aind = 0;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "StdVW", &stdvw) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "StdVW", &stdvw) <= 0) {
+ *ret = 0;
+ break;
+ }
while (1) {
- if (array_get(ff->memory, stdvw, aind++, &sub) < 0)
- return 0;
+ if ((code = array_get(ff->memory, stdvw, aind++, &sub)) < 0)
+ break;
if (index - (int)r_size(&sub) < 0) {
break;
}
index -= r_size(&sub);
}
- if (array_get(ff->memory, &sub, index, &r) < 0)
- return 0;
+ if (code < 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, &sub, index, &r) < 0) {
+ *ret = 0;
+ break;
+ }
- return ((ushort)r.value.intval);
+ *ret = (ushort)r.value.intval;
+ break;
}
case gs_fapi_font_feature_BlendStemSnapH_length:
{
ref *Priv, *Blend, *ssh;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "StemSnapH", &ssh) <= 0)
- return 0;
- return ((ushort)r_size(ssh));
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "StemSnapH", &ssh) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(ssh);
+ break;
}
case gs_fapi_font_feature_BlendStemSnapH_count:
{
ref *Priv, *Blend, *bssh, sub;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "StemSnapH", &bssh) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "StemSnapH", &bssh) <= 0) {
+ *ret = 0;
+ break;
+ }
- if (array_get(ff->memory, bssh, index, &sub) < 0)
- return 0;
- return ((ushort)r_size(&sub));
+ if (array_get(ff->memory, bssh, index, &sub) < 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(&sub);
+ break;
}
case gs_fapi_font_feature_BlendStemSnapH:
{
ref *Priv, *Blend, *bssh, sub, r;
int aind = 0;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "StemSnapH", &bssh) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "StemSnapH", &bssh) <= 0) {
+ *ret = 0;
+ break;
+ }
while (1) {
- if (array_get(ff->memory, bssh, aind++, &sub) < 0)
- return 0;
+ if ((code = array_get(ff->memory, bssh, aind++, &sub)) < 0)
+ break;
if (index - (int)r_size(&sub) < 0) {
break;
}
index -= r_size(&sub);
}
- if (array_get(ff->memory, &sub, index, &r) < 0)
- return 0;
+ if (code < 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, &sub, index, &r) < 0) {
+ *ret = 0;
+ break;
+ }
- return ((ushort)r.value.intval);
+ *ret = (ushort)r.value.intval;
+ break;
}
case gs_fapi_font_feature_BlendStemSnapV_length:
{
ref *Priv, *Blend, *ssv;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "StdHW", &ssv) <= 0)
- return 0;
- return ((ushort)r_size(ssv));
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "StdHW", &ssv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(ssv);
+ break;
}
case gs_fapi_font_feature_BlendStemSnapV_count:
{
ref *Priv, *Blend, *bssv, sub;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "StemSnapV", &bssv) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "StemSnapV", &bssv) <= 0) {
+ *ret = 0;
+ break;
+ }
- if (array_get(ff->memory, bssv, index, &sub) < 0)
- return 0;
- return ((ushort)r_size(&sub));
+ if (array_get(ff->memory, bssv, index, &sub) < 0) {
+ *ret = 0;
+ break;
+ }
+ *ret = (ushort)r_size(&sub);
+ break;
}
case gs_fapi_font_feature_BlendStemSnapV:
{
ref *Priv, *Blend, *bssv, sub, r;
int aind = 0;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "StemSnapV", &bssv) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "StemSnapV", &bssv) <= 0) {
+ *ret = 0;
+ break;
+ }
while (1) {
- if (array_get(ff->memory, bssv, aind++, &sub) < 0)
- return 0;
+ if ((code = array_get(ff->memory, bssv, aind++, &sub)) < 0)
+ break;
if (index - (int)r_size(&sub) < 0) {
break;
}
index -= r_size(&sub);
}
- if (array_get(ff->memory, &sub, index, &r) < 0)
- return 0;
+ if (code < 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, &sub, index, &r) < 0) {
+ *ret = 0;
+ break;
+ }
- return ((ushort)r.value.intval);
+ *ret = (ushort)r.value.intval;
+ break;
}
/* End MM specifics */
}
- return 0;
+ return code;
}
-static ulong
-FAPI_FF_get_long(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index)
+static int
+FAPI_FF_get_long(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index, unsigned long *ret)
{
gs_font_type1 *pfont = (gs_font_type1 *) ff->client_font_data;
+ int code = 0;
ref *pdr = pfont_dict(((gs_font_base *) ff->client_font_data2));
switch ((int)var_id) {
case gs_fapi_font_feature_UniqueID:
- return (pfont->UID.id);
+ *ret = pfont->UID.id;
+ break;
case gs_fapi_font_feature_BlueScale:
- return ((ulong) (pfont->data.BlueScale * 65536));
+ *ret = (ulong) (pfont->data.BlueScale * 65536);
+ break;
case gs_fapi_font_feature_Subrs_total_size:
{
ref *Private, *Subrs, v;
@@ -1053,8 +1392,10 @@ FAPI_FF_get_long(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index)
ulong size = 0;
long i;
const char *name[2] = { "Subrs", "GlobalSubrs" };
- if (dict_find_string(pdr, "Private", &Private) <= 0)
- return 0;
+ if (dict_find_string(pdr, "Private", &Private) <= 0) {
+ *ret = 0;
+ break;
+ }
for (k = 0; k < 2; k++) {
if (dict_find_string(Private, name[k], &Subrs) > 0)
for (i = r_size(Subrs) - 1; i >= 0; i--) {
@@ -1064,21 +1405,23 @@ FAPI_FF_get_long(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index)
}
}
}
- return size;
+ *ret = size;
}
+ break;
case gs_fapi_font_feature_TT_size:
- return (true_type_size(pdr));
+ code = true_type_size(pdr, ret);
+ break;
}
- return 0;
+ return code;
}
-static float
-FAPI_FF_get_float(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index)
+static int
+FAPI_FF_get_float(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index, float *ret)
{
gs_font_type1 *pfont1 = (gs_font_type1 *) ff->client_font_data;
gs_font_base *pbfont = (gs_font_base *) ff->client_font_data2;
ref *pdr = pfont_dict(pbfont);
-
+ int code = 0;
gs_fapi_server *I = pbfont->FAPI;
switch ((int)var_id) {
@@ -1101,101 +1444,133 @@ FAPI_FF_get_float(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index)
switch (index) {
case 0:
default:
- return (mptr->xx / FontMatrix_div);
+ *ret = (mptr->xx / FontMatrix_div);
+ break;
case 1:
- return (mptr->xy / FontMatrix_div);
+ *ret = (mptr->xy / FontMatrix_div);
+ break;
case 2:
- return (mptr->yx / FontMatrix_div);
+ *ret = (mptr->yx / FontMatrix_div);
+ break;
case 3:
- return (mptr->yy / FontMatrix_div);
+ *ret = (mptr->yy / FontMatrix_div);
+ break;
case 4:
- return (mptr->tx / FontMatrix_div);
+ *ret = (mptr->tx / FontMatrix_div);
+ break;
case 5:
- return (mptr->ty / FontMatrix_div);
+ *ret = (mptr->ty / FontMatrix_div);
+ break;
}
+ break;
}
case gs_fapi_font_feature_WeightVector:
{
if (index < pfont1->data.WeightVector.count) {
- return pfont1->data.WeightVector.values[index];
+ *ret = pfont1->data.WeightVector.values[index];
}
else {
- return 0;
+ *ret = 0;
}
}
+ break;
case gs_fapi_font_feature_BlendDesignPositionsArrayValue:
{
ref *Info, *Array, SubArray, value;
int array_index = index / 8;
index %= 8;
- if (dict_find_string(pdr, "FontInfo", &Info) <= 0)
- return 0;
- if (dict_find_string(Info, "BlendDesignPositions", &Array) <=
- 0)
- return 0;
- if (array_get(ff->memory, Array, array_index, &SubArray) < 0)
- return 0;
+ if (dict_find_string(pdr, "FontInfo", &Info) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Info, "BlendDesignPositions", &Array) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, Array, array_index, &SubArray) < 0) {
+ *ret = 0;
+ break;
+ }
if (array_get(ff->memory, &SubArray, index, &value) < 0)
return 0;
if (!r_has_type(&value, t_integer)) {
if (r_has_type(&value, t_real)) {
- return (value.value.realval);
+ *ret = value.value.realval;
}
else
- return 0;
+ *ret = 0;
}
else
- return ((float)value.value.intval);
+ *ret = ((float)value.value.intval);
}
+ break;
case gs_fapi_font_feature_BlendDesignMapArrayValue:
{
ref *Info, *Array, SubArray, SubSubArray, value;
int array_index = index / 64;
index %= 8;
- if (dict_find_string(pdr, "FontInfo", &Info) <= 0)
- return 0;
- if (dict_find_string(Info, "BlendDesignMap", &Array) <= 0)
- return 0;
- if (array_get(ff->memory, Array, array_index, &SubArray) < 0)
- return 0;
- if (array_get(ff->memory, &SubArray, index, &SubSubArray) < 0)
- return 0;
- if (array_get(ff->memory, &SubSubArray, index, &value) < 0)
- return 0;
+ if (dict_find_string(pdr, "FontInfo", &Info) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Info, "BlendDesignMap", &Array) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, Array, array_index, &SubArray) < 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, &SubArray, index, &SubSubArray) < 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, &SubSubArray, index, &value) < 0) {
+ *ret = 0;
+ break;
+ }
if (!r_has_type(&value, t_integer)) {
if (r_has_type(&value, t_real)) {
- return (value.value.realval);
+ *ret = (value.value.realval);
}
else
- return 0;
+ *ret = 0;
}
else
- return ((float)value.value.intval);
+ *ret = ((float)value.value.intval);
}
+ break;
case gs_fapi_font_feature_BlendBlueScale:
{
ref *Priv, *Blend, *bbs, r;
- float val = 0;
- if (dict_find_string(pdr, "Blend", &Blend) <= 0)
- return 0;
- if (dict_find_string(Blend, "Private", &Priv) <= 0)
- return 0;
- if (dict_find_string(Priv, "BlueScale", &bbs) <= 0)
- return 0;
- if (array_get(ff->memory, bbs, index, &r) < 0)
- return 0;
+ if (dict_find_string(pdr, "Blend", &Blend) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Blend, "Private", &Priv) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (dict_find_string(Priv, "BlueScale", &bbs) <= 0) {
+ *ret = 0;
+ break;
+ }
+ if (array_get(ff->memory, bbs, index, &r) < 0) {
+ *ret = 0;
+ break;
+ }
if (r_has_type(&r, t_real))
- val = r.value.realval;
+ *ret = r.value.realval;
else if (r_has_type(&r, t_integer))
- val = (float)r.value.intval;
- return (val);
+ *ret = (float)r.value.intval;
}
+ break;
}
- return 0;
+ return code;
}
static int
@@ -1204,28 +1579,42 @@ FAPI_FF_get_name(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index,
{
ref name, string;
ref *pdr = pfont_dict(((gs_font_base *) ff->client_font_data2));
+ int code = 0;
switch ((int)var_id) {
case gs_fapi_font_feature_BlendAxisTypes:
{
ref *Info, *Axes;
- if (dict_find_string(pdr, "FontInfo", &Info) <= 0)
- return 0;
- if (dict_find_string(Info, "BlendAxisTypes", &Axes) <= 0)
- return 0;
- if (!r_has_type(Axes, t_array))
- return 0;
- if (array_get(ff->memory, Axes, index, &name) < 0)
- return 0;
+ if (dict_find_string(pdr, "FontInfo", &Info) <= 0) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
+ if (dict_find_string(Info, "BlendAxisTypes", &Axes) <= 0) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
+ if (!r_has_type(Axes, t_array)) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
+ if (array_get(ff->memory, Axes, index, &name) < 0) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
}
}
- name_string_ref(ff->memory, &name, &string);
- if (r_size(&string) >= len)
- return 0;
- memcpy(Buffer, string.value.const_bytes, r_size(&string));
- Buffer[r_size(&string)] = 0x00;
- return 1;
+ if (code >= 0) {
+ name_string_ref(ff->memory, &name, &string);
+ if (r_size(&string) < len) {
+ memcpy(Buffer, string.value.const_bytes, r_size(&string));
+ Buffer[r_size(&string)] = 0x00;
+ }
+ else {
+ code = gs_note_error(gs_error_unknownerror);
+ }
+ }
+ return code;
}
/* NOTE: we checked the type of $Blend at definefont time, so we know it is a
@@ -1237,9 +1626,10 @@ FAPI_FF_get_proc(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index,
{
ref *pdr = pfont_dict(((gs_font_base *) ff->client_font_data2));
char *ptr = Buffer;
+ int code = 0;
if (!Buffer)
- return 0;
+ return_error(gs_error_unknownerror);
switch ((int)var_id) {
case gs_fapi_font_feature_DollarBlend:
@@ -1248,12 +1638,16 @@ FAPI_FF_get_proc(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index,
int i;
char Buf[32];
- if (dict_find_string(pdr, "$Blend", &DBlend) <= 0)
- return 0;
+ if (dict_find_string(pdr, "$Blend", &DBlend) <= 0) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
for (i = 0; i < r_size(DBlend); i++) {
*ptr++ = 0x20;
- if (array_get(ff->memory, DBlend, i, &Element) < 0)
- return 0;
+ if (array_get(ff->memory, DBlend, i, &Element) < 0) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
switch (r_btype(&Element)) {
case t_name:
name_string_ref(ff->memory, &Element, &string);
@@ -1287,7 +1681,7 @@ FAPI_FF_get_proc(gs_fapi_font *ff, gs_fapi_font_feature var_id, int index,
}
}
}
- return (ptr - Buffer);
+ return code < 0 ? code : (ptr - Buffer);
}
static inline void
@@ -1308,7 +1702,7 @@ decode_bytes(byte *p, const byte *s, int l, int lenIV)
}
}
-static ushort
+static int
get_type1_data(gs_fapi_font *ff, const ref *type1string,
byte *buf, ushort buf_length)
{
@@ -1328,8 +1722,8 @@ get_type1_data(gs_fapi_font *ff, const ref *type1string,
return length;
}
-static ushort
-FAPI_FF_get_gsubr(gs_fapi_font *ff, int index, byte *buf, ushort buf_length)
+static int
+FAPI_FF_get_gsubr(gs_fapi_font *ff, int index, byte *buf, int buf_length)
{
ref *pdr = pfont_dict(((gs_font_base *) ff->client_font_data2));
ref *Private, *GlobalSubrs, subr;
@@ -1344,8 +1738,8 @@ FAPI_FF_get_gsubr(gs_fapi_font *ff, int index, byte *buf, ushort buf_length)
return (get_type1_data(ff, &subr, buf, buf_length));
}
-static ushort
-FAPI_FF_get_subr(gs_fapi_font *ff, int index, byte *buf, ushort buf_length)
+static int
+FAPI_FF_get_subr(gs_fapi_font *ff, int index, byte *buf, int buf_length)
{
ref *pdr = pfont_dict(((gs_font_base *) ff->client_font_data2));
ref *Private, *Subrs, subr;
@@ -1360,24 +1754,37 @@ FAPI_FF_get_subr(gs_fapi_font *ff, int index, byte *buf, ushort buf_length)
return (get_type1_data(ff, &subr, buf, buf_length));
}
-static ushort
+static int
FAPI_FF_get_raw_subr(gs_fapi_font *ff, int index, byte *buf,
- ushort buf_length)
+ int buf_length)
{
ref *pdr = pfont_dict(((gs_font_base *) ff->client_font_data2));
ref *Private, *Subrs, subr;
+ int code = 0;
- if (dict_find_string(pdr, "Private", &Private) <= 0)
- return 0;
- if (dict_find_string(Private, "Subrs", &Subrs) <= 0)
- return 0;
- if (array_get(ff->memory, Subrs, index, &subr) < 0
- || r_type(&subr) != t_string)
- return 0;
- if (buf && buf_length && buf_length >= r_size(&subr)) {
- memcpy(buf, subr.value.const_bytes, r_size(&subr));
- }
- return (r_size(&subr));
+ do {
+ if (dict_find_string(pdr, "Private", &Private) <= 0) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
+ if (dict_find_string(Private, "Subrs", &Subrs) <= 0) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
+ if (array_get(ff->memory, Subrs, index, &subr) < 0) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
+ if (r_type(&subr) != t_string) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
+ if (buf && buf_length && buf_length >= r_size(&subr)) {
+ memcpy(buf, subr.value.const_bytes, r_size(&subr));
+ }
+ } while(0);
+
+ return code < 0 ? code : r_size(&subr);
}
/* FAPI_FF_get_charstring_name() and FAPI_FF_get_charstring()
@@ -1394,44 +1801,63 @@ FAPI_FF_get_raw_subr(gs_fapi_font *ff, int index, byte *buf,
* also handle empty "slots" in the dictionary.
*/
-static ushort
+static int
FAPI_FF_get_charstring_name(gs_fapi_font *ff, int index, byte *buf,
ushort buf_length)
{
+ int code = 0;
ref *pdr = pfont_dict(((gs_font_base *) ff->client_font_data2));
ref *CharStrings, eltp[2], string;
- if (dict_find_string(pdr, "CharStrings", &CharStrings) <= 0)
- return 0;
- if (dict_index_entry(CharStrings, index, eltp) < 0)
- return 0;
- if (r_type(&eltp[0]) != t_name)
- return 0;
- name_string_ref(ff->memory, &eltp[0], &string);
- if (r_size(&string) > buf_length)
- return (r_size(&string));
- memcpy(buf, string.value.const_bytes, r_size(&string));
- buf[r_size(&string)] = 0x00;
- return (r_size(&string));
+ do {
+ if (dict_find_string(pdr, "CharStrings", &CharStrings) <= 0) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
+ if (dict_index_entry(CharStrings, index, eltp) < 0) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
+ if (r_type(&eltp[0]) != t_name) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
+ name_string_ref(ff->memory, &eltp[0], &string);
+ if (r_size(&string) <= buf_length) {
+ memcpy(buf, string.value.const_bytes, r_size(&string));
+ buf[r_size(&string)] = 0x00;
+ }
+ } while(0);
+ return code < 0 ? code : r_size(&string);
}
-static ushort
+static int
FAPI_FF_get_charstring(gs_fapi_font *ff, int index, byte *buf,
ushort buf_length)
{
+ int code = 0;
ref *pdr = pfont_dict(((gs_font_base *) ff->client_font_data2));
ref *CharStrings, eltp[2];
- if (dict_find_string(pdr, "CharStrings", &CharStrings) <= 0)
- return 0;
- if (dict_index_entry(CharStrings, index, eltp) < 0)
- return 0;
- if (r_type(&eltp[1]) != t_string)
- return 0;
- if (buf && buf_length && buf_length >= r_size(&eltp[1])) {
- memcpy(buf, eltp[1].value.const_bytes, r_size(&eltp[1]));
- }
- return (r_size(&eltp[1]));
+ do {
+ if (dict_find_string(pdr, "CharStrings", &CharStrings) <= 0) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
+ if (dict_index_entry(CharStrings, index, eltp) < 0) {
+ code = gs_note_error(gs_error_undefined);
+ break;
+ }
+ if (r_type(&eltp[1]) != t_string) {
+ code = gs_note_error(gs_error_typecheck);
+ break;
+ }
+ if (buf && buf_length && buf_length >= r_size(&eltp[1])) {
+ memcpy(buf, eltp[1].value.const_bytes, r_size(&eltp[1]));
+ }
+ } while(0);
+
+ return code < 0 ? code : r_size(&eltp[1]);
}
static int
@@ -1467,7 +1893,7 @@ sfnt_get_sfnt_length(ref *pdr, ulong *len)
return code;
}
-static bool
+static int
sfnt_get_glyph_offset(ref *pdr, gs_font_type42 *pfont42, int index,
ulong *offset0)
{ /* Note : TTC is not supported and probably is unuseful for Type 42. */
@@ -1476,13 +1902,13 @@ sfnt_get_glyph_offset(ref *pdr, gs_font_type42 *pfont42, int index,
if (index < pfont42->data.trueNumGlyphs) {
sfnts_reader_init(&r, pdr);
- r.seek(&r, pfont42->data.loca + index * glyf_elem_size);
+ r.seek(&r, pfont42->data.loca + index * (ulong)glyf_elem_size);
*offset0 =
pfont42->data.glyf + (glyf_elem_size ==
2 ? r.rword(&r) * 2 : r.rlong(&r));
}
else {
- r.error = true;
+ r.error = gs_note_error(gs_error_rangecheck);
}
return (r.error);
}
@@ -1559,8 +1985,7 @@ get_charstring(gs_fapi_font *ff, int char_code, ref **proc, ref *char_name)
}
static int
-FAPI_FF_get_glyph(gs_fapi_font *ff, int char_code, byte *buf,
- ushort buf_length)
+FAPI_FF_get_glyph(gs_fapi_font *ff, gs_glyph char_code, byte *buf, int buf_length)
{
/*
* We assume that renderer requests glyph data with multiple
@@ -1621,8 +2046,7 @@ FAPI_FF_get_glyph(gs_fapi_font *ff, int char_code, byte *buf,
|| array_get(ff->memory, StandardEncoding, char_code,
&char_name) < 0)
if (name_ref
- (ff->memory, (const byte *)".notdef", 7, &char_name,
- -1) < 0)
+ (ff->memory, (const byte *)".notdef", 7, &char_name, -1) < 0)
return gs_fapi_glyph_invalid_format;
}
if (dict_find_string(pdr, "CharStrings", &CharStrings) <= 0)
@@ -1630,8 +2054,7 @@ FAPI_FF_get_glyph(gs_fapi_font *ff, int char_code, byte *buf,
if (dict_find(CharStrings, &char_name, &glyph) <= 0) {
if (name_ref
- (ff->memory, (const byte *)".notdef", 7, &char_name,
- -1) < 0) {
+ (ff->memory, (const byte *)".notdef", 7, &char_name, -1) < 0) {
return gs_fapi_glyph_invalid_format;
}
if (dict_find(CharStrings, &char_name, &glyph) <= 0) {
@@ -1682,9 +2105,9 @@ FAPI_FF_get_glyph(gs_fapi_font *ff, int char_code, byte *buf,
else {
gs_font_type42 *pfont42 = (gs_font_type42 *) ff->client_font_data;
ulong offset0, length_read;
- bool error = sfnt_get_glyph_offset(pdr, pfont42, char_code, &offset0);
+ int error = sfnt_get_glyph_offset(pdr, pfont42, char_code, &offset0);
- if (error != 0) {
+ if (error < 0) {
glyph_length = gs_fapi_glyph_invalid_index;
}
else if (pfont42->data.len_glyphs) {
@@ -1694,19 +2117,29 @@ FAPI_FF_get_glyph(gs_fapi_font *ff, int char_code, byte *buf,
glyph_length = gs_fapi_glyph_invalid_index;
}
else {
- ulong noffs;
+ ulong noffs, endoffs;
+ int code;
/* If we haven't got a len_glyphs array, try using the offset of the next glyph offset
* to work out the length
*/
error = sfnt_get_glyph_offset(pdr, pfont42, char_code + 1, &noffs);
if (error == 0) {
glyph_length = noffs - offset0;
+ code = sfnt_get_sfnt_length(pdr, &endoffs);
+ if (code < 0) {
+ glyph_length = gs_fapi_glyph_invalid_index;
+ }
+ else {
+ if (glyph_length + offset0 > endoffs) {
+ glyph_length = gs_fapi_glyph_invalid_index;
+ }
+ }
}
else {
/* And if we can't get the next glyph offset, use the end of the sfnt data
* to work out the length.
*/
- int code = sfnt_get_sfnt_length(pdr, &noffs);
+ code = sfnt_get_sfnt_length(pdr, &noffs);
if (code < 0) {
glyph_length = gs_fapi_glyph_invalid_index;
}
@@ -1744,16 +2177,14 @@ FAPI_FF_get_glyph(gs_fapi_font *ff, int char_code, byte *buf,
}
static int
-ps_fapi_get_metrics(gs_fapi_font *ff, gs_string *char_name, int cid,
- double *m, bool vertical)
+ps_fapi_get_metrics(gs_fapi_font *ff, gs_string *char_name, gs_glyph cid, double *m, bool vertical)
{
ref glyph;
int code;
gs_font_base *pbfont = ((gs_font_base *) ff->client_font_data2);
if (char_name->data != NULL) {
- make_string(&glyph, avm_foreign | a_readonly, char_name->size,
- char_name->data);
+ make_string(&glyph, avm_foreign | a_readonly, char_name->size, char_name->data);
}
else {
make_int(&glyph, cid);
@@ -1776,13 +2207,13 @@ ps_fapi_get_metrics(gs_fapi_font *ff, gs_string *char_name, int cid,
static int ps_get_glyphname_or_cid(gs_text_enum_t *penum,
gs_font_base *pbfont,
gs_string *charstring, gs_string *name,
- int ccode, gs_string *enc_char_name,
+ gs_glyph ccode, gs_string *enc_char_name,
char *font_file_path,
gs_fapi_char_ref *cr, bool bCID);
static int ps_fapi_set_cache(gs_text_enum_t *penum,
const gs_font_base *pbfont,
- const gs_string *char_name, int cid,
+ const gs_string *char_name, gs_glyph cid,
const double pwidth[2], const gs_rect *pbbox,
const double Metrics2_sbw_default[4],
bool *imagenow);
@@ -2211,7 +2642,7 @@ zfapi_finish_render(i_ctx_t *i_ctx_p)
static int
ps_fapi_set_cache(gs_text_enum_t *penum, const gs_font_base *pbfont,
- const gs_string *char_name, int cid,
+ const gs_string *char_name, gs_glyph cid,
const double pwidth[2], const gs_rect *pbbox,
const double Metrics2_sbw_default[4], bool *imagenow)
{
@@ -2219,7 +2650,7 @@ ps_fapi_set_cache(gs_text_enum_t *penum, const gs_font_base *pbfont,
op_proc_t exec_cont = 0; /* dummy - see below */
int code = 0;
- if (cid < 0) {
+ if (cid < GS_MIN_CID_GLYPH) {
ref cname;
make_string(&cname, avm_foreign | a_readonly, char_name->size,
@@ -2232,7 +2663,7 @@ ps_fapi_set_cache(gs_text_enum_t *penum, const gs_font_base *pbfont,
else {
ref cidref;
- make_int(&cidref, cid);
+ make_int(&cidref, (cid - GS_MIN_CID_GLYPH));
code = zchar_set_cache(i_ctx_p, pbfont, &cidref, NULL, pwidth, pbbox,
zfapi_finish_render, &exec_cont,
Metrics2_sbw_default);
@@ -2268,7 +2699,7 @@ find_substring(const byte *where, int length, const char *what)
static int
ps_get_glyphname_or_cid(gs_text_enum_t *penum,
gs_font_base *pbfont, gs_string *charstring,
- gs_string *name, int ccode,
+ gs_string *name, gs_glyph ccode,
gs_string *enc_char_name, char *font_file_path,
gs_fapi_char_ref *cr, bool bCID)
{
@@ -2324,7 +2755,7 @@ ps_get_glyphname_or_cid(gs_text_enum_t *penum,
enc_char_name->size = 0;
}
else {
- if (ccode >= 0) {
+ if (ccode != GS_NO_CHAR) {
/* Translate from PS encoding to char name : */
ref *Encoding;
@@ -2510,9 +2941,9 @@ ps_get_glyphname_or_cid(gs_text_enum_t *penum,
/* Too big for single string, so its an array of 2 strings */
code = string_array_access_proc(pbfont->memory, CIDMap, 1,
- client_char_code * gdb, gdb,
- NULL, NULL,
- (const byte **)&Map);
+ client_char_code * (ulong)gdb,
+ gdb, NULL, NULL,
+ (const byte **)&Map);
}
else {
if (CIDMap->tas.rsize <= c_code * gdb) {
@@ -2544,7 +2975,28 @@ ps_get_glyphname_or_cid(gs_text_enum_t *penum,
}
else if (is_TT_from_type42) {
/* This font must not use 'cmap', so compute glyph index from CharStrings : */
- ref *CharStrings, *glyph_index;
+ ref *CharStrings, *glyph_index, *cmaptab;
+
+ if (dict_find_string(pdr, "TT_cmap", &cmaptab) > 0 &&
+ r_has_type(cmaptab, t_dictionary)) {
+ const char *nd = ".notdef";
+
+ if (enc_char_name->size >= strlen(nd) &&
+ enc_char_name->data[0] == nd[0] &&
+ !memcmp(enc_char_name->data, nd, strlen(nd))) {
+ ref ccref, *gidref, boolref;
+ make_int(&ccref, ccode);
+ if (dict_find(cmaptab, &ccref, &gidref) > 0 &&
+ r_has_type(gidref, t_integer) &&
+ gidref->value.intval == 0) {
+ make_bool(&boolref, true);
+ }
+ else {
+ make_bool(&boolref, false);
+ }
+ dict_put_string(pdr, ".render_notdef", &boolref, NULL);
+ }
+ }
if (dict_find_string(pdr, "CharStrings", &CharStrings) <= 0
|| !r_has_type(CharStrings, t_dictionary))
@@ -2614,7 +3066,7 @@ ps_get_glyphname_or_cid(gs_text_enum_t *penum,
for same char code. The last should be true due to
PLRM3, "5.9.4 Subsetting and Incremental Definition of Glyphs".
*/
- if (ccode >= 0) {
+ if (ccode != GS_NO_CHAR) {
cr->char_codes[0] = client_char_code;
}
else {
@@ -2756,7 +3208,7 @@ FAPI_char(i_ctx_t *i_ctx_p, bool bBuildGlyph, ref *charstring)
gs_text_enum_t *penum = op_show_find(i_ctx_p);
gs_string char_string, *c_string_p = NULL;
gs_string char_name, *c_name_p = NULL;
- int cindex = -1;
+ gs_glyph cindex = GS_NO_CHAR;
ref gname;
if (I == NULL)
@@ -2780,6 +3232,7 @@ FAPI_char(i_ctx_t *i_ctx_p, bool bBuildGlyph, ref *charstring)
}
else {
+ int chint;
if (bBuildGlyph && pbfont->FontType == ft_CID_TrueType
&& r_has_type(op, t_name)) {
ref *chstrs, *chs;
@@ -2800,7 +3253,8 @@ FAPI_char(i_ctx_t *i_ctx_p, bool bBuildGlyph, ref *charstring)
make_null(&gname);
check_type(*op, t_integer);
- int_param(op, 0xFFFF, &cindex);
+ int_param(op, 0xFFFF, (int *)&chint);
+ cindex = chint;
}
if (dict_find_string(pdr, "SubfontId", &v) > 0
@@ -2822,7 +3276,7 @@ FAPI_char(i_ctx_t *i_ctx_p, bool bBuildGlyph, ref *charstring)
code =
gs_fapi_do_char(pfont, igs, penum, font_file_path,
- bBuildGlyph, c_string_p, c_name_p, (gs_char)cindex, (gs_glyph)cindex,
+ bBuildGlyph, c_string_p, c_name_p, (gs_char)cindex, cindex,
subfont);
if (font_file_path != NULL) {
gs_free_string(imemory, (byte *) font_file_path, r_size(v) + 1,
diff --git a/psi/zfarc4.c b/psi/zfarc4.c
index d80289e0..dad70171 100644
--- a/psi/zfarc4.c
+++ b/psi/zfarc4.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfbcp.c b/psi/zfbcp.c
index f68e7ce4..88b4f207 100644
--- a/psi/zfbcp.c
+++ b/psi/zfbcp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfcid.c b/psi/zfcid.c
index fce3a3ec..19548d4c 100644
--- a/psi/zfcid.c
+++ b/psi/zfcid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfcid0.c b/psi/zfcid0.c
index 055701fa..c9e3ae04 100644
--- a/psi/zfcid0.c
+++ b/psi/zfcid0.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfcid1.c b/psi/zfcid1.c
index 8e1b78a9..dcaca163 100644
--- a/psi/zfcid1.c
+++ b/psi/zfcid1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfcmap.c b/psi/zfcmap.c
index db5c2b81..6cb3a237 100644
--- a/psi/zfcmap.c
+++ b/psi/zfcmap.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfdctd.c b/psi/zfdctd.c
index 93570573..c12e8ea8 100644
--- a/psi/zfdctd.c
+++ b/psi/zfdctd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfdcte.c b/psi/zfdcte.c
index 5d292d93..4adb3389 100644
--- a/psi/zfdcte.c
+++ b/psi/zfdcte.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfdecode.c b/psi/zfdecode.c
index 8e65a5e1..43f654b2 100644
--- a/psi/zfdecode.c
+++ b/psi/zfdecode.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfile.c b/psi/zfile.c
index be03a556..ec19796b 100644
--- a/psi/zfile.c
+++ b/psi/zfile.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -357,6 +357,7 @@ zdeletefile(i_ctx_t *i_ctx_p)
return code;
}
}
+
code = (*pname.iodev->procs.delete_file)(pname.iodev, pname.fname);
if (code >= 0 && is_temp)
diff --git a/psi/zfile.h b/psi/zfile.h
index 112dbe6b..a2579344 100644
--- a/psi/zfile.h
+++ b/psi/zfile.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfile1.c b/psi/zfile1.c
index 2ac1d6ff..db6068f6 100644
--- a/psi/zfile1.c
+++ b/psi/zfile1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfileio.c b/psi/zfileio.c
index bd9e505e..9b35f2ca 100644
--- a/psi/zfileio.c
+++ b/psi/zfileio.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfilter.c b/psi/zfilter.c
index 3ce7652c..818e9c65 100644
--- a/psi/zfilter.c
+++ b/psi/zfilter.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfilter2.c b/psi/zfilter2.c
index 064a59bb..e65a6d8c 100644
--- a/psi/zfilter2.c
+++ b/psi/zfilter2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfimscale.c b/psi/zfimscale.c
index 3c963d7c..088a6c5f 100644
--- a/psi/zfimscale.c
+++ b/psi/zfimscale.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfjbig2.c b/psi/zfjbig2.c
index fb569d57..055463b8 100644
--- a/psi/zfjbig2.c
+++ b/psi/zfjbig2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfjpx.c b/psi/zfjpx.c
index e2fffbad..8b612659 100644
--- a/psi/zfjpx.c
+++ b/psi/zfjpx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfmd5.c b/psi/zfmd5.c
index ad3338f0..516c9195 100644
--- a/psi/zfmd5.c
+++ b/psi/zfmd5.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfont.c b/psi/zfont.c
index 743e914a..5d7dd15f 100644
--- a/psi/zfont.c
+++ b/psi/zfont.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -41,8 +41,11 @@ static int setup_unicode_decoder(i_ctx_t *i_ctx_p, ref *Decoding);
bool
zfont_mark_glyph_name(const gs_memory_t *mem, gs_glyph glyph, void *ignore_data)
{
- return (glyph >= gs_c_min_std_encoding_glyph || glyph == GS_NO_GLYPH ? false :
- name_mark_index(mem, (uint) glyph));
+ if (glyph == GS_NO_GLYPH)
+ return false;
+ if (glyph >= gs_c_min_std_encoding_glyph)
+ return false;
+ return name_mark_index(mem, (uint) glyph);
}
/* Get a global glyph code. */
diff --git a/psi/zfont0.c b/psi/zfont0.c
index db7f2591..31c89d0a 100644
--- a/psi/zfont0.c
+++ b/psi/zfont0.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfont1.c b/psi/zfont1.c
index 7043d20c..61e1ff4b 100644
--- a/psi/zfont1.c
+++ b/psi/zfont1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfont2.c b/psi/zfont2.c
index 6e424c9d..db7b81e7 100644
--- a/psi/zfont2.c
+++ b/psi/zfont2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfont32.c b/psi/zfont32.c
index a7890da9..a8780515 100644
--- a/psi/zfont32.c
+++ b/psi/zfont32.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfont42.c b/psi/zfont42.c
index ef33f669..7bc2b4c5 100644
--- a/psi/zfont42.c
+++ b/psi/zfont42.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfontenum.c b/psi/zfontenum.c
index fa60f3b6..97101a80 100644
--- a/psi/zfontenum.c
+++ b/psi/zfontenum.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zform.c b/psi/zform.c
index 5cc8a296..3c00b5a5 100644
--- a/psi/zform.c
+++ b/psi/zform.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfproc.c b/psi/zfproc.c
index 8d9d7731..620e5bdb 100644
--- a/psi/zfproc.c
+++ b/psi/zfproc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfrsd.c b/psi/zfrsd.c
index b9641515..3fa1d92e 100644
--- a/psi/zfrsd.c
+++ b/psi/zfrsd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfrsd.h b/psi/zfrsd.h
index f52dea8d..9777e653 100644
--- a/psi/zfrsd.h
+++ b/psi/zfrsd.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfsample.c b/psi/zfsample.c
index aa92c010..29080940 100644
--- a/psi/zfsample.c
+++ b/psi/zfsample.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -712,7 +712,7 @@ int make_sampled_function(i_ctx_t * i_ctx_p, ref *arr, ref *pproc, gs_function_t
fail:
gs_function_Sd_free_params(&params, imemory);
- return (code < 0 ? code : gs_note_error(gs_error_rangecheck));
+ return code;
}
/* ------ Initialization procedure ------ */
diff --git a/psi/zfsha2.c b/psi/zfsha2.c
index d2b0d36d..816607be 100644
--- a/psi/zfsha2.c
+++ b/psi/zfsha2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfunc.c b/psi/zfunc.c
index 04081add..091549bf 100644
--- a/psi/zfunc.c
+++ b/psi/zfunc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfunc.h b/psi/zfunc.h
index 67c7396b..1fef90d9 100644
--- a/psi/zfunc.h
+++ b/psi/zfunc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfunc0.c b/psi/zfunc0.c
index e9a9b4b9..9a100207 100644
--- a/psi/zfunc0.c
+++ b/psi/zfunc0.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfunc3.c b/psi/zfunc3.c
index 55e2e6af..c5179b03 100644
--- a/psi/zfunc3.c
+++ b/psi/zfunc3.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zfunc4.c b/psi/zfunc4.c
index 99cdde67..97143528 100644
--- a/psi/zfunc4.c
+++ b/psi/zfunc4.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -493,7 +493,7 @@ gs_build_function_4(i_ctx_t *i_ctx_p, const ref *op, const gs_function_params_t
/* free_params will free the ops string */
fail:
gs_function_PtCr_free_params(&params, mem);
- return (code < 0 ? code : gs_note_error(gs_error_rangecheck));
+ return code;
}
int make_type4_function(i_ctx_t * i_ctx_p, ref *arr, ref *pproc, gs_function_t **func)
diff --git a/psi/zfzlib.c b/psi/zfzlib.c
index c5eb04c8..bc5a74b5 100644
--- a/psi/zfzlib.c
+++ b/psi/zfzlib.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zgeneric.c b/psi/zgeneric.c
index 6169e99b..822d23fb 100644
--- a/psi/zgeneric.c
+++ b/psi/zgeneric.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zgstate.c b/psi/zgstate.c
index 18eb21f4..4910a7ec 100644
--- a/psi/zgstate.c
+++ b/psi/zgstate.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -106,7 +106,7 @@ zcurrent_uint(i_ctx_t *i_ctx_p, uint (*current_proc)(const gs_gstate *))
/* "Client" procedures */
static void *gs_istate_alloc(gs_memory_t * mem);
static int gs_istate_copy(void *to, const void *from);
-static void gs_istate_free(void *old, gs_memory_t * mem);
+static void gs_istate_free(void *old, gs_memory_t * mem, gs_gstate *pgs);
static const gs_gstate_client_procs istate_procs = {
gs_istate_alloc,
gs_istate_copy,
@@ -125,6 +125,9 @@ int_gstate_alloc(const gs_dual_memory_t * dmem)
gs_ref_memory_t *gmem = dmem->space_global;
gs_gstate *pgs = gs_gstate_alloc((gs_memory_t *)lmem);
+ if (pgs == NULL)
+ return NULL;
+
iigs = gs_alloc_struct((gs_memory_t *)lmem, int_gstate, &st_int_gstate,
"int_gstate_alloc(int_gstate)");
if (iigs == NULL)
@@ -690,7 +693,7 @@ gs_istate_copy(void *to, const void *from)
/* Free the interpreter's part of a graphics state. */
static void
-gs_istate_free(void *old, gs_memory_t * mem)
+gs_istate_free(void *old, gs_memory_t * mem, gs_gstate *pgs)
{
gs_free_object(mem, old, "int_grestore");
}
diff --git a/psi/zht.c b/psi/zht.c
index efd5519c..9eb591b3 100644
--- a/psi/zht.c
+++ b/psi/zht.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zht1.c b/psi/zht1.c
index ca68165a..a2a4dbaa 100644
--- a/psi/zht1.c
+++ b/psi/zht1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zht2.c b/psi/zht2.c
index 9dd7e821..1b7337fc 100644
--- a/psi/zht2.c
+++ b/psi/zht2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -48,14 +48,14 @@ static int dict_threshold2_params(const ref *, gs_threshold2_halftone *,
* pointer and a string length.
*/
int
-gs_get_colorname_string(const gs_memory_t *mem, gs_separation_name colorname_index,
+gs_get_colorname_string(gs_gstate *pgs, gs_separation_name colorname_index,
unsigned char **ppstr, unsigned int *pname_size)
{
ref nref;
- name_index_ref(mem, colorname_index, &nref);
- name_string_ref(mem, &nref, &nref);
- return obj_string_data(mem, &nref, (const unsigned char**) ppstr, pname_size);
+ name_index_ref(pgs->memory, colorname_index, &nref);
+ name_string_ref(pgs->memory, &nref, &nref);
+ return obj_string_data(pgs->memory, &nref, (const unsigned char**) ppstr, pname_size);
}
/* Dummy spot function */
@@ -141,7 +141,7 @@ zsethalftone5(i_ctx_t *i_ctx_p)
/* Get the name of the component verify that we will use it. */
cname = name_index(mem, &rvalue[0]);
- code = gs_get_colorname_string(mem, cname, &pname, &name_size);
+ code = gs_get_colorname_string(pgs, cname, &pname, &name_size);
if (code < 0)
break;
colorant_number = gs_cname_to_colorant_number(pgs, pname, name_size,
@@ -205,7 +205,7 @@ zsethalftone5(i_ctx_t *i_ctx_p)
/* Get the name of the component */
cname = name_index(mem, &rvalue[0]);
- code = gs_get_colorname_string(mem, cname, &pname, &name_size);
+ code = gs_get_colorname_string(pgs, cname, &pname, &name_size);
if (code < 0)
break;
colorant_number = gs_cname_to_colorant_number(pgs, pname, name_size,
@@ -273,7 +273,7 @@ zsethalftone5(i_ctx_t *i_ctx_p)
/* Get the name of the component and verify that we will use it. */
cname = name_index(mem, &rvalue[0]);
- code = gs_get_colorname_string(mem, cname, &pname, &name_size);
+ code = gs_get_colorname_string(pgs, cname, &pname, &name_size);
if (code < 0)
break;
colorant_number = gs_cname_to_colorant_number(pgs, pname, name_size,
diff --git a/psi/zht2.h b/psi/zht2.h
index 40cf4cd1..cbbbce5b 100644
--- a/psi/zht2.h
+++ b/psi/zht2.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -25,7 +25,7 @@
* This routine translates a gs_separation_name value into a character string
* pointer and a string length.
*/
-int gs_get_colorname_string(const gs_memory_t *mem,
+int gs_get_colorname_string(gs_gstate *pgs,
gs_separation_name colorname_index,
unsigned char **ppstr,
unsigned int *pname_size);
diff --git a/psi/zicc.c b/psi/zicc.c
index 880f4976..8922d458 100644
--- a/psi/zicc.c
+++ b/psi/zicc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -362,8 +362,8 @@ zset_outputintent(i_ctx_t * i_ctx_p)
of the proper Device profile in the icc manager, again, unless someone
has explicitly set this default profile. */
- dev_comps = dev_profile->device_profile[0]->num_comps;
- index = gsicc_get_default_type(dev_profile->device_profile[0]);
+ dev_comps = dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]->num_comps;
+ index = gsicc_get_default_type(dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE]);
if (ncomps == dev_comps && index < gs_color_space_index_DevicePixel) {
/* The OI profile is the same type as the profile for the device and a
"default" profile for the device was not externally set. So we go
@@ -372,7 +372,7 @@ zset_outputintent(i_ctx_t * i_ctx_p)
use a keyword of OIProfile for the user/device parameter to indicate
its usage. Also, note conflicts if one is setting object dependent
color management */
- rc_assign(dev_profile->device_profile[0], picc_profile,
+ rc_assign(dev_profile->device_profile[GS_DEFAULT_DEVICE_PROFILE], picc_profile,
"zset_outputintent");
if_debug0m(gs_debug_flag_icc, imemory, "[icc] OutputIntent used for device profile\n");
} else {
diff --git a/psi/zicc.h b/psi/zicc.h
index 97b5232e..acb94153 100644
--- a/psi/zicc.h
+++ b/psi/zicc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zimage.c b/psi/zimage.c
index 01c6fa46..c2d31611 100644
--- a/psi/zimage.c
+++ b/psi/zimage.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zimage3.c b/psi/zimage3.c
index 230c5a93..2747edb8 100644
--- a/psi/zimage3.c
+++ b/psi/zimage3.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ziodev.c b/psi/ziodev.c
index 2570d81e..7c829bc3 100644
--- a/psi/ziodev.c
+++ b/psi/ziodev.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -92,6 +92,8 @@ zgetiodevice(i_ctx_t *i_ctx_p)
return 0;
}
+#define COMPILE_TIME_ASSERT(A,B) typedef char A[(B) ? 1 : -1]
+
/* ------ %lineedit and %statementedit ------ */
/* <file> <bool> <int> <string> .filelineedit <file> */
@@ -109,6 +111,9 @@ zgetiodevice(i_ctx_t *i_ctx_p)
* This could be increased by storing the input line in something
* other than a PostScript string.
*/
+COMPILE_TIME_ASSERT(STATEMENTEDIT_SIZE_CHECK, STATEMENTEDIT_BUF_SIZE <= max_string_size);
+COMPILE_TIME_ASSERT(LINEEDIT_BUF_SIZE_CHECK, LINEEDIT_BUF_SIZE <= max_string_size);
+
int
zfilelineedit(i_ctx_t *i_ctx_p)
{
@@ -139,8 +144,6 @@ zfilelineedit(i_ctx_t *i_ctx_p)
/* extend string */
initial_buf_size = statement ? STATEMENTEDIT_BUF_SIZE : LINEEDIT_BUF_SIZE;
- if (initial_buf_size > max_string_size)
- return_error(gs_error_limitcheck);
if (!buf->data || (buf->size < initial_buf_size)) {
count = 0;
buf->data = gs_alloc_string(imemory_system, initial_buf_size,
diff --git a/psi/ziodev2.c b/psi/ziodev2.c
index ff6724f9..1eceafd2 100644
--- a/psi/ziodev2.c
+++ b/psi/ziodev2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ziodevsc.c b/psi/ziodevsc.c
index 203adcfa..1bba4f4b 100644
--- a/psi/ziodevsc.c
+++ b/psi/ziodevsc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -107,7 +107,7 @@ s_stdin_read_process(stream_state * st, stream_cursor_read * ignore_pr,
/* do the callout */
if (core->stdin_fn)
count = (*core->stdin_fn)
- (core->caller_handle, (char *)pw->ptr + 1,
+ (core->std_caller_handle, (char *)pw->ptr + 1,
core->stdin_is_interactive ? 1 : wcount);
else
count = gp_stdin_read((char *)pw->ptr + 1, wcount,
@@ -196,7 +196,7 @@ s_stdout_write_process(stream_state * st, stream_cursor_read *pr,
if (count == 0)
return 0;
written = outwrite(st->memory, (const char *)pr->ptr + 1, count);
- if (written < count)
+ if (written != count)
return ERRC;
pr->ptr += written;
return 0;
diff --git a/psi/zmath.c b/psi/zmath.c
index d6ecae23..518424f2 100644
--- a/psi/zmath.c
+++ b/psi/zmath.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -157,11 +157,11 @@ zexp(i_ctx_t *i_ctx_p)
result = 1.0; /* match Adobe; can't rely on C library */
else
result = pow(args[0], args[1]);
- make_real(op - 1, result);
#ifdef HAVE_ISINF
if (isinf((op - 1)->value.realval))
return_error(gs_error_undefinedresult);
#endif
+ make_real(op - 1, result);
pop(1);
return 0;
}
diff --git a/psi/zmatrix.c b/psi/zmatrix.c
index abb7b0b3..154f7105 100644
--- a/psi/zmatrix.c
+++ b/psi/zmatrix.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zmedia2.c b/psi/zmedia2.c
index eb65dda7..94da7327 100644
--- a/psi/zmedia2.c
+++ b/psi/zmedia2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zmisc.c b/psi/zmisc.c
index 0eb86b52..196b40d5 100644
--- a/psi/zmisc.c
+++ b/psi/zmisc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zmisc1.c b/psi/zmisc1.c
index 958aac0c..1ab4bbc0 100644
--- a/psi/zmisc1.c
+++ b/psi/zmisc1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zmisc2.c b/psi/zmisc2.c
index 3c0ed879..c47ef793 100644
--- a/psi/zmisc2.c
+++ b/psi/zmisc2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zmisc3.c b/psi/zmisc3.c
index b42be439..b962d61b 100644
--- a/psi/zmisc3.c
+++ b/psi/zmisc3.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zncdummy.c b/psi/zncdummy.c
index 87a7fa68..e7a98511 100644
--- a/psi/zncdummy.c
+++ b/psi/zncdummy.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zpacked.c b/psi/zpacked.c
index 7dafe638..3171b44f 100644
--- a/psi/zpacked.c
+++ b/psi/zpacked.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zpaint.c b/psi/zpaint.c
index 3251c1be..8834a444 100644
--- a/psi/zpaint.c
+++ b/psi/zpaint.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zpath.c b/psi/zpath.c
index 1e7bf28f..10aceaa1 100644
--- a/psi/zpath.c
+++ b/psi/zpath.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zpath1.c b/psi/zpath1.c
index 1b5f794f..ab617a7a 100644
--- a/psi/zpath1.c
+++ b/psi/zpath1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zpcolor.c b/psi/zpcolor.c
index 4f8b10cd..483d22e4 100644
--- a/psi/zpcolor.c
+++ b/psi/zpcolor.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -159,12 +159,12 @@ zbuildpattern1(i_ctx_t *i_ctx_p)
code = int_pattern_alloc(&pdata, op1, imemory);
if (code < 0)
return code;
- templat.client_data = pdata;
code = gs_makepattern(&cc_instance, &templat, &mat, igs, imemory);
if (code < 0) {
ifree_object(pdata, "int_pattern");
return code;
}
+ cc_instance.pattern->client_data = pdata;
make_istruct(op, a_readonly, cc_instance.pattern);
return code;
}
@@ -200,7 +200,7 @@ pattern_paint_prepare(i_ctx_t *i_ctx_p)
gs_gstate *pgs = igs;
gs_pattern1_instance_t *pinst =
(gs_pattern1_instance_t *)gs_currentcolor(pgs)->pattern;
- ref *pdict = &((int_pattern *) pinst->templat.client_data)->dict;
+ ref *pdict = &((int_pattern *) pinst->client_data)->dict;
gx_device_forward *pdev = NULL;
gx_device *cdev = gs_currentdevice_inline(igs), *new_dev = NULL;
int code;
diff --git a/psi/zpdf_r6.c b/psi/zpdf_r6.c
index e2f1a711..a958fdb2 100644
--- a/psi/zpdf_r6.c
+++ b/psi/zpdf_r6.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -152,6 +152,8 @@ zcheck_r6_password(i_ctx_t * i_ctx_p)
return_error(gs_error_undefined);
if (!r_has_type(Oref, t_string))
return_error(gs_error_typecheck);
+ if (r_size(Oref) < 48)
+ return_error(gs_error_invalidaccess);
code = dict_find_string(CryptDict, "OE", &OEref);
if (code < 0)
@@ -160,6 +162,8 @@ zcheck_r6_password(i_ctx_t * i_ctx_p)
return_error(gs_error_undefined);
if (!r_has_type(OEref, t_string))
return_error(gs_error_typecheck);
+ if (r_size(OEref) < 32)
+ return_error(gs_error_invalidaccess);
code = dict_find_string(CryptDict, "U", &Uref);
if (code < 0)
@@ -168,6 +172,8 @@ zcheck_r6_password(i_ctx_t * i_ctx_p)
return_error(gs_error_undefined);
if (!r_has_type(Uref, t_string))
return_error(gs_error_typecheck);
+ if (r_size(Uref) < 48)
+ return_error(gs_error_invalidaccess);
code = dict_find_string(CryptDict, "UE", &UEref);
if (code < 0)
@@ -176,6 +182,8 @@ zcheck_r6_password(i_ctx_t * i_ctx_p)
return_error(gs_error_undefined);
if (!r_has_type(UEref, t_string))
return_error(gs_error_typecheck);
+ if (r_size(UEref) < 32)
+ return_error(gs_error_invalidaccess);
pop(2);
op = osp;
diff --git a/psi/zpdfops.c b/psi/zpdfops.c
index f110915d..0e896eb4 100644
--- a/psi/zpdfops.c
+++ b/psi/zpdfops.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zrelbit.c b/psi/zrelbit.c
index 9bc7fd1a..cade486f 100644
--- a/psi/zrelbit.c
+++ b/psi/zrelbit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zshade.c b/psi/zshade.c
index 8bc92c77..d468bdba 100644
--- a/psi/zshade.c
+++ b/psi/zshade.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -106,7 +106,6 @@ zbuildshadingpattern(i_ctx_t *i_ctx_p)
(code = int_pattern_alloc(&pdata, op2, imemory)) < 0
)
return_error((code < 0 ? code : gs_error_rangecheck));
- templat.client_data = pdata;
code = gs_make_pattern(&cc_instance,
(const gs_pattern_template_t *)&templat,
&mat, igs, imemory);
@@ -114,6 +113,7 @@ zbuildshadingpattern(i_ctx_t *i_ctx_p)
ifree_object(pdata, "int_pattern");
return code;
}
+ cc_instance.pattern->client_data = pdata;
make_istruct(op - 1, a_readonly, cc_instance.pattern);
pop(1);
return code;
diff --git a/psi/zstack.c b/psi/zstack.c
index 11c9069b..2f2f0db9 100644
--- a/psi/zstack.c
+++ b/psi/zstack.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zstring.c b/psi/zstring.c
index fac72fa8..58e1af2b 100644
--- a/psi/zstring.c
+++ b/psi/zstring.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -142,13 +142,18 @@ search_impl(i_ctx_t *i_ctx_p, bool forward)
return 0;
found:
op->tas.type_attrs = op1->tas.type_attrs;
- op->value.bytes = ptr;
- r_set_size(op, size);
+ op->value.bytes = ptr; /* match */
+ op->tas.rsize = size; /* match */
push(2);
- op[-1] = *op1;
- r_set_size(op - 1, ptr - op[-1].value.bytes);
- op1->value.bytes = ptr + size;
- r_set_size(op1, count + (!forward ? (size - 1) : 0));
+ op[-1] = *op1; /* pre */
+ op[-3].value.bytes = ptr + size; /* post */
+ if (forward) {
+ op[-1].tas.rsize = ptr - op[-1].value.bytes; /* pre */
+ op[-3].tas.rsize = count; /* post */
+ } else {
+ op[-1].tas.rsize = count; /* pre */
+ op[-3].tas.rsize -= count + size; /* post */
+ }
make_true(op);
return 0;
}
diff --git a/psi/zsysvm.c b/psi/zsysvm.c
index ba63c383..0abaa665 100644
--- a/psi/zsysvm.c
+++ b/psi/zsysvm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ztoken.c b/psi/ztoken.c
index d15442eb..de7b2b05 100644
--- a/psi/ztoken.c
+++ b/psi/ztoken.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ztrans.c b/psi/ztrans.c
index 2933e37a..4a26bdd4 100644
--- a/psi/ztrans.c
+++ b/psi/ztrans.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -41,20 +41,6 @@
/* ------ Utilities ------ */
-static int
-set_float_value(i_ctx_t *i_ctx_p, int (*set_value)(gs_gstate *, double))
-{
- os_ptr op = osp;
- double value;
- int code;
-
- if (real_param(op, &value) < 0)
- return_op_typecheck(op);
- if ((code = set_value(igs, value)) < 0)
- return code;
- pop(1);
- return 0;
-}
static int
current_float_value(i_ctx_t *i_ctx_p,
@@ -123,34 +109,6 @@ zcurrentblendmode(i_ctx_t *i_ctx_p)
return 0;
}
-/* <0..1> .setopacityalpha - */
-static int
-zsetopacityalpha(i_ctx_t *i_ctx_p)
-{
- return set_float_value(i_ctx_p, gs_setopacityalpha);
-}
-
-/* - .currentopacityalpha <0..1> */
-static int
-zcurrentopacityalpha(i_ctx_t *i_ctx_p)
-{
- return current_float_value(i_ctx_p, gs_currentopacityalpha);
-}
-
-/* <0..1> .setshapealpha - */
-static int
-zsetshapealpha(i_ctx_t *i_ctx_p)
-{
- return set_float_value(i_ctx_p, gs_setshapealpha);
-}
-
-/* - .currentshapealpha <0..1> */
-static int
-zcurrentshapealpha(i_ctx_t *i_ctx_p)
-{
- return current_float_value(i_ctx_p, gs_currentshapealpha);
-}
-
/* <bool> .settextknockout - */
static int
zsettextknockout(i_ctx_t *i_ctx_p)
@@ -216,7 +174,7 @@ static int common_transparency_group(i_ctx_t *i_ctx_p, pdf14_compositor_operatio
check_type(*dop, t_dictionary);
check_dict_read(*dop);
- gs_trans_group_params_init(&params);
+ gs_trans_group_params_init(&params, 1.0);
if ((code = dict_bool_param(dop, "Isolated", false, &params.Isolated)) < 0 ||
(code = dict_bool_param(dop, "Knockout", false, &params.Knockout)) < 0 ||
(code = dict_bool_param(dop, ".image_with_SMask", false, &params.image_with_SMask)) < 0
@@ -245,6 +203,15 @@ static int common_transparency_group(i_ctx_t *i_ctx_p, pdf14_compositor_operatio
params.ColorSpace = NULL;
}
}
+
+ if (gs_getalphaisshape(igs)) {
+ params.group_shape = gs_getfillconstantalpha(igs);
+ params.group_opacity = 1.0;
+ } else {
+ params.group_opacity = gs_getfillconstantalpha(igs);
+ params.group_shape = 1.0;
+ }
+
code = gs_begin_transparency_group(igs, &params, &bbox, group_type);
if (code < 0)
return code;
@@ -508,6 +475,9 @@ zpushpdf14devicefilter(i_ctx_t *i_ctx_p)
gx_device *cdev = gs_currentdevice_inline(igs);
check_type(*op, t_integer);
+ if (dev_proc(cdev, dev_spec_op)(cdev, gxdso_is_pdf14_device, NULL, 0) > 0)
+ return 0; /* ignore push_device if already is pdf14 device */
+
/* Bug 698087: In case some program uses our .pushpdf14devicefilter make */
/* sure that the device knows that we are using the pdf14 */
/* transparency. Note this will close and re-open the device */
@@ -528,8 +498,6 @@ zpushpdf14devicefilter(i_ctx_t *i_ctx_p)
if (cdev->is_open) {
if ((code = gs_closedevice((gx_device *)cdev)) < 0)
return code;
- if (dev_proc(cdev, dev_spec_op)(cdev, gxdso_is_pdf14_device, NULL, 0) > 0)
- pdf14_disable_device(cdev); /* should already be disabled (bug 698306) */
}
if ((code = gs_opendevice((gx_device *)cdev)) < 0)
return code;
@@ -674,10 +642,6 @@ zcurrentSMask(i_ctx_t *i_ctx_p)
const op_def ztrans1_op_defs[] = {
{"1.setblendmode", zsetblendmode},
{"0.currentblendmode", zcurrentblendmode},
- {"1.setopacityalpha", zsetopacityalpha},
- {"0.currentopacityalpha", zcurrentopacityalpha},
- {"1.setshapealpha", zsetshapealpha},
- {"0.currentshapealpha", zcurrentshapealpha},
{"1.settextknockout", zsettextknockout},
{"0.currenttextknockout", zcurrenttextknockout},
{"0.pushextendedgstate", zpushextendedgstate},
diff --git a/psi/ztrap.c b/psi/ztrap.c
index b73dd00c..31eb28ce 100644
--- a/psi/ztrap.c
+++ b/psi/ztrap.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/ztype.c b/psi/ztype.c
index 94e5e032..fab27017 100644
--- a/psi/ztype.c
+++ b/psi/ztype.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -281,7 +281,18 @@ zcvi(i_ctx_t *i_ctx_p)
}
if (!REAL_CAN_BE_INT(fval))
return_error(gs_error_rangecheck);
- make_int(op, (long)fval); /* truncates towards 0 */
+ if (sizeof(ps_int) != 4 && gs_currentcpsimode(imemory)) {
+ if ((double)fval > (double)MAX_PS_INT32) /* (double)0x7fffffff */
+ return_error(gs_error_rangecheck);
+ else if ((double)fval < (double)MIN_PS_INT32) /* (double)(int)0x80000000 */
+ return_error(gs_error_rangecheck);
+ else {
+ make_int(op, (ps_int) fval);
+ }
+ }
+ else
+ make_int(op, (ps_int) fval);
+
return 0;
}
@@ -386,7 +397,13 @@ zcvrs(i_ctx_t *i_ctx_p)
if (!REAL_CAN_BE_INT(fval))
return_error(gs_error_rangecheck);
- ival = (ulong) (long)fval;
+ ival = (ps_uint)fval;
+ if (sizeof(ps_int) != 4 && gs_currentcpsimode(imemory)) {
+ if ((double)fval > (double)MAX_PS_INT32) /* (double)0x7fffffff */
+ return_error(gs_error_rangecheck);
+ else if ((double)fval < (double)MIN_PS_INT32) /* (double)(int)0x80000000 */
+ return_error(gs_error_rangecheck);
+ }
} break;
case t__invalid:
return_error(gs_error_stackunderflow);
diff --git a/psi/zupath.c b/psi/zupath.c
index b02a3c0a..799471a0 100644
--- a/psi/zupath.c
+++ b/psi/zupath.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zusparam.c b/psi/zusparam.c
index c3d4a4b5..2ca0f4f9 100644
--- a/psi/zusparam.c
+++ b/psi/zusparam.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -58,6 +58,20 @@ typedef struct param_def_s {
param_def_common;
} param_def_t;
+typedef struct size_t_param_def_s {
+ param_def_common;
+ size_t min_value, max_value;
+ size_t (*current)(i_ctx_t *);
+ int (*set)(i_ctx_t *, size_t);
+} size_t_param_def_t;
+
+typedef struct i64_param_def_s {
+ param_def_common;
+ int64_t min_value, max_value;
+ int64_t (*current)(i_ctx_t *);
+ int (*set)(i_ctx_t *, int64_t);
+} i64_param_def_t;
+
typedef struct long_param_def_s {
param_def_common;
long min_value, max_value;
@@ -87,6 +101,10 @@ typedef struct string_param_def_s {
/* Define a parameter set (user or system). */
typedef struct param_set_s {
+ const size_t_param_def_t *size_t_defs;
+ uint size_t_count;
+ const i64_param_def_t *i64_defs;
+ uint i64_count;
const long_param_def_t *long_defs;
uint long_count;
const bool_param_def_t *bool_defs;
@@ -165,24 +183,34 @@ current_CurFontCache(i_ctx_t *i_ctx_p)
gs_cachestatus(ifont_dir, cstat);
return cstat[0];
}
-static long
+
+/* Even though size_t is unsigned, PostScript limits this to signed range */
+static size_t
current_MaxGlobalVM(i_ctx_t *i_ctx_p)
{
gs_memory_gc_status_t stat;
+ size_t val;
gs_memory_gc_status(iimemory_global, &stat);
+ /* RJW: This seems very supicious to me. I get that in CPSI
+ * mode the max_vm figure needs to be kept to 32bit mode, but
+ * surely clipping it should be correct, rather than truncating
+ * it? i.e. min(stat.max_vm, 0x7fffffff) */
if (gs_currentcpsimode(imemory))
return stat.max_vm & 0x7fffffff;
- else
- return stat.max_vm;
+ /* else clamp at the maximum positive value for the size_t size signed integer */
+ val = min(stat.max_vm, MAX_VM_THRESHOLD);
+ return val;
}
+
+/* Even though size_t is unsigned, PostScript limits this to signed range */
static int
-set_MaxGlobalVM(i_ctx_t *i_ctx_p, long val)
+set_MaxGlobalVM(i_ctx_t *i_ctx_p, size_t val)
{
gs_memory_gc_status_t stat;
gs_memory_gc_status(iimemory_global, &stat);
- stat.max_vm = max(val, 0);
+ stat.max_vm = val;
gs_memory_set_gc_status(iimemory_global, &stat);
return 0;
}
@@ -203,16 +231,19 @@ current_PageCount(i_ctx_t *i_ctx_p)
return 1000 + i_ctx_p->nv_page_count; /* Add 1000 to imitate NV memory */
}
+static const size_t_param_def_t system_size_t_params[] =
+{
+ /* Extensions */
+ {"MaxGlobalVM", MIN_VM_THRESHOLD, MAX_VM_THRESHOLD, current_MaxGlobalVM, set_MaxGlobalVM}
+};
+
static const long_param_def_t system_long_params[] =
{
{"BuildTime", min_long, max_long, current_BuildTime, NULL},
-{"MaxFontCache", 0, MAX_UINT_PARAM, current_MaxFontCache, set_MaxFontCache},
+ {"MaxFontCache", 0, MAX_UINT_PARAM, current_MaxFontCache, set_MaxFontCache},
{"CurFontCache", 0, MAX_UINT_PARAM, current_CurFontCache, NULL},
{"Revision", min_long, max_long, current_Revision, NULL},
- {"PageCount", min_long, max_long, current_PageCount, NULL},
-
- /* Extensions */
- {"MaxGlobalVM", 0, max_long, current_MaxGlobalVM, set_MaxGlobalVM}
+ {"PageCount", min_long, max_long, current_PageCount, NULL}
};
/* Boolean values */
@@ -249,6 +280,8 @@ static const string_param_def_t system_string_params[] =
/* The system parameter set */
static const param_set system_param_set =
{
+ system_size_t_params, countof(system_size_t_params),
+ NULL, 0, /* No i64 params for systemparams (yet) */
system_long_params, countof(system_long_params),
system_bool_params, countof(system_bool_params),
system_string_params, countof(system_string_params)
@@ -390,24 +423,31 @@ set_MaxExecStack(i_ctx_t *i_ctx_p, long val)
{
return ref_stack_set_max_count(&e_stack, val);
}
-static long
+static size_t
current_MaxLocalVM(i_ctx_t *i_ctx_p)
{
gs_memory_gc_status_t stat;
+ size_t val;
gs_memory_gc_status(iimemory_local, &stat);
+ /* RJW: This seems very supicious to me. I get that in CPSI
+ * mode the max_vm figure needs to be kept to 32bit mode, but
+ * surely clipping it should be correct, rather than truncating
+ * it? i.e. min(stat.max_vm, 0x7fffffff) */
if (gs_currentcpsimode(imemory))
return stat.max_vm & 0x7fffffff;
- else
- return stat.max_vm;
+ /* else clamp at the maximun positive value for the size_t size signed integer */
+ val = min(stat.max_vm, MAX_VM_THRESHOLD);
+ return val;
}
+/* Even though size_t is unsigned, PostScript limits this to signed range */
static int
-set_MaxLocalVM(i_ctx_t *i_ctx_p, long val)
+set_MaxLocalVM(i_ctx_t *i_ctx_p, size_t val)
{
gs_memory_gc_status_t stat;
gs_memory_gc_status(iimemory_local, &stat);
- stat.max_vm = max(val, 0);
+ stat.max_vm = val;
gs_memory_set_gc_status(iimemory_local, &stat);
return 0;
}
@@ -420,7 +460,7 @@ current_VMReclaim(i_ctx_t *i_ctx_p)
gs_memory_gc_status(iimemory_local, &lstat);
return (!gstat.enabled ? -2 : !lstat.enabled ? -1 : 0);
}
-static long
+static int64_t
current_VMThreshold(i_ctx_t *i_ctx_p)
{
gs_memory_gc_status_t stat;
@@ -570,6 +610,16 @@ set_lab_icc(i_ctx_t *i_ctx_p, gs_param_string * pval)
return gs_setlabicc(igs, pval);
}
+static const size_t_param_def_t user_size_t_params[] =
+{
+ {"MaxLocalVM", MIN_VM_THRESHOLD, MAX_VM_THRESHOLD, current_MaxLocalVM, set_MaxLocalVM}
+};
+
+static const i64_param_def_t user_i64_params[] =
+{
+ {"VMThreshold", -1, MAX_VM_THRESHOLD, current_VMThreshold, set_vm_threshold},
+};
+
static const long_param_def_t user_long_params[] =
{
{"JobTimeout", 0, MAX_UINT_PARAM,
@@ -584,12 +634,8 @@ static const long_param_def_t user_long_params[] =
current_MaxDictStack, set_MaxDictStack},
{"MaxExecStack", -1, max_long,
current_MaxExecStack, set_MaxExecStack},
- {"MaxLocalVM", 0, max_long,
- current_MaxLocalVM, set_MaxLocalVM},
{"VMReclaim", -2, 0,
current_VMReclaim, set_vm_reclaim},
- {"VMThreshold", -1, max_long,
- current_VMThreshold, set_vm_threshold},
{"WaitTimeout", 0, MAX_UINT_PARAM,
current_WaitTimeout, set_WaitTimeout},
/* Extensions */
@@ -685,6 +731,8 @@ static const bool_param_def_t user_bool_params[] =
/* The user parameter set */
static const param_set user_param_set =
{
+ user_size_t_params, countof(user_size_t_params),
+ user_i64_params, countof(user_i64_params),
user_long_params, countof(user_long_params),
user_bool_params, countof(user_bool_params),
user_string_params, countof(user_string_params)
@@ -763,6 +811,48 @@ setparams(i_ctx_t *i_ctx_p, gs_param_list * plist, const param_set * pset)
int code;
unsigned int i;
+ for (i = 0; i < pset->size_t_count; i++) {
+ const size_t_param_def_t *pdef = &pset->size_t_defs[i];
+ size_t val;
+
+ if (pdef->set == NULL)
+ continue;
+ code = param_read_size_t(plist, pdef->pname, &val);
+ switch (code) {
+ default: /* invalid */
+ return code;
+ case 1: /* missing */
+ break;
+ case 0:
+ if (val < pdef->min_value || val > pdef->max_value)
+ return_error(gs_error_rangecheck);
+ code = (*pdef->set)(i_ctx_p, val);
+ if (code < 0)
+ return code;
+ }
+ }
+
+ for (i = 0; i < pset->i64_count; i++) {
+ const i64_param_def_t *pdef = &pset->i64_defs[i];
+ int64_t val;
+
+ if (pdef->set == NULL)
+ continue;
+ code = param_read_i64(plist, pdef->pname, &val);
+ switch (code) {
+ default: /* invalid */
+ return code;
+ case 1: /* missing */
+ break;
+ case 0:
+ if (val < pdef->min_value || val > pdef->max_value)
+ return_error(gs_error_rangecheck);
+ code = (*pdef->set)(i_ctx_p, val);
+ if (code < 0)
+ return code;
+ }
+ }
+
for (i = 0; i < pset->long_count; i++) {
const long_param_def_t *pdef = &pset->long_defs[i];
long val;
@@ -837,6 +927,29 @@ current_param_list(i_ctx_t *i_ctx_p, const param_set * pset,
unsigned int i;
stack_param_list_write(&list, &o_stack, NULL, iimemory);
+
+ for (i = 0; i < pset->size_t_count; i++) {
+ const char *pname = pset->size_t_defs[i].pname;
+
+ if (pname_matches(pname, psref)) {
+ size_t val = (*pset->size_t_defs[i].current)(i_ctx_p);
+
+ code = param_write_size_t(plist, pname, &val);
+ if (code < 0)
+ return code;
+ }
+ }
+ for (i = 0; i < pset->i64_count; i++) {
+ const char *pname = pset->i64_defs[i].pname;
+
+ if (pname_matches(pname, psref)) {
+ int64_t val = (*pset->i64_defs[i].current)(i_ctx_p);
+
+ code = param_write_i64(plist, pname, &val);
+ if (code < 0)
+ return code;
+ }
+ }
for (i = 0; i < pset->long_count; i++) {
const char *pname = pset->long_defs[i].pname;
diff --git a/psi/zutf8.c b/psi/zutf8.c
index 79aec210..5e55c650 100644
--- a/psi/zutf8.c
+++ b/psi/zutf8.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zvmem.c b/psi/zvmem.c
index 5c0810f3..63dfe251 100644
--- a/psi/zvmem.c
+++ b/psi/zvmem.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -79,8 +79,8 @@ zsave(i_ctx_t *i_ctx_p)
ifree_object(vmsave, "zsave");
return_error(gs_error_VMerror);
}
- if_debug2m('u', imemory, "[u]vmsave 0x%lx, id = %lu\n",
- (ulong) vmsave, (ulong) sid);
+ if_debug2m('u', imemory, "[u]vmsave "PRI_INTPTR", id = %lu\n",
+ (intptr_t) vmsave, (ulong) sid);
code = gs_gsave_for_save(igs, &prev);
if (code < 0)
return code;
@@ -106,8 +106,8 @@ restore_check_save(i_ctx_t *i_ctx_p, alloc_save_t **asave)
if (code < 0)
return code;
- if_debug2m('u', imemory, "[u]vmrestore 0x%lx, id = %lu\n",
- (ulong) alloc_save_client_data(*asave),
+ if_debug2m('u', imemory, "[u]vmrestore "PRI_INTPTR", id = %lu\n",
+ (intptr_t) alloc_save_client_data(*asave),
(ulong) op->value.saveid);
if (I_VALIDATE_BEFORE_RESTORE)
ivalidate_clean_spaces(i_ctx_p);
diff --git a/psi/zvmem2.c b/psi/zvmem2.c
index a24c99fb..fe45c900 100644
--- a/psi/zvmem2.c
+++ b/psi/zvmem2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
@@ -26,8 +26,6 @@
/* Garbage collector control parameters. */
#define DEFAULT_VM_THRESHOLD_SMALL 100000
#define DEFAULT_VM_THRESHOLD_LARGE 8000000
-#define MIN_VM_THRESHOLD 1
-#define MAX_VM_THRESHOLD max_long
/* ------ Local/global VM control ------ */
@@ -75,17 +73,17 @@ zgcheck(i_ctx_t *i_ctx_p)
* This is implemented as a PostScript procedure that calls setuserparams.
*/
int
-set_vm_threshold(i_ctx_t *i_ctx_p, long val)
+set_vm_threshold(i_ctx_t *i_ctx_p, int64_t val)
{
if (val < -1)
return_error(gs_error_rangecheck);
else if (val == -1)
val = (gs_debug_c('.') ? DEFAULT_VM_THRESHOLD_SMALL :
DEFAULT_VM_THRESHOLD_LARGE);
- else if (val < MIN_VM_THRESHOLD)
- val = MIN_VM_THRESHOLD;
- else if (val > MAX_VM_THRESHOLD)
- val = MAX_VM_THRESHOLD;
+#if PSINT32BIT==1
+ else if (val > max_int)
+ val = max_int
+#endif
gs_memory_set_vm_threshold(idmemory->space_system, val);
gs_memory_set_vm_threshold(idmemory->space_global, val);
gs_memory_set_vm_threshold(idmemory->space_local, val);
diff --git a/psi/zwinutf8.c b/psi/zwinutf8.c
index 30a512d9..1db79818 100644
--- a/psi/zwinutf8.c
+++ b/psi/zwinutf8.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/Acrobat2Tiff/Acrobat2Tiff.sln b/toolbin/Acrobat2Tiff/Acrobat2Tiff.sln
index de3d9ba6..49ca8962 100644
--- a/toolbin/Acrobat2Tiff/Acrobat2Tiff.sln
+++ b/toolbin/Acrobat2Tiff/Acrobat2Tiff.sln
@@ -1,6 +1,8 @@

-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30104.148
+MinimumVisualStudioVersion = 10.0.40219.1
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Acrobat2Tiff", "Acrobat2Tiff\Acrobat2Tiff.vbproj", "{7A41EF6A-2A49-4018-94E7-CE144E33D39D}"
EndProject
Global
@@ -17,4 +19,7 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {9154FE35-6D39-44CF-B5F8-553507580CBC}
+ EndGlobalSection
EndGlobal
diff --git a/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vb b/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vb
index 286a81f7..6feba51e 100644
--- a/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vb
+++ b/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vb
@@ -15,8 +15,8 @@ Module Acrobat2Tiff
Console.WriteLine(" using [ -gray | -mono | -rgb | -cmyk ]")
Console.WriteLine(" Resolution defaults to 72dpi, but may be specified e.g. -r 300")
Console.WriteLine("")
- Console.WriteLine("Tested with Acrobat 9.0, will hopefully work with 7/8/10/11/DC too.")
- Console.WriteLine("Ensure you have no other Acrobat processes running, or the colorspace")
+ Console.WriteLine("Tested with Acrobat 9.0, will hopefully work with 7/8/10/11/DC too.")
+ Console.WriteLine("Ensure you have no other Acrobat processes running, or the colorspace")
Console.WriteLine("and Resolution of output images may be wrong.")
End Sub
@@ -45,10 +45,11 @@ Module Acrobat2Tiff
Dim i As Integer
Dim cspace As Integer
Dim infile As String
- Dim outfile As String
+ Dim outfile As String
+ Dim result As Integer
- ' Set defaults
- infile = ""
+ ' Set defaults
+ infile = ""
outfile = ""
res = 72
cspace = 1
@@ -95,14 +96,14 @@ Module Acrobat2Tiff
Return
End If
- 'Console.WriteLine("Input: '" & infile & "'")
- 'Console.WriteLine("Output: '" & outfile & "'")
- 'Console.WriteLine("Resolution: " & CStr(res))
- 'Console.WriteLine("CSpace: " & CStr(cspace))
+ Console.WriteLine("Input: '" & infile & "'")
+ Console.WriteLine("Output: '" & outfile & "'")
+ Console.WriteLine("Resolution: " & CStr(res))
+ Console.WriteLine("CSpace: " & CStr(cspace))
- ' Set the registry values
- setRegistryKeys("HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat\7.0\AVConversionFromPDF\cSettings", "TIFF", res, cspace)
- setRegistryKeys("HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat\8.0\AVConversionFromPDF\cSettings", "TIFF", res, cspace)
+ ' Set the registry values
+ setRegistryKeys("HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat\7.0\AVConversionFromPDF\cSettings", "TIFF", res, cspace)
+ setRegistryKeys("HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat\8.0\AVConversionFromPDF\cSettings", "TIFF", res, cspace)
setRegistryKeys("HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat\9.0\AVConversionFromPDF\cSettings", "TIFF", res, cspace)
setRegistryKeys("HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat\10.0\AVConversionFromPDF\cSettings", "TIFF", res, cspace)
setRegistryKeys("HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat\11.0\AVConversionFromPDF\cSettings", "TIFF", res, cspace)
@@ -114,17 +115,19 @@ Module Acrobat2Tiff
' Create Acrobat Document object
PDDoc = CreateObject("AcroExch.PDDoc")
- ' Open PDF file
- PDDoc.Open(infile)
+ ' Open PDF file
+ result = PDDoc.Open(infile)
- ' Hide Acrobat application so everything is done in silent mode
- PDFApp.Hide()
+ ' Hide Acrobat application so everything is done in silent mode
+ 'PDFApp.Hide()
- ' Create Javascript bridge object
- JSObj = PDDoc.GetJSObject()
+ ' Create Javascript bridge object
- ' Create Tiff file
- JSObj.SaveAs(outfile, "com.adobe.acrobat.tiff")
+ JSObj = PDDoc.GetJSObject
+ result = PDDoc.GetNumPages
+
+ ' Create Tiff file
+ JSObj.SaveAs(outfile, "com.adobe.acrobat.tiff")
PDDoc.Close()
PDFApp.CloseAllDocs()
diff --git a/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vbproj b/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vbproj
index 2d53c902..788eca7a 100644
--- a/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vbproj
+++ b/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vbproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="Current">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -11,6 +11,11 @@
<RootNamespace>Acrobat2Tiff</RootNamespace>
<AssemblyName>Acrobat2Tiff</AssemblyName>
<MyType>Console</MyType>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <UpgradeBackupLocation>
+ </UpgradeBackupLocation>
+ <OldToolsVersion>2.0</OldToolsVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@@ -19,7 +24,7 @@
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>Acrobat2Tiff.xml</DocumentationFile>
- <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
+ <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022,42353,42354,42355</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
@@ -28,7 +33,7 @@
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>Acrobat2Tiff.xml</DocumentationFile>
- <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
+ <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022,42353,42354,42355</NoWarn>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
@@ -50,6 +55,7 @@
<Compile Include="Acrobat2Tiff\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
+ <DesignTime>True</DesignTime>
</Compile>
<Compile Include="Acrobat2Tiff\Resources.Designer.vb">
<AutoGen>True</AutoGen>
@@ -91,6 +97,9 @@
<Isolated>False</Isolated>
</COMReference>
</ItemGroup>
+ <ItemGroup>
+ <Folder Include="My Project\" />
+ </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Application.Designer.vb b/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Application.Designer.vb
index df166d72..88dd01c7 100644
--- a/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Application.Designer.vb
+++ b/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Application.Designer.vb
@@ -1,7 +1,7 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
-' Runtime Version:2.0.50727.3603
+' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
diff --git a/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Resources.Designer.vb b/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Resources.Designer.vb
index 5ebe3541..e019990c 100644
--- a/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Resources.Designer.vb
+++ b/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Resources.Designer.vb
@@ -1,7 +1,7 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
-' Runtime Version:2.0.50727.3603
+' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
@@ -11,6 +11,7 @@
Option Strict On
Option Explicit On
+Imports System
Namespace My.Resources
@@ -18,10 +19,10 @@ Namespace My.Resources
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
- '<summary>
- ' A strongly-typed resource class, for looking up localized strings, etc.
- '</summary>
- <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0"), _
+ '''<summary>
+ ''' A strongly-typed resource class, for looking up localized strings, etc.
+ '''</summary>
+ <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
@@ -31,9 +32,9 @@ Namespace My.Resources
Private resourceCulture As Global.System.Globalization.CultureInfo
- '<summary>
- ' Returns the cached ResourceManager instance used by this class.
- '</summary>
+ '''<summary>
+ ''' Returns the cached ResourceManager instance used by this class.
+ '''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
@@ -45,16 +46,16 @@ Namespace My.Resources
End Get
End Property
- '<summary>
- ' Overrides the current thread's CurrentUICulture property for all
- ' resource lookups using this strongly typed resource class.
- '</summary>
+ '''<summary>
+ ''' Overrides the current thread's CurrentUICulture property for all
+ ''' resource lookups using this strongly typed resource class.
+ '''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
- Set(ByVal value As Global.System.Globalization.CultureInfo)
+ Set
resourceCulture = value
End Set
End Property
diff --git a/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Settings.Designer.vb b/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Settings.Designer.vb
index 17ea681f..6ef3ea50 100644
--- a/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Settings.Designer.vb
+++ b/toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Settings.Designer.vb
@@ -1,7 +1,7 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
-' Runtime Version:2.0.50727.3603
+' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
@@ -13,61 +13,18 @@ Option Explicit On
Namespace My
-
+
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
- Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0"), _
- Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
- Partial Friend NotInheritable Class MySettings
+ Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.5.0.0")> _
+ Partial Friend NotInheritable Class Settings
Inherits Global.System.Configuration.ApplicationSettingsBase
- Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)
+ Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings)
-#Region "My.Settings Auto-Save Functionality"
-#If _MyType = "WindowsForms" Then
- Private Shared addedHandler As Boolean
-
- Private Shared addedHandlerLockObject As New Object
-
- <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
- Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
- If My.Application.SaveMySettingsOnExit Then
- My.Settings.Save()
- End If
- End Sub
-#End If
-#End Region
-
- Public Shared ReadOnly Property [Default]() As MySettings
+ Public Shared ReadOnly Property [Default]() As Settings
Get
-
-#If _MyType = "WindowsForms" Then
- If Not addedHandler Then
- SyncLock addedHandlerLockObject
- If Not addedHandler Then
- AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
- addedHandler = True
- End If
- End SyncLock
- End If
-#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
-
-Namespace My
-
- <Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
- Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
- Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
- Friend Module MySettingsProperty
-
- <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
- Friend ReadOnly Property Settings() As Global.Acrobat2Tiff.My.MySettings
- Get
- Return Global.Acrobat2Tiff.My.MySettings.Default
- End Get
- End Property
- End Module
-End Namespace
diff --git a/toolbin/GenSubstCID.ps b/toolbin/GenSubstCID.ps
index 59863df3..12fb96ca 100644
--- a/toolbin/GenSubstCID.ps
+++ b/toolbin/GenSubstCID.ps
Binary files differ
diff --git a/toolbin/afmutil.py b/toolbin/afmutil.py
index e4856f69..375380a1 100755
--- a/toolbin/afmutil.py
+++ b/toolbin/afmutil.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-## Copyright (C) 2001-2019 Artifex Software, Inc.
+## Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/bmpcmp.c b/toolbin/bmpcmp.c
index 1ab6b64a..78b7ef7b 100644
--- a/toolbin/bmpcmp.c
+++ b/toolbin/bmpcmp.c
@@ -16,6 +16,14 @@
#include <png.h>
#endif
+#ifdef HAVE_LIBTIFF
+#include "tiffio.h"
+#endif
+
+#ifdef COLOR_MANAGED
+#include "lcms2mt.h"
+#endif
+
#ifndef BETTER_CMYK
#define BETTER_CMYK 1
#endif
@@ -85,17 +93,21 @@ typedef struct
int bpp;
/* Output BMP sizes */
BBox output_size;
+ /* lab flag */
+ int lab;
} Params;
typedef struct ImageReader
{
FILE *file;
+ const char* file_name;
void *(*read)(struct ImageReader *,
int *w,
int *h,
int *s,
int *bpp,
- int *cmyk);
+ int *cmyk,
+ void **lab);
} ImageReader;
/*
@@ -125,6 +137,17 @@ static void *Malloc(size_t size) {
return block;
}
+static void* Calloc(size_t size) {
+ void* block;
+
+ block = calloc(size, 1);
+ if (block == NULL) {
+ fprintf(stderr, "bmpcmp: Failed to calloc %u bytes\n", (unsigned int)size);
+ exit(EXIT_FAILURE);
+ }
+ return block;
+}
+
static void putword(unsigned char *buf, int word) {
buf[0] = word;
buf[1] = (word>>8);
@@ -365,7 +388,8 @@ static void *bmp_read(ImageReader *im,
int *height,
int *span,
int *bpp,
- int *cmyk)
+ int *cmyk,
+ void **lab)
{
int offset;
long filelen, filepos;
@@ -374,6 +398,7 @@ static void *bmp_read(ImageReader *im,
/* No CMYK bmp support */
*cmyk = 0;
+ *lab = NULL;
filepos = ftell(im->file);
fseek(im->file, 0, SEEK_END);
@@ -445,12 +470,15 @@ static void *cups_read(ImageReader *im,
int *span,
int *bpp,
int *cmyk,
- int rev)
+ int rev,
+ void **lab)
{
unsigned char *data, *d;
int c, x, y, b, bpc, bpl;
int colspace;
+ *lab = NULL;
+
if (skip_bytes(im->file, 372) == EOF)
return NULL;
*width = get_int(im->file, rev);
@@ -526,9 +554,10 @@ static void *cups_read_le(ImageReader *im,
int *height,
int *span,
int *bpp,
- int *cmyk)
+ int *cmyk,
+ void **lab)
{
- return cups_read(im, width, height, span, bpp, cmyk, 0);
+ return cups_read(im, width, height, span, bpp, cmyk, 0, lab);
}
static void *cups_read_be(ImageReader *im,
@@ -536,9 +565,10 @@ static void *cups_read_be(ImageReader *im,
int *height,
int *span,
int *bpp,
- int *cmyk)
+ int *cmyk,
+ void **lab)
{
- return cups_read(im, width, height, span, bpp, cmyk, 1);
+ return cups_read(im, width, height, span, bpp, cmyk, 1, lab);
}
static void skip_to_eol(FILE *file)
@@ -955,12 +985,15 @@ static void *pnm_read(ImageReader *im,
int *height,
int *span,
int *bpp,
- int *cmyk)
+ int *cmyk,
+ void **lab)
{
unsigned char *bmp;
int c, maxval;
void (*read)(FILE *, int, int, int, unsigned char *);
+ *lab = NULL;
+
c = fgetc(im->file);
/* Skip over any white space before the P */
while ((c != 'P') && (c != EOF)) {
@@ -1017,20 +1050,271 @@ static void *pnm_read(ImageReader *im,
return bmp;
}
+#ifdef HAVE_LIBTIFF
+static tmsize_t tiff_cread(thandle_t im_,
+ void *buf,
+ tmsize_t n)
+{
+ ImageReader *im = (ImageReader *)im_;
+ return fread(buf, 1, n, im->file);
+}
+
+static tmsize_t tiff_cwrite(thandle_t im_,
+ void *buf,
+ tmsize_t n)
+{
+ return 0;
+}
+
+static toff_t tiff_cseek(thandle_t im_,
+ toff_t offset,
+ int whence)
+{
+ ImageReader *im = (ImageReader *)im_;
+ fseek(im->file, (long)offset, whence);
+ return (toff_t)ftell(im->file);
+}
+
+static int tiff_cclose(thandle_t im_)
+{
+ return 0;
+}
+
+static toff_t tiff_csize(thandle_t im_)
+{
+ ImageReader *im = (ImageReader *)im_;
+ long pos = ftell(im->file);
+ toff_t size;
+
+ fseek(im->file, 0, SEEK_END);
+ size = (toff_t)ftell(im->file);
+ fseek(im->file, pos, SEEK_SET);
+ return size;
+}
+
+static void* tif_read(ImageReader* im,
+ int* im_width,
+ int* im_height,
+ int* span,
+ int* bpp,
+ int* cmyk,
+ void **lab)
+{
+ TIFF* tif;
+ uint16 compression;
+ uint16 bpc, num_comps, planar, photometric;
+ uint32 row;
+ int is_tiled;
+ unsigned char *data, *row_ptr, *data_lab = NULL;
+ tdata_t buf;
+ uint32 width;
+ uint32 height;
+ void* picc = NULL;
+ uint32 icc_size;
+ int has_icc = 0;
+#ifdef COLOR_MANAGED
+ cmsHPROFILE icc_profile, hLab;
+ cmsHTRANSFORM icc_transform;
+ cmsContext ctx;
+#endif
+
+ *lab = NULL;
+
+ /* There is only one image in each file */
+ if (ftell(im->file) != 0)
+ return NULL;
+
+ tif = TIFFClientOpen(im->file_name, "rb",
+ (thandle_t)im,
+ tiff_cread, tiff_cwrite,
+ tiff_cseek, tiff_cclose,
+ tiff_csize,
+ NULL, NULL/* map/unmap */);
+
+ if (tif == NULL) {
+ fprintf(stderr, "bmpcmp: TIFF failed to parse\n");
+ exit(1);
+ }
+
+ TIFFGetField(tif, TIFFTAG_COMPRESSION, &compression);
+ if (compression == COMPRESSION_JPEG) {
+ fprintf(stderr, "bmpcmp: JPEG compression not supported for TIFF\n");
+ exit(1);
+ }
+
+ TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photometric);
+ if (!(photometric == PHOTOMETRIC_SEPARATED ||
+ photometric == PHOTOMETRIC_RGB)) {
+ fprintf(stderr, "bmpcmp: Photometric encoding not supported for TIFF\n");
+ exit(1);
+ }
+
+ TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &num_comps);
+ if (num_comps != 3 && photometric == PHOTOMETRIC_RGB) {
+ fprintf(stderr, "bmpcmp: Alpha not supported for TIFF\n");
+ exit(1);
+ }
+ if (num_comps != 4 && photometric == PHOTOMETRIC_SEPARATED) {
+ fprintf(stderr, "bmpcmp: Alpha not supported for TIFF\n");
+ exit(1);
+ }
+
+ TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width);
+ TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height);
+ TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &bpc);
+ TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &planar);
+
+ if (width == 0 || height == 0 || bpc == 0 || num_comps == 0) {
+ fprintf(stderr, "bmpcmp: Bad TIFF content!\n");
+ exit(1);
+ }
+ if (bpc != 8) {
+ fprintf(stderr, "bmpcmp: Only support 8 bpc TIFF!\n");
+ exit(1);
+ }
+ if (num_comps != 1 && num_comps != 3 && num_comps != 4) {
+ fprintf(stderr, "bmpcmp: Only support Gray, RGB or CMYK TIFF!\n");
+ exit(1);
+ }
+ if (num_comps != 4 && planar == PLANARCONFIG_SEPARATE) {
+ fprintf(stderr, "bmpcmp: Only support planar TIFFs if they are CMYK!\n");
+ exit(1);
+ }
+
+ is_tiled = TIFFIsTiled(tif);
+ if (is_tiled) {
+ fprintf(stderr, "bmpcmp: TIFF tiled format not supported!\n");
+ exit(1);
+ }
+#ifdef COLOR_MANAGED
+ has_icc = TIFFGetField(tif, TIFFTAG_ICCPROFILE, &icc_size, &picc);
+ if (has_icc) {
+ uint32 data_type = TYPE_CMYK_8;
+
+ /* Set our own error handling function */
+ ctx = cmsCreateContext(NULL, NULL);
+ if (ctx == NULL) {
+ fprintf(stderr, "bmpcmp: Failed in ICC profile handling!\n");
+ exit(1);
+ }
+ icc_profile = cmsOpenProfileFromMem(ctx, picc, icc_size);
+ if (icc_profile == NULL) {
+ fprintf(stderr, "bmpcmp: Failed in ICC profile handling!\n");
+ exit(EXIT_FAILURE);
+ }
+ hLab = cmsCreateLab4Profile(ctx, NULL);
+ if (hLab == NULL) {
+ fprintf(stderr, "bmpcmp: Failed in ICC profile handling!\n");
+ exit(EXIT_FAILURE);
+ }
+ if (num_comps == 1)
+ data_type = TYPE_GRAY_8;
+ else if (num_comps == 3)
+ data_type = TYPE_RGB_8;
+
+ /* Data will be alpha Lab */
+ icc_transform = cmsCreateTransform(ctx, icc_profile, data_type, hLab,
+ TYPE_ALab_8, INTENT_RELATIVE_COLORIMETRIC, 0);
+ if (icc_transform == NULL) {
+ fprintf(stderr, "bmpcmp: Failed in ICC profile handling!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ /* Do calloc just to make sure alpha value is known */
+ data_lab = Calloc(height * width * 4);
+ *lab = data_lab;
+ }
+#endif
+
+ data = Malloc(height * width * 4);
+ row_ptr = data + (height - 1) * width * 4;
+
+ buf = _TIFFmalloc(TIFFScanlineSize(tif));
+ if (buf == NULL) {
+ fprintf(stderr, "bmpcmp: TIFF malloc failed\n");
+ exit(1);
+ }
+ if (planar == PLANARCONFIG_CONTIG) {
+ for (row = 0; row < height; row++) {
+ TIFFReadScanline(tif, buf, row, 0);
+ if (num_comps == 4)
+ memcpy(row_ptr, buf, width * 4);
+ else if (num_comps == 3) {
+ uint32 i;
+ char *out = (char *)row_ptr;
+ const char *in = (const char *)buf;
+ for (i = width; i != 0; i--) {
+ *out++ = in[2];
+ *out++ = in[1];
+ *out++ = in[0];
+ *out++ = 0;
+ in += 3;
+ }
+ } else if (num_comps == 1) {
+ uint32 i;
+ char *out = (char *)row_ptr;
+ const char *in = (const char *)buf;
+ for (i = width; i != 0; i--) {
+ *out++ = *in;
+ *out++ = *in;
+ *out++ = *in++;
+ *out++ = 0;
+ }
+ }
+ row_ptr -= (width * 4);
+ }
+ } else if (planar == PLANARCONFIG_SEPARATE) {
+ uint16 s, nsamples;
+
+ TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &nsamples);
+ for (s = 0; s < nsamples; s++)
+ for (row = 0; row < height; row++) {
+ TIFFReadScanline(tif, buf, row, s);
+ memcpy(row_ptr, buf, width * 4);
+ row_ptr -= (width * 4);
+ }
+ }
+
+#ifdef COLOR_MANAGED
+ if (data_lab != NULL) {
+ cmsDoTransform(NULL, icc_transform, data, data_lab, width* height);
+ cmsDeleteTransform(NULL, icc_transform);
+ cmsCloseProfile(NULL, icc_profile);
+ cmsCloseProfile(NULL, hLab);
+ cmsDeleteContext(ctx);
+ }
+#endif
+ _TIFFfree(buf);
+ TIFFClose(tif);
+
+ *im_width = width;
+ *im_height = height;
+ *span = width * 4;
+ *bpp = 32;
+ *cmyk = num_comps == 4;
+
+ return data;
+}
+#endif
+
#ifdef HAVE_LIBPNG
static void *png_read(ImageReader *im,
int *width,
int *height,
int *span,
int *bpp,
- int *cmyk)
+ int *cmyk,
+ void **lab)
{
png_structp png;
png_infop info;
- int stride, w, h, y, x;
+ size_t stride;
+ int w, h, y, x;
unsigned char *data;
int expand = 0;
+ *lab = NULL;
+
/* There is only one image in each file */
if (ftell(im->file) != 0)
return NULL;
@@ -1088,8 +1372,8 @@ static void *png_read(ImageReader *im,
*width = w;
*height = h;
- *span = stride;
- *bpp = (stride * 8) / w;
+ *span = (int) stride;
+ *bpp = (int) (stride * 8) / w;
*cmyk = 0;
return data;
}
@@ -1100,12 +1384,15 @@ static void *psd_read(ImageReader *im,
int *height,
int *span,
int *bpp,
- int *cmyk)
+ int *cmyk,
+ void **lab)
{
int c, ir_len, w, h, n, x, y, z, N;
unsigned char *bmp, *line, *ptr;
int bpc;
+ *lab = NULL;
+
if (feof(im->file))
return NULL;
@@ -1403,6 +1690,7 @@ static void image_open(ImageReader *im,
fprintf(stderr, "bmpcmp: %s failed to open\n", filename);
exit(EXIT_FAILURE);
}
+ im->file_name = filename;
/* Identify the filetype */
type = fgetc(im->file);
@@ -1426,6 +1714,11 @@ static void image_open(ImageReader *im,
im->read = cups_read_be;
else
goto fail;
+#ifdef HAVE_LIBTIFF
+ } else if (type == 0x49 || type == 0x4D) {
+ im->read = tif_read;
+ ungetc(type, im->file);
+#endif
} else {
type |= (fgetc(im->file)<<8);
if (type == 0x4d42) { /* BM */
@@ -1586,6 +1879,56 @@ struct FuzzyParams {
unsigned char *map);
};
+/* Data is alpha, L,a,b */
+static int fuzzy_slow_lab(FuzzyParams* fuzzy_params,
+ unsigned char* isrc,
+ unsigned char* isrc2,
+ unsigned char* map,
+ int x,
+ int y)
+{
+ int xmin, ymin, xmax, ymax;
+ int span, t;
+
+ /* left of window = max(0, x - window) - x */
+ xmin = -fuzzy_params->window;
+ if (xmin < -x)
+ xmin = -x;
+ /* right of window = min(width, x + window) - x */
+ xmax = fuzzy_params->window;
+ if (xmax > fuzzy_params->width - x)
+ xmax = fuzzy_params->width - x;
+ /* top of window = max(0, y - window) - y */
+ ymin = -fuzzy_params->window;
+ if (ymin < -y)
+ ymin = -y;
+ /* bottom of window = min(height, y + window) - y */
+ ymax = fuzzy_params->window;
+ if (ymax > fuzzy_params->height - y)
+ ymax = fuzzy_params->height - y;
+ span = fuzzy_params->span;
+ t = fuzzy_params->threshold;
+
+ for (y = ymin; y < ymax; y++)
+ {
+ for (x = xmin; x < xmax; x++)
+ {
+ int o = x * 4 + y * span;
+ float v;
+
+ /* dE^2 */
+ v = (((float) isrc[1] - (float) isrc2[o + 1]) * ((float) isrc[1] - (float) isrc2[o + 1]) / (6.5536f)) +
+ ((float) isrc[2] - (float) isrc2[o + 2]) * ((float) isrc[2] - (float) isrc2[o + 2]) +
+ ((float) isrc[3] - (float) isrc2[o + 3]) * ((float) isrc[3] - (float) isrc2[o + 3]);
+
+ if (v <= t)
+ return 0;
+ }
+ }
+ *map |= 15;
+ return 1;
+}
+
static int fuzzy_slow(FuzzyParams *fuzzy_params,
unsigned char *isrc,
unsigned char *isrc2,
@@ -1730,6 +2073,32 @@ static int fuzzy_slow_exhaustive(FuzzyParams *fuzzy_params,
return ret;
}
+/* Data is alpha, L,a,b */
+static int fuzzy_fast_lab(FuzzyParams* fuzzy_params,
+ unsigned char* isrc,
+ unsigned char* isrc2,
+ unsigned char* map)
+{
+ int i;
+ ptrdiff_t* wTab = fuzzy_params->wTab;
+ int t = fuzzy_params->threshold;
+
+ for (i = fuzzy_params->wTabLen; i > 0; i--)
+ {
+ ptrdiff_t o = *wTab++;
+ float v;
+
+ /* dE^2 */
+ v = (((float) isrc[1] - (float) isrc2[o + 1]) * ((float) isrc[1] - (float) isrc2[o + 1]) / (6.5536f)) +
+ ((float) isrc[2] - (float) isrc2[o + 2]) * ((float) isrc[2] - (float) isrc2[o + 2]) +
+ ((float) isrc[3] - (float) isrc2[o + 3]) * ((float) isrc[3] - (float) isrc2[o + 3]);
+ if (v <= t)
+ return 0;
+ }
+ *map |= 15;
+ return 1;
+}
+
static int fuzzy_fast(FuzzyParams *fuzzy_params,
unsigned char *isrc,
unsigned char *isrc2,
@@ -1858,6 +2227,9 @@ static void fuzzy_diff_int(unsigned char *bmp,
{
fuzzy_params.slowFn = fuzzy_slow_exhaustive;
fuzzy_params.fastFn = fuzzy_fast_exhaustive;
+ } else if (params->lab) {
+ fuzzy_params.slowFn = fuzzy_slow_lab;
+ fuzzy_params.fastFn = fuzzy_fast_lab;
} else {
fuzzy_params.slowFn = fuzzy_slow;
fuzzy_params.fastFn = fuzzy_fast;
@@ -2501,7 +2873,6 @@ lookup(int c, int m, int y, int k,
int rx, ry, rz;
int x0, y0, z0;
int X0, X1, Y0, Y1, Z0, Z1;
- int i;
int c0, c1, c2, c3, Rest;
int OutChan;
int Tmp1[3], Tmp2[3];
@@ -3006,6 +3377,7 @@ static void syntax(void)
fprintf(stderr, " -t <threshold> or -t<threshold> threshold (default=0)\n");
fprintf(stderr, " -e exhaustive search\n");
fprintf(stderr, " -o <minx> <maxx> <miny> <maxy> Output bitmap size hints (0 for default)\n");
+ fprintf(stderr, " -l Use dE^2 diff in CIELAB (only for tiffs with icc profiles)\n");
fprintf(stderr, " -h or --help or -? Output this message and exit\n");
fprintf(stderr, "\n");
fprintf(stderr, " <file1> and <file2> can be "
@@ -3079,6 +3451,9 @@ static void parseArgs(int argc, char *argv[], Params *params)
case 'e':
params->exhaustive = 1;
break;
+ case 'l':
+ params->lab = 1;
+ break;
case 'h':
case '?':
case '-': /* Hack :) */
@@ -3313,21 +3688,32 @@ int main(int argc, char *argv[])
DiffFn *diffFn;
Params params;
int noDifferences = 1;
+ int can_compare = 1;
+ void *lab1, *lab2;
parseArgs(argc, argv, &params);
if (params.window <= 1 && params.threshold == 0) {
diffFn = simple_diff;
+ if (params.lab) {
+ fprintf(stderr, "bmpcmp: LAB comparison requires window > 1 and threshold > 0\n");
+ }
} else {
diffFn = fuzzy_diff;
}
+#ifndef COLOR_MANAGED
+ if (params.lab) {
+ fprintf(stderr, "bmpcmp: LAB comparison selected but bmp compiled without cmm!\n");
+ }
+#endif
+
image_open(&image1, params.filename1);
image_open(&image2, params.filename2);
imagecount = 0;
while (((bmp2 = NULL,
- bmp = image1.read(&image1,&w, &h, &s, &bpp, &cmyk )) != NULL) &&
- ((bmp2 = image2.read(&image2,&w2,&h2,&s2,&bpp2,&cmyk2)) != NULL))
+ bmp = image1.read(&image1, &w, &h, &s, &bpp, &cmyk, &lab1)) != NULL) &&
+ ((bmp2 = image2.read(&image2, &w2, &h2, &s2, &bpp2, &cmyk2, &lab2)) != NULL))
{
imagecount++;
/* Check images are compatible */
@@ -3335,9 +3721,16 @@ int main(int argc, char *argv[])
(cmyk != cmyk2))
{
fprintf(stderr,
- "bmpcmp: Page %d: Can't compare images "
- "(w=%d,%d) (h=%d,%d) (s=%d,%d) (bpp=%d,%d) (cmyk=%d,%d)!\n",
- imagecount, w, w2, h, h2, s, s2, bpp, bpp2, cmyk, cmyk2);
+ "bmpcmp: Page %d: Can't compare images "
+ "(w=%d,%d) (h=%d,%d) (s=%d,%d) (bpp=%d,%d) (cmyk=%d,%d)!\n",
+ imagecount, w, w2, h, h2, s, s2, bpp, bpp2, cmyk, cmyk2);
+ can_compare = 0;
+ continue;
+ }
+
+ if (params.lab && (lab1 == NULL || lab2 == NULL)) {
+ fprintf(stderr, "bmpcmp: Lab compare failed (only valid for tiffs with icc profiles)\n");
+ can_compare = 0;
continue;
}
@@ -3345,13 +3738,19 @@ int main(int argc, char *argv[])
{
makeWindowTable(&params, s, bpp);
}
- map = Malloc(s*h*sizeof(unsigned char));
- memset(map, 0, s*h*sizeof(unsigned char));
- params.width = w;
+ map = Malloc(s * h * sizeof(unsigned char));
+ memset(map, 0, s * h * sizeof(unsigned char));
+ params.width = w;
params.height = h;
- params.span = s;
- params.bpp = bpp;
- (*diffFn)(bmp, bmp2, map, &bbox, &params);
+ params.span = s;
+ params.bpp = bpp;
+
+ if (params.lab) {
+ (*diffFn)(lab1, lab2, map, &bbox, &params);
+ } else {
+ (*diffFn)(bmp, bmp2, map, &bbox, &params);
+ }
+
if ((bbox.xmin <= bbox.xmax) && (bbox.ymin <= bbox.ymax))
{
/* Make the bbox sensibly exclusive */
@@ -3511,6 +3910,8 @@ int main(int argc, char *argv[])
free(bmp);
free(bmp2);
free(map);
+ free(lab1);
+ free(lab2);
}
done:
@@ -3527,12 +3928,15 @@ done:
imagecount+1, params.filename2);
exit(EXIT_FAILURE);
}
+ /* Also count as a failure if the images are different sizes, color, bits etc */
+ if (can_compare == 0)
+ exit(EXIT_FAILURE);
image_close(&image1);
image_close(&image2);
if (noDifferences == 1)
- fprintf(stderr, "bmpcmp: no differences detected\n");
+ fprintf(stderr, "bmpcmp: no differences detected\n");
return EXIT_SUCCESS;
}
diff --git a/toolbin/bmpcmp.sln b/toolbin/bmpcmp.sln
index 6b371ad7..44e3c45d 100644
--- a/toolbin/bmpcmp.sln
+++ b/toolbin/bmpcmp.sln
@@ -1,26 +1,35 @@

-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bmpcmp", "bmpcmp.vcproj", "{460A58D8-7094-48EC-B996-F456D1BD08A9}"
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30104.148
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bmpcmp", "bmpcmp.vcxproj", "{460A58D8-7094-48EC-B996-F456D1BD08A9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
+ Debug|Win326 = Debug|Win326
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
+ Release|Win326 = Release|Win326
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{460A58D8-7094-48EC-B996-F456D1BD08A9}.Debug|Win32.ActiveCfg = Debug|Win32
{460A58D8-7094-48EC-B996-F456D1BD08A9}.Debug|Win32.Build.0 = Debug|Win32
+ {460A58D8-7094-48EC-B996-F456D1BD08A9}.Debug|Win326.ActiveCfg = Debug|Win32
{460A58D8-7094-48EC-B996-F456D1BD08A9}.Debug|x64.ActiveCfg = Debug|x64
{460A58D8-7094-48EC-B996-F456D1BD08A9}.Debug|x64.Build.0 = Debug|x64
{460A58D8-7094-48EC-B996-F456D1BD08A9}.Release|Win32.ActiveCfg = Release|Win32
{460A58D8-7094-48EC-B996-F456D1BD08A9}.Release|Win32.Build.0 = Release|Win32
+ {460A58D8-7094-48EC-B996-F456D1BD08A9}.Release|Win326.ActiveCfg = Release|Win32
{460A58D8-7094-48EC-B996-F456D1BD08A9}.Release|x64.ActiveCfg = Release|x64
{460A58D8-7094-48EC-B996-F456D1BD08A9}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {E5CB3F49-D596-4CFF-A2E8-900228D88E11}
+ EndGlobalSection
EndGlobal
diff --git a/toolbin/bmpcmp.vcproj b/toolbin/bmpcmp.vcproj
deleted file mode 100644
index 03bdf202..00000000
--- a/toolbin/bmpcmp.vcproj
+++ /dev/null
@@ -1,454 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="bmpcmp"
- ProjectGUID="{460A58D8-7094-48EC-B996-F456D1BD08A9}"
- RootNamespace="bmpcmp"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- <Platform
- Name="x64"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\libpng;..\zlib;..\debugobj\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;/DHAVE_LIBPNG"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\libpng;..\zlib;..\debugobj\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;/DHAVE_LIBPNG"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug|x64"
- OutputDirectory="$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="3"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\libpng;..\zlib;..\debugobj\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;/DHAVE_LIBPNG"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|x64"
- OutputDirectory="$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="3"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\libpng;..\zlib;..\debugobj\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;/DHAVE_LIBPNG"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\zlib\adler32.c"
- >
- </File>
- <File
- RelativePath=".\bmpcmp.c"
- >
- </File>
- <File
- RelativePath="..\zlib\compress.c"
- >
- </File>
- <File
- RelativePath="..\zlib\crc32.c"
- >
- </File>
- <File
- RelativePath="..\zlib\deflate.c"
- >
- </File>
- <File
- RelativePath="..\zlib\infback.c"
- >
- </File>
- <File
- RelativePath="..\zlib\inffast.c"
- >
- </File>
- <File
- RelativePath="..\zlib\inflate.c"
- >
- </File>
- <File
- RelativePath="..\zlib\inftrees.c"
- >
- </File>
- <File
- RelativePath="..\libpng\png.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngerror.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngget.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngmem.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngpread.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngread.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngrio.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngrtran.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngrutil.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngset.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngtrans.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngwio.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngwrite.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngwtran.c"
- >
- </File>
- <File
- RelativePath="..\libpng\pngwutil.c"
- >
- </File>
- <File
- RelativePath="..\zlib\trees.c"
- >
- </File>
- <File
- RelativePath="..\zlib\uncompr.c"
- >
- </File>
- <File
- RelativePath="..\zlib\zutil.c"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/toolbin/bmpcmp.vcxproj b/toolbin/bmpcmp.vcxproj
new file mode 100644
index 00000000..bca54758
--- /dev/null
+++ b/toolbin/bmpcmp.vcxproj
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{460A58D8-7094-48EC-B996-F456D1BD08A9}</ProjectGuid>
+ <RootNamespace>bmpcmp</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>16.0.30028.132</_ProjectFileVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>Debug\</OutDir>
+ <IntDir>Debug\</IntDir>
+ <LinkIncremental>true</LinkIncremental>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>Release\</OutDir>
+ <IntDir>Release\</IntDir>
+ <LinkIncremental>true</LinkIncremental>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental>true</LinkIncremental>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental>true</LinkIncremental>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\lcms2mt\include;..\libpng;..\zlib;..\debugobj\;..\tiff\libtiff;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>COLOR_MANAGED;WIN32;_DEBUG;_CONSOLE;HAVE_LIBPNG;HAVE_LIBTIFF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader />
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\lcms2mt\include;..\libpng;..\zlib;..\debugobj\;..\tiff\libtiff;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>COLOR_MANAGED;WIN32;NDEBUG;_CONSOLE;HAVE_LIBPNG;HAVE_LIBTIFF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader />
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\lcms2mt\include;..\libpng;..\zlib;..\debugobj\;..\tiff\libtiff;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>COLOR_MANAGED;WIN32;_DEBUG;_CONSOLE;HAVE_LIBPNG;HAVE_LIBTIFF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader />
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\lcms2mt\include;..\libpng;..\zlib;..\debugobj\;..\tiff\libtiff;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>COLOR_MANAGED;WIN32;NDEBUG;_CONSOLE;HAVE_LIBPNG;HAVE_LIBTIFF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader />
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\lcms2mt\src\cmsalpha.c" />
+ <ClCompile Include="..\lcms2mt\src\cmscam02.c" />
+ <ClCompile Include="..\lcms2mt\src\cmscgats.c" />
+ <ClCompile Include="..\lcms2mt\src\cmscnvrt.c" />
+ <ClCompile Include="..\lcms2mt\src\cmserr.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsgamma.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsgmt.c" />
+ <ClCompile Include="..\lcms2mt\src\cmshalf.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsintrp.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsio0.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsio1.c" />
+ <ClCompile Include="..\lcms2mt\src\cmslut.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsmd5.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsmtrx.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsnamed.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsopt.c" />
+ <ClCompile Include="..\lcms2mt\src\cmspack.c" />
+ <ClCompile Include="..\lcms2mt\src\cmspcs.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsplugin.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsps2.c" />
+ <ClCompile Include="..\lcms2mt\src\cmssamp.c" />
+ <ClCompile Include="..\lcms2mt\src\cmssm.c" />
+ <ClCompile Include="..\lcms2mt\src\cmstypes.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsvirt.c" />
+ <ClCompile Include="..\lcms2mt\src\cmswtpnt.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsxform.c" />
+ <ClCompile Include="..\libpng\png.c" />
+ <ClCompile Include="..\libpng\pngerror.c" />
+ <ClCompile Include="..\libpng\pngget.c" />
+ <ClCompile Include="..\libpng\pngmem.c" />
+ <ClCompile Include="..\libpng\pngpread.c" />
+ <ClCompile Include="..\libpng\pngread.c" />
+ <ClCompile Include="..\libpng\pngrio.c" />
+ <ClCompile Include="..\libpng\pngrtran.c" />
+ <ClCompile Include="..\libpng\pngrutil.c" />
+ <ClCompile Include="..\libpng\pngset.c" />
+ <ClCompile Include="..\libpng\pngtrans.c" />
+ <ClCompile Include="..\libpng\pngwio.c" />
+ <ClCompile Include="..\libpng\pngwrite.c" />
+ <ClCompile Include="..\libpng\pngwtran.c" />
+ <ClCompile Include="..\libpng\pngwutil.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_aux.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_close.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_codec.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_color.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_compress.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_dir.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_dirinfo.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_dirread.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_dirwrite.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_dumpmode.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_error.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_extension.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_fax3.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_fax3sm.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_flush.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_getimage.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_jbig.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_jpeg.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_jpeg_12.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_luv.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_lzma.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_lzw.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_next.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_ojpeg.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_open.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_packbits.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_pixarlog.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_predict.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_print.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_read.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_strip.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_swab.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_thunder.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_tile.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_version.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_warning.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_webp.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_win32.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_write.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_zip.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_zstd.c" />
+ <ClCompile Include="..\zlib\adler32.c" />
+ <ClCompile Include="..\zlib\compress.c" />
+ <ClCompile Include="..\zlib\crc32.c" />
+ <ClCompile Include="..\zlib\deflate.c" />
+ <ClCompile Include="..\zlib\infback.c" />
+ <ClCompile Include="..\zlib\inffast.c" />
+ <ClCompile Include="..\zlib\inflate.c" />
+ <ClCompile Include="..\zlib\inftrees.c" />
+ <ClCompile Include="..\zlib\trees.c" />
+ <ClCompile Include="..\zlib\uncompr.c" />
+ <ClCompile Include="..\zlib\zutil.c" />
+ <ClCompile Include="bmpcmp.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\lcms2mt\include\lcms2mt.h" />
+ <ClInclude Include="..\lcms2mt\include\lcms2mt_plugin.h" />
+ <ClInclude Include="..\lcms2mt\src\extra_xform.h" />
+ <ClInclude Include="..\lcms2mt\src\lcms2_internal.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/toolbin/build_bmpcmp.sh b/toolbin/build_bmpcmp.sh
new file mode 100644
index 00000000..c64b0e50
--- /dev/null
+++ b/toolbin/build_bmpcmp.sh
@@ -0,0 +1,116 @@
+# set to location of ghostpdl
+export baseDirectory=~/Artifex
+
+# First configure tiff not to use jpeg, jbig, lzma
+cd $baseDirectory/ghostpdl/tiff
+./configure --disable-jpeg --disable-old-jpeg --disable-jbig --disable-lzma
+mv $baseDirectory/ghostpdl/tiff/libtiff/tif_config.h $baseDirectory/ghostpdl/toolbin
+
+# Also set up configure for png
+# Just use pre-built. Had issues getting this setup
+cp $baseDirectory/ghostpdl/libpng/scripts/pnglibconf.h.prebuilt $baseDirectory/ghostpdl/toolbin/pnglibconf.h
+
+cc -I$baseDirectory/ghostpdl/toolbin \
+-I$baseDirectory/ghostpdl/libpng \
+-I$baseDirectory/ghostpdl/tiff/libtiff \
+-I$baseDirectory/ghostpdl/zlib \
+-I$baseDirectory/ghostpdl/lcms2mt/include \
+-o bmpcmp -DHAVE_LIBPNG -DHAVE_LIBTIFF -DCOLOR_MANAGED \
+-UOJEPG_SUPPORT -UJPEG_SUPPORT \
+ $baseDirectory/ghostpdl/toolbin/bmpcmp.c \
+ $baseDirectory/ghostpdl/libpng/png.c \
+ $baseDirectory/ghostpdl/libpng/pngerror.c \
+ $baseDirectory/ghostpdl/libpng/pngget.c \
+ $baseDirectory/ghostpdl/libpng/pngmem.c \
+ $baseDirectory/ghostpdl/libpng/pngpread.c \
+ $baseDirectory/ghostpdl/libpng/pngread.c \
+ $baseDirectory/ghostpdl/libpng/pngrio.c \
+ $baseDirectory/ghostpdl/libpng/pngrtran.c \
+ $baseDirectory/ghostpdl/libpng/pngrutil.c \
+ $baseDirectory/ghostpdl/libpng/pngset.c \
+ $baseDirectory/ghostpdl/libpng/pngtrans.c \
+ $baseDirectory/ghostpdl/libpng/pngwio.c \
+ $baseDirectory/ghostpdl/libpng/pngwrite.c \
+ $baseDirectory/ghostpdl/libpng/pngwtran.c \
+ $baseDirectory/ghostpdl/libpng/pngwutil.c \
+ $baseDirectory/ghostpdl/zlib/adler32.c \
+ $baseDirectory/ghostpdl/zlib/crc32.c \
+ $baseDirectory/ghostpdl/zlib/infback.c \
+ $baseDirectory/ghostpdl/zlib/inflate.c \
+ $baseDirectory/ghostpdl/zlib/uncompr.c \
+ $baseDirectory/ghostpdl/zlib/compress.c \
+ $baseDirectory/ghostpdl/zlib/deflate.c \
+ $baseDirectory/ghostpdl/zlib/inffast.c \
+ $baseDirectory/ghostpdl/zlib/inftrees.c \
+ $baseDirectory/ghostpdl/zlib/trees.c \
+ $baseDirectory/ghostpdl/zlib/zutil.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_aux.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_close.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_codec.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_color.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_compress.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_dir.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_dirinfo.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_dirread.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_dirwrite.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_dumpmode.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_error.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_extension.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_fax3.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_fax3sm.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_flush.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_getimage.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_jbig.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_jpeg.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_jpeg_12.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_luv.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_lzma.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_lzw.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_next.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_ojpeg.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_open.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_packbits.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_pixarlog.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_predict.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_print.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_read.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_strip.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_swab.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_thunder.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_tile.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_unix.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_version.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_warning.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_webp.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_write.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_zip.c \
+ $baseDirectory/ghostpdl/tiff/libtiff/tif_zstd.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsalpha.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmscam02.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmscgats.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmscnvrt.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmserr.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsgamma.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsgmt.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmshalf.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsintrp.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsio0.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsio1.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmslut.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsmd5.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsmtrx.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsnamed.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsopt.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmspack.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmspcs.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsplugin.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsps2.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmssamp.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmssm.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmstypes.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsvirt.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmswtpnt.c \
+ $baseDirectory/ghostpdl/lcms2mt/src/cmsxform.c \
+ -lm 2>&1 -o $baseDirectory/ghostpdl/toolbin/bmpcmp
+
+# clean up tiff directory so gs still builds
diff --git a/toolbin/color/icc_creator/ICC_Creator/CIELAB.h b/toolbin/color/icc_creator/ICC_Creator/CIELAB.h
index 02b3caef..660f8939 100644
--- a/toolbin/color/icc_creator/ICC_Creator/CIELAB.h
+++ b/toolbin/color/icc_creator/ICC_Creator/CIELAB.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/color/icc_creator/ICC_Creator/ICC_Creator.cpp b/toolbin/color/icc_creator/ICC_Creator/ICC_Creator.cpp
index 18fa81c7..a981b03e 100644
--- a/toolbin/color/icc_creator/ICC_Creator/ICC_Creator.cpp
+++ b/toolbin/color/icc_creator/ICC_Creator/ICC_Creator.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/color/icc_creator/ICC_Creator/ICC_Creator.h b/toolbin/color/icc_creator/ICC_Creator/ICC_Creator.h
index c7d76044..a9c79b8e 100644
--- a/toolbin/color/icc_creator/ICC_Creator/ICC_Creator.h
+++ b/toolbin/color/icc_creator/ICC_Creator/ICC_Creator.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.cpp b/toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.cpp
index 1945f72f..b943180b 100644
--- a/toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.cpp
+++ b/toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.h b/toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.h
index 22da9632..0b73d1aa 100644
--- a/toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.h
+++ b/toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/color/icc_creator/ICC_Creator/icc_create.cpp b/toolbin/color/icc_creator/ICC_Creator/icc_create.cpp
index ccc42a0d..e9f2bc5d 100644
--- a/toolbin/color/icc_creator/ICC_Creator/icc_create.cpp
+++ b/toolbin/color/icc_creator/ICC_Creator/icc_create.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/color/icc_creator/ICC_Creator/icc_create.h b/toolbin/color/icc_creator/ICC_Creator/icc_create.h
index dbd9ebf8..949bad6b 100644
--- a/toolbin/color/icc_creator/ICC_Creator/icc_create.h
+++ b/toolbin/color/icc_creator/ICC_Creator/icc_create.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/color/icc_creator/README.txt b/toolbin/color/icc_creator/README.txt
index c1cacdb8..bc236d05 100644
--- a/toolbin/color/icc_creator/README.txt
+++ b/toolbin/color/icc_creator/README.txt
@@ -1,4 +1,4 @@
- Copyright (C) 2001-2019 Artifex Software, Inc.
+ Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/encs2c.ps b/toolbin/encs2c.ps
index 008b5490..f734b603 100644
--- a/toolbin/encs2c.ps
+++ b/toolbin/encs2c.ps
@@ -1,5 +1,5 @@
%!
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -314,7 +314,7 @@ estrs readonly pop
} loop pop def
% Write the initial boilerplate.
-(/* Copyright (C) 2001-2019 Artifex Software, Inc.) =
+(/* Copyright (C) 2001-2020 Artifex Software, Inc.) =
( All Rights Reserved.) =
( ) =
( This software is provided AS-IS with no warranty, either express or) =
diff --git a/toolbin/errlist.tcl b/toolbin/errlist.tcl
index cd028e9d..2df10aa7 100755
--- a/toolbin/errlist.tcl
+++ b/toolbin/errlist.tcl
@@ -2,7 +2,7 @@
# hack to restart using tclsh \
exec tclsh "$0" "$@"
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/extractFonts.ps b/toolbin/extractFonts.ps
index 224abe9f..5234e498 100644
--- a/toolbin/extractFonts.ps
+++ b/toolbin/extractFonts.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/extractICCprofiles.ps b/toolbin/extractICCprofiles.ps
index 36760cc5..9781c532 100644
--- a/toolbin/extractICCprofiles.ps
+++ b/toolbin/extractICCprofiles.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/gen_ldf_jb2.py b/toolbin/gen_ldf_jb2.py
index 67de170a..fe7f1358 100644
--- a/toolbin/gen_ldf_jb2.py
+++ b/toolbin/gen_ldf_jb2.py
@@ -1,5 +1,5 @@
#!/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/genfontmap.ps b/toolbin/genfontmap.ps
index 565dcc74..ee013914 100644
--- a/toolbin/genfontmap.ps
+++ b/toolbin/genfontmap.ps
@@ -1,5 +1,5 @@
%!PS
-% Copyright (C) 2001-2019 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/gitlog2changelog.py b/toolbin/gitlog2changelog.py
index cea6f9fe..2b464253 100755
--- a/toolbin/gitlog2changelog.py
+++ b/toolbin/gitlog2changelog.py
@@ -1,6 +1,6 @@
#!/usr/bin/python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -19,10 +19,6 @@
import os
import sys
-import string
-import datetime
-import time
-import codecs
argc = len(sys.argv)
if argc < 3:
diff --git a/toolbin/gsmake.tcl b/toolbin/gsmake.tcl
index a74e45f5..9deb44f0 100755
--- a/toolbin/gsmake.tcl
+++ b/toolbin/gsmake.tcl
@@ -1,6 +1,6 @@
#!/usr/bin/tclsh
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/halftone/ETS/ipview.html b/toolbin/halftone/ETS/ipview.html
index 97be637b..cfcc1b0e 100644
--- a/toolbin/halftone/ETS/ipview.html
+++ b/toolbin/halftone/ETS/ipview.html
@@ -43,7 +43,7 @@ imageDataBlock.prototype.updateImage = function()
var x, y, z;
var R, G, B;
var p = this.pos;
- var canvas = this.canvas.getContext("2d")
+ var canvas = this.canvas.getContext("2d");
var id = canvas.getImageData(0, 0, w, h);
var q = 0;
@@ -85,7 +85,7 @@ imageDataBlock.prototype.updateImage = function()
else
{
var fwd = w*h;
- var back = w*h*d-1
+ var back = w*h*d-1;
for (y = h; y > 0; y--)
{
for (x = w; x > 0; x--)
@@ -241,9 +241,6 @@ imageDataBlock.prototype.readPAM = function ()
this.planes[p].k = parseFloat(line);
}
}
- else if (line.substring(0, 1) == "#")
- {
- }
else if (line.substring(0, 6) == "ENDHDR")
break;
else
@@ -335,6 +332,7 @@ function imageView(file, event)
fixdiv.appendChild(document.createElement('br'));
var form = document.createElement('form');
fixdiv.appendChild(form);
+ var i;
for (i=0; i < data.depth; i++)
{
var span = document.createElement('span');
diff --git a/toolbin/halftone/gen_ordered/gen_ordered_main.c b/toolbin/halftone/gen_ordered/gen_ordered_main.c
index 6ff3ee7d..e792ebdc 100644
--- a/toolbin/halftone/gen_ordered/gen_ordered_main.c
+++ b/toolbin/halftone/gen_ordered/gen_ordered_main.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/halftone/gen_stochastic/gen_stochastic.c b/toolbin/halftone/gen_stochastic/gen_stochastic.c
index 23fd2424..3b05d2ef 100644
--- a/toolbin/halftone/gen_stochastic/gen_stochastic.c
+++ b/toolbin/halftone/gen_stochastic/gen_stochastic.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/headercompile.pl b/toolbin/headercompile.pl
index 2bff2475..2b3a95b3 100755
--- a/toolbin/headercompile.pl
+++ b/toolbin/headercompile.pl
@@ -448,7 +448,7 @@ rewrite_make("base/tiff.mak");
rewrite_make("base/winlib.mak");
rewrite_make("psi/int.mak");
rewrite_make("psi/winint.mak");
-rewrite_make("devices/contrib.mak");
+rewrite_make("devices/dcontrib.mak");
rewrite_make("devices/devs.mak");
rewrite_make("gpdl/pspcl6_gcc.mak");
rewrite_make("pcl/pl/pl.mak");
diff --git a/toolbin/headers.tcl b/toolbin/headers.tcl
index 18eca404..c1297b5a 100755
--- a/toolbin/headers.tcl
+++ b/toolbin/headers.tcl
@@ -1,6 +1,6 @@
#!/usr/bin/tclsh
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/jpxtopdf.c b/toolbin/jpxtopdf.c
index 12929619..bc3691db 100644
--- a/toolbin/jpxtopdf.c
+++ b/toolbin/jpxtopdf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
All Rights Reserved.
This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/leaks.tcl b/toolbin/leaks.tcl
index eccbbdf8..7b9c5a11 100755
--- a/toolbin/leaks.tcl
+++ b/toolbin/leaks.tcl
@@ -1,6 +1,6 @@
#!/usr/bin/tclsh
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/localcluster/clusterpush.pl b/toolbin/localcluster/clusterpush.pl
index c2c3555e..e4db5331 100755
--- a/toolbin/localcluster/clusterpush.pl
+++ b/toolbin/localcluster/clusterpush.pl
@@ -7,7 +7,7 @@ use Data::Dumper;
my $verbose=0;
-# bmpcmp usage: [gs] [pcl] [xps] [mupdf] [mujstest] [bmpcmp] [arm] [lowres] [highres] [32] [pdfwrite] [ps2write] [xpswrite] [nopdfwrite] [relaxtimeout] [extended] [smoke] [cull] [avx2] [$user] | abort
+# bmpcmp usage: [gs] [pcl] [xps] [mupdf] [mujstest] [murun] [mudrawpy] [bmpcmp] [arm] [lowres] [highres] [32] [pdfwrite] [ps2write] [xpswrite] [nopdfwrite] [relaxtimeout] [extended] [smoke] [cull] [avx2] [$user] | abort
@@ -22,7 +22,9 @@ my %products=('abort' =>1,
'gpdf'=>1,
'gpdl'=>1,
'mupdf'=>1,
- 'mujstest'=>1);
+ 'mujstest'=>1,
+ 'murun'=>1,
+ 'mudrawpy'=>1);
my $user;
my $product="";
@@ -80,6 +82,8 @@ while ($t1=shift) {
$relaxTimeout="relaxTimeout";
} elsif ($t1=~m/^-/ || $t1=~m/^\d/) {
$command.=$t1.' ';
+ } elsif ($t1 =~ m/ifilter=.*/) {
+ $filters.=$t1.' ';
} elsif ($t1 =~ m/filter=.*/) {
$filters.=$t1.' ';
} elsif ($t1 =~ m/extras=.*/) {
@@ -205,7 +209,7 @@ my $cmd="rsync -avxcz ".
" --exclude membin --exclude memobj --exclude membin64 --exclude memobj64".
" --exclude profbin --exclude profobj --exclude profbin64 --exclude profobj64".
" --exclude sanbin --exclude sanobj --exclude sanbin64 --exclude sanobj64".
-" --exclude sobin --exclude soobj --exclude debugbin".
+" --exclude sobin --exclude soobj --exclude debugbin --exclude sodebugbin --exclude sodebugobj".
" --exclude ufst --exclude ufst-obj --exclude ufst-debugobj".
" --exclude '*-bin' --exclude '*-obj'".
" --exclude config.log --exclude .png".
@@ -213,6 +217,17 @@ my $cmd="rsync -avxcz ".
" --exclude .tif --exclude .bmp".
" --exclude debug --exclude release --exclude generated --exclude sanitize". # we cannot just exclude build, since tiff/build/Makefile.in, etc. is needed
" --exclude tiff-config".
+" --exclude 'shared-*'".
+
+# Exclude files generated by scripts/mupdfwrap.py:
+" --exclude mupdfwrap_ref".
+" --exclude platform/c++".
+" --exclude platform/python".
+" --exclude include/html".
+" --exclude include/latex".
+
+" --exclude /build/".
+
# " --exclude Makefile". We can't just exclude Makefile, since the MuPDF Makefile is not a derived file.
" -e \"$ssh\" ".
" .".
diff --git a/toolbin/makehist.tcl b/toolbin/makehist.tcl
index 67542da1..8d2e2a6a 100755
--- a/toolbin/makehist.tcl
+++ b/toolbin/makehist.tcl
@@ -1,6 +1,6 @@
#!/usr/bin/tclsh
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/memory.py b/toolbin/memory.py
index f32957e1..879b868f 100755
--- a/toolbin/memory.py
+++ b/toolbin/memory.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/ocheck.py b/toolbin/ocheck.py
index 5fbfd407..fc4a80dd 100755
--- a/toolbin/ocheck.py
+++ b/toolbin/ocheck.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -251,9 +251,9 @@ def forfts(args, defs, refs, proc, verbose):
fmods = dict([(m, 1) for m in fmods])
if tm or not ts: # neither tm nor ts = all
tm = re.compile(tm)
- tmods = dict([(m, 1) for m in defmods if tm.match(m)])
+ #tmods = dict([(m, 1) for m in defmods if tm.match(m)])
else:
- tmods = None
+ #tmods = None
# ****** fs IS BOGUS, USES ENTIRE MODULE ******
if fs:
fs = re.compile(fs)
@@ -306,7 +306,9 @@ def main(argv):
cwd = args.pop(0)
else:
cwd = ''
- if len(args) < 1: return usage()
+ if len(args) < 1:
+ usage()
+ return
verbose = False
# Read the ld script and each file's symbol table.
ldscript = args.pop(0)
@@ -381,7 +383,8 @@ def main(argv):
elif arg == '--verbose':
verbose = True
else:
- return usage()
+ usage()
+ return
if __name__ == '__main__':
sys.exit(main(sys.argv) or 0)
diff --git a/toolbin/pre.tcl b/toolbin/pre.tcl
index 83241a9e..7276e0b2 100755
--- a/toolbin/pre.tcl
+++ b/toolbin/pre.tcl
@@ -1,6 +1,6 @@
#!/usr/bin/tclsh
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/precheck.tcl b/toolbin/precheck.tcl
index 9e934afe..c852e0c3 100755
--- a/toolbin/precheck.tcl
+++ b/toolbin/precheck.tcl
@@ -1,6 +1,6 @@
#!/usr/bin/tclsh
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/split_changelog.py b/toolbin/split_changelog.py
index e23491b9..bf55f6c3 100755
--- a/toolbin/split_changelog.py
+++ b/toolbin/split_changelog.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/squeeze2text.py b/toolbin/squeeze2text.py
index 0f533d20..685044f0 100755
--- a/toolbin/squeeze2text.py
+++ b/toolbin/squeeze2text.py
@@ -58,6 +58,7 @@ if __name__ == '__main__':
# characters.
f = io.TextIOWrapper( sys.stdin.buffer, encoding='latin_1')
progress_n_next = 0
+ memento_n = None
def print_progress():
print( 'memento_n=%s. num_segv=%s num_leak=%s' % (
diff --git a/toolbin/suite.tcl b/toolbin/suite.tcl
index 474b36a0..81d90847 100755
--- a/toolbin/suite.tcl
+++ b/toolbin/suite.tcl
@@ -1,6 +1,6 @@
#!/usr/bin/tclsh
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/build_revision.py b/toolbin/tests/build_revision.py
index 2edfcc59..d02eef36 100755
--- a/toolbin/tests/build_revision.py
+++ b/toolbin/tests/build_revision.py
@@ -1,7 +1,7 @@
#!/usr/bin/python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/check_all.py b/toolbin/tests/check_all.py
index 6a04fe69..6411579a 100755
--- a/toolbin/tests/check_all.py
+++ b/toolbin/tests/check_all.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/check_comments.py b/toolbin/tests/check_comments.py
index a5a04367..abe8bdbd 100755
--- a/toolbin/tests/check_comments.py
+++ b/toolbin/tests/check_comments.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/check_dirs.py b/toolbin/tests/check_dirs.py
index 62c13fcc..58f0d12f 100755
--- a/toolbin/tests/check_dirs.py
+++ b/toolbin/tests/check_dirs.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/check_docrefs.py b/toolbin/tests/check_docrefs.py
index 6daee79c..cc5ae2ec 100755
--- a/toolbin/tests/check_docrefs.py
+++ b/toolbin/tests/check_docrefs.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/cmpi.py b/toolbin/tests/cmpi.py
index f7904aff..38a275da 100644
--- a/toolbin/tests/cmpi.py
+++ b/toolbin/tests/cmpi.py
@@ -1,5 +1,5 @@
#!/usr/bin/python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/compare_checksumdb.py b/toolbin/tests/compare_checksumdb.py
index 58935fd8..59330928 100755
--- a/toolbin/tests/compare_checksumdb.py
+++ b/toolbin/tests/compare_checksumdb.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/compare_checksums.py b/toolbin/tests/compare_checksums.py
index 88f0b4c4..b2f3d4f8 100755
--- a/toolbin/tests/compare_checksums.py
+++ b/toolbin/tests/compare_checksums.py
@@ -1,7 +1,7 @@
#!/usr/bin/python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/dump_checksum.py b/toolbin/tests/dump_checksum.py
index 09966813..f009666b 100755
--- a/toolbin/tests/dump_checksum.py
+++ b/toolbin/tests/dump_checksum.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/dump_checksum_plus.py b/toolbin/tests/dump_checksum_plus.py
index ba496d3f..7a31a56b 100755
--- a/toolbin/tests/dump_checksum_plus.py
+++ b/toolbin/tests/dump_checksum_plus.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/dump_checksum_raw.py b/toolbin/tests/dump_checksum_raw.py
index 5dec7c03..1a647156 100755
--- a/toolbin/tests/dump_checksum_raw.py
+++ b/toolbin/tests/dump_checksum_raw.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/fuzzy.c b/toolbin/tests/fuzzy.c
index b1112a79..29694f0a 100644
--- a/toolbin/tests/fuzzy.c
+++ b/toolbin/tests/fuzzy.c
@@ -1,5 +1,20 @@
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
+ 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.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
/**
- * Fuzzy comparison utility. Copyright 2001-2018 Artifex Software, Inc.
+ * Fuzzy comparison utility.
**/
#include <stdio.h>
diff --git a/toolbin/tests/get_baseline_log.py b/toolbin/tests/get_baseline_log.py
index 00270174..230942b1 100755
--- a/toolbin/tests/get_baseline_log.py
+++ b/toolbin/tests/get_baseline_log.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/get_baselines.py b/toolbin/tests/get_baselines.py
index 33e3b70f..7333821f 100755
--- a/toolbin/tests/get_baselines.py
+++ b/toolbin/tests/get_baselines.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/gscheck_all.py b/toolbin/tests/gscheck_all.py
index 632580ad..2fe3fd8a 100755
--- a/toolbin/tests/gscheck_all.py
+++ b/toolbin/tests/gscheck_all.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/gscheck_fuzzypdf.py b/toolbin/tests/gscheck_fuzzypdf.py
index ff987e86..af312cb8 100755
--- a/toolbin/tests/gscheck_fuzzypdf.py
+++ b/toolbin/tests/gscheck_fuzzypdf.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/gscheck_pdfwrite.py b/toolbin/tests/gscheck_pdfwrite.py
index f5a68f5e..bc841554 100755
--- a/toolbin/tests/gscheck_pdfwrite.py
+++ b/toolbin/tests/gscheck_pdfwrite.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/gscheck_raster.py b/toolbin/tests/gscheck_raster.py
index e909020a..78fe4da8 100755
--- a/toolbin/tests/gscheck_raster.py
+++ b/toolbin/tests/gscheck_raster.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/gscheck_testfiles.py b/toolbin/tests/gscheck_testfiles.py
index c3505726..9baa64b3 100755
--- a/toolbin/tests/gscheck_testfiles.py
+++ b/toolbin/tests/gscheck_testfiles.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/gsconf.py b/toolbin/tests/gsconf.py
index 2e507cce..a2451969 100644
--- a/toolbin/tests/gsconf.py
+++ b/toolbin/tests/gsconf.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/gsparamsets.py b/toolbin/tests/gsparamsets.py
index 6c4f5701..b278537d 100644
--- a/toolbin/tests/gsparamsets.py
+++ b/toolbin/tests/gsparamsets.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/gssum.py b/toolbin/tests/gssum.py
index ae8c3e83..0867fd48 100644
--- a/toolbin/tests/gssum.py
+++ b/toolbin/tests/gssum.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/gstestgs.py b/toolbin/tests/gstestgs.py
index 74748c61..fd8b2fcc 100644
--- a/toolbin/tests/gstestgs.py
+++ b/toolbin/tests/gstestgs.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/gstestutils.py b/toolbin/tests/gstestutils.py
index bdb0ad5c..0c4fa168 100644
--- a/toolbin/tests/gstestutils.py
+++ b/toolbin/tests/gstestutils.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/gsutil.py b/toolbin/tests/gsutil.py
index b0db8d0b..55f47772 100644
--- a/toolbin/tests/gsutil.py
+++ b/toolbin/tests/gsutil.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/make_baselinedb.py b/toolbin/tests/make_baselinedb.py
index 96251d95..6e984a57 100755
--- a/toolbin/tests/make_baselinedb.py
+++ b/toolbin/tests/make_baselinedb.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/make_testdb.py b/toolbin/tests/make_testdb.py
index 0c56f7ca..70f568d3 100755
--- a/toolbin/tests/make_testdb.py
+++ b/toolbin/tests/make_testdb.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/make_two_pdfversions b/toolbin/tests/make_two_pdfversions
index e02dc616..0aeb2db4 100755
--- a/toolbin/tests/make_two_pdfversions
+++ b/toolbin/tests/make_two_pdfversions
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/make_two_versions b/toolbin/tests/make_two_versions
index 938295d6..70fe5fb2 100755
--- a/toolbin/tests/make_two_versions
+++ b/toolbin/tests/make_two_versions
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/myoptparse.py b/toolbin/tests/myoptparse.py
index 448b99ba..50b37ef3 100755
--- a/toolbin/tests/myoptparse.py
+++ b/toolbin/tests/myoptparse.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/rasterdb.py b/toolbin/tests/rasterdb.py
index e3f6bac9..6e5485a4 100644
--- a/toolbin/tests/rasterdb.py
+++ b/toolbin/tests/rasterdb.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/revert_baseline b/toolbin/tests/revert_baseline
index c65ed92f..fb3b87b2 100755
--- a/toolbin/tests/revert_baseline
+++ b/toolbin/tests/revert_baseline
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/revert_pdfbaseline b/toolbin/tests/revert_pdfbaseline
index d1c28f91..833bb770 100755
--- a/toolbin/tests/revert_pdfbaseline
+++ b/toolbin/tests/revert_pdfbaseline
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/run_nightly.py b/toolbin/tests/run_nightly.py
index ddce9681..65ea07b2 100755
--- a/toolbin/tests/run_nightly.py
+++ b/toolbin/tests/run_nightly.py
@@ -1,7 +1,7 @@
#!/usr/bin/python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/run_parallel b/toolbin/tests/run_parallel
index e9f3562c..0360ca67 100755
--- a/toolbin/tests/run_parallel
+++ b/toolbin/tests/run_parallel
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/run_regression.py b/toolbin/tests/run_regression.py
index 2344a2a8..96a5af77 100755
--- a/toolbin/tests/run_regression.py
+++ b/toolbin/tests/run_regression.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/testdiff.py b/toolbin/tests/testdiff.py
index 0538115d..d0f6dc4f 100755
--- a/toolbin/tests/testdiff.py
+++ b/toolbin/tests/testdiff.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/update_baseline.py b/toolbin/tests/update_baseline.py
index 6638717f..c6e0926b 100755
--- a/toolbin/tests/update_baseline.py
+++ b/toolbin/tests/update_baseline.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tests/update_specific b/toolbin/tests/update_specific
index 4beabdb0..0a90c339 100755
--- a/toolbin/tests/update_specific
+++ b/toolbin/tests/update_specific
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- Mode: python -*-
-## Copyright (C) 2001-2019 Artifex Software, Inc.
+## Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/toolbin/tmake.tcl b/toolbin/tmake.tcl
index 744c8c45..e14dc908 100755
--- a/toolbin/tmake.tcl
+++ b/toolbin/tmake.tcl
@@ -2,7 +2,7 @@
# hack to restart using tclsh \
exec tclsh "$0" "$@"
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/windows/GhostPDL.sln b/windows/GhostPDL.sln
index 73ef4ddb..748c7983 100644
--- a/windows/GhostPDL.sln
+++ b/windows/GhostPDL.sln
@@ -134,7 +134,6 @@ Global
{98351FEF-0032-457C-B9D9-D6B68A829386}.DebugXP|x64.ActiveCfg = DebugXP|x64
{98351FEF-0032-457C-B9D9-D6B68A829386}.DebugXP|x64.Build.0 = DebugXP|x64
{98351FEF-0032-457C-B9D9-D6B68A829386}.Memento|Win32.ActiveCfg = Memento|Win32
- {98351FEF-0032-457C-B9D9-D6B68A829386}.Memento|Win32.Build.0 = Memento|Win32
{98351FEF-0032-457C-B9D9-D6B68A829386}.Memento|x64.ActiveCfg = Memento|x64
{98351FEF-0032-457C-B9D9-D6B68A829386}.Memento|x64.Build.0 = Memento|x64
{98351FEF-0032-457C-B9D9-D6B68A829386}.MementoXP|Win32.ActiveCfg = MementoXP|Win32
diff --git a/windows/ghostscript.vcproj b/windows/ghostscript.vcproj
index f785c422..3c085402 100644
--- a/windows/ghostscript.vcproj
+++ b/windows/ghostscript.vcproj
@@ -2002,10 +2002,6 @@
>
</File>
<File
- RelativePath="..\base\gsalphac.c"
- >
- </File>
- <File
RelativePath="..\base\gsargs.c"
>
</File>
@@ -3438,10 +3434,6 @@
>
</File>
<File
- RelativePath="..\base\gsalphac.h"
- >
- </File>
- <File
RelativePath="..\base\gsargs.h"
>
</File>
diff --git a/windows/ghostscript.vcxproj b/windows/ghostscript.vcxproj
index 9e8435fe..0f198da3 100644
--- a/windows/ghostscript.vcxproj
+++ b/windows/ghostscript.vcxproj
@@ -934,6 +934,7 @@
<ClCompile Include="..\base\gdevepo.c" />
<ClCompile Include="..\base\gdevflp.c" />
<ClCompile Include="..\base\gdevhit.c" />
+ <ClCompile Include="..\base\gdevkrnlsclass.c" />
<ClCompile Include="..\base\gdevm1.c" />
<ClCompile Include="..\base\gdevm16.c" />
<ClCompile Include="..\base\gdevm2.c" />
@@ -1010,8 +1011,6 @@
<ClCompile Include="..\base\gp_wsync.c" />
<ClCompile Include="..\base\gp_wutf8.c" />
<ClCompile Include="..\base\gsalloc.c" />
- <ClCompile Include="..\base\gsalpha.c" />
- <ClCompile Include="..\base\gsalphac.c" />
<ClCompile Include="..\base\gsargs.c" />
<ClCompile Include="..\base\gsbitcom.c" />
<ClCompile Include="..\base\gsbitops.c" />
@@ -1104,6 +1103,7 @@
<ClCompile Include="..\base\gspaint.c" />
<ClCompile Include="..\base\gsparam.c" />
<ClCompile Include="..\base\gsparam2.c" />
+ <ClCompile Include="..\base\gsparaml.c" />
<ClCompile Include="..\base\gsparams.c" />
<ClCompile Include="..\base\gsparamx.c" />
<ClCompile Include="..\base\gspath.c" />
@@ -1282,6 +1282,7 @@
<ClCompile Include="..\base\szlibc.c" />
<ClCompile Include="..\base\szlibd.c" />
<ClCompile Include="..\base\szlibe.c" />
+ <ClCompile Include="..\base\tessocr.cpp" />
<ClCompile Include="..\base\ttcalc.c" />
<ClCompile Include="..\base\ttfinp.c" />
<ClCompile Include="..\base\ttfmain.c" />
@@ -1467,6 +1468,7 @@
<ClCompile Include="..\devices\gdevmsxf.c" />
<ClCompile Include="..\devices\gdevn533.c" />
<ClCompile Include="..\devices\gdevo182.c" />
+ <ClCompile Include="..\devices\gdevocr.c" />
<ClCompile Include="..\devices\gdevokii.c" />
<ClCompile Include="..\devices\gdevp2up.c" />
<ClCompile Include="..\devices\gdevpbm.c" />
@@ -1474,6 +1476,7 @@
<ClCompile Include="..\devices\gdevpcl.c" />
<ClCompile Include="..\devices\gdevpcx.c" />
<ClCompile Include="..\devices\gdevpdfimg.c" />
+ <ClCompile Include="..\devices\gdevpdfocr.c" />
<ClCompile Include="..\devices\gdevpe.c" />
<ClCompile Include="..\devices\gdevperm.c" />
<ClCompile Include="..\devices\gdevphex.c" />
@@ -1722,6 +1725,182 @@
<ClCompile Include="..\lcms2mt\src\cmsvirt.c" />
<ClCompile Include="..\lcms2mt\src\cmswtpnt.c" />
<ClCompile Include="..\lcms2mt\src\cmsxform.c" />
+ <ClCompile Include="..\leptonica\src\adaptmap.c" />
+ <ClCompile Include="..\leptonica\src\affine.c" />
+ <ClCompile Include="..\leptonica\src\affinecompose.c" />
+ <ClCompile Include="..\leptonica\src\arrayaccess.c" />
+ <ClCompile Include="..\leptonica\src\bardecode.c" />
+ <ClCompile Include="..\leptonica\src\baseline.c" />
+ <ClCompile Include="..\leptonica\src\bbuffer.c" />
+ <ClCompile Include="..\leptonica\src\bilateral.c" />
+ <ClCompile Include="..\leptonica\src\bilinear.c" />
+ <ClCompile Include="..\leptonica\src\binarize.c" />
+ <ClCompile Include="..\leptonica\src\binexpand.c" />
+ <ClCompile Include="..\leptonica\src\binreduce.c" />
+ <ClCompile Include="..\leptonica\src\blend.c" />
+ <ClCompile Include="..\leptonica\src\bmf.c" />
+ <ClCompile Include="..\leptonica\src\bmpio.c" />
+ <ClCompile Include="..\leptonica\src\bmpiostub.c" />
+ <ClCompile Include="..\leptonica\src\bootnumgen1.c" />
+ <ClCompile Include="..\leptonica\src\bootnumgen2.c" />
+ <ClCompile Include="..\leptonica\src\bootnumgen3.c" />
+ <ClCompile Include="..\leptonica\src\bootnumgen4.c" />
+ <ClCompile Include="..\leptonica\src\boxbasic.c" />
+ <ClCompile Include="..\leptonica\src\boxfunc1.c" />
+ <ClCompile Include="..\leptonica\src\boxfunc2.c" />
+ <ClCompile Include="..\leptonica\src\boxfunc3.c" />
+ <ClCompile Include="..\leptonica\src\boxfunc4.c" />
+ <ClCompile Include="..\leptonica\src\boxfunc5.c" />
+ <ClCompile Include="..\leptonica\src\bytearray.c" />
+ <ClCompile Include="..\leptonica\src\ccbord.c" />
+ <ClCompile Include="..\leptonica\src\ccthin.c" />
+ <ClCompile Include="..\leptonica\src\classapp.c" />
+ <ClCompile Include="..\leptonica\src\colorcontent.c" />
+ <ClCompile Include="..\leptonica\src\colorinfo.c" />
+ <ClCompile Include="..\leptonica\src\coloring.c" />
+ <ClCompile Include="..\leptonica\src\colormap.c" />
+ <ClCompile Include="..\leptonica\src\colormorph.c" />
+ <ClCompile Include="..\leptonica\src\colorquant1.c" />
+ <ClCompile Include="..\leptonica\src\colorquant2.c" />
+ <ClCompile Include="..\leptonica\src\colorseg.c" />
+ <ClCompile Include="..\leptonica\src\colorspace.c" />
+ <ClCompile Include="..\leptonica\src\compare.c" />
+ <ClCompile Include="..\leptonica\src\conncomp.c" />
+ <ClCompile Include="..\leptonica\src\convertfiles.c" />
+ <ClCompile Include="..\leptonica\src\convolve.c" />
+ <ClCompile Include="..\leptonica\src\correlscore.c" />
+ <ClCompile Include="..\leptonica\src\dewarp1.c" />
+ <ClCompile Include="..\leptonica\src\dewarp2.c" />
+ <ClCompile Include="..\leptonica\src\dewarp3.c" />
+ <ClCompile Include="..\leptonica\src\dewarp4.c" />
+ <ClCompile Include="..\leptonica\src\dnabasic.c" />
+ <ClCompile Include="..\leptonica\src\dnafunc1.c" />
+ <ClCompile Include="..\leptonica\src\dnahash.c" />
+ <ClCompile Include="..\leptonica\src\dwacomb.2.c" />
+ <ClCompile Include="..\leptonica\src\dwacomblow.2.c" />
+ <ClCompile Include="..\leptonica\src\edge.c" />
+ <ClCompile Include="..\leptonica\src\encoding.c" />
+ <ClCompile Include="..\leptonica\src\enhance.c" />
+ <ClCompile Include="..\leptonica\src\fhmtauto.c" />
+ <ClCompile Include="..\leptonica\src\fhmtgen.1.c" />
+ <ClCompile Include="..\leptonica\src\fhmtgenlow.1.c" />
+ <ClCompile Include="..\leptonica\src\finditalic.c" />
+ <ClCompile Include="..\leptonica\src\flipdetect.c" />
+ <ClCompile Include="..\leptonica\src\fliphmtgen.c" />
+ <ClCompile Include="..\leptonica\src\fmorphauto.c" />
+ <ClCompile Include="..\leptonica\src\fmorphgen.1.c" />
+ <ClCompile Include="..\leptonica\src\fmorphgenlow.1.c" />
+ <ClCompile Include="..\leptonica\src\fpix1.c" />
+ <ClCompile Include="..\leptonica\src\fpix2.c" />
+ <ClCompile Include="..\leptonica\src\gifio.c" />
+ <ClCompile Include="..\leptonica\src\gifiostub.c" />
+ <ClCompile Include="..\leptonica\src\gplot.c" />
+ <ClCompile Include="..\leptonica\src\graphics.c" />
+ <ClCompile Include="..\leptonica\src\graymorph.c" />
+ <ClCompile Include="..\leptonica\src\grayquant.c" />
+ <ClCompile Include="..\leptonica\src\heap.c" />
+ <ClCompile Include="..\leptonica\src\jbclass.c" />
+ <ClCompile Include="..\leptonica\src\jp2kheader.c" />
+ <ClCompile Include="..\leptonica\src\jp2kheaderstub.c" />
+ <ClCompile Include="..\leptonica\src\jp2kio.c" />
+ <ClCompile Include="..\leptonica\src\jp2kiostub.c" />
+ <ClCompile Include="..\leptonica\src\jpegio.c" />
+ <ClCompile Include="..\leptonica\src\jpegiostub.c" />
+ <ClCompile Include="..\leptonica\src\kernel.c" />
+ <ClCompile Include="..\leptonica\src\leptwin.c" />
+ <ClCompile Include="..\leptonica\src\libversions.c" />
+ <ClCompile Include="..\leptonica\src\list.c" />
+ <ClCompile Include="..\leptonica\src\map.c" />
+ <ClCompile Include="..\leptonica\src\morph.c" />
+ <ClCompile Include="..\leptonica\src\morphapp.c" />
+ <ClCompile Include="..\leptonica\src\morphdwa.c" />
+ <ClCompile Include="..\leptonica\src\morphseq.c" />
+ <ClCompile Include="..\leptonica\src\numabasic.c" />
+ <ClCompile Include="..\leptonica\src\numafunc1.c" />
+ <ClCompile Include="..\leptonica\src\numafunc2.c" />
+ <ClCompile Include="..\leptonica\src\pageseg.c" />
+ <ClCompile Include="..\leptonica\src\paintcmap.c" />
+ <ClCompile Include="..\leptonica\src\parseprotos.c" />
+ <ClCompile Include="..\leptonica\src\partify.c" />
+ <ClCompile Include="..\leptonica\src\partition.c" />
+ <ClCompile Include="..\leptonica\src\pdfio1.c" />
+ <ClCompile Include="..\leptonica\src\pdfio1stub.c" />
+ <ClCompile Include="..\leptonica\src\pdfio2.c" />
+ <ClCompile Include="..\leptonica\src\pdfio2stub.c" />
+ <ClCompile Include="..\leptonica\src\pix1.c" />
+ <ClCompile Include="..\leptonica\src\pix2.c" />
+ <ClCompile Include="..\leptonica\src\pix3.c" />
+ <ClCompile Include="..\leptonica\src\pix4.c" />
+ <ClCompile Include="..\leptonica\src\pix5.c" />
+ <ClCompile Include="..\leptonica\src\pixabasic.c" />
+ <ClCompile Include="..\leptonica\src\pixacc.c" />
+ <ClCompile Include="..\leptonica\src\pixafunc1.c" />
+ <ClCompile Include="..\leptonica\src\pixafunc2.c" />
+ <ClCompile Include="..\leptonica\src\pixalloc.c" />
+ <ClCompile Include="..\leptonica\src\pixarith.c" />
+ <ClCompile Include="..\leptonica\src\pixcomp.c" />
+ <ClCompile Include="..\leptonica\src\pixconv.c" />
+ <ClCompile Include="..\leptonica\src\pixlabel.c" />
+ <ClCompile Include="..\leptonica\src\pixtiling.c" />
+ <ClCompile Include="..\leptonica\src\pngio.c" />
+ <ClCompile Include="..\leptonica\src\pngiostub.c" />
+ <ClCompile Include="..\leptonica\src\pnmio.c" />
+ <ClCompile Include="..\leptonica\src\pnmiostub.c" />
+ <ClCompile Include="..\leptonica\src\projective.c" />
+ <ClCompile Include="..\leptonica\src\psio1.c" />
+ <ClCompile Include="..\leptonica\src\psio1stub.c" />
+ <ClCompile Include="..\leptonica\src\psio2.c" />
+ <ClCompile Include="..\leptonica\src\psio2stub.c" />
+ <ClCompile Include="..\leptonica\src\ptabasic.c" />
+ <ClCompile Include="..\leptonica\src\ptafunc1.c" />
+ <ClCompile Include="..\leptonica\src\ptafunc2.c" />
+ <ClCompile Include="..\leptonica\src\ptra.c" />
+ <ClCompile Include="..\leptonica\src\quadtree.c" />
+ <ClCompile Include="..\leptonica\src\queue.c" />
+ <ClCompile Include="..\leptonica\src\rank.c" />
+ <ClCompile Include="..\leptonica\src\rbtree.c" />
+ <ClCompile Include="..\leptonica\src\readbarcode.c" />
+ <ClCompile Include="..\leptonica\src\readfile.c" />
+ <ClCompile Include="..\leptonica\src\recogbasic.c" />
+ <ClCompile Include="..\leptonica\src\recogdid.c" />
+ <ClCompile Include="..\leptonica\src\recogident.c" />
+ <ClCompile Include="..\leptonica\src\recogtrain.c" />
+ <ClCompile Include="..\leptonica\src\regutils.c" />
+ <ClCompile Include="..\leptonica\src\rop.c" />
+ <ClCompile Include="..\leptonica\src\roplow.c" />
+ <ClCompile Include="..\leptonica\src\rotate.c" />
+ <ClCompile Include="..\leptonica\src\rotateam.c" />
+ <ClCompile Include="..\leptonica\src\rotateorth.c" />
+ <ClCompile Include="..\leptonica\src\rotateshear.c" />
+ <ClCompile Include="..\leptonica\src\runlength.c" />
+ <ClCompile Include="..\leptonica\src\sarray1.c" />
+ <ClCompile Include="..\leptonica\src\sarray2.c" />
+ <ClCompile Include="..\leptonica\src\scale1.c" />
+ <ClCompile Include="..\leptonica\src\scale2.c" />
+ <ClCompile Include="..\leptonica\src\seedfill.c" />
+ <ClCompile Include="..\leptonica\src\sel1.c" />
+ <ClCompile Include="..\leptonica\src\sel2.c" />
+ <ClCompile Include="..\leptonica\src\selgen.c" />
+ <ClCompile Include="..\leptonica\src\shear.c" />
+ <ClCompile Include="..\leptonica\src\skew.c" />
+ <ClCompile Include="..\leptonica\src\spixio.c" />
+ <ClCompile Include="..\leptonica\src\stack.c" />
+ <ClCompile Include="..\leptonica\src\stringcode.c" />
+ <ClCompile Include="..\leptonica\src\strokes.c" />
+ <ClCompile Include="..\leptonica\src\textops.c" />
+ <ClCompile Include="..\leptonica\src\tiffio.c" />
+ <ClCompile Include="..\leptonica\src\tiffiostub.c" />
+ <ClCompile Include="..\leptonica\src\utils1.c" />
+ <ClCompile Include="..\leptonica\src\utils2.c" />
+ <ClCompile Include="..\leptonica\src\warper.c" />
+ <ClCompile Include="..\leptonica\src\watershed.c" />
+ <ClCompile Include="..\leptonica\src\webpanimio.c" />
+ <ClCompile Include="..\leptonica\src\webpanimiostub.c" />
+ <ClCompile Include="..\leptonica\src\webpio.c" />
+ <ClCompile Include="..\leptonica\src\webpiostub.c" />
+ <ClCompile Include="..\leptonica\src\writefile.c" />
+ <ClCompile Include="..\leptonica\src\zlibmem.c" />
+ <ClCompile Include="..\leptonica\src\zlibmemstub.c" />
<ClCompile Include="..\libpng\example.c" />
<ClCompile Include="..\libpng\png.c" />
<ClCompile Include="..\libpng\pngerror.c" />
@@ -1927,6 +2106,233 @@
<ClCompile Include="..\psi\zusparam.c" />
<ClCompile Include="..\psi\zvmem.c" />
<ClCompile Include="..\psi\zvmem2.c" />
+ <ClCompile Include="..\tesseract\src\api\altorenderer.cpp" />
+ <ClCompile Include="..\tesseract\src\api\baseapi.cpp" />
+ <ClCompile Include="..\tesseract\src\api\capi.cpp" />
+ <ClCompile Include="..\tesseract\src\api\hocrrenderer.cpp" />
+ <ClCompile Include="..\tesseract\src\api\lstmboxrenderer.cpp" />
+ <ClCompile Include="..\tesseract\src\api\pdfrenderer.cpp" />
+ <ClCompile Include="..\tesseract\src\api\renderer.cpp" />
+ <ClCompile Include="..\tesseract\src\api\tesseractmain.cpp" />
+ <ClCompile Include="..\tesseract\src\api\wordstrboxrenderer.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\dotproduct.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\dotproductavx.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\dotproductfma.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\dotproductsse.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrix.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrixavx2.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrixneon.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrixsse.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\simddetect.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\adaptions.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\applybox.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\control.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\docqual.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\equationdetect.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\fixspace.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\fixxht.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\linerec.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\ltrresultiterator.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\mutableiterator.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\osdetect.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\output.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\pageiterator.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\pagesegmain.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\pagewalk.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\paragraphs.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\paramsd.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\par_control.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\pgedit.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\recogtraining.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\reject.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\resultiterator.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\superscript.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\tessbox.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\tessedit.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\tesseractclass.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\tessvars.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\tfacepp.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\thresholder.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\werdit.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\blamer.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\blobbox.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\blobs.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\blread.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\boxread.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\boxword.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\ccstruct.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\coutln.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\detlinefit.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\dppoint.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\fontinfo.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\imagedata.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\linlsq.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\matrix.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\mod128.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\normalis.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\ocrblock.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\ocrpara.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\ocrrow.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\otsuthr.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\pageres.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\params_training_featdef.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\pdblock.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\points.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\polyaprx.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\polyblk.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\quadlsq.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\quspline.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\ratngs.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\rect.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\rejctmap.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\seam.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\split.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\statistc.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\stepblob.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\werd.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\ambigs.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\bitvector.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\ccutil.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\clst.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\elst.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\elst2.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\errcode.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\globaloc.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\indexmapbidi.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\mainblk.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\params.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\scanutils.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\serialis.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\strngs.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\tessdatamanager.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\tprintf.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\unichar.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\unicharcompress.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\unicharmap.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\unicharset.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\unicodes.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\universalambigs.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\adaptive.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\adaptmatch.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\blobclass.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\classify.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\cluster.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\clusttool.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\cutoffs.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\featdefs.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\float2int.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\fpoint.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\intfeaturespace.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\intfx.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\intmatcher.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\intproto.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\kdtree.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\mf.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\mfdefs.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\mfoutline.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\mfx.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\normfeat.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\normmatch.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\ocrfeatures.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\outfeat.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\picofeat.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\protos.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\shapeclassifier.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\shapetable.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\tessclassifier.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\trainingsample.cpp" />
+ <ClCompile Include="..\tesseract\src\cutil\callcpp.cpp" />
+ <ClCompile Include="..\tesseract\src\cutil\emalloc.cpp" />
+ <ClCompile Include="..\tesseract\src\cutil\oldlist.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\context.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\dawg.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\dawg_cache.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\dict.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\hyphen.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\permdawg.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\stopper.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\trie.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\convolve.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\fullyconnected.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\functions.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\input.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\lstm.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\lstmrecognizer.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\maxpool.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\network.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\networkio.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\parallel.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\plumbing.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\recodebeam.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\reconfig.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\reversed.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\series.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\stridemap.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\tfnetwork.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\weightmatrix.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\alignedblob.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\baselinedetect.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\bbgrid.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\blkocc.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\blobgrid.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\ccnontextdetect.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\cjkpitch.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\colfind.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\colpartition.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\colpartitiongrid.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\colpartitionset.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\devanagari_processing.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\drawtord.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\edgblob.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\edgloop.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\equationdetectbase.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\fpchop.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\gap_map.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\imagefind.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\linefind.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\makerow.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\oldbasel.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\pithsync.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\pitsync1.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\scanedg.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\sortflts.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\strokewidth.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tabfind.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tablefind.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tablerecog.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tabvector.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\textlineprojection.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\textord.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\topitch.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tordmain.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tospace.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tovars.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\underlin.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\wordseg.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\workingpartset.cpp" />
+ <ClCompile Include="..\tesseract\src\viewer\scrollview.cpp" />
+ <ClCompile Include="..\tesseract\src\viewer\svmnode.cpp" />
+ <ClCompile Include="..\tesseract\src\viewer\svpaint.cpp" />
+ <ClCompile Include="..\tesseract\src\viewer\svutil.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\associate.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\chop.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\chopper.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\drawfx.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\findseam.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\gradechop.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\language_model.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\lm_consistency.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\lm_pain_points.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\lm_state.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\outlines.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\params_model.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\pieces.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\plotedges.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\render.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\segsearch.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\tface.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\wordclass.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\wordrec.cpp" />
<ClCompile Include="..\tiff\libtiff\mkg3states.c" />
<ClCompile Include="..\tiff\libtiff\tif_acorn.c" />
<ClCompile Include="..\tiff\libtiff\tif_apple.c" />
@@ -2051,7 +2457,9 @@
<ClInclude Include="..\base\gdevddrw.h" />
<ClInclude Include="..\base\gdevdevn.h" />
<ClInclude Include="..\base\gdevdevnprn.h" />
+ <ClInclude Include="..\base\gdevepo.h" />
<ClInclude Include="..\base\gdevflp.h" />
+ <ClInclude Include="..\base\gdevkrnlsclass.h" />
<ClInclude Include="..\base\gdevmem.h" />
<ClInclude Include="..\base\gdevmpla.h" />
<ClInclude Include="..\base\gdevmplt.h" />
@@ -2077,8 +2485,6 @@
<ClInclude Include="..\base\gp_mswin.h" />
<ClInclude Include="..\base\gp_os2.h" />
<ClInclude Include="..\base\gsalloc.h" />
- <ClInclude Include="..\base\gsalpha.h" />
- <ClInclude Include="..\base\gsalphac.h" />
<ClInclude Include="..\base\gsargs.h" />
<ClInclude Include="..\base\gsbitmap.h" />
<ClInclude Include="..\base\gsbitops.h" />
@@ -2390,6 +2796,7 @@
<ClInclude Include="..\base\strmio.h" />
<ClInclude Include="..\base\szlibx.h" />
<ClInclude Include="..\base\szlibxx.h" />
+ <ClInclude Include="..\base\tessocr.h" />
<ClInclude Include="..\base\time_.h" />
<ClInclude Include="..\base\ttcalc.h" />
<ClInclude Include="..\base\ttcommon.h" />
@@ -2476,6 +2883,7 @@
<ClInclude Include="..\devices\gdevmeds.h" />
<ClInclude Include="..\devices\gdevmgr.h" />
<ClInclude Include="..\devices\gdevpcl.h" />
+ <ClInclude Include="..\devices\gdevpdfimg.h" />
<ClInclude Include="..\devices\gdevplib.h" />
<ClInclude Include="..\devices\gdevpm.h" />
<ClInclude Include="..\devices\gdevprna.h" />
@@ -2579,6 +2987,37 @@
<ClInclude Include="..\lcms2mt\include\lcms2mt_plugin.h" />
<ClInclude Include="..\lcms2mt\src\extra_xform.h" />
<ClInclude Include="..\lcms2mt\src\lcms2_internal.h" />
+ <ClInclude Include="..\leptonica\src\allheaders.h" />
+ <ClInclude Include="..\leptonica\src\alltypes.h" />
+ <ClInclude Include="..\leptonica\src\array.h" />
+ <ClInclude Include="..\leptonica\src\arrayaccess.h" />
+ <ClInclude Include="..\leptonica\src\bbuffer.h" />
+ <ClInclude Include="..\leptonica\src\bilateral.h" />
+ <ClInclude Include="..\leptonica\src\bmf.h" />
+ <ClInclude Include="..\leptonica\src\bmfdata.h" />
+ <ClInclude Include="..\leptonica\src\bmp.h" />
+ <ClInclude Include="..\leptonica\src\ccbord.h" />
+ <ClInclude Include="..\leptonica\src\colorinfo.h" />
+ <ClInclude Include="..\leptonica\src\dewarp.h" />
+ <ClInclude Include="..\leptonica\src\endianness.h" />
+ <ClInclude Include="..\leptonica\src\environ.h" />
+ <ClInclude Include="..\leptonica\src\gplot.h" />
+ <ClInclude Include="..\leptonica\src\heap.h" />
+ <ClInclude Include="..\leptonica\src\imageio.h" />
+ <ClInclude Include="..\leptonica\src\jbclass.h" />
+ <ClInclude Include="..\leptonica\src\leptwin.h" />
+ <ClInclude Include="..\leptonica\src\list.h" />
+ <ClInclude Include="..\leptonica\src\morph.h" />
+ <ClInclude Include="..\leptonica\src\pix.h" />
+ <ClInclude Include="..\leptonica\src\ptra.h" />
+ <ClInclude Include="..\leptonica\src\queue.h" />
+ <ClInclude Include="..\leptonica\src\rbtree.h" />
+ <ClInclude Include="..\leptonica\src\readbarcode.h" />
+ <ClInclude Include="..\leptonica\src\recog.h" />
+ <ClInclude Include="..\leptonica\src\regutils.h" />
+ <ClInclude Include="..\leptonica\src\stack.h" />
+ <ClInclude Include="..\leptonica\src\stringcode.h" />
+ <ClInclude Include="..\leptonica\src\watershed.h" />
<ClInclude Include="..\libpng\png.h" />
<ClInclude Include="..\libpng\pngconf.h" />
<ClInclude Include="..\openjpeg\src\lib\openjp2\bio.h" />
@@ -2732,6 +3171,223 @@
<ClInclude Include="..\psi\zfunc.h" />
<ClInclude Include="..\psi\zht2.h" />
<ClInclude Include="..\psi\zicc.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\apitypes.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\baseapi.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\capi.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\genericvector.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\helpers.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\ltrresultiterator.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\ocrclass.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\osdetect.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\pageiterator.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\platform.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\publictypes.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\renderer.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\resultiterator.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\serialis.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\strngs.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\thresholder.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\unichar.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\version.h" />
+ <ClInclude Include="..\tesseract\src\arch\dotproduct.h" />
+ <ClInclude Include="..\tesseract\src\arch\intsimdmatrix.h" />
+ <ClInclude Include="..\tesseract\src\arch\simddetect.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\control.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\docqual.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\equationdetect.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\fixspace.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\mutableiterator.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\output.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\paragraphs.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\paragraphs_internal.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\paramsd.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\pgedit.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\reject.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\tesseractclass.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\tessvars.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\werdit.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\blamer.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\blobbox.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\blobs.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\blread.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\boxread.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\boxword.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\ccstruct.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\coutln.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\crakedge.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\debugpixa.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\detlinefit.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\dppoint.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\fontinfo.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\imagedata.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\linlsq.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\matrix.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\mod128.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\normalis.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\ocrblock.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\ocrpara.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\ocrrow.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\otsuthr.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\pageres.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\params_training_featdef.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\pdblock.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\points.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\polyaprx.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\polyblk.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\quadlsq.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\quadratc.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\quspline.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\ratngs.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\rect.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\rejctmap.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\seam.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\split.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\statistc.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\stepblob.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\werd.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\ambigs.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\bits16.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\bitvector.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\ccutil.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\clst.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\doubleptr.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\elst.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\elst2.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\errcode.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\fileerr.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\genericheap.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\globaloc.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\host.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\indexmapbidi.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\kdpair.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\lsterr.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\object_cache.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\params.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\qrsequence.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\scanutils.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\sorthelper.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\tessdatamanager.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\tprintf.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\unicharcompress.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\unicharmap.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\unicharset.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\unicity_table.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\unicodes.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\universalambigs.h" />
+ <ClInclude Include="..\tesseract\src\classify\adaptive.h" />
+ <ClInclude Include="..\tesseract\src\classify\blobclass.h" />
+ <ClInclude Include="..\tesseract\src\classify\classify.h" />
+ <ClInclude Include="..\tesseract\src\classify\cluster.h" />
+ <ClInclude Include="..\tesseract\src\classify\clusttool.h" />
+ <ClInclude Include="..\tesseract\src\classify\featdefs.h" />
+ <ClInclude Include="..\tesseract\src\classify\float2int.h" />
+ <ClInclude Include="..\tesseract\src\classify\fpoint.h" />
+ <ClInclude Include="..\tesseract\src\classify\intfeaturespace.h" />
+ <ClInclude Include="..\tesseract\src\classify\intfx.h" />
+ <ClInclude Include="..\tesseract\src\classify\intmatcher.h" />
+ <ClInclude Include="..\tesseract\src\classify\intproto.h" />
+ <ClInclude Include="..\tesseract\src\classify\kdtree.h" />
+ <ClInclude Include="..\tesseract\src\classify\mf.h" />
+ <ClInclude Include="..\tesseract\src\classify\mfdefs.h" />
+ <ClInclude Include="..\tesseract\src\classify\mfoutline.h" />
+ <ClInclude Include="..\tesseract\src\classify\mfx.h" />
+ <ClInclude Include="..\tesseract\src\classify\normfeat.h" />
+ <ClInclude Include="..\tesseract\src\classify\normmatch.h" />
+ <ClInclude Include="..\tesseract\src\classify\ocrfeatures.h" />
+ <ClInclude Include="..\tesseract\src\classify\outfeat.h" />
+ <ClInclude Include="..\tesseract\src\classify\picofeat.h" />
+ <ClInclude Include="..\tesseract\src\classify\protos.h" />
+ <ClInclude Include="..\tesseract\src\classify\shapeclassifier.h" />
+ <ClInclude Include="..\tesseract\src\classify\shapetable.h" />
+ <ClInclude Include="..\tesseract\src\classify\tessclassifier.h" />
+ <ClInclude Include="..\tesseract\src\classify\trainingsample.h" />
+ <ClInclude Include="..\tesseract\src\cutil\bitvec.h" />
+ <ClInclude Include="..\tesseract\src\cutil\callcpp.h" />
+ <ClInclude Include="..\tesseract\src\cutil\emalloc.h" />
+ <ClInclude Include="..\tesseract\src\cutil\oldlist.h" />
+ <ClInclude Include="..\tesseract\src\dict\dawg.h" />
+ <ClInclude Include="..\tesseract\src\dict\dawg_cache.h" />
+ <ClInclude Include="..\tesseract\src\dict\dict.h" />
+ <ClInclude Include="..\tesseract\src\dict\matchdefs.h" />
+ <ClInclude Include="..\tesseract\src\dict\stopper.h" />
+ <ClInclude Include="..\tesseract\src\dict\trie.h" />
+ <ClInclude Include="..\tesseract\src\lstm\convolve.h" />
+ <ClInclude Include="..\tesseract\src\lstm\fullyconnected.h" />
+ <ClInclude Include="..\tesseract\src\lstm\functions.h" />
+ <ClInclude Include="..\tesseract\src\lstm\input.h" />
+ <ClInclude Include="..\tesseract\src\lstm\lstm.h" />
+ <ClInclude Include="..\tesseract\src\lstm\lstmrecognizer.h" />
+ <ClInclude Include="..\tesseract\src\lstm\maxpool.h" />
+ <ClInclude Include="..\tesseract\src\lstm\network.h" />
+ <ClInclude Include="..\tesseract\src\lstm\networkio.h" />
+ <ClInclude Include="..\tesseract\src\lstm\networkscratch.h" />
+ <ClInclude Include="..\tesseract\src\lstm\parallel.h" />
+ <ClInclude Include="..\tesseract\src\lstm\plumbing.h" />
+ <ClInclude Include="..\tesseract\src\lstm\recodebeam.h" />
+ <ClInclude Include="..\tesseract\src\lstm\reconfig.h" />
+ <ClInclude Include="..\tesseract\src\lstm\reversed.h" />
+ <ClInclude Include="..\tesseract\src\lstm\series.h" />
+ <ClInclude Include="..\tesseract\src\lstm\static_shape.h" />
+ <ClInclude Include="..\tesseract\src\lstm\stridemap.h" />
+ <ClInclude Include="..\tesseract\src\lstm\tfnetwork.h" />
+ <ClInclude Include="..\tesseract\src\lstm\tfnetwork.pb.h" />
+ <ClInclude Include="..\tesseract\src\lstm\weightmatrix.h" />
+ <ClInclude Include="..\tesseract\src\textord\alignedblob.h" />
+ <ClInclude Include="..\tesseract\src\textord\baselinedetect.h" />
+ <ClInclude Include="..\tesseract\src\textord\bbgrid.h" />
+ <ClInclude Include="..\tesseract\src\textord\blkocc.h" />
+ <ClInclude Include="..\tesseract\src\textord\blobgrid.h" />
+ <ClInclude Include="..\tesseract\src\textord\ccnontextdetect.h" />
+ <ClInclude Include="..\tesseract\src\textord\cjkpitch.h" />
+ <ClInclude Include="..\tesseract\src\textord\colfind.h" />
+ <ClInclude Include="..\tesseract\src\textord\colpartition.h" />
+ <ClInclude Include="..\tesseract\src\textord\colpartitiongrid.h" />
+ <ClInclude Include="..\tesseract\src\textord\colpartitionset.h" />
+ <ClInclude Include="..\tesseract\src\textord\devanagari_processing.h" />
+ <ClInclude Include="..\tesseract\src\textord\drawtord.h" />
+ <ClInclude Include="..\tesseract\src\textord\edgblob.h" />
+ <ClInclude Include="..\tesseract\src\textord\edgloop.h" />
+ <ClInclude Include="..\tesseract\src\textord\equationdetectbase.h" />
+ <ClInclude Include="..\tesseract\src\textord\fpchop.h" />
+ <ClInclude Include="..\tesseract\src\textord\gap_map.h" />
+ <ClInclude Include="..\tesseract\src\textord\imagefind.h" />
+ <ClInclude Include="..\tesseract\src\textord\linefind.h" />
+ <ClInclude Include="..\tesseract\src\textord\makerow.h" />
+ <ClInclude Include="..\tesseract\src\textord\oldbasel.h" />
+ <ClInclude Include="..\tesseract\src\textord\pithsync.h" />
+ <ClInclude Include="..\tesseract\src\textord\pitsync1.h" />
+ <ClInclude Include="..\tesseract\src\textord\scanedg.h" />
+ <ClInclude Include="..\tesseract\src\textord\sortflts.h" />
+ <ClInclude Include="..\tesseract\src\textord\strokewidth.h" />
+ <ClInclude Include="..\tesseract\src\textord\tabfind.h" />
+ <ClInclude Include="..\tesseract\src\textord\tablefind.h" />
+ <ClInclude Include="..\tesseract\src\textord\tablerecog.h" />
+ <ClInclude Include="..\tesseract\src\textord\tabvector.h" />
+ <ClInclude Include="..\tesseract\src\textord\textlineprojection.h" />
+ <ClInclude Include="..\tesseract\src\textord\textord.h" />
+ <ClInclude Include="..\tesseract\src\textord\topitch.h" />
+ <ClInclude Include="..\tesseract\src\textord\tordmain.h" />
+ <ClInclude Include="..\tesseract\src\textord\tovars.h" />
+ <ClInclude Include="..\tesseract\src\textord\underlin.h" />
+ <ClInclude Include="..\tesseract\src\textord\wordseg.h" />
+ <ClInclude Include="..\tesseract\src\textord\workingpartset.h" />
+ <ClInclude Include="..\tesseract\src\viewer\scrollview.h" />
+ <ClInclude Include="..\tesseract\src\viewer\svmnode.h" />
+ <ClInclude Include="..\tesseract\src\viewer\svutil.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\associate.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\chop.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\drawfx.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\findseam.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\language_model.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\lm_consistency.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\lm_pain_points.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\lm_state.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\measure.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\outlines.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\params_model.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\plotedges.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\render.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\wordrec.h" />
<ClInclude Include="..\tiff\libtiff\t4.h" />
<ClInclude Include="..\tiff\libtiff\tiff.h" />
<ClInclude Include="..\tiff\libtiff\tiffconf.vc.h" />
@@ -2776,4 +3432,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/windows/ghostscript.vcxproj.filters b/windows/ghostscript.vcxproj.filters
index f4b89007..f4a89bfd 100644
--- a/windows/ghostscript.vcxproj.filters
+++ b/windows/ghostscript.vcxproj.filters
@@ -184,6 +184,51 @@
<Filter Include="urf">
<UniqueIdentifier>{a420d4f4-ac35-48c1-b997-8004f7ae79d7}</UniqueIdentifier>
</Filter>
+ <Filter Include="leptonica">
+ <UniqueIdentifier>{cb48cac6-a1af-4257-807b-19085c7cdb1a}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract">
+ <UniqueIdentifier>{7b741378-6c33-497e-ad7f-93dd1ae710fe}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\include">
+ <UniqueIdentifier>{cab6877a-5676-4cc9-8724-2f7e7fade042}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\api">
+ <UniqueIdentifier>{af403905-0517-4269-a9b2-7b10703f495f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\arch">
+ <UniqueIdentifier>{a7b9ce88-2b1b-42b3-9ccd-955aee7b244f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\ccmain">
+ <UniqueIdentifier>{3508c7d6-7646-47e1-b60e-26e3872030d7}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\ccstruct">
+ <UniqueIdentifier>{1123f6ca-e285-4430-8e2d-adb8b4c32f10}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\ccutil">
+ <UniqueIdentifier>{e145daea-cbaf-45d1-924f-23d9f38c78ee}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\classify">
+ <UniqueIdentifier>{c189da2c-6166-47ac-a876-dda8013a7a8b}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\cutil">
+ <UniqueIdentifier>{9e304f3b-e87b-48d5-92f7-5826c71fd926}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\dict">
+ <UniqueIdentifier>{d1276e20-672b-4349-8f71-220c7c37315d}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\lstm">
+ <UniqueIdentifier>{4624f4da-7119-49c1-81a0-21e3746a2cc0}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\textord">
+ <UniqueIdentifier>{4a609d87-7312-47ea-bb63-20f903c54ea5}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\viewer">
+ <UniqueIdentifier>{c5dbae86-9146-4d69-b3ac-f1d086927792}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\wordrec">
+ <UniqueIdentifier>{d5ba0dd7-f585-494f-a5a3-eca161773d74}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<None Include="..\Resource\CMap\78-EUC-H">
@@ -1583,12 +1628,6 @@
<ClCompile Include="..\base\gsalloc.c">
<Filter>base</Filter>
</ClCompile>
- <ClCompile Include="..\base\gsalpha.c">
- <Filter>base</Filter>
- </ClCompile>
- <ClCompile Include="..\base\gsalphac.c">
- <Filter>base</Filter>
- </ClCompile>
<ClCompile Include="..\base\gsargs.c">
<Filter>base</Filter>
</ClCompile>
@@ -4763,6 +4802,1230 @@
<ClCompile Include="..\urf\urffilter.c">
<Filter>urf</Filter>
</ClCompile>
+ <ClCompile Include="..\devices\gdevocr.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\adaptmap.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\affine.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\affinecompose.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\arrayaccess.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bardecode.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\baseline.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bbuffer.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bilateral.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bilinear.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\binarize.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\binexpand.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\binreduce.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\blend.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bmf.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bmpio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bmpiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bootnumgen1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bootnumgen2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bootnumgen3.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bootnumgen4.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\boxbasic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\boxfunc1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\boxfunc2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\boxfunc3.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\boxfunc4.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\boxfunc5.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bytearray.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\ccbord.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\ccthin.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\classapp.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colorcontent.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colorinfo.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\coloring.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colormap.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colormorph.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colorquant1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colorquant2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colorseg.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colorspace.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\compare.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\conncomp.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\convertfiles.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\convolve.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\correlscore.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dewarp1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dewarp2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dewarp3.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dewarp4.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dnabasic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dnafunc1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dnahash.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dwacomb.2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dwacomblow.2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\edge.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\encoding.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\enhance.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fhmtauto.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fhmtgen.1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fhmtgenlow.1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\finditalic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\flipdetect.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fliphmtgen.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fmorphauto.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fmorphgen.1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fmorphgenlow.1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fpix1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fpix2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\gifio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\gifiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\gplot.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\graphics.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\graymorph.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\grayquant.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\heap.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jbclass.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jp2kheader.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jp2kheaderstub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jp2kio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jp2kiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jpegio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jpegiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\kernel.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\leptwin.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\libversions.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\list.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\map.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\morph.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\morphapp.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\morphdwa.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\morphseq.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\numabasic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\numafunc1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\numafunc2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pageseg.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\paintcmap.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\parseprotos.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\partify.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\partition.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pdfio1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pdfio1stub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pdfio2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pdfio2stub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pix1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pix2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pix3.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pix4.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pix5.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixabasic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixacc.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixafunc1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixafunc2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixalloc.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixarith.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixcomp.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixconv.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixlabel.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixtiling.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pngio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pngiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pnmio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pnmiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\projective.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\psio1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\psio1stub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\psio2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\psio2stub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\ptabasic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\ptafunc1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\ptafunc2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\ptra.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\quadtree.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\queue.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rank.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rbtree.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\readbarcode.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\readfile.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\recogbasic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\recogdid.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\recogident.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\recogtrain.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\regutils.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rop.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\roplow.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rotate.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rotateam.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rotateorth.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rotateshear.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\runlength.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\sarray1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\sarray2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\scale1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\scale2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\seedfill.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\sel1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\sel2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\selgen.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\shear.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\skew.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\spixio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\stack.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\stringcode.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\strokes.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\textops.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\tiffio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\tiffiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\utils1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\utils2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\warper.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\watershed.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\webpanimio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\webpanimiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\webpio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\webpiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\writefile.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\zlibmem.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\zlibmemstub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\altorenderer.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\baseapi.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\capi.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\hocrrenderer.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\lstmboxrenderer.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\pdfrenderer.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\renderer.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\tesseractmain.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\wordstrboxrenderer.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\dotproduct.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\dotproductavx.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\dotproductfma.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\dotproductsse.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrix.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrixavx2.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrixsse.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\simddetect.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\tessocr.cpp">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevpdfocr.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrixneon.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\adaptions.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\applybox.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\control.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\docqual.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\equationdetect.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\fixspace.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\fixxht.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\linerec.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\ltrresultiterator.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\mutableiterator.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\osdetect.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\output.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\pageiterator.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\pagesegmain.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\pagewalk.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\par_control.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\paragraphs.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\paramsd.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\pgedit.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\recogtraining.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\reject.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\resultiterator.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\superscript.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\tessbox.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\tessedit.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\tesseractclass.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\tessvars.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\tfacepp.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\thresholder.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\werdit.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\blamer.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\blobbox.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\blobs.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\blread.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\boxread.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\boxword.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\ccstruct.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\coutln.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\detlinefit.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\dppoint.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\fontinfo.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\imagedata.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\linlsq.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\matrix.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\mod128.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\normalis.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\ocrblock.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\ocrpara.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\ocrrow.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\otsuthr.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\pageres.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\params_training_featdef.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\pdblock.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\points.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\polyaprx.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\polyblk.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\quadlsq.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\quspline.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\ratngs.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\rect.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\rejctmap.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\seam.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\split.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\statistc.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\stepblob.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\werd.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\ambigs.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\bitvector.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\ccutil.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\clst.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\elst.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\elst2.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\errcode.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\globaloc.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\indexmapbidi.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\mainblk.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\params.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\scanutils.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\serialis.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\strngs.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\tessdatamanager.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\tprintf.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\unichar.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\unicharcompress.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\unicharmap.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\unicharset.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\unicodes.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\universalambigs.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\adaptive.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\adaptmatch.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\blobclass.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\classify.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\cluster.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\clusttool.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\cutoffs.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\featdefs.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\float2int.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\fpoint.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\intfeaturespace.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\intfx.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\intmatcher.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\intproto.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\kdtree.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\mf.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\mfdefs.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\mfoutline.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\mfx.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\normfeat.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\normmatch.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\ocrfeatures.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\outfeat.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\picofeat.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\protos.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\shapeclassifier.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\shapetable.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\tessclassifier.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\trainingsample.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\cutil\callcpp.cpp">
+ <Filter>tesseract\cutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\cutil\emalloc.cpp">
+ <Filter>tesseract\cutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\cutil\oldlist.cpp">
+ <Filter>tesseract\cutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\context.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\dawg.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\dawg_cache.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\dict.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\hyphen.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\permdawg.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\stopper.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\trie.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\convolve.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\fullyconnected.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\functions.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\input.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\lstm.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\lstmrecognizer.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\maxpool.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\network.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\networkio.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\parallel.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\plumbing.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\recodebeam.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\reconfig.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\reversed.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\series.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\stridemap.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\tfnetwork.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\weightmatrix.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\alignedblob.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\baselinedetect.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\bbgrid.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\blkocc.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\blobgrid.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\ccnontextdetect.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\cjkpitch.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\colfind.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\colpartition.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\colpartitiongrid.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\colpartitionset.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\devanagari_processing.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\drawtord.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\edgblob.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\edgloop.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\equationdetectbase.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\fpchop.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\gap_map.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\imagefind.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\linefind.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\makerow.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\oldbasel.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\pithsync.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\pitsync1.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\scanedg.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\sortflts.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\strokewidth.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tabfind.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tablefind.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tablerecog.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tabvector.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\textlineprojection.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\textord.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\topitch.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tordmain.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tospace.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tovars.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\underlin.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\wordseg.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\workingpartset.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\viewer\scrollview.cpp">
+ <Filter>tesseract\viewer</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\viewer\svmnode.cpp">
+ <Filter>tesseract\viewer</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\viewer\svpaint.cpp">
+ <Filter>tesseract\viewer</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\viewer\svutil.cpp">
+ <Filter>tesseract\viewer</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\associate.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\chop.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\chopper.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\drawfx.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\findseam.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\gradechop.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\language_model.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\lm_consistency.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\lm_pain_points.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\lm_state.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\outlines.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\params_model.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\pieces.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\plotedges.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\render.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\segsearch.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\tface.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\wordclass.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\wordrec.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsparaml.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevkrnlsclass.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\base\aes.h">
@@ -4858,12 +6121,6 @@
<ClInclude Include="..\base\gsalloc.h">
<Filter>base %28.h%29</Filter>
</ClInclude>
- <ClInclude Include="..\base\gsalpha.h">
- <Filter>base %28.h%29</Filter>
- </ClInclude>
- <ClInclude Include="..\base\gsalphac.h">
- <Filter>base %28.h%29</Filter>
- </ClInclude>
<ClInclude Include="..\base\gsargs.h">
<Filter>base %28.h%29</Filter>
</ClInclude>
@@ -6955,6 +8212,762 @@
<ClInclude Include="..\urf\surfx.h">
<Filter>urf</Filter>
</ClInclude>
+ <ClInclude Include="..\leptonica\src\allheaders.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\alltypes.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\array.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\arrayaccess.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\bbuffer.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\bilateral.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\bmf.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\bmfdata.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\bmp.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\ccbord.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\colorinfo.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\dewarp.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\endianness.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\environ.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\gplot.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\heap.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\imageio.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\jbclass.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\leptwin.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\list.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\morph.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\pix.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\ptra.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\queue.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\rbtree.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\readbarcode.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\recog.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\regutils.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\stack.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\stringcode.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\watershed.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\tessocr.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\version.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\arch\dotproduct.h">
+ <Filter>tesseract\arch</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\arch\intsimdmatrix.h">
+ <Filter>tesseract\arch</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\arch\simddetect.h">
+ <Filter>tesseract\arch</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevpdfimg.h">
+ <Filter>devices</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\apitypes.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\baseapi.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\capi.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\genericvector.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\helpers.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\ltrresultiterator.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\ocrclass.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\osdetect.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\pageiterator.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\platform.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\publictypes.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\renderer.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\resultiterator.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\serialis.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\strngs.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\thresholder.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\unichar.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\control.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\docqual.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\equationdetect.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\fixspace.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\mutableiterator.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\output.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\paragraphs.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\paragraphs_internal.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\paramsd.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\pgedit.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\reject.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\tesseractclass.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\tessvars.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\werdit.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\blamer.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\blobbox.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\blobs.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\blread.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\boxread.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\boxword.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\ccstruct.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\coutln.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\crakedge.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\debugpixa.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\detlinefit.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\dppoint.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\fontinfo.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\imagedata.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\linlsq.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\matrix.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\mod128.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\normalis.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\ocrblock.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\ocrpara.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\ocrrow.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\otsuthr.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\pageres.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\params_training_featdef.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\pdblock.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\points.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\polyaprx.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\polyblk.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\quadlsq.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\quadratc.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\quspline.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\ratngs.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\rect.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\rejctmap.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\seam.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\split.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\statistc.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\stepblob.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\werd.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\ambigs.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\bits16.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\bitvector.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\ccutil.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\clst.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\doubleptr.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\elst.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\elst2.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\errcode.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\fileerr.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\genericheap.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\globaloc.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\host.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\indexmapbidi.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\kdpair.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\lsterr.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\object_cache.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\params.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\qrsequence.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\scanutils.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\sorthelper.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\tessdatamanager.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\tprintf.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\unicharcompress.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\unicharmap.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\unicharset.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\unicity_table.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\unicodes.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\universalambigs.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\adaptive.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\blobclass.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\classify.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\cluster.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\clusttool.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\featdefs.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\float2int.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\fpoint.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\intfeaturespace.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\intfx.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\intmatcher.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\intproto.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\kdtree.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\mf.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\mfdefs.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\mfoutline.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\mfx.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\normfeat.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\normmatch.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\ocrfeatures.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\outfeat.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\picofeat.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\protos.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\shapeclassifier.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\shapetable.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\tessclassifier.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\trainingsample.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\cutil\bitvec.h">
+ <Filter>tesseract\cutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\cutil\callcpp.h">
+ <Filter>tesseract\cutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\cutil\emalloc.h">
+ <Filter>tesseract\cutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\cutil\oldlist.h">
+ <Filter>tesseract\cutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\dict\dawg.h">
+ <Filter>tesseract\dict</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\dict\dawg_cache.h">
+ <Filter>tesseract\dict</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\dict\dict.h">
+ <Filter>tesseract\dict</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\dict\matchdefs.h">
+ <Filter>tesseract\dict</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\dict\stopper.h">
+ <Filter>tesseract\dict</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\dict\trie.h">
+ <Filter>tesseract\dict</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\convolve.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\fullyconnected.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\functions.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\input.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\lstm.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\lstmrecognizer.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\maxpool.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\network.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\networkio.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\networkscratch.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\parallel.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\plumbing.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\recodebeam.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\reconfig.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\reversed.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\series.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\static_shape.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\stridemap.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\tfnetwork.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\tfnetwork.pb.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\weightmatrix.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\alignedblob.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\baselinedetect.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\bbgrid.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\blkocc.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\blobgrid.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\ccnontextdetect.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\cjkpitch.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\colfind.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\colpartition.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\colpartitiongrid.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\colpartitionset.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\devanagari_processing.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\drawtord.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\edgblob.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\edgloop.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\equationdetectbase.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\fpchop.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\gap_map.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\imagefind.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\linefind.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\makerow.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\oldbasel.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\pithsync.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\pitsync1.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\scanedg.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\sortflts.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\strokewidth.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\tabfind.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\tablefind.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\tablerecog.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\tabvector.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\textlineprojection.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\textord.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\topitch.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\tordmain.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\tovars.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\underlin.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\wordseg.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\workingpartset.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\viewer\scrollview.h">
+ <Filter>tesseract\viewer</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\viewer\svmnode.h">
+ <Filter>tesseract\viewer</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\viewer\svutil.h">
+ <Filter>tesseract\viewer</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\associate.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\chop.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\drawfx.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\findseam.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\language_model.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\lm_consistency.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\lm_pain_points.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\lm_state.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\measure.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\outlines.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\params_model.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\plotedges.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\render.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\wordrec.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevkrnlsclass.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevepo.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\base\gspmdrv.rc">
diff --git a/windows/ghostscript_rt.vcxproj b/windows/ghostscript_rt.vcxproj
index 41a34437..8370363e 100644
--- a/windows/ghostscript_rt.vcxproj
+++ b/windows/ghostscript_rt.vcxproj
@@ -474,7 +474,6 @@
<ClCompile Include="..\base\gpmisc.c" />
<ClCompile Include="..\base\gsalloc.c" />
<ClCompile Include="..\base\gsalpha.c" />
- <ClCompile Include="..\base\gsalphac.c" />
<ClCompile Include="..\base\gsargs.c" />
<ClCompile Include="..\base\gsbitcom.c" />
<ClCompile Include="..\base\gsbitops.c" />
@@ -1672,7 +1671,6 @@
<ClInclude Include="..\base\gs_mro_e.h" />
<ClInclude Include="..\base\gsalloc.h" />
<ClInclude Include="..\base\gsalpha.h" />
- <ClInclude Include="..\base\gsalphac.h" />
<ClInclude Include="..\base\gsargs.h" />
<ClInclude Include="..\base\gsbitmap.h" />
<ClInclude Include="..\base\gsbitops.h" />